(targetOrigin: string)
| 102 | } |
| 103 | |
| 104 | async function startProxyServer(targetOrigin: string): Promise<{ baseUrl: string, server: HttpServer }> { |
| 105 | const port = await getAvailablePort() |
| 106 | const server = createHttpServer(async (req, res) => { |
| 107 | try { |
| 108 | const targetUrl = new URL(req.url ?? '/', targetOrigin) |
| 109 | const response = await fetch(targetUrl, { method: req.method ?? 'GET' }) |
| 110 | res.statusCode = response.status |
| 111 | response.headers.forEach((value, key) => { |
| 112 | if (key.toLowerCase() === 'transfer-encoding') return |
| 113 | res.setHeader(key, value) |
| 114 | }) |
| 115 | const body = response.body === null ? new Uint8Array(0) : new Uint8Array(await response.arrayBuffer()) |
| 116 | res.end(body) |
| 117 | } catch (error) { |
| 118 | res.statusCode = 500 |
| 119 | res.setHeader('content-type', 'text/plain; charset=utf-8') |
| 120 | res.end(error instanceof Error ? error.message : String(error)) |
| 121 | } |
| 122 | }) |
| 123 | |
| 124 | await new Promise<void>((resolve, reject) => { |
| 125 | server.once('error', reject) |
| 126 | server.listen(port, '127.0.0.1', () => resolve()) |
| 127 | }) |
| 128 | |
| 129 | return { baseUrl: `http://127.0.0.1:${port}/accuracy`, server } |
| 130 | } |
| 131 | |
| 132 | async function loadBrowserReport(url: string, expectedRequestId: string): Promise<AccuracyReport> { |
| 133 | const session = createBrowserSession(browser) |
no test coverage detected
searching dependent graphs…