1- import { createServer , type IncomingMessage , type Server } from "http" ;
1+ import { createServer , IncomingMessage , Server , ServerResponse } from "http" ;
22import { AddressInfo } from "net" ;
33import { JSONRPCMessage } from "../types.js" ;
44import { SSEClientTransport } from "./sse.js" ;
@@ -10,8 +10,21 @@ describe("SSEClientTransport", () => {
1010 let transport : SSEClientTransport ;
1111 let baseUrl : URL ;
1212 let lastServerRequest : IncomingMessage ;
13+ const serverRequests : Record < string , IncomingMessage [ ] > = { } ;
1314 let sendServerMessage : ( ( message : string ) => void ) | null = null ;
1415
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+
1528 beforeEach ( ( done ) => {
1629 // Reset state
1730 lastServerRequest = null as unknown as IncomingMessage ;
@@ -487,7 +500,7 @@ describe("SSEClientTransport", () => {
487500
488501 let connectionAttempts = 0 ;
489502 server = createServer ( ( req , res ) => {
490- lastServerRequest = req ;
503+ recordServerRequest ( req , res ) ;
491504
492505 if ( req . url === "/token" && req . method === "POST" ) {
493506 // Handle token refresh request
@@ -496,7 +509,7 @@ describe("SSEClientTransport", () => {
496509 req . on ( "end" , ( ) => {
497510 const params = new URLSearchParams ( body ) ;
498511 if ( params . get ( "grant_type" ) === "refresh_token" &&
499- params . get ( "refresh_token" ) === "refresh-token" &&
512+ params . get ( "refresh_token" ) ?. includes ( "refresh-token" ) &&
500513 params . get ( "client_id" ) === "test-client-id" &&
501514 params . get ( "client_secret" ) === "test-client-secret" ) {
502515 res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
@@ -531,6 +544,7 @@ describe("SSEClientTransport", () => {
531544 } ) ;
532545 res . write ( "event: endpoint\n" ) ;
533546 res . write ( `data: ${ baseUrl . href } \n\n` ) ;
547+ res . end ( ) ;
534548 connectionAttempts ++ ;
535549 return ;
536550 }
@@ -548,6 +562,14 @@ describe("SSEClientTransport", () => {
548562
549563 transport = new SSEClientTransport ( baseUrl , {
550564 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+ } ,
551573 } ) ;
552574
553575 await transport . start ( ) ;
@@ -559,6 +581,9 @@ describe("SSEClientTransport", () => {
559581 } ) ;
560582 expect ( connectionAttempts ) . toBe ( 1 ) ;
561583 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 ) ;
562587 } ) ;
563588
564589 it ( "refreshes expired token during POST request" , async ( ) => {
0 commit comments