import { HttpResponse, http, RequestHandler } from "msw"; import { HOST_URL, API_INFO_URL, CONFIG_URL, RUNTIME_URL, SLEEPTIME_URL, UPLOAD_URL, BROKEN_CONNECTION_MSG, LOGIN_URL } from "../constants"; import { response_api_info, config_response, whoami_response, duplicate_response, hardware_sleeptime_response, discussions_response, runtime_response } from "./test_data"; const root_url = "https://huggingface.co"; export const direct_space_url = "https://hmb-hello-world.hf.space"; const private_space_url = "https://hmb-secret-world.hf.space"; const private_auth_space_url = "https://hmb-private-auth-space.hf.space"; const server_error_space_url = "https://hmb-server-error.hf.space"; const upload_server_test_space_url = "https://hmb-server-test.hf.space"; const auth_app_space_url = "https://hmb-auth-space.hf.space"; const unauth_app_space_url = "https://hmb-unauth-space.hf.space"; const invalid_auth_space_url = "https://hmb-invalid-auth-space.hf.space"; const server_error_reference = "hmb/server_error"; const app_reference = "hmb/hello_world"; const broken_app_reference = "hmb/bye_world"; const duplicate_app_reference = "gradio/hello_world"; const private_app_reference = "hmb/secret_world"; const server_test_app_reference = "hmb/server_test"; const auth_app_reference = "hmb/auth_space"; const unauth_app_reference = "hmb/unauth_space"; const invalid_auth_app_reference = "hmb/invalid_auth_space"; const private_auth_app_reference = "hmb/private_auth_space"; export const handlers: RequestHandler[] = [ // /host requests http.get(`${root_url}/api/spaces/${app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-hello-world", host: "https://hmb-hello-world.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${root_url}/api/spaces/${broken_app_reference}/${HOST_URL}`, () => { return new HttpResponse(null, { status: 404, headers: { "Content-Type": "application/json", hf_token: "hf_123" } }); }), http.get( `${root_url}/api/spaces/${private_auth_app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-private-auth-space", host: "https://hmb-private-auth-space.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); } ), http.get( `${root_url}/api/spaces/${private_app_reference}/${HOST_URL}`, ({ request }) => { const token = request.headers.get("authorization")?.substring(7); if (!token || token !== "hf_123") { return new HttpResponse(null, { status: 401, headers: { "Content-Type": "application/json" } }); } return new HttpResponse( JSON.stringify({ subdomain: private_app_reference, host: private_space_url }), { status: 200, headers: { "Content-Type": "application/json" } } ); } ), http.get( `${root_url}/api/spaces/${server_error_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-server-test", host: "https://hmb-server-test.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); } ), http.get( `${root_url}/api/spaces/${server_test_app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-server-test", host: "https://hmb-server-test.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); } ), http.get(`${root_url}/api/spaces/${auth_app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-auth-space", host: "https://hmb-auth-space.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get( `${root_url}/api/spaces/${invalid_auth_app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-invalid-auth-space", host: "https://hmb-invalid-auth-space.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); } ), http.get( `${root_url}/api/spaces/${duplicate_app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "gradio-hello-world", host: "https://gradio-hello-world.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); } ), http.get(`${root_url}/api/spaces/${unauth_app_reference}/${HOST_URL}`, () => { return new HttpResponse( JSON.stringify({ subdomain: "hmb-unath-space", host: "https://hmb-unauth-space.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), // /info requests http.get(`${direct_space_url}/${API_INFO_URL}`, () => { return new HttpResponse(JSON.stringify(response_api_info), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${upload_server_test_space_url}/${API_INFO_URL}`, () => { return new HttpResponse(JSON.stringify(response_api_info), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${private_space_url}/${API_INFO_URL}`, () => { return new HttpResponse(JSON.stringify(response_api_info), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${server_error_space_url}/${API_INFO_URL}`, () => { return new HttpResponse(JSON.stringify(response_api_info), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${auth_app_space_url}/${API_INFO_URL}`, async () => { return new HttpResponse(JSON.stringify(response_api_info), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${private_auth_space_url}/${API_INFO_URL}`, async () => { return new HttpResponse(JSON.stringify(response_api_info), { status: 200, headers: { "Content-Type": "application/json" } }); }), // /config requests http.get(`${direct_space_url}/${CONFIG_URL}`, () => { return new HttpResponse(JSON.stringify(config_response), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${private_space_url}/${CONFIG_URL}`, () => { return new HttpResponse( JSON.stringify({ ...config_response, root: "https://hmb-secret-world.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${upload_server_test_space_url}/${CONFIG_URL}`, () => { return new HttpResponse( JSON.stringify({ ...config_response, root: "https://hmb-server-test.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${private_auth_space_url}/${CONFIG_URL}`, () => { return new HttpResponse( JSON.stringify({ ...config_response, root: "https://hmb-private-auth-space.hf.space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${direct_space_url}/${CONFIG_URL}`, () => { return new HttpResponse(JSON.stringify(config_response), { status: 500, headers: { "Content-Type": "application/json" } }); }), http.get(`${server_error_space_url}/${CONFIG_URL}`, () => { return new HttpResponse(JSON.stringify(config_response), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.get(`${invalid_auth_space_url}/${CONFIG_URL}`, () => { return new HttpResponse(JSON.stringify({ detail: "Unauthorized" }), { status: 401, headers: { "Content-Type": "application/json" } }); }), http.get(`${auth_app_space_url}/${CONFIG_URL}`, ({ request }) => { return new HttpResponse( JSON.stringify({ ...config_response, root: "https://hmb-auth-space.hf.space", space_id: "hmb/auth_space" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${unauth_app_space_url}/${CONFIG_URL}`, () => { return new HttpResponse( JSON.stringify({ detail: "Unauthorized" }), { status: 401, headers: { "Content-Type": "application/json" } } ); }), // /whoami requests http.get(`${root_url}/api/whoami-v2`, () => { return new HttpResponse(JSON.stringify(whoami_response), { status: 200, headers: { "Content-Type": "application/json", "hf-token": "hf_123" } }); }), // /duplicate requests http.post( `${root_url}/api/spaces/${duplicate_app_reference}/duplicate`, ({ request }) => { if (request.headers.get("authorization")?.substring(7) !== "hf_123") { throw new HttpResponse(null, { status: 401, headers: { "Content-Type": "application/json" } }); } return new HttpResponse(JSON.stringify(duplicate_response), { status: 200, headers: { "Content-Type": "application/json" } }); } ), // /sleeptime requests http.post(`${root_url}/api/spaces/${app_reference}/${SLEEPTIME_URL}`, () => { return new HttpResponse(JSON.stringify(hardware_sleeptime_response), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.post( `${root_url}/api/spaces/${server_test_app_reference}/${SLEEPTIME_URL}`, () => { throw new HttpResponse(null, { status: 500, headers: { "Content-Type": "application/json" } }); } ), // /runtime requests http.get( `${root_url}/api/spaces/${broken_app_reference}/${RUNTIME_URL}`, () => { return new HttpResponse(null, { status: 404, headers: { "Content-Type": "application/json" } }); } ), http.get(`${root_url}/api/spaces/${app_reference}/${RUNTIME_URL}`, () => { return new HttpResponse(JSON.stringify(hardware_sleeptime_response), { status: 200, headers: { "Content-Type": "application/json" } }); }), // queue requests http.get(`${direct_space_url}/queue/data`, () => { return new HttpResponse(JSON.stringify({ event_id: "123" }), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.post(`${direct_space_url}/queue/join`, () => { return new HttpResponse(JSON.stringify({ event_id: "123" }), { status: 200, headers: { "Content-Type": "application/json" } }); }), // upload requests http.post(`${direct_space_url}/${UPLOAD_URL}`, () => { return new HttpResponse(JSON.stringify(["lion.jpg"]), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.post(`${upload_server_test_space_url}/${UPLOAD_URL}`, () => { throw new HttpResponse(JSON.parse("Internal Server Error"), { status: 200, headers: { "Content-Type": "application/json" } }); }), // discussions requests http.head(`${root_url}/api/spaces/${app_reference}/discussions`, () => { return new HttpResponse(JSON.stringify(discussions_response), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.head( `${root_url}/api/spaces/${broken_app_reference}/discussions`, () => { throw new HttpResponse( JSON.parse("Discussions are disabled for this repo"), { status: 403, headers: { "Content-Type": "application/json" } } ); } ), // space requests http.get(`${root_url}/api/spaces/${app_reference}`, () => { return new HttpResponse( JSON.stringify({ id: app_reference, runtime: runtime_response }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${root_url}/api/spaces/hmb/paused_space`, () => { return new HttpResponse( JSON.stringify({ id: app_reference, runtime: { ...runtime_response, stage: "PAUSED" } }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${root_url}/api/spaces/hmb/building_space`, () => { return new HttpResponse( JSON.stringify({ id: app_reference, runtime: { ...runtime_response, stage: "BUILDING" } }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${root_url}/api/spaces/hmb/stopped_space`, () => { return new HttpResponse( JSON.stringify({ id: app_reference, runtime: { ...runtime_response, stage: "STOPPED" } }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${root_url}/api/spaces/hmb/failed_space`, () => { throw new HttpResponse(null, { status: 500, headers: { "Content-Type": "application/json" } }); }), http.get(`${root_url}/api/spaces/${unauth_app_reference}`, () => { return new HttpResponse( JSON.stringify({ id: unauth_app_reference, runtime: { ...runtime_response } }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), // jwt requests http.get(`${root_url}/api/spaces/${app_reference}/jwt`, () => { return new HttpResponse( JSON.stringify({ token: "jwt_123" }), { status: 200, headers: { "Content-Type": "application/json" } } ); }), http.get(`${root_url}/api/spaces/${broken_app_reference}/jwt`, () => { return new HttpResponse(null, { status: 500, headers: { "Content-Type": "application/json" } }); }), // post_data requests http.post(`${direct_space_url}`, () => { return new HttpResponse(JSON.stringify({}), { status: 200, headers: { "Content-Type": "application/json" } }); }), http.post(`${private_space_url}`, () => { return new HttpResponse(JSON.stringify(BROKEN_CONNECTION_MSG), { status: 500, headers: { "Content-Type": "application/json" } }); }), // heartbeat requests http.get(`*/heartbeat/*`, () => { return new HttpResponse(null, { status: 200, headers: { "Content-Type": "application/json" } }); }), // login requests http.post(`${auth_app_space_url}/${LOGIN_URL}`, async ({ request }) => { let username; let password; await request.formData().then((data) => { username = data.get("username"); password = data.get("password"); }); if (username === "admin" && password === "pass1234") { return new HttpResponse( JSON.stringify({ success: true }), { status: 200, headers: { "Content-Type": "application/json", "Set-Cookie": "access-token-123=abc; HttpOnly; Path=/; SameSite=none; Secure", // @ts-ignore - multiple Set-Cookie headers are returned "Set-Cookie": "access-token-unsecure-123=abc; HttpOnly; Path=/; SameSite=none; Secure" } } ); } return new HttpResponse(null, { status: 401, headers: { "Content-Type": "application/json" } }); }), http.post(`${invalid_auth_space_url}/${LOGIN_URL}`, async () => { return new HttpResponse(null, { status: 401, headers: { "Content-Type": "application/json" } }); }), http.post(`${private_auth_space_url}/${LOGIN_URL}`, async ({ request }) => { let username; let password; await request.formData().then((data) => { username = data.get("username"); password = data.get("password"); }); if (username === "admin" && password === "pass1234") { return new HttpResponse( JSON.stringify({ success: true }), { status: 200, headers: { "Content-Type": "application/json", "Set-Cookie": "access-token-123=abc; HttpOnly; Path=/; SameSite=none; Secure", // @ts-ignore - multiple Set-Cookie headers are returned "Set-Cookie": "access-token-unsecure-123=abc; HttpOnly; Path=/; SameSite=none; Secure" } } ); } return new HttpResponse(null, { status: 401, headers: { "Content-Type": "application/json" } }); }) ];