diff --git a/index.d.ts b/index.d.ts index 6e62c54..0f14faf 100644 --- a/index.d.ts +++ b/index.d.ts @@ -166,7 +166,7 @@ declare namespace WAWebJS { /** Emitted when the client has been disconnected */ on(event: 'disconnected', listener: ( /** reason that caused the disconnect */ - reason: WAState | "NAVIGATED" + reason: WAState | "NAVIGATION" ) => void): this /** Emitted when a user joins the chat via invite link or is added by an admin */ diff --git a/src/Client.js b/src/Client.js index b09c2f3..27c2079 100644 --- a/src/Client.js +++ b/src/Client.js @@ -74,7 +74,7 @@ class Client extends EventEmitter { } else { browser = await puppeteer.launch(this.options.puppeteer); page = (await browser.pages())[0]; - } + } await page.setUserAgent(this.options.userAgent); @@ -89,11 +89,13 @@ class Client extends EventEmitter { if (this.options.session) { await page.evaluateOnNewDocument( session => { - localStorage.clear(); - localStorage.setItem('WABrowserId', session.WABrowserId); - localStorage.setItem('WASecretBundle', session.WASecretBundle); - localStorage.setItem('WAToken1', session.WAToken1); - localStorage.setItem('WAToken2', session.WAToken2); + if(document.referrer === 'https://whatsapp.com/') { + localStorage.clear(); + localStorage.setItem('WABrowserId', session.WABrowserId); + localStorage.setItem('WASecretBundle', session.WASecretBundle); + localStorage.setItem('WAToken1', session.WAToken1); + localStorage.setItem('WAToken2', session.WAToken2); + } }, this.options.session); } @@ -104,6 +106,7 @@ class Client extends EventEmitter { await page.goto(WhatsWebURL, { waitUntil: 'load', timeout: 0, + referer: 'https://whatsapp.com/' }); 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"]'; @@ -452,7 +455,7 @@ class Client extends EventEmitter { // Disconnect when navigating away when in PAIRING state (detect logout) this.pupPage.on('framenavigated', async () => { const appState = await this.getState(); - if(appState === WAState.PAIRING) { + if(!appState || appState === WAState.PAIRING) { this.emit(Events.DISCONNECTED, 'NAVIGATION'); await this.destroy(); } @@ -727,6 +730,7 @@ class Client extends EventEmitter { */ async getState() { return await this.pupPage.evaluate(() => { + if(!window.Store) return null; return window.Store.AppState.state; }); }