@browserless.io/browserless 2.12.0-beta-3 → 2.12.0-beta-6
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/browserless.d.ts +3 -3
- package/build/browserless.js +6 -6
- package/build/browsers/chromium.cdp.d.ts +13 -13
- package/build/browsers/chromium.cdp.js +79 -67
- package/build/browsers/chromium.playwright.d.ts +12 -12
- package/build/browsers/chromium.playwright.js +44 -36
- package/build/browsers/firefox.playwright.d.ts +12 -12
- package/build/browsers/firefox.playwright.js +44 -36
- package/build/browsers/index.d.ts +17 -16
- package/build/browsers/index.js +63 -42
- package/build/browsers/webkit.playwright.d.ts +12 -12
- package/build/browsers/webkit.playwright.js +47 -39
- package/build/config.d.ts +65 -63
- package/build/config.js +162 -102
- package/build/file-system.d.ts +4 -4
- package/build/file-system.js +8 -8
- package/build/hooks.d.ts +2 -2
- package/build/hooks.js +4 -4
- package/build/limiter.d.ts +4 -4
- package/build/limiter.js +10 -10
- package/build/logger.d.ts +6 -6
- package/build/logger.js +12 -12
- package/build/metrics.d.ts +12 -12
- package/build/metrics.js +23 -23
- package/build/monitoring.d.ts +4 -4
- package/build/monitoring.js +8 -8
- package/build/router.d.ts +8 -8
- package/build/router.js +74 -70
- 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/routes/chromium/http/screenshot.post.body.json +8 -8
- package/build/routes/firefox/ws/playwright.d.ts +1 -1
- package/build/routes/firefox/ws/playwright.js +2 -2
- package/build/routes/management/http/active.get.d.ts +1 -1
- package/build/routes/management/http/active.get.js +3 -1
- package/build/routes/management/http/config.get.d.ts +1 -1
- package/build/routes/management/http/config.get.js +2 -2
- package/build/routes/management/http/metrics-total.get.d.ts +1 -1
- package/build/routes/management/http/metrics-total.get.js +2 -2
- package/build/routes/management/http/metrics.get.d.ts +1 -1
- package/build/routes/management/http/metrics.get.js +2 -2
- package/build/routes/management/http/pressure.get.d.ts +1 -1
- package/build/routes/management/http/pressure.get.js +2 -2
- package/build/routes/management/http/sessions.get.d.ts +1 -1
- package/build/routes/management/http/sessions.get.js +2 -2
- package/build/routes/management/http/static.get.d.ts +1 -1
- package/build/routes/management/http/static.get.js +2 -2
- package/build/routes/webkit/ws/playwright.d.ts +1 -1
- package/build/routes/webkit/ws/playwright.js +2 -2
- package/build/server.d.ts +5 -5
- package/build/server.js +11 -11
- package/build/shared/browser.ws.d.ts +1 -1
- package/build/shared/browser.ws.js +3 -1
- package/build/shared/chromium.playwright.ws.d.ts +1 -1
- package/build/shared/chromium.playwright.ws.js +2 -2
- package/build/shared/chromium.ws.d.ts +1 -1
- package/build/shared/chromium.ws.js +3 -1
- package/build/shared/content.http.d.ts +1 -1
- package/build/shared/content.http.js +2 -2
- package/build/shared/download.http.d.ts +1 -1
- package/build/shared/download.http.js +60 -58
- package/build/shared/function.http.d.ts +1 -1
- package/build/shared/function.http.js +2 -2
- package/build/shared/json-list.http.d.ts +1 -1
- package/build/shared/json-list.http.js +2 -2
- package/build/shared/json-new.http.d.ts +1 -1
- package/build/shared/json-new.http.js +2 -2
- package/build/shared/json-protocol.http.d.ts +1 -1
- package/build/shared/json-protocol.http.js +2 -2
- package/build/shared/json-version.http.d.ts +1 -1
- package/build/shared/json-version.http.js +2 -2
- package/build/shared/page.ws.d.ts +1 -1
- package/build/shared/page.ws.js +3 -1
- package/build/shared/pdf.http.d.ts +1 -1
- package/build/shared/pdf.http.js +2 -2
- package/build/shared/performance.http.d.ts +1 -1
- package/build/shared/performance.http.js +2 -2
- package/build/shared/scrape.http.d.ts +1 -1
- package/build/shared/scrape.http.js +2 -2
- package/build/shared/screenshot.http.d.ts +1 -1
- package/build/shared/screenshot.http.js +2 -2
- package/build/shared/utils/function/client.d.ts +1 -1
- package/build/shared/utils/function/client.js +3 -1
- package/build/shim.d.ts +1 -1
- package/build/shim.js +2 -2
- package/build/token.d.ts +3 -3
- package/build/token.js +6 -6
- package/build/types.d.ts +5 -5
- package/build/webhooks.d.ts +2 -2
- package/build/webhooks.js +4 -4
- 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 +4 -4
- package/src/browserless.ts +6 -6
- package/src/browsers/chromium.cdp.ts +35 -25
- package/src/browsers/chromium.playwright.ts +30 -23
- package/src/browsers/firefox.playwright.ts +30 -24
- package/src/browsers/index.ts +81 -50
- package/src/browsers/webkit.playwright.ts +33 -26
- package/src/config.ts +166 -104
- package/src/file-system.ts +9 -9
- package/src/hooks.ts +4 -4
- package/src/limiter.ts +12 -12
- package/src/logger.ts +12 -12
- package/src/metrics.ts +23 -23
- package/src/monitoring.ts +9 -9
- package/src/router.ts +31 -31
- 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/firefox/ws/playwright.ts +3 -3
- package/src/routes/management/http/active.get.ts +3 -2
- package/src/routes/management/http/config.get.ts +2 -2
- package/src/routes/management/http/metrics-total.get.ts +2 -2
- package/src/routes/management/http/metrics.get.ts +2 -2
- package/src/routes/management/http/pressure.get.ts +2 -2
- package/src/routes/management/http/sessions.get.ts +2 -2
- package/src/routes/management/http/static.get.ts +3 -3
- package/src/routes/webkit/tests/websocket.spec.ts +2 -3
- package/src/routes/webkit/ws/playwright.ts +3 -3
- package/src/server.ts +14 -16
- package/src/shared/browser.ws.ts +4 -2
- package/src/shared/chromium.playwright.ws.ts +3 -3
- package/src/shared/chromium.ws.ts +4 -2
- package/src/shared/content.http.ts +3 -3
- package/src/shared/download.http.ts +4 -3
- package/src/shared/function.http.ts +3 -3
- package/src/shared/json-list.http.ts +2 -2
- package/src/shared/json-new.http.ts +2 -2
- package/src/shared/json-protocol.http.ts +2 -6
- package/src/shared/json-version.http.ts +2 -6
- package/src/shared/page.ws.ts +4 -2
- package/src/shared/pdf.http.ts +3 -3
- package/src/shared/performance.http.ts +3 -3
- package/src/shared/scrape.http.ts +3 -3
- package/src/shared/screenshot.http.ts +3 -3
- package/src/shared/utils/function/client.ts +3 -1
- package/src/shim.ts +2 -2
- package/src/token.ts +7 -7
- package/src/types.ts +8 -8
- package/src/utils.ts +1 -1
- package/src/webhooks.ts +4 -4
- package/static/docs/swagger.json +1 -1
- package/static/docs/swagger.min.json +1 -1
- package/static/function/client.js +3 -1
- package/static/function/index.html +3 -1
|
@@ -21,67 +21,69 @@ export default class ChromiumDownloadPostRoute extends BrowserHTTPRoute {
|
|
|
21
21
|
method = Methods.post;
|
|
22
22
|
path = [HTTPRoutes.download, HTTPRoutes.chromiumDownload];
|
|
23
23
|
tags = [APITags.browserAPI];
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
});
|
|
35
|
-
if (!response) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const { page } = response;
|
|
39
|
-
logger.info(`Download function has returned, finding downloads...`);
|
|
40
|
-
async function checkIfDownloadComplete() {
|
|
41
|
-
if (res.headersSent) {
|
|
42
|
-
logger.trace(`Request headers have been sent, terminating download watch.`);
|
|
24
|
+
async handler(req, res, logger, browser) {
|
|
25
|
+
return new Promise(async (resolve, reject) => {
|
|
26
|
+
const config = this.config();
|
|
27
|
+
const downloadPath = path.join(await config.getDownloadsDir(), `.browserless.download.${id()}`);
|
|
28
|
+
logger.info(`Generating a download directory at "${downloadPath}"`);
|
|
29
|
+
await mkdir(downloadPath);
|
|
30
|
+
const handler = functionHandler(config, logger, { downloadPath });
|
|
31
|
+
const response = await handler(req, browser).catch((e) => {
|
|
32
|
+
logger.error(`Error running download code handler: "${e}"`);
|
|
33
|
+
reject(e);
|
|
43
34
|
return null;
|
|
35
|
+
});
|
|
36
|
+
if (!response) {
|
|
37
|
+
return;
|
|
44
38
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
const { page } = response;
|
|
40
|
+
logger.info(`Download function has returned, finding downloads...`);
|
|
41
|
+
async function checkIfDownloadComplete() {
|
|
42
|
+
if (res.headersSent) {
|
|
43
|
+
logger.trace(`Request headers have been sent, terminating download watch.`);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const [fileName] = await readdir(downloadPath);
|
|
47
|
+
if (!fileName || fileName.endsWith('.crdownload')) {
|
|
48
|
+
await sleep(500);
|
|
49
|
+
return checkIfDownloadComplete();
|
|
50
|
+
}
|
|
51
|
+
logger.info(`All files have finished downloading`);
|
|
52
|
+
return path.join(downloadPath, fileName);
|
|
49
53
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
logger.error(`Error cleaning up downloaded files: "${err}" at "${filePath}"`);
|
|
64
|
-
}));
|
|
65
|
-
if (res.headersSent || !filePath) {
|
|
66
|
-
rmDownload();
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
const contentType = mimeTypes.get(path.extname(filePath));
|
|
70
|
-
if (contentType) {
|
|
71
|
-
res.setHeader('Content-Type', contentType);
|
|
72
|
-
}
|
|
73
|
-
return createReadStream(filePath)
|
|
74
|
-
.on('error', (error) => {
|
|
75
|
-
if (error) {
|
|
54
|
+
const filePath = await checkIfDownloadComplete();
|
|
55
|
+
logger.info(`Closing pages.`);
|
|
56
|
+
page.close();
|
|
57
|
+
page.removeAllListeners();
|
|
58
|
+
const rmDownload = once(() => filePath &&
|
|
59
|
+
deleteAsync(filePath, { force: true })
|
|
60
|
+
.then(() => {
|
|
61
|
+
logger.info(`Successfully deleted downloads from disk at "${filePath}"`);
|
|
62
|
+
})
|
|
63
|
+
.catch((err) => {
|
|
64
|
+
logger.error(`Error cleaning up downloaded files: "${err}" at "${filePath}"`);
|
|
65
|
+
}));
|
|
66
|
+
if (res.headersSent || !filePath) {
|
|
76
67
|
rmDownload();
|
|
77
|
-
return
|
|
68
|
+
return;
|
|
78
69
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
70
|
+
const contentType = mimeTypes.get(path.extname(filePath));
|
|
71
|
+
if (contentType) {
|
|
72
|
+
res.setHeader('Content-Type', contentType);
|
|
73
|
+
}
|
|
74
|
+
return createReadStream(filePath)
|
|
75
|
+
.on('error', (error) => {
|
|
76
|
+
if (error) {
|
|
77
|
+
rmDownload();
|
|
78
|
+
return reject(new NotFound(`Couldn't locate or send downloads in "${downloadPath}"`));
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
.on('end', () => {
|
|
82
|
+
logger.info(`Downloads successfully sent`);
|
|
83
|
+
rmDownload();
|
|
84
|
+
return resolve();
|
|
85
|
+
})
|
|
86
|
+
.pipe(res);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
87
89
|
}
|
|
@@ -27,6 +27,6 @@ export default class ChromiumFunctionPostRoute extends BrowserHTTPRoute {
|
|
|
27
27
|
method: Methods;
|
|
28
28
|
path: HTTPRoutes[];
|
|
29
29
|
tags: APITags[];
|
|
30
|
-
handler
|
|
30
|
+
handler(req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance): Promise<void>;
|
|
31
31
|
}
|
|
32
32
|
export {};
|
|
@@ -18,7 +18,7 @@ export default class ChromiumFunctionPostRoute extends BrowserHTTPRoute {
|
|
|
18
18
|
method = Methods.post;
|
|
19
19
|
path = [HTTPRoutes.function, HTTPRoutes.chromiumFunction];
|
|
20
20
|
tags = [APITags.browserAPI];
|
|
21
|
-
|
|
21
|
+
async handler(req, res, logger, browser) {
|
|
22
22
|
const config = this.config();
|
|
23
23
|
const handler = functionHandler(config, logger);
|
|
24
24
|
const { contentType, payload, page } = await handler(req, browser);
|
|
@@ -44,5 +44,5 @@ export default class ChromiumFunctionPostRoute extends BrowserHTTPRoute {
|
|
|
44
44
|
writeResponse(res, 200, payload, contentType);
|
|
45
45
|
}
|
|
46
46
|
return;
|
|
47
|
-
}
|
|
47
|
+
}
|
|
48
48
|
}
|
|
@@ -14,8 +14,8 @@ export default class ChromiumJSONListGetRoute extends HTTPRoute {
|
|
|
14
14
|
method = Methods.get;
|
|
15
15
|
path = HTTPRoutes.jsonList;
|
|
16
16
|
tags = [APITags.browserAPI];
|
|
17
|
-
|
|
17
|
+
async handler(_req, res) {
|
|
18
18
|
const browserManage = this.browserManager();
|
|
19
19
|
return jsonResponse(res, 200, await browserManage.getJSONList());
|
|
20
|
-
}
|
|
20
|
+
}
|
|
21
21
|
}
|
|
@@ -15,7 +15,7 @@ export default class ChromiumJSONNewPutRoute extends HTTPRoute {
|
|
|
15
15
|
method = Methods.put;
|
|
16
16
|
path = HTTPRoutes.jsonNew;
|
|
17
17
|
tags = [APITags.browserAPI];
|
|
18
|
-
|
|
18
|
+
async handler(_req, res) {
|
|
19
19
|
const config = this.config();
|
|
20
20
|
const externalAddress = config.getExternalWebSocketAddress();
|
|
21
21
|
const id = pageID();
|
|
@@ -31,5 +31,5 @@ export default class ChromiumJSONNewPutRoute extends HTTPRoute {
|
|
|
31
31
|
url: 'about:blank',
|
|
32
32
|
webSocketDebuggerUrl: href,
|
|
33
33
|
});
|
|
34
|
-
}
|
|
34
|
+
}
|
|
35
35
|
}
|
|
@@ -12,5 +12,5 @@ export default class ChromiumJSONProtocolGetRoute extends HTTPRoute {
|
|
|
12
12
|
method: Methods;
|
|
13
13
|
path: HTTPRoutes;
|
|
14
14
|
tags: APITags[];
|
|
15
|
-
handler
|
|
15
|
+
handler(_req: Request, res: Response, logger: Logger): Promise<void>;
|
|
16
16
|
}
|
|
@@ -11,11 +11,11 @@ export default class ChromiumJSONProtocolGetRoute extends HTTPRoute {
|
|
|
11
11
|
method = Methods.get;
|
|
12
12
|
path = HTTPRoutes.jsonProtocol;
|
|
13
13
|
tags = [APITags.browserAPI];
|
|
14
|
-
|
|
14
|
+
async handler(_req, res, logger) {
|
|
15
15
|
const browserManager = this.browserManager();
|
|
16
16
|
if (!this.cachedProtocol) {
|
|
17
17
|
this.cachedProtocol = await browserManager.getProtocolJSON(logger);
|
|
18
18
|
}
|
|
19
19
|
return jsonResponse(res, 200, this.cachedProtocol);
|
|
20
|
-
}
|
|
20
|
+
}
|
|
21
21
|
}
|
|
@@ -12,5 +12,5 @@ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
|
|
|
12
12
|
method: Methods;
|
|
13
13
|
path: HTTPRoutes;
|
|
14
14
|
tags: APITags[];
|
|
15
|
-
handler
|
|
15
|
+
handler(req: Request, res: Response, logger: Logger): Promise<void>;
|
|
16
16
|
}
|
|
@@ -11,7 +11,7 @@ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
|
|
|
11
11
|
method = Methods.get;
|
|
12
12
|
path = HTTPRoutes.jsonVersion;
|
|
13
13
|
tags = [APITags.browserAPI];
|
|
14
|
-
|
|
14
|
+
async handler(req, res, logger) {
|
|
15
15
|
const baseUrl = req.parsed.host;
|
|
16
16
|
const protocol = req.parsed.protocol.includes('s') ? 'wss' : 'ws';
|
|
17
17
|
try {
|
|
@@ -27,5 +27,5 @@ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
|
|
|
27
27
|
catch (err) {
|
|
28
28
|
return writeResponse(res, 500, 'There was an error handling your request', contentTypes.text);
|
|
29
29
|
}
|
|
30
|
-
}
|
|
30
|
+
}
|
|
31
31
|
}
|
|
@@ -13,5 +13,5 @@ export default class ChromiumPageWebSocketRoute extends BrowserWebsocketRoute {
|
|
|
13
13
|
description: string;
|
|
14
14
|
path: WebsocketRoutes;
|
|
15
15
|
tags: APITags[];
|
|
16
|
-
handler
|
|
16
|
+
handler(req: Request, socket: Duplex, head: Buffer, _logger: Logger, browser: ChromiumCDP): Promise<void>;
|
|
17
17
|
}
|
package/build/shared/page.ws.js
CHANGED
|
@@ -10,5 +10,7 @@ export default class ChromiumPageWebSocketRoute extends BrowserWebsocketRoute {
|
|
|
10
10
|
or by finding the page's unique ID from your library of choice.`);
|
|
11
11
|
path = WebsocketRoutes.page;
|
|
12
12
|
tags = [APITags.browserWS];
|
|
13
|
-
|
|
13
|
+
async handler(req, socket, head, _logger, browser) {
|
|
14
|
+
return browser.proxyPageWebSocket(req, socket, head);
|
|
15
|
+
}
|
|
14
16
|
}
|
|
@@ -43,5 +43,5 @@ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
|
|
|
43
43
|
method: Methods;
|
|
44
44
|
path: HTTPRoutes[];
|
|
45
45
|
tags: APITags[];
|
|
46
|
-
handler
|
|
46
|
+
handler(req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance): Promise<void>;
|
|
47
47
|
}
|
package/build/shared/pdf.http.js
CHANGED
|
@@ -16,7 +16,7 @@ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
|
|
|
16
16
|
method = Methods.post;
|
|
17
17
|
path = [HTTPRoutes.pdf, HTTPRoutes.chromiumPdf];
|
|
18
18
|
tags = [APITags.browserAPI];
|
|
19
|
-
|
|
19
|
+
async handler(req, res, logger, browser) {
|
|
20
20
|
logger.info('PDF API invoked with body:', req.body);
|
|
21
21
|
const contentType = !req.headers.accept || req.headers.accept?.includes('*')
|
|
22
22
|
? 'application/pdf'
|
|
@@ -114,5 +114,5 @@ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
|
|
|
114
114
|
await new Promise((r) => readStream.pipe(res).once('close', r));
|
|
115
115
|
page.close().catch(noop);
|
|
116
116
|
logger.info('PDF API request completed');
|
|
117
|
-
}
|
|
117
|
+
}
|
|
118
118
|
}
|
|
@@ -26,5 +26,5 @@ export default class PerformancePost extends BrowserHTTPRoute {
|
|
|
26
26
|
method: Methods;
|
|
27
27
|
path: HTTPRoutes[];
|
|
28
28
|
tags: APITags[];
|
|
29
|
-
handler
|
|
29
|
+
handler(req: Request, res: ServerResponse, _logger: Logger, browser: BrowserInstance): Promise<void>;
|
|
30
30
|
}
|
|
@@ -11,7 +11,7 @@ export default class PerformancePost extends BrowserHTTPRoute {
|
|
|
11
11
|
method = Methods.post;
|
|
12
12
|
path = [HTTPRoutes.performance, HTTPRoutes.chromiumPerformance];
|
|
13
13
|
tags = [APITags.browserAPI];
|
|
14
|
-
|
|
14
|
+
async handler(req, res, _logger, browser) {
|
|
15
15
|
const config = this.config();
|
|
16
16
|
const response = await main({
|
|
17
17
|
browser,
|
|
@@ -20,5 +20,5 @@ export default class PerformancePost extends BrowserHTTPRoute {
|
|
|
20
20
|
timeout: config.getTimeout(),
|
|
21
21
|
});
|
|
22
22
|
return jsonResponse(res, 200, response);
|
|
23
|
-
}
|
|
23
|
+
}
|
|
24
24
|
}
|
|
@@ -115,5 +115,5 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
|
|
|
115
115
|
method: Methods;
|
|
116
116
|
path: HTTPRoutes[];
|
|
117
117
|
tags: APITags[];
|
|
118
|
-
handler
|
|
118
|
+
handler(req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance): Promise<void>;
|
|
119
119
|
}
|
|
@@ -54,7 +54,7 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
|
|
|
54
54
|
method = Methods.post;
|
|
55
55
|
path = [HTTPRoutes.scrape, HTTPRoutes.chromiumScrape];
|
|
56
56
|
tags = [APITags.browserAPI];
|
|
57
|
-
|
|
57
|
+
async handler(req, res, logger, browser) {
|
|
58
58
|
logger.info('Scrape API invoked with body:', req.body);
|
|
59
59
|
const contentType = !req.headers.accept || req.headers.accept?.includes('*')
|
|
60
60
|
? contentTypes.html
|
|
@@ -202,5 +202,5 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
|
|
|
202
202
|
page.close().catch(noop);
|
|
203
203
|
logger.info('Scrape API request completed');
|
|
204
204
|
return jsonResponse(res, 200, response, false);
|
|
205
|
-
}
|
|
205
|
+
}
|
|
206
206
|
}
|
|
@@ -46,5 +46,5 @@ export default class ScreenshotPost extends BrowserHTTPRoute {
|
|
|
46
46
|
method: Methods;
|
|
47
47
|
path: HTTPRoutes[];
|
|
48
48
|
tags: APITags[];
|
|
49
|
-
handler
|
|
49
|
+
handler(req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance): Promise<void>;
|
|
50
50
|
}
|
|
@@ -15,7 +15,7 @@ export default class ScreenshotPost extends BrowserHTTPRoute {
|
|
|
15
15
|
method = Methods.post;
|
|
16
16
|
path = [HTTPRoutes.screenshot, HTTPRoutes.chromiumScreenshot];
|
|
17
17
|
tags = [APITags.browserAPI];
|
|
18
|
-
|
|
18
|
+
async handler(req, res, logger, browser) {
|
|
19
19
|
logger.info('Screenshot API invoked with body:', req.body);
|
|
20
20
|
const contentType = !req.headers.accept || req.headers.accept?.includes('*')
|
|
21
21
|
? 'image/png'
|
|
@@ -125,5 +125,5 @@ export default class ScreenshotPost extends BrowserHTTPRoute {
|
|
|
125
125
|
await new Promise((r) => readStream.pipe(res).once('close', r));
|
|
126
126
|
page.close().catch(noop);
|
|
127
127
|
logger.info('Screenshot API request completed');
|
|
128
|
-
}
|
|
128
|
+
}
|
|
129
129
|
}
|
|
@@ -3,7 +3,9 @@ import { _connectToCdpBrowser as connect } from 'puppeteer-core/lib/esm/puppetee
|
|
|
3
3
|
export class FunctionRunner {
|
|
4
4
|
browser;
|
|
5
5
|
page;
|
|
6
|
-
log
|
|
6
|
+
log() {
|
|
7
|
+
return console.log.bind(console);
|
|
8
|
+
}
|
|
7
9
|
async start(data) {
|
|
8
10
|
console.log(`/function.js: Got endpoint: "${data.browserWSEndpoint}"`);
|
|
9
11
|
const { browserWSEndpoint, code, context, options } = data;
|
package/build/shim.d.ts
CHANGED
package/build/shim.js
CHANGED
|
@@ -8,7 +8,7 @@ const shimParam = ['headless', 'stealth', 'ignoreDefaultArgs', 'slowMo'];
|
|
|
8
8
|
*
|
|
9
9
|
* @param req A parsed user requests
|
|
10
10
|
*/
|
|
11
|
-
export
|
|
11
|
+
export function shimLegacyRequests(url) {
|
|
12
12
|
const { searchParams } = url;
|
|
13
13
|
const params = [...searchParams];
|
|
14
14
|
const names = params.map(([k]) => k);
|
|
@@ -52,4 +52,4 @@ export const shimLegacyRequests = (url) => {
|
|
|
52
52
|
searchParams.set('launch', JSON.stringify(launchParams));
|
|
53
53
|
}
|
|
54
54
|
return url;
|
|
55
|
-
}
|
|
55
|
+
}
|
package/build/token.d.ts
CHANGED
|
@@ -4,14 +4,14 @@ import { EventEmitter } from 'events';
|
|
|
4
4
|
export declare class Token extends EventEmitter {
|
|
5
5
|
protected config: Config;
|
|
6
6
|
constructor(config: Config);
|
|
7
|
-
isAuthorized
|
|
7
|
+
isAuthorized(req: Request, route: BrowserHTTPRoute | BrowserWebsocketRoute | HTTPRoute | WebSocketRoute): Promise<boolean>;
|
|
8
8
|
/**
|
|
9
9
|
* Implement any browserless-core-specific shutdown logic here.
|
|
10
10
|
* Calls the empty-SDK stop method for downstream implementations.
|
|
11
11
|
*/
|
|
12
|
-
shutdown
|
|
12
|
+
shutdown(): Promise<void>;
|
|
13
13
|
/**
|
|
14
14
|
* Left blank for downstream SDK modules to optionally implement.
|
|
15
15
|
*/
|
|
16
|
-
stop
|
|
16
|
+
stop(): void;
|
|
17
17
|
}
|
package/build/token.js
CHANGED
|
@@ -6,7 +6,7 @@ export class Token extends EventEmitter {
|
|
|
6
6
|
super();
|
|
7
7
|
this.config = config;
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
async isAuthorized(req, route) {
|
|
10
10
|
const token = this.config.getToken();
|
|
11
11
|
if (token === null) {
|
|
12
12
|
return true;
|
|
@@ -19,16 +19,16 @@ export class Token extends EventEmitter {
|
|
|
19
19
|
return false;
|
|
20
20
|
}
|
|
21
21
|
return (Array.isArray(token) ? token : [token]).includes(requestToken);
|
|
22
|
-
}
|
|
22
|
+
}
|
|
23
23
|
/**
|
|
24
24
|
* Implement any browserless-core-specific shutdown logic here.
|
|
25
25
|
* Calls the empty-SDK stop method for downstream implementations.
|
|
26
26
|
*/
|
|
27
|
-
|
|
28
|
-
await this.stop();
|
|
29
|
-
}
|
|
27
|
+
async shutdown() {
|
|
28
|
+
return await this.stop();
|
|
29
|
+
}
|
|
30
30
|
/**
|
|
31
31
|
* Left blank for downstream SDK modules to optionally implement.
|
|
32
32
|
*/
|
|
33
|
-
stop
|
|
33
|
+
stop() { }
|
|
34
34
|
}
|
package/build/types.d.ts
CHANGED
|
@@ -182,7 +182,7 @@ export declare abstract class HTTPRoute extends BasicHTTPRoute {
|
|
|
182
182
|
/**
|
|
183
183
|
* Handles an inbound HTTP request, and supplies the Request and Response objects from node's HTTP request event
|
|
184
184
|
*/
|
|
185
|
-
abstract handler
|
|
185
|
+
abstract handler(req: Request, res: http.ServerResponse, logger: Logger): Promise<unknown>;
|
|
186
186
|
}
|
|
187
187
|
/**
|
|
188
188
|
* A HTTP-based route, with a handler, that can fulfill requests but
|
|
@@ -196,7 +196,7 @@ export declare abstract class BrowserHTTPRoute extends BasicHTTPRoute {
|
|
|
196
196
|
* Handles an inbound HTTP request with a 3rd param of the predefined
|
|
197
197
|
* browser used for the route -- only Chrome CDP is support currently.
|
|
198
198
|
*/
|
|
199
|
-
abstract handler
|
|
199
|
+
abstract handler(req: Request, res: http.ServerResponse, logger: Logger, browser: BrowserInstance): Promise<unknown>;
|
|
200
200
|
/**
|
|
201
201
|
* An optional function to automatically set up or handle new page
|
|
202
202
|
* creation. Useful for injecting behaviors or other functionality.
|
|
@@ -212,7 +212,7 @@ export declare abstract class WebSocketRoute extends Route {
|
|
|
212
212
|
/**
|
|
213
213
|
* Handles an inbound Websocket request, and handles the connection
|
|
214
214
|
*/
|
|
215
|
-
abstract handler
|
|
215
|
+
abstract handler(req: Request, socket: stream.Duplex, head: Buffer, logger: Logger): Promise<unknown>;
|
|
216
216
|
}
|
|
217
217
|
/**
|
|
218
218
|
* A WebSocket-based route, with a handler, that can fulfill requests
|
|
@@ -274,12 +274,12 @@ export interface BrowserServerOptions {
|
|
|
274
274
|
tracesDir?: string;
|
|
275
275
|
}
|
|
276
276
|
export interface BrowserlessSession {
|
|
277
|
-
id: string
|
|
277
|
+
id: string;
|
|
278
278
|
initialConnectURL: string;
|
|
279
279
|
isTempDataDir: boolean;
|
|
280
280
|
launchOptions: CDPLaunchOptions | BrowserServerOptions;
|
|
281
281
|
numbConnected: number;
|
|
282
|
-
resolver
|
|
282
|
+
resolver(val: unknown): void;
|
|
283
283
|
routePath: string | string[];
|
|
284
284
|
startedOn: number;
|
|
285
285
|
ttl: number;
|
package/build/webhooks.d.ts
CHANGED
|
@@ -14,9 +14,9 @@ export declare class WebHooks extends EventEmitter {
|
|
|
14
14
|
* Implement any browserless-core-specific shutdown logic here.
|
|
15
15
|
* Calls the empty-SDK stop method for downstream implementations.
|
|
16
16
|
*/
|
|
17
|
-
shutdown
|
|
17
|
+
shutdown(): Promise<void>;
|
|
18
18
|
/**
|
|
19
19
|
* Left blank for downstream SDK modules to optionally implement.
|
|
20
20
|
*/
|
|
21
|
-
stop
|
|
21
|
+
stop(): void;
|
|
22
22
|
}
|
package/build/webhooks.js
CHANGED
|
@@ -46,11 +46,11 @@ export class WebHooks extends EventEmitter {
|
|
|
46
46
|
* Implement any browserless-core-specific shutdown logic here.
|
|
47
47
|
* Calls the empty-SDK stop method for downstream implementations.
|
|
48
48
|
*/
|
|
49
|
-
|
|
50
|
-
await this.stop();
|
|
51
|
-
}
|
|
49
|
+
async shutdown() {
|
|
50
|
+
return await this.stop();
|
|
51
|
+
}
|
|
52
52
|
/**
|
|
53
53
|
* Left blank for downstream SDK modules to optionally implement.
|
|
54
54
|
*/
|
|
55
|
-
stop
|
|
55
|
+
stop() { }
|
|
56
56
|
}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"description": "appears as tab name in dashboard"
|
|
57
57
|
},
|
|
58
58
|
"supportPageName": {
|
|
59
|
-
"message": "
|
|
59
|
+
"message": "Soportea",
|
|
60
60
|
"description": "appears as tab name in dashboard"
|
|
61
61
|
},
|
|
62
62
|
"assetViewerPageName": {
|
|
@@ -484,11 +484,11 @@
|
|
|
484
484
|
"description": "Filter lists section name"
|
|
485
485
|
},
|
|
486
486
|
"3pGroupSocial": {
|
|
487
|
-
"message": "
|
|
487
|
+
"message": "Widgets Sozialak",
|
|
488
488
|
"description": "Filter lists section name"
|
|
489
489
|
},
|
|
490
490
|
"3pGroupCookies": {
|
|
491
|
-
"message": "Cookie
|
|
491
|
+
"message": "Cookie oharrak",
|
|
492
492
|
"description": "Filter lists section name"
|
|
493
493
|
},
|
|
494
494
|
"3pGroupAnnoyances": {
|
|
@@ -544,7 +544,7 @@
|
|
|
544
544
|
"description": "Label for the checkbox use to enable/disable 'My filters' list"
|
|
545
545
|
},
|
|
546
546
|
"1pTrustMyFiltersLabel": {
|
|
547
|
-
"message": "
|
|
547
|
+
"message": "Konfiantza behar duten iragazki pertsonalizatuak baimendu",
|
|
548
548
|
"description": "Label for the checkbox use to trust the content of 'My filters' list"
|
|
549
549
|
},
|
|
550
550
|
"1pImport": {
|
|
@@ -548,7 +548,7 @@
|
|
|
548
548
|
"description": "Label for the checkbox use to trust the content of 'My filters' list"
|
|
549
549
|
},
|
|
550
550
|
"1pImport": {
|
|
551
|
-
"message": "इम्पोर्ट करें और
|
|
551
|
+
"message": "इम्पोर्ट करें और जोड़ें...",
|
|
552
552
|
"description": "Button in the 'My filters' pane"
|
|
553
553
|
},
|
|
554
554
|
"1pExport": {
|
|
@@ -612,7 +612,7 @@
|
|
|
612
612
|
"description": "English: dynamic rule syntax and full documentation."
|
|
613
613
|
},
|
|
614
614
|
"rulesSort": {
|
|
615
|
-
"message": "क्रम में
|
|
615
|
+
"message": "क्रम में लगाये:",
|
|
616
616
|
"description": "English: label for sort option."
|
|
617
617
|
},
|
|
618
618
|
"rulesSortByType": {
|
|
@@ -620,7 +620,7 @@
|
|
|
620
620
|
"description": "English: a sort option for list of rules."
|
|
621
621
|
},
|
|
622
622
|
"rulesSortBySource": {
|
|
623
|
-
"message": "
|
|
623
|
+
"message": "मूल",
|
|
624
624
|
"description": "English: a sort option for list of rules."
|
|
625
625
|
},
|
|
626
626
|
"rulesSortByDestination": {
|
|
@@ -632,11 +632,11 @@
|
|
|
632
632
|
"description": "A concise description of the 'Trusted sites' pane."
|
|
633
633
|
},
|
|
634
634
|
"whitelistImport": {
|
|
635
|
-
"message": "इम्पोर्ट करें और
|
|
635
|
+
"message": "इम्पोर्ट करें और जोड़ें...",
|
|
636
636
|
"description": "Button in the 'Trusted sites' pane"
|
|
637
637
|
},
|
|
638
638
|
"whitelistExport": {
|
|
639
|
-
"message": "निर्यात
|
|
639
|
+
"message": "निर्यात करें...",
|
|
640
640
|
"description": "Button in the 'Trusted sites' pane"
|
|
641
641
|
},
|
|
642
642
|
"whitelistExportFilename": {
|