@@ -395,7 +395,7 @@ export class ReplayCrawler extends Crawler {
395395 async crawlPage ( opts : WorkerState ) : Promise < void > {
396396 await this . writeStats ( ) ;
397397
398- const { page, data, workerid } = opts ;
398+ const { page, data, workerid, cdp } = opts ;
399399 const { url, ts, pageid } = data ;
400400
401401 if ( ! ts ) {
@@ -433,6 +433,28 @@ export class ReplayCrawler extends Crawler {
433433 replayFrame = page . frames ( ) [ SKIP_FRAMES ] ;
434434 }
435435
436+ // Capture document request ID for raw text extraction if enabled
437+ let documentRequestId : string | null = null ;
438+ let trackDocumentRequest :
439+ | ( ( params : Protocol . Network . ResponseReceivedEvent ) => void )
440+ | null = null ;
441+
442+ if ( this . params . text . includes ( "to-warc-from-raw" ) ) {
443+ trackDocumentRequest = (
444+ params : Protocol . Network . ResponseReceivedEvent ,
445+ ) => {
446+ if ( params . type === "Document" && ! documentRequestId ) {
447+ documentRequestId = params . requestId ;
448+ logger . debug (
449+ "Captured document request ID" ,
450+ { requestId : documentRequestId , url : params . response . url } ,
451+ "text" ,
452+ ) ;
453+ }
454+ } ;
455+ cdp . on ( "Network.responseReceived" , trackDocumentRequest ) ;
456+ }
457+
436458 try {
437459 await replayFrame . goto (
438460 `${ REPLAY_PREFIX } ${ timestamp } mp_/${ url } ` ,
@@ -444,6 +466,32 @@ export class ReplayCrawler extends Crawler {
444466 { ...logDetails , ...formatErr ( e ) } ,
445467 "replay" ,
446468 ) ;
469+ } finally {
470+ // Store document request ID and clean up listener
471+ if ( documentRequestId ) {
472+ data . documentRequestId = documentRequestId ;
473+ logger . info (
474+ "Stored document request ID for raw text extraction" ,
475+ {
476+ url : data . url ,
477+ requestId : documentRequestId ,
478+ originalWarcRecordId : String ( data . originalWarcRecordId ) ,
479+ } ,
480+ "text" ,
481+ ) ;
482+ } else if ( trackDocumentRequest ) {
483+ logger . warn (
484+ "No document request ID captured" ,
485+ {
486+ url : data . url ,
487+ originalWarcRecordId : String ( data . originalWarcRecordId ) ,
488+ } ,
489+ "text" ,
490+ ) ;
491+ }
492+ if ( trackDocumentRequest ) {
493+ cdp . off ( "Network.responseReceived" , trackDocumentRequest ) ;
494+ }
447495 }
448496
449497 while ( replayFrame . url ( ) . indexOf ( "about:blank" ) >= 0 ) {
0 commit comments