Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -698,7 +698,12 @@ declare namespace WAWebJS {
evalOnNewDoc?: Function;
/** Puppeteer launch options. View docs here: https://github.com/puppeteer/puppeteer/ */
puppeteer?: puppeteer.PuppeteerNodeLaunchOptions &
puppeteer.ConnectOptions;
puppeteer.ConnectOptions & {
/** Pre-existing browser instance to use instead of launching a new one */
browser?: puppeteer.Browser;
/** Pre-existing page instance to use */
page?: puppeteer.Page;
};
/** Determines how to save and restore sessions. Will use LegacySessionAuth if options.session is set. Otherwise, NoAuth will be used. */
authStrategy?: AuthStrategy;
/** The version of WhatsApp Web to use. Use options.webVersionCache to configure how the version is retrieved. */
Expand Down
27 changes: 19 additions & 8 deletions src/Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,11 @@ class Client extends EventEmitter {
await this.authStrategy.beforeBrowserInitialized();

const puppeteerOpts = this.options.puppeteer;
if (
if (puppeteerOpts && puppeteerOpts.browser && puppeteerOpts.page) {
// External browser + page provided by caller
browser = puppeteerOpts.browser;
page = puppeteerOpts.page;
} else if (
puppeteerOpts &&
(puppeteerOpts.browserWSEndpoint || puppeteerOpts.browserURL)
) {
Expand Down Expand Up @@ -1204,7 +1208,11 @@ class Client extends EventEmitter {
const browser = this.pupBrowser;
const isConnected = browser?.isConnected?.();
if (isConnected) {
await browser.close();
if (browser.process()) {
await browser.close();
} else {
browser.disconnect();
}
}
await this.authStrategy.destroy();
}
Expand All @@ -1216,13 +1224,16 @@ class Client extends EventEmitter {
await this.pupPage.evaluate(() => {
return window.require('WAWebSocketModel').Socket.logout();
});
await this.pupBrowser.close();
if (this.pupBrowser.process()) {
await this.pupBrowser.close();

let maxDelay = 0;
while (this.pupBrowser.isConnected() && maxDelay < 10) {
// waits a maximum of 1 second before calling the AuthStrategy
await new Promise((resolve) => setTimeout(resolve, 100));
maxDelay++;
let maxDelay = 0;
while (this.pupBrowser.isConnected() && maxDelay < 10) {
await new Promise((resolve) => setTimeout(resolve, 100));
maxDelay++;
}
} else {
this.pupBrowser.disconnect();
}

await this.authStrategy.logout();
Expand Down
Loading