Skip to content

Commit b654043

Browse files
committed
feat: support external browser + page in puppeteer options
allow passing a pre-existing `browser` and `page` via `options.puppeteer` so the Client can work with a browser you already control. when both are provided, the Client skips puppeteer.launch() and uses them directly. also uses browser.process() in destroy/logout to decide cleanup: close() for launched browsers, disconnect() for connected ones.
1 parent b0e8693 commit b654043

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

src/Client.js

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,11 @@ class Client extends EventEmitter {
442442
await this.authStrategy.beforeBrowserInitialized();
443443

444444
const puppeteerOpts = this.options.puppeteer;
445-
if (
445+
if (puppeteerOpts && puppeteerOpts.browser && puppeteerOpts.page) {
446+
// External browser + page provided by caller
447+
browser = puppeteerOpts.browser;
448+
page = puppeteerOpts.page;
449+
} else if (
446450
puppeteerOpts &&
447451
(puppeteerOpts.browserWSEndpoint || puppeteerOpts.browserURL)
448452
) {
@@ -1181,7 +1185,11 @@ class Client extends EventEmitter {
11811185
const browser = this.pupBrowser;
11821186
const isConnected = browser?.isConnected?.();
11831187
if (isConnected) {
1184-
await browser.close();
1188+
if (browser.process()) {
1189+
await browser.close();
1190+
} else {
1191+
browser.disconnect();
1192+
}
11851193
}
11861194
await this.authStrategy.destroy();
11871195
}
@@ -1193,13 +1201,16 @@ class Client extends EventEmitter {
11931201
await this.pupPage.evaluate(() => {
11941202
return window.require('WAWebSocketModel').Socket.logout();
11951203
});
1196-
await this.pupBrowser.close();
1204+
if (this.pupBrowser.process()) {
1205+
await this.pupBrowser.close();
11971206

1198-
let maxDelay = 0;
1199-
while (this.pupBrowser.isConnected() && maxDelay < 10) {
1200-
// waits a maximum of 1 second before calling the AuthStrategy
1201-
await new Promise((resolve) => setTimeout(resolve, 100));
1202-
maxDelay++;
1207+
let maxDelay = 0;
1208+
while (this.pupBrowser.isConnected() && maxDelay < 10) {
1209+
await new Promise((resolve) => setTimeout(resolve, 100));
1210+
maxDelay++;
1211+
}
1212+
} else {
1213+
this.pupBrowser.disconnect();
12031214
}
12041215

12051216
await this.authStrategy.logout();

0 commit comments

Comments
 (0)