// UI QA only: CDP fulfills this browser's synthetic-origin requests from a scratch Unix // listener. No TCP listener, proxy, installed endpoint or reusable relay is created. import { request } from 'node:http'; import { browser } from './browser.mjs'; import { TESTER_ORIGIN } from '../src/tester-socket.mjs'; export async function testerBrowser(server) { const b = await browser(); b.on('Fetch.requestPaused', ({requestId,request:incoming}) => { const url = new URL(incoming.url); const q = request({socketPath:server.address(),path:url.pathname+url.search,method:incoming.method, headers:{...incoming.headers,host:new URL(TESTER_ORIGIN).host,origin:TESTER_ORIGIN,'sec-fetch-site':'same-origin'}}, res => { const parts=[]; res.on('data',part=>parts.push(part)); res.on('end',()=>{ const responseHeaders=Object.entries(res.headers).filter(([name])=>!['connection','keep-alive','transfer-encoding'].includes(name)) .flatMap(([name,value])=>(Array.isArray(value)?value:[value]).map(value=>({name,value:String(value)}))); b.call('Fetch.fulfillRequest',{requestId,responseCode:res.statusCode,responseHeaders,body:Buffer.concat(parts).toString('base64')}).catch(()=>{}); }); }); q.on('error',()=>b.call('Fetch.failRequest',{requestId,errorReason:'Failed'}).catch(()=>{})); q.end(incoming.postData); }); await b.call('Fetch.enable',{patterns:[{urlPattern:TESTER_ORIGIN+'/*',requestStage:'Request'}]}); return b; }