const assert = require('node:assert/strict') const { createServer } = require('node:http') const { app, net, session } = require('electron') const { prepareFetchHeaders } = require('../dist-electron/electron/response-headers.js') app.whenReady().then(async () => { prepareFetchHeaders(session.defaultSession) const requests = [] const server = createServer((request, response) => { requests.push(request.url) const headers = { 'X-Name': Buffer.from('пример').toString('latin1') } if (request.url === '/redirect') { response.writeHead(302, { ...headers, Location: `/${encodeURIComponent('пример')}` }) response.end() } else { response.writeHead(200, { ...headers, 'Content-Type': 'text/plain' }) response.end('ok') } }) try { await new Promise((resolve, reject) => { server.once('error', reject) server.listen(0, '127.0.0.1', resolve) }) const url = `http://127.0.0.1:${server.address().port}` const response = await net.fetch(url) assert.equal(response.headers.get('x-name'), encodeURIComponent('пример')) assert.equal(response.headers.get('content-type'), 'text/plain') assert.equal(await response.text(), 'ok') const followed = await net.fetch(`${url}/redirect`) assert.equal(await followed.text(), 'ok') await session.defaultSession.setProxy({ proxyRules: `http=127.0.0.1:${server.address().port}`, proxyBypassRules: '<-loopback>' }) const proxied = await net.fetch('http://headers-proxy.invalid/example') assert.equal(await proxied.text(), 'ok') assert.ok(requests.includes('http://headers-proxy.invalid/example')) console.log('SCREEN_NETWORK_HEADERS_PASS') app.exit(0) } catch (error) { console.error(error) app.exit(1) } finally { server.close() } })