@@ -188,6 +188,42 @@ describe('browser routing', () => {
188188 } ) ;
189189 } ) ;
190190
191+ test ( 'preserves the caller abort signal for routed requests' , async ( ) => {
192+ const controller = new AbortController ( ) ;
193+ const cache = new BrowserRouteCache ( ) ;
194+ cache . set ( {
195+ sessionId : 'sess-1' ,
196+ baseURL : 'http://browser-session.test/browser/kernel' ,
197+ jwt : 'token-abc' ,
198+ } ) ;
199+
200+ let routedSignal : AbortSignal | null | undefined ;
201+ const wrappedFetch = createRoutingFetch (
202+ async ( _input , init ) => {
203+ routedSignal = init ?. signal ;
204+ return new Response ( null , { status : 204 } ) ;
205+ } ,
206+ {
207+ apiBaseURL : 'https://api.example/' ,
208+ subresources : [ 'telemetry/stream' ] ,
209+ cache,
210+ } ,
211+ ) ;
212+
213+ await wrappedFetch ( 'https://api.example/browsers/sess-1/telemetry/stream' , {
214+ signal : controller . signal ,
215+ } ) ;
216+
217+ expect ( routedSignal === controller . signal ) . toBe ( true ) ;
218+
219+ const request = new Request ( 'https://api.example/browsers/sess-1/telemetry/stream' , {
220+ signal : controller . signal ,
221+ } ) ;
222+ await wrappedFetch ( request ) ;
223+
224+ expect ( routedSignal === request . signal ) . toBe ( true ) ;
225+ } ) ;
226+
191227 test ( 'ignores browser responses that do not include a usable jwt' , async ( ) => {
192228 await withBrowserRoutingEnv ( 'process' , async ( ) => {
193229 const kernel = new Kernel ( {
0 commit comments