Spaces:
Paused
Paused
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" | |
} | |
}); | |
}) | |
]; | |