diff --git a/src/logger.ts b/src/logger.ts index b04dffb6ab..bb0eaded2e 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -212,6 +212,21 @@ export const Print = { } return `✖ ${buildProductString(link, store)} :: RATE LIMIT EXCEEDED`; + }, + recursionLimit(link: Link, store: Store, color?: boolean): string { + if (color) { + return ( + '✖ ' + + buildProductString(link, store, true) + + ' :: ' + + chalk.yellow('CLOUDFLARE RETRY LIMIT REACHED, ABORT') + ); + } + + return `✖ ${buildProductString( + link, + store + )} :: CLOUDFLARE RETRY LIMIT REACHED, ABORT`; } }; diff --git a/src/store/lookup.ts b/src/store/lookup.ts index 197986af8d..ab53f76400 100644 --- a/src/store/lookup.ts +++ b/src/store/lookup.ts @@ -328,7 +328,8 @@ async function handleResponse( store: Store, page: Page, link: Link, - response?: Response | null + response?: Response | null, + recursionDepth = 0 ) { if (!response) { logger.debug(Print.noResponse(link, store, true)); @@ -341,16 +342,24 @@ async function handleResponse( logger.warn(Print.rateLimit(link, store, true)); } else if (statusCode === 503) { if (await checkIsCloudflare(store, page, link)) { - const response: Response | null = await page.waitForNavigation({ - waitUntil: 'networkidle0' - }); - statusCode = await handleResponse( - browser, - store, - page, - link, - response - ); + if (recursionDepth > 4) { + logger.warn(Print.recursionLimit(link, store, true)); + } else { + const response: Response | null = await page.waitForNavigation( + { + waitUntil: 'networkidle0' + } + ); + recursionDepth++; + statusCode = await handleResponse( + browser, + store, + page, + link, + response, + recursionDepth + ); + } } else { logger.warn(Print.badStatusCode(link, store, statusCode, true)); }