@@ -2,14 +2,24 @@ import { spawn } from "node:child_process";
22import http , { type IncomingMessage , type ServerResponse } from "node:http" ;
33import type { AddressInfo } from "node:net" ;
44
5- function getAuthorizationHeaders ( request : IncomingMessage ) : string [ ] {
6- const values : string [ ] = [ ] ;
5+ type RecordedRequest = {
6+ method : string ;
7+ url : string ;
8+ headers : Record < string , string [ ] > ;
9+ } ;
10+
11+ function recordRequest ( request : IncomingMessage ) : RecordedRequest {
12+ const headers : Record < string , string [ ] > = { } ;
713 for ( let index = 0 ; index < request . rawHeaders . length ; index += 2 ) {
8- if ( request . rawHeaders [ index ] ?. toLowerCase ( ) === "authorization" ) {
9- values . push ( request . rawHeaders [ index + 1 ] ?? "" ) ;
10- }
14+ const name = request . rawHeaders [ index ] ?. toLowerCase ( ) ;
15+ if ( name === undefined ) continue ;
16+ ( headers [ name ] ??= [ ] ) . push ( request . rawHeaders [ index + 1 ] ?? "" ) ;
1117 }
12- return values ;
18+ return {
19+ method : request . method ?? "GET" ,
20+ url : request . url ?? "/" ,
21+ headers,
22+ } ;
1323}
1424
1525async function runGitHttpBackend (
@@ -92,10 +102,11 @@ export async function createGitHttpServer(options: {
92102 projectRoot : string ;
93103 expectedAuthorization : string ;
94104} ) {
95- const receivedAuthorizationHeaders : string [ ] [ ] = [ ] ;
105+ const requests : RecordedRequest [ ] = [ ] ;
96106 const server = http . createServer ( ( request , response ) => {
97- const authorizationHeaders = getAuthorizationHeaders ( request ) ;
98- receivedAuthorizationHeaders . push ( authorizationHeaders ) ;
107+ const recordedRequest = recordRequest ( request ) ;
108+ requests . push ( recordedRequest ) ;
109+ const authorizationHeaders = recordedRequest . headers . authorization ?? [ ] ;
99110
100111 if (
101112 authorizationHeaders . length !== 1 ||
@@ -125,7 +136,7 @@ export async function createGitHttpServer(options: {
125136
126137 return {
127138 origin : `http://127.0.0.1:${ address . port } ` ,
128- receivedAuthorizationHeaders ,
139+ requests ,
129140 async [ Symbol . asyncDispose ] ( ) {
130141 await new Promise < void > ( ( resolve , reject ) => {
131142 server . close ( ( error ) => {
0 commit comments