// @vitest-environment node import {expect,it,vi} from 'vitest' import {createServer,request} from 'node:http' const target=vi.hoisted(()=>({port:0})) vi.mock('../../src/runner/network/publicDestination.js',async importOriginal=>({ ...await importOriginal(),publicDestination:async()=>({host:'fixture.test',address:'127.0.0.1',family:4,port:target.port}), })) import {BrowserPublicProxy} from '../../src/runner/browser/publicProxy.js' it('disconnects an existing response stream when its grant expires and allows an authorized reconnect',async()=>{ const server=createServer((req,res)=>{res.writeHead(200);if(req.url==='/once')res.end('ok');else res.write('stream-start')}) await new Promise(resolve=>server.listen(0,'127.0.0.1',resolve));target.port=(server.address() as {port:number}).port let allowed=true const proxy=await BrowserPublicProxy.start(async()=>{if(!allowed)throw new Error('grant expired')},undefined,20) const headers={'Proxy-Authorization':'Basic '+Buffer.from(`${proxy.username}:${proxy.password}`).toString('base64')} try{ let interrupted!:()=>void;const ended=new Promise(resolve=>{interrupted=resolve}) await new Promise((resolve,reject)=>{ const req=request(proxy.serverURL,{path:'http://fixture.test/stream',headers},res=>{res.once('data',()=>resolve());res.once('aborted',interrupted);res.on('error',()=>{})}) req.on('error',reject);req.end() }) allowed=false await Promise.race([ended,new Promise((_,reject)=>setTimeout(()=>reject(new Error('expired stream stayed connected')),1000))]) allowed=true const status=await new Promise((resolve,reject)=>{const req=request(proxy.serverURL,{path:'http://fixture.test/once',headers},res=>{res.resume();res.on('end',()=>resolve(res.statusCode!))});req.on('error',reject);req.end()}) expect(status).toBe(200) }finally{await proxy.close();server.closeAllConnections();await new Promise(resolve=>server.close(()=>resolve()))} })