import { createServer } from "node:http"; import { WebSocketServer } from "ws"; /** Start the local HTTP/WS application used by real-browser verification. */ export async function startBrowserVerifierSite() { let port = 0; let sessionGeneration = 0; const server = createServer((request, response) => { if (request.url === "/failed-navigation") { response.destroy(); return; } const requestUrl = new URL(request.url ?? "/", "http://127.0.0.1"); if (requestUrl.pathname === "/scenario-request-language") { response.setHeader("content-type", "application/json"); response.setHeader("cache-control", "no-store"); response.end(JSON.stringify(request.headers["accept-language"] ?? null)); return; } if (requestUrl.pathname === "/scenario-environment") { const requestedRun = requestUrl.searchParams.get("run"); const run = ["A", "B", "C"].includes(requestedRun) ? requestedRun : "default"; response.setHeader("content-type", "text/html"); const requestLanguage = encodeURIComponent( JSON.stringify(request.headers["accept-language"] ?? null), ); response.end(`
`); return; } if (request.url === "/slow-json") { response.setHeader("content-type", "application/json"); response.write('{"pending":'); const timer = setTimeout(() => response.end("true}"), 350); response.once("close", () => clearTimeout(timer)); return; } if (request.url === "/screenshot-noise") { response.setHeader("content-type", "text/html"); response.end(``); return; } if (request.url === "/app.js.map") { response.setHeader("content-type", "application/source-map+json"); response.end(sourceMap()); return; } if (request.url === "/bad.js.map") { response.setHeader("content-type", "application/source-map+json"); response.end( JSON.stringify({ version: 3, names: [], sources: ["../src/bad.ts"], mappings: "AAAAD", }), ); return; } if (request.url === "/expanded.js.map") { response.setHeader("content-type", "application/source-map+json"); response.end( JSON.stringify({ version: 3, names: [], sources: ["../src/" + "x".repeat(300000) + ".ts"], mappings: "AAAA" + ",CAAA".repeat(127), }), ); return; } if (request.url === "/overflow.js.map") { response.setHeader("content-type", "application/source-map+json"); response.end( JSON.stringify({ version: 3, sections: [ { offset: { line: 0, column: Number.MAX_SAFE_INTEGER }, map: { version: 3, names: [], sources: ["overflow.ts"], mappings: "CAAA", }, }, ], }), ); return; } if (request.url === "/session-generation") { response.setHeader("content-type", "application/json"); response.end(JSON.stringify({ generation: sessionGeneration })); return; } if (request.url?.startsWith("/app.js") === true) { response.setHeader("content-type", "text/javascript"); response.end(browserScript(port)); return; } if (request.url?.startsWith("/bad.js") === true) { response.setHeader("content-type", "text/javascript"); response.end( "export const badMapProbe = true;\n//# sourceMappingURL=/bad.js.map", ); return; } if (request.url?.startsWith("/expanded.js") === true) { response.setHeader("content-type", "text/javascript"); response.end( "export const expandedMapProbe = true;\n//# sourceMappingURL=/expanded.js.map", ); return; } if (request.url?.startsWith("/overflow.js") === true) { response.setHeader("content-type", "text/javascript"); response.end( "export const overflowMapProbe = true;\n//# sourceMappingURL=/overflow.js.map", ); return; } if (request.url?.startsWith("/api") === true) { response.setHeader("content-type", "application/json"); response.setHeader( "content-security-policy", "default-src 'self'; connect-src 'self' ws:", ); response.setHeader( "link", '; rel="service-desc"; type="application/json"', ); response.setHeader("permissions-policy", "geolocation=(), camera=()"); response.end('{"ok":true,"secret":"response-secret-value"}'); return; } response.setHeader("content-type", "text/html"); response.setHeader("set-cookie", [ "rea-root-cookie=root-fixture; Path=/; SameSite=Lax", "rea-app-cookie=app-fixture; Path=/app; SameSite=Lax", ]); response.end( '