From d7468519ca562d9c703b4af3549b5501778fb7c5 Mon Sep 17 00:00:00 2001 From: Pouya Oftadeh Date: Wed, 20 Nov 2019 16:43:32 -0500 Subject: [PATCH 1/3] feat: add navigation error handler --- src/Browser/Browser.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Browser/Browser.ts b/src/Browser/Browser.ts index d2838247..1bf33dec 100644 --- a/src/Browser/Browser.ts +++ b/src/Browser/Browser.ts @@ -96,13 +96,36 @@ class Browser { this.activeElement = this.dom.window.document.activeElement; } + /** + * handles errors thrown by the navigation function + */ + private handleNavigationError(error, config) { + if (error.statusCode === 401) { + const { cookieJar: existingCookieJar } = this.dom; + + this.dom = new JSDOM(' ', { + resources: config.resourceLoader, + runScripts: config.runScripts, + beforeParse: config.beforeParse, + pretendToBeVisual: true, + cookieJar: existingCookieJar || config.jar, + }); + } else { + throw error; + } + } + /** * accepts a url and pathType @type {String} from which to instantiate the * jsdom object */ async navigate(path: URL, pathType) { if (path) { - await this.configureBrowser(this.browserConfig, path, pathType); + try { + await this.configureBrowser(this.browserConfig, path, pathType); + } catch (error) { + this.handleNavigationError(error, this.browserConfig); + } } return true; } From 209c9fec64f180679c344c27659b053c7ef423ef Mon Sep 17 00:00:00 2001 From: Pouya Oftadeh Date: Wed, 20 Nov 2019 16:50:09 -0500 Subject: [PATCH 2/3] fix: remove unnecessary destructuring of previous cookie jar --- src/Browser/Browser.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Browser/Browser.ts b/src/Browser/Browser.ts index 1bf33dec..2a2a5ccc 100644 --- a/src/Browser/Browser.ts +++ b/src/Browser/Browser.ts @@ -101,14 +101,12 @@ class Browser { */ private handleNavigationError(error, config) { if (error.statusCode === 401) { - const { cookieJar: existingCookieJar } = this.dom; - this.dom = new JSDOM(' ', { resources: config.resourceLoader, runScripts: config.runScripts, beforeParse: config.beforeParse, pretendToBeVisual: true, - cookieJar: existingCookieJar || config.jar, + cookieJar: config.jar, }); } else { throw error; From bfeadced813268a8364e27809ef5979ae8f138a4 Mon Sep 17 00:00:00 2001 From: Pouya Oftadeh Date: Wed, 20 Nov 2019 16:51:06 -0500 Subject: [PATCH 3/3] chore: add comment for 401 error check --- src/Browser/Browser.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Browser/Browser.ts b/src/Browser/Browser.ts index 2a2a5ccc..99f48348 100644 --- a/src/Browser/Browser.ts +++ b/src/Browser/Browser.ts @@ -100,6 +100,7 @@ class Browser { * handles errors thrown by the navigation function */ private handleNavigationError(error, config) { + // the jsdom instance will otherwise crash on a 401 if (error.statusCode === 401) { this.dom = new JSDOM(' ', { resources: config.resourceLoader,