@@ -154,25 +154,55 @@ export default async function processSnapshot(snapshot: Snapshot, ctx: Context):
154
154
ctx . log . debug ( `Handling request ${ requestUrl } \n - skipping disallowed resource type [${ request . resourceType ( ) } ]` ) ;
155
155
} else if ( ! ALLOWED_STATUSES . includes ( response . status ( ) ) ) {
156
156
ctx . log . debug ( `${ globalViewport } Handling request ${ requestUrl } \n - skipping disallowed status [${ response . status ( ) } ]` ) ;
157
- let data = {
158
- statusCode : `${ response . status ( ) } ` ,
159
- url : requestUrl ,
160
- resourceType : request . resourceType ( ) ,
161
- }
162
-
163
- if ( ! discoveryErrors . browsers [ globalBrowser ] ) {
164
- discoveryErrors . browsers [ globalBrowser ] = { } ; }
165
-
166
- // Check if the discoveryErrors.browsers[globalBrowser] exists, and if not, initialize it
167
- if ( discoveryErrors . browsers [ globalBrowser ] && ! discoveryErrors . browsers [ globalBrowser ] [ globalViewport ] ) {
168
- discoveryErrors . browsers [ globalBrowser ] [ globalViewport ] = [ ] ;
169
- }
170
157
171
- // Dynamically push the data into the correct browser and viewport
172
- if ( discoveryErrors . browsers [ globalBrowser ] ) {
173
- discoveryErrors . browsers [ globalBrowser ] [ globalViewport ] ?. push ( data ) ;
158
+ if ( response && response . headers ( ) ) {
159
+ const responseHeaders = response . headers ( ) ;
160
+ ctx . log . debug ( `Response headers for ${ requestUrl } : ${ JSON . stringify ( responseHeaders , null , 2 ) } ` ) ;
174
161
}
175
162
163
+ let responseOfRetry , bodyOfRetry
164
+ ctx . log . debug ( `Resource had a disallowed status ${ requestUrl } fetching from server again` ) ;
165
+ responseOfRetry = await page . request . fetch ( request , requestOptions ) ;
166
+ bodyOfRetry = await responseOfRetry . body ( ) ;
167
+
168
+ if ( responseOfRetry && responseOfRetry . status ( ) && ALLOWED_STATUSES . includes ( responseOfRetry . status ( ) ) ) {
169
+ ctx . log . debug ( `Handling request after retry ${ requestUrl } \n - content-type ${ responseOfRetry . headers ( ) [ 'content-type' ] } ` ) ;
170
+ cache [ requestUrl ] = {
171
+ body : bodyOfRetry . toString ( 'base64' ) ,
172
+ type : responseOfRetry . headers ( ) [ 'content-type' ]
173
+ }
174
+ route . fulfill ( {
175
+ status : responseOfRetry . status ( ) ,
176
+ headers : responseOfRetry . headers ( ) ,
177
+ body : bodyOfRetry ,
178
+ } ) ;
179
+ } else {
180
+ ctx . log . debug ( `Resource had a disallowed status for retry as well ${ requestUrl } disallowed status [${ responseOfRetry . status ( ) } ]` ) ;
181
+ if ( responseOfRetry && responseOfRetry . headers ( ) ) {
182
+ const responseHeadersRetry = responseOfRetry . headers ( ) ;
183
+ ctx . log . debug ( `Response headers for retry ${ requestUrl } : ${ JSON . stringify ( responseHeadersRetry , null , 2 ) } ` ) ;
184
+ }
185
+
186
+ let data = {
187
+ statusCode : `${ responseOfRetry . status ( ) } ` ,
188
+ url : requestUrl ,
189
+ resourceType : request . resourceType ( ) ,
190
+ }
191
+
192
+ if ( ! discoveryErrors . browsers [ globalBrowser ] ) {
193
+ discoveryErrors . browsers [ globalBrowser ] = { } ;
194
+ }
195
+
196
+ // Check if the discoveryErrors.browsers[globalBrowser] exists, and if not, initialize it
197
+ if ( discoveryErrors . browsers [ globalBrowser ] && ! discoveryErrors . browsers [ globalBrowser ] [ globalViewport ] ) {
198
+ discoveryErrors . browsers [ globalBrowser ] [ globalViewport ] = [ ] ;
199
+ }
200
+
201
+ // Dynamically push the data into the correct browser and viewport
202
+ if ( discoveryErrors . browsers [ globalBrowser ] ) {
203
+ discoveryErrors . browsers [ globalBrowser ] [ globalViewport ] ?. push ( data ) ;
204
+ }
205
+ }
176
206
} else {
177
207
ctx . log . debug ( `Handling request ${ requestUrl } \n - content-type ${ response . headers ( ) [ 'content-type' ] } ` ) ;
178
208
0 commit comments