diff --git a/scripts/fixtures/page-cdp-proxy.mjs b/scripts/fixtures/page-cdp-proxy.mjs index c6d531f8b..6a002e9d8 100644 --- a/scripts/fixtures/page-cdp-proxy.mjs +++ b/scripts/fixtures/page-cdp-proxy.mjs @@ -18,10 +18,11 @@ export async function startPageCdpProxy(upstreamEndpoint) { return; } const value = await upstreamJson(upstreamEndpoint, request.url); - const rewritten = + const pageScoped = request.url === "/json/version" ? await pageScopedVersion(upstreamEndpoint, value) : value; + const rewritten = rewriteWebSocketEndpoints(pageScoped, server); const body = JSON.stringify(rewritten); response.writeHead(200, { "Content-Type": "application/json", @@ -103,6 +104,20 @@ async function pageScopedVersion(upstreamEndpoint, version) { return { ...version, webSocketDebuggerUrl: page.webSocketDebuggerUrl }; } +function rewriteWebSocketEndpoints(value, server) { + const address = server.address(); + if (address === null || typeof address === "string") + throw new Error("Page CDP proxy has no TCP address"); + const rewrite = (entry) => { + if (typeof entry.webSocketDebuggerUrl !== "string") return entry; + const url = new URL(entry.webSocketDebuggerUrl); + url.hostname = "127.0.0.1"; + url.port = String(address.port); + return { ...entry, webSocketDebuggerUrl: url.href }; + }; + return Array.isArray(value) ? value.map(rewrite) : rewrite(value); +} + async function upstreamJson(endpoint, path) { const response = await fetch(new URL(path, endpoint)); if (!response.ok)