From c859ac39ce8477b54f388016a6dfd8c483e05eea Mon Sep 17 00:00:00 2001 From: "Pedro S. Lopez" Date: Sat, 5 Feb 2022 23:05:01 -0400 Subject: [PATCH] fix: dont crash when calling .destroy() while waiting for qr scan (#1172) fixes #739 fixes #951 --- src/Client.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Client.js b/src/Client.js index a6bd6da..6b761fb 100644 --- a/src/Client.js +++ b/src/Client.js @@ -109,7 +109,7 @@ class Client extends EventEmitter { const KEEP_PHONE_CONNECTED_IMG_SELECTOR = '[data-icon="intro-md-beta-logo-dark"], [data-icon="intro-md-beta-logo-light"], [data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]'; if (this.options.session) { - // Check if session restore was successfull + // Check if session restore was successful try { await page.waitForSelector(KEEP_PHONE_CONNECTED_IMG_SELECTOR, { timeout: this.options.authTimeoutMs }); } catch (err) { @@ -168,10 +168,22 @@ class Client extends EventEmitter { this._qrRefreshInterval = setInterval(getQrCode, this.options.qrRefreshIntervalMs); // Wait for code scan - await page.waitForSelector(KEEP_PHONE_CONNECTED_IMG_SELECTOR, { timeout: 0 }); - clearInterval(this._qrRefreshInterval); - this._qrRefreshInterval = undefined; + try { + await page.waitForSelector(KEEP_PHONE_CONNECTED_IMG_SELECTOR, { timeout: 0 }); + clearInterval(this._qrRefreshInterval); + this._qrRefreshInterval = undefined; + } catch(error) { + if ( + error.name === 'ProtocolError' && + error.message && + error.message.match(/Target closed/) + ) { + // something has called .destroy() while waiting + return; + } + throw error; + } } await page.evaluate(ExposeStore, moduleRaid.toString());