@@ -66,14 +66,15 @@ export async function startOcspResponder(port: number, certsPath: string): Promi
6666 } ) ;
6767 } , 2000 ) ;
6868
69- proc . stdout ?. on ( 'data' , ( data ) => {
69+ // stdio is piped, so stdout/stderr are always defined
70+ proc . stdout . on ( 'data' , ( data ) => {
7071 // Log OCSP responder output for debugging
7172 if ( process . env . DEBUG_OCSP ) {
7273 console . log ( 'OCSP responder:' , data . toString ( ) ) ;
7374 }
7475 } ) ;
7576
76- proc . stderr ? .on ( 'data' , ( data ) => {
77+ proc . stderr . on ( 'data' , ( data ) => {
7778 // Log errors for debugging
7879 if ( process . env . DEBUG_OCSP ) {
7980 console . error ( 'OCSP responder error:' , data . toString ( ) ) ;
@@ -87,7 +88,10 @@ export async function startOcspResponder(port: number, certsPath: string): Promi
8788 }
8889 } ) ;
8990
90- proc . on ( 'exit' , ( code ) => {
91+ // Use 'close' instead of 'exit' to ensure all stdio streams are fully flushed
92+ // and closed before handling the error - this prevents race conditions where we
93+ // might reject before all error output has been captured
94+ proc . on ( 'close' , ( code ) => {
9195 if ( timeout ) {
9296 clearTimeout ( timeout ) ;
9397 reject ( new Error ( `OCSP responder exited with code ${ code } before starting` ) ) ;
@@ -109,7 +113,7 @@ export async function stopOcspResponder(ctx: OcspResponderContext): Promise<void
109113 resolve ( ) ;
110114 } , 5000 ) ;
111115
112- ctx . process . on ( 'exit ' , ( ) => {
116+ ctx . process . on ( 'close ' , ( ) => {
113117 clearTimeout ( timeout ) ;
114118 resolve ( ) ;
115119 } ) ;
0 commit comments