1
- import { createServer , type IncomingMessage , type Server } from "http" ;
1
+ import { createServer , IncomingMessage , Server , ServerResponse } from "http" ;
2
2
import { AddressInfo } from "net" ;
3
3
import { JSONRPCMessage } from "../types.js" ;
4
4
import { SSEClientTransport } from "./sse.js" ;
@@ -10,8 +10,21 @@ describe("SSEClientTransport", () => {
10
10
let transport : SSEClientTransport ;
11
11
let baseUrl : URL ;
12
12
let lastServerRequest : IncomingMessage ;
13
+ const serverRequests : Record < string , IncomingMessage [ ] > = { } ;
13
14
let sendServerMessage : ( ( message : string ) => void ) | null = null ;
14
15
16
+ const recordServerRequest = ( req : IncomingMessage , res : ServerResponse ) => {
17
+ lastServerRequest = req ;
18
+
19
+ const key = `${ req . method } ${ req . url } ` ;
20
+ serverRequests [ key ] = serverRequests [ key ] || [ ] ;
21
+ serverRequests [ key ] . push ( req ) ;
22
+
23
+ res . on ( 'finish' , ( ) => {
24
+ console . log ( `[server] ${ req . method } ${ req . url } -> ${ res . statusCode } ${ res . statusMessage } ` ) ;
25
+ } ) ;
26
+ } ;
27
+
15
28
beforeEach ( ( done ) => {
16
29
// Reset state
17
30
lastServerRequest = null as unknown as IncomingMessage ;
@@ -487,7 +500,7 @@ describe("SSEClientTransport", () => {
487
500
488
501
let connectionAttempts = 0 ;
489
502
server = createServer ( ( req , res ) => {
490
- lastServerRequest = req ;
503
+ recordServerRequest ( req , res ) ;
491
504
492
505
if ( req . url === "/token" && req . method === "POST" ) {
493
506
// Handle token refresh request
@@ -496,7 +509,7 @@ describe("SSEClientTransport", () => {
496
509
req . on ( "end" , ( ) => {
497
510
const params = new URLSearchParams ( body ) ;
498
511
if ( params . get ( "grant_type" ) === "refresh_token" &&
499
- params . get ( "refresh_token" ) === "refresh-token" &&
512
+ params . get ( "refresh_token" ) ?. includes ( "refresh-token" ) &&
500
513
params . get ( "client_id" ) === "test-client-id" &&
501
514
params . get ( "client_secret" ) === "test-client-secret" ) {
502
515
res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
@@ -531,6 +544,7 @@ describe("SSEClientTransport", () => {
531
544
} ) ;
532
545
res . write ( "event: endpoint\n" ) ;
533
546
res . write ( `data: ${ baseUrl . href } \n\n` ) ;
547
+ res . end ( ) ;
534
548
connectionAttempts ++ ;
535
549
return ;
536
550
}
@@ -548,6 +562,14 @@ describe("SSEClientTransport", () => {
548
562
549
563
transport = new SSEClientTransport ( baseUrl , {
550
564
authProvider : mockAuthProvider ,
565
+ eventSourceInit : {
566
+ fetch : ( url , init ) => {
567
+ return fetch ( url , { ...init , headers : {
568
+ ...init ?. headers ,
569
+ 'X-Custom-Header' : 'custom-value'
570
+ } } ) ;
571
+ }
572
+ } ,
551
573
} ) ;
552
574
553
575
await transport . start ( ) ;
@@ -559,6 +581,9 @@ describe("SSEClientTransport", () => {
559
581
} ) ;
560
582
expect ( connectionAttempts ) . toBe ( 1 ) ;
561
583
expect ( lastServerRequest . headers . authorization ) . toBe ( "Bearer new-token" ) ;
584
+ expect ( serverRequests [ "GET /" ] ) . toHaveLength ( 2 ) ;
585
+ expect ( serverRequests [ "GET /" ]
586
+ . every ( req => req . headers [ "x-custom-header" ] === "custom-value" ) ) . toBe ( true ) ;
562
587
} ) ;
563
588
564
589
it ( "refreshes expired token during POST request" , async ( ) => {
0 commit comments