@browserless.io/browserless 2.12.0-beta-3 → 2.12.0-beta-4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/browsers/chromium.cdp.d.ts +1 -1
- package/build/browsers/chromium.cdp.js +2 -2
- package/build/browsers/chromium.playwright.d.ts +1 -1
- package/build/browsers/chromium.playwright.js +2 -2
- package/build/browsers/firefox.playwright.d.ts +1 -1
- package/build/browsers/firefox.playwright.js +2 -2
- package/build/browsers/index.d.ts +3 -2
- package/build/browsers/index.js +36 -17
- package/build/browsers/webkit.playwright.d.ts +1 -1
- package/build/browsers/webkit.playwright.js +4 -4
- package/build/routes/chrome/http/pdf.post.body.json +8 -8
- package/build/routes/chrome/http/scrape.post.body.json +8 -8
- package/build/routes/chrome/http/screenshot.post.body.json +8 -8
- package/build/routes/chromium/http/content.post.body.json +8 -8
- package/build/routes/chromium/http/pdf.post.body.json +8 -8
- package/build/routes/chromium/http/scrape.post.body.json +8 -8
- package/build/types.d.ts +1 -1
- package/extensions/ublock/_locales/eu/messages.json +4 -4
- package/extensions/ublock/_locales/hi/messages.json +5 -5
- package/extensions/ublock/_locales/kn/messages.json +11 -11
- package/extensions/ublock/_locales/nb/messages.json +2 -2
- package/extensions/ublock/_locales/no/messages.json +2 -2
- package/extensions/ublock/_locales/ro/messages.json +1 -1
- package/extensions/ublock/_locales/sv/messages.json +1 -1
- package/extensions/ublock/_locales/zh_CN/messages.json +2 -2
- package/extensions/ublock/assets/assets.json +3 -8
- package/extensions/ublock/assets/resources/scriptlets.js +128 -31
- package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +4870 -3560
- package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +662 -173
- package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +10 -42
- package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +241 -80
- package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2093 -1224
- package/extensions/ublock/assets/ublock/badlists.txt +2 -0
- package/extensions/ublock/assets/ublock/badware.min.txt +408 -287
- package/extensions/ublock/assets/ublock/filters.min.txt +947 -645
- package/extensions/ublock/assets/ublock/privacy.min.txt +43 -8
- package/extensions/ublock/assets/ublock/quick-fixes.min.txt +55 -93
- package/extensions/ublock/assets/ublock/unbreak.min.txt +52 -19
- package/extensions/ublock/css/1p-filters.css +2 -0
- package/extensions/ublock/css/codemirror.css +2 -2
- package/extensions/ublock/css/dashboard.css +2 -5
- package/extensions/ublock/css/epicker-ui.css +3 -3
- package/extensions/ublock/css/fa-icons.css +3 -0
- package/extensions/ublock/css/logger-ui-inspector.css +1 -0
- package/extensions/ublock/css/logger-ui.css +44 -32
- package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
- package/extensions/ublock/js/3p-filters.js +4 -5
- package/extensions/ublock/js/biditrie.js +16 -11
- package/extensions/ublock/js/cachestorage.js +37 -37
- package/extensions/ublock/js/contentscript-extra.js +0 -2
- package/extensions/ublock/js/contentscript.js +1 -6
- package/extensions/ublock/js/epicker-ui.js +28 -36
- package/extensions/ublock/js/fa-icons.js +1 -0
- package/extensions/ublock/js/hntrie.js +19 -13
- package/extensions/ublock/js/logger-ui-inspector.js +6 -13
- package/extensions/ublock/js/logger-ui.js +264 -264
- package/extensions/ublock/js/s14e-serializer.js +267 -264
- package/extensions/ublock/js/scriptlet-filtering.js +12 -18
- package/extensions/ublock/js/scriptlets/dom-inspector.js +1 -5
- package/extensions/ublock/js/scriptlets/epicker.js +53 -59
- package/extensions/ublock/js/start.js +0 -8
- package/extensions/ublock/js/storage.js +2 -9
- package/extensions/ublock/js/vapi-background.js +19 -20
- package/extensions/ublock/js/vapi-common.js +2 -7
- package/extensions/ublock/js/vapi.js +0 -4
- package/extensions/ublock/js/webext.js +23 -15
- package/extensions/ublock/logger-ui.html +24 -15
- package/extensions/ublock/manifest.json +2 -3
- package/package.json +2 -2
- package/src/browsers/chromium.cdp.ts +2 -2
- package/src/browsers/chromium.playwright.ts +2 -2
- package/src/browsers/firefox.playwright.ts +2 -3
- package/src/browsers/index.ts +49 -21
- package/src/browsers/webkit.playwright.ts +4 -4
- package/src/routes/chrome/tests/websocket.spec.ts +2 -2
- package/src/routes/chromium/tests/websocket.spec.ts +2 -2
- package/src/routes/firefox/tests/websocket.spec.ts +2 -4
- package/src/routes/webkit/tests/websocket.spec.ts +2 -3
- package/src/types.ts +1 -1
- package/src/utils.ts +1 -1
- package/static/docs/swagger.json +1 -1
- package/static/docs/swagger.min.json +1 -1
package/src/browsers/index.ts
CHANGED
|
@@ -37,7 +37,7 @@ import path from 'path';
|
|
|
37
37
|
|
|
38
38
|
export class BrowserManager {
|
|
39
39
|
protected browsers: Map<BrowserInstance, BrowserlessSession> = new Map();
|
|
40
|
-
protected timers: Map<string,
|
|
40
|
+
protected timers: Map<string, NodeJS.Timeout> = new Map();
|
|
41
41
|
protected log = new Logger('browser-manager');
|
|
42
42
|
protected chromeBrowsers = [ChromiumCDP, ChromeCDP];
|
|
43
43
|
protected playwrightBrowserNames = [
|
|
@@ -226,7 +226,7 @@ export class BrowserManager {
|
|
|
226
226
|
{
|
|
227
227
|
...session,
|
|
228
228
|
browser: browser.constructor.name,
|
|
229
|
-
browserId:
|
|
229
|
+
browserId: session.id,
|
|
230
230
|
initialConnectURL: new URL(session.initialConnectURL, serverAddress)
|
|
231
231
|
.href,
|
|
232
232
|
killURL: session.id
|
|
@@ -268,26 +268,54 @@ export class BrowserManager {
|
|
|
268
268
|
browser: BrowserInstance,
|
|
269
269
|
session: BrowserlessSession,
|
|
270
270
|
): Promise<void> => {
|
|
271
|
+
const now = Date.now();
|
|
272
|
+
const keepUntil = browser.keepUntil();
|
|
273
|
+
const connected = session.numbConnected;
|
|
274
|
+
const hasKeepUntil = keepUntil > now;
|
|
275
|
+
const keepOpen = connected > 0 || hasKeepUntil;
|
|
271
276
|
const cleanupACtions: Array<() => Promise<void>> = [];
|
|
272
|
-
this.
|
|
277
|
+
const priorTimer = this.timers.get(session.id);
|
|
273
278
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
279
|
+
if (priorTimer) {
|
|
280
|
+
this.log.info(`Deleting prior keep-until timer for "${session.id}"`);
|
|
281
|
+
global.clearTimeout(priorTimer);
|
|
277
282
|
}
|
|
278
283
|
|
|
279
|
-
this.log.info(
|
|
280
|
-
|
|
284
|
+
this.log.info(
|
|
285
|
+
`${session.numbConnected} Client(s) are currently connected, Keep-until: ${keepUntil}`,
|
|
286
|
+
);
|
|
281
287
|
|
|
282
|
-
if (
|
|
283
|
-
|
|
284
|
-
|
|
288
|
+
if (hasKeepUntil) {
|
|
289
|
+
const timeout = keepUntil - now;
|
|
290
|
+
this.log.trace(
|
|
291
|
+
`Setting timer ${timeout.toLocaleString()} for "${session.id}"`,
|
|
292
|
+
);
|
|
293
|
+
this.timers.set(
|
|
294
|
+
session.id,
|
|
295
|
+
global.setTimeout(() => {
|
|
296
|
+
const session = this.browsers.get(browser);
|
|
297
|
+
if (session) {
|
|
298
|
+
this.log.trace(`Timer hit for "${session.id}"`),
|
|
299
|
+
this.close(browser, session);
|
|
300
|
+
}
|
|
301
|
+
}, timeout),
|
|
285
302
|
);
|
|
286
|
-
this.browsers.delete(browser);
|
|
287
|
-
cleanupACtions.push(() => this.removeUserDataDir(session.userDataDir));
|
|
288
303
|
}
|
|
289
304
|
|
|
290
|
-
|
|
305
|
+
if (!keepOpen) {
|
|
306
|
+
this.log.info(`Closing browser session`);
|
|
307
|
+
cleanupACtions.push(() => browser.close());
|
|
308
|
+
|
|
309
|
+
if (session.isTempDataDir) {
|
|
310
|
+
this.log.info(
|
|
311
|
+
`Deleting "${session.userDataDir}" user-data-dir and session from memory`,
|
|
312
|
+
);
|
|
313
|
+
this.browsers.delete(browser);
|
|
314
|
+
cleanupACtions.push(() => this.removeUserDataDir(session.userDataDir));
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
await Promise.all(cleanupACtions.map((a) => a()));
|
|
318
|
+
}
|
|
291
319
|
};
|
|
292
320
|
|
|
293
321
|
public getAllSessions = async (): Promise<BrowserlessSessionJSON[]> => {
|
|
@@ -459,8 +487,14 @@ export class BrowserManager {
|
|
|
459
487
|
userDataDir,
|
|
460
488
|
});
|
|
461
489
|
|
|
490
|
+
const match = (req.headers['user-agent'] || '').match(pwVersionRegex);
|
|
491
|
+
const pwVersion = match ? match[1] : 'default';
|
|
492
|
+
|
|
493
|
+
await browser.launch(launchOptions as object, pwVersion);
|
|
494
|
+
await this.hooks.browser({ browser, meta: req.parsed });
|
|
495
|
+
|
|
462
496
|
const session: BrowserlessSession = {
|
|
463
|
-
id:
|
|
497
|
+
id: browser.wsEndpoint()?.split('/').pop() as string,
|
|
464
498
|
initialConnectURL:
|
|
465
499
|
path.join(req.parsed.pathname, req.parsed.search) || '',
|
|
466
500
|
isTempDataDir: !manualUserDataDir,
|
|
@@ -475,12 +509,6 @@ export class BrowserManager {
|
|
|
475
509
|
|
|
476
510
|
this.browsers.set(browser, session);
|
|
477
511
|
|
|
478
|
-
const match = (req.headers['user-agent'] || '').match(pwVersionRegex);
|
|
479
|
-
const pwVersion = match ? match[1] : 'default';
|
|
480
|
-
|
|
481
|
-
await browser.launch(launchOptions as object, pwVersion);
|
|
482
|
-
await this.hooks.browser({ browser, meta: req.parsed });
|
|
483
|
-
|
|
484
512
|
browser.on('newPage', async (page) => {
|
|
485
513
|
await this.onNewPage(req, page);
|
|
486
514
|
(router.onNewPage || noop)(req.parsed || '', page);
|
|
@@ -42,8 +42,8 @@ export class WebkitPlaywright extends EventEmitter {
|
|
|
42
42
|
this.removeAllListeners();
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
public
|
|
46
|
-
return
|
|
45
|
+
public keepUntil() {
|
|
46
|
+
return 0;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
public isRunning = (): boolean => this.running;
|
|
@@ -88,14 +88,14 @@ export class WebkitPlaywright extends EventEmitter {
|
|
|
88
88
|
): Promise<playwright.BrowserServer> => {
|
|
89
89
|
this.logger.info(`Launching ${this.constructor.name} Handler`);
|
|
90
90
|
|
|
91
|
-
const opts =
|
|
91
|
+
const opts = {
|
|
92
92
|
...options,
|
|
93
93
|
args: [
|
|
94
94
|
...(options.args || []),
|
|
95
95
|
this.userDataDir ? `-profile=${this.userDataDir}` : '',
|
|
96
96
|
],
|
|
97
97
|
executablePath: playwright.webkit.executablePath(),
|
|
98
|
-
}
|
|
98
|
+
};
|
|
99
99
|
|
|
100
100
|
const versionedPw = await this.config.loadPwVersion(version!);
|
|
101
101
|
|
|
@@ -470,9 +470,9 @@ describe('Chrome WebSocket API', function () {
|
|
|
470
470
|
const browser = await pw.chromium.connect(
|
|
471
471
|
`ws://localhost:3000/chrome/playwright?token=browserless`,
|
|
472
472
|
);
|
|
473
|
-
|
|
473
|
+
|
|
474
474
|
await browser.close();
|
|
475
|
-
await sleep(100);
|
|
475
|
+
await sleep(100);
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
const results = metrics.get();
|
|
@@ -474,9 +474,9 @@ describe('Chromium WebSocket API', function () {
|
|
|
474
474
|
const browser = await pw.chromium.connect(
|
|
475
475
|
`ws://localhost:3000/playwright/chromium?token=browserless`,
|
|
476
476
|
);
|
|
477
|
-
|
|
477
|
+
|
|
478
478
|
await browser.close();
|
|
479
|
-
await sleep(100);
|
|
479
|
+
await sleep(100);
|
|
480
480
|
}
|
|
481
481
|
|
|
482
482
|
const results = metrics.get();
|
|
@@ -38,9 +38,7 @@ describe('Firefox Websocket API', function () {
|
|
|
38
38
|
await browser.close();
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
|
|
42
41
|
it('runs multiple versions of playwright', async () => {
|
|
43
|
-
|
|
44
42
|
const config = new Config();
|
|
45
43
|
config.setToken('browserless');
|
|
46
44
|
const metrics = new Metrics();
|
|
@@ -53,9 +51,9 @@ describe('Firefox Websocket API', function () {
|
|
|
53
51
|
const browser = await pw.firefox.connect(
|
|
54
52
|
`ws://localhost:3000/playwright/firefox?token=browserless`,
|
|
55
53
|
);
|
|
56
|
-
|
|
54
|
+
|
|
57
55
|
await browser.close();
|
|
58
|
-
await sleep(100);
|
|
56
|
+
await sleep(100);
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
const results = metrics.get();
|
|
@@ -39,7 +39,6 @@ describe('Webkit Websocket API', function () {
|
|
|
39
39
|
await browser.close();
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
|
|
43
42
|
it('runs multiple versions of playwright', async () => {
|
|
44
43
|
const config = new Config();
|
|
45
44
|
config.setToken('browserless');
|
|
@@ -53,9 +52,9 @@ describe('Webkit Websocket API', function () {
|
|
|
53
52
|
const browser = await pw.webkit.connect(
|
|
54
53
|
`ws://localhost:3000/playwright/webkit?token=browserless`,
|
|
55
54
|
);
|
|
56
|
-
|
|
55
|
+
|
|
57
56
|
await browser.close();
|
|
58
|
-
await sleep(100);
|
|
57
|
+
await sleep(100);
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
const results = metrics.get();
|
package/src/types.ts
CHANGED
package/src/utils.ts
CHANGED
|
@@ -50,7 +50,7 @@ const getAuthHeaderToken = (header: string) => {
|
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* RegEx to match the Playwright version from the innitial request header.
|
|
53
|
-
*
|
|
53
|
+
*
|
|
54
54
|
* @example
|
|
55
55
|
* const userAgent = "Playwright/1.43.1 (x64; windows 10.0) node/20.11";
|
|
56
56
|
* userAgent.match(pwVersionRegex);
|
package/static/docs/swagger.json
CHANGED