@@ -39,9 +39,7 @@ export interface NetworkCapturedEntry {
3939 statusMessage : string ;
4040 requestHeaders : Record < string , string > ;
4141 responseHeaders : Record < string , string > ;
42- requestBodyText : string | undefined ;
4342 requestBodySize : number ;
44- responseBodyText : string | undefined ;
4543 responseBodySize : number ;
4644 durationMs : number ;
4745}
@@ -65,8 +63,6 @@ export interface DeviceNetworkCaptureController {
6563
6664const MAP_KEY_DELIMITER = '###' ;
6765const TEMP_DIR = path . join ( os . tmpdir ( ) , 'finalrun-network' ) ;
68- const MAX_TEXT_BODY_BYTES = 512 * 1024 ; // 512 KB
69-
7066export class NetworkCaptureManager implements DeviceNetworkCaptureController {
7167 private _server : Mockttp | null = null ;
7268 private _entries : NetworkCapturedEntry [ ] = [ ] ;
@@ -81,7 +77,7 @@ export class NetworkCaptureManager implements DeviceNetworkCaptureController {
8177 // Pending requests (waiting for response).
8278 private readonly _pendingRequests = new Map <
8379 string ,
84- { startedAt : Date ; method : string ; url : string ; headers : Record < string , string > ; bodyText : string | undefined ; bodySize : number }
80+ { startedAt : Date ; method : string ; url : string ; headers : Record < string , string > ; bodySize : number }
8581 > ( ) ;
8682
8783 get proxyPort ( ) : number {
@@ -114,19 +110,14 @@ export class NetworkCaptureManager implements DeviceNetworkCaptureController {
114110 await this . _server . start ( ) ;
115111 this . _proxyPort = this . _server . port ;
116112
117- // Subscribe to request events — store full request data .
113+ // Subscribe to request events — store request metadata (no body) .
118114 await this . _server . on ( 'request' , ( req ) => {
119- const bodyBuffer = req . body ?. buffer ;
120- const contentType = flattenHeaderValue ( req . headers [ 'content-type' ] ) ;
121- const isText = isTextContentType ( contentType ) ;
122-
123115 this . _pendingRequests . set ( req . id , {
124116 startedAt : new Date ( ) ,
125117 method : req . method ,
126118 url : req . url ,
127119 headers : flattenHeaders ( req . headers ) ,
128- bodyText : isText && bodyBuffer ? truncateBody ( Buffer . from ( bodyBuffer ) . toString ( 'utf8' ) ) : undefined ,
129- bodySize : bodyBuffer ?. byteLength ?? 0 ,
120+ bodySize : req . body ?. buffer ?. byteLength ?? 0 ,
130121 } ) ;
131122 } ) ;
132123
@@ -136,10 +127,6 @@ export class NetworkCaptureManager implements DeviceNetworkCaptureController {
136127 const pending = this . _pendingRequests . get ( response . id ) ;
137128 this . _pendingRequests . delete ( response . id ) ;
138129
139- const responseBuffer = response . body ?. buffer ;
140- const responseContentType = flattenHeaderValue ( response . headers [ 'content-type' ] ) ;
141- const isText = isTextContentType ( responseContentType ) ;
142-
143130 const entry : NetworkCapturedEntry = {
144131 startedAt : pending ?. startedAt ?? completedAt ,
145132 completedAt,
@@ -149,10 +136,8 @@ export class NetworkCaptureManager implements DeviceNetworkCaptureController {
149136 statusMessage : response . statusMessage ?? '' ,
150137 requestHeaders : pending ?. headers ?? { } ,
151138 responseHeaders : flattenHeaders ( response . headers ) ,
152- requestBodyText : pending ?. bodyText ,
153139 requestBodySize : pending ?. bodySize ?? 0 ,
154- responseBodyText : isText && responseBuffer ? truncateBody ( Buffer . from ( responseBuffer ) . toString ( 'utf8' ) ) : undefined ,
155- responseBodySize : responseBuffer ?. byteLength ?? 0 ,
140+ responseBodySize : response . body ?. buffer ?. byteLength ?? 0 ,
156141 durationMs : completedAt . getTime ( ) - ( pending ?. startedAt ?? completedAt ) . getTime ( ) ,
157142 } ;
158143 this . _entries . push ( entry ) ;
@@ -320,14 +305,6 @@ function buildHar(entries: NetworkCapturedEntry[], tlsErrors: NetworkTlsError[])
320305 httpVersion : 'HTTP/1.1' ,
321306 headers : headersToHar ( e . requestHeaders ) ,
322307 queryString : parseQueryString ( e . url ) ,
323- ...( e . requestBodyText !== undefined
324- ? {
325- postData : {
326- mimeType : e . requestHeaders [ 'content-type' ] ?? 'application/octet-stream' ,
327- text : e . requestBodyText ,
328- } ,
329- }
330- : { } ) ,
331308 bodySize : e . requestBodySize ,
332309 headersSize : - 1 ,
333310 } ,
@@ -339,7 +316,6 @@ function buildHar(entries: NetworkCapturedEntry[], tlsErrors: NetworkTlsError[])
339316 content : {
340317 size : e . responseBodySize ,
341318 mimeType : e . responseHeaders [ 'content-type' ] ?? 'application/octet-stream' ,
342- ...( e . responseBodyText !== undefined ? { text : e . responseBodyText } : { } ) ,
343319 } ,
344320 bodySize : e . responseBodySize ,
345321 headersSize : - 1 ,
@@ -376,11 +352,6 @@ function flattenHeaders(headers: Record<string, string | string[] | undefined>):
376352 return flat ;
377353}
378354
379- function flattenHeaderValue ( value : string | string [ ] | undefined ) : string {
380- if ( value === undefined ) return '' ;
381- return Array . isArray ( value ) ? value [ 0 ] ?? '' : value ;
382- }
383-
384355function headersToHar ( headers : Record < string , string > ) : Array < { name : string ; value : string } > {
385356 return Object . entries ( headers ) . map ( ( [ name , value ] ) => ( { name, value } ) ) ;
386357}
@@ -394,25 +365,6 @@ function parseQueryString(url: string): Array<{ name: string; value: string }> {
394365 }
395366}
396367
397- function isTextContentType ( contentType : string ) : boolean {
398- if ( ! contentType ) return false ;
399- const ct = contentType . toLowerCase ( ) ;
400- return (
401- ct . includes ( 'json' ) ||
402- ct . includes ( 'text' ) ||
403- ct . includes ( 'xml' ) ||
404- ct . includes ( 'html' ) ||
405- ct . includes ( 'javascript' ) ||
406- ct . includes ( 'css' ) ||
407- ct . includes ( 'form-urlencoded' )
408- ) ;
409- }
410-
411- function truncateBody ( text : string ) : string {
412- if ( text . length <= MAX_TEXT_BODY_BYTES ) return text ;
413- return text . slice ( 0 , MAX_TEXT_BODY_BYTES ) ;
414- }
415-
416368function sanitizeForFilename ( value : string ) : string {
417369 return value
418370 . replaceAll ( / [ / \\ : * ? " < > | ] / g, '_' )
0 commit comments