@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
package/src/server.ts
CHANGED
|
@@ -61,30 +61,28 @@ export class HTTPServer extends EventEmitter {
|
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
protected onHTTPUnauthorized
|
|
64
|
+
protected onHTTPUnauthorized(_req: Request, res: Response) {
|
|
65
65
|
this.logger.error(
|
|
66
66
|
`HTTP request is not properly authorized, responding with 401`,
|
|
67
67
|
);
|
|
68
68
|
this.metrics.addUnauthorized();
|
|
69
69
|
return writeResponse(res, 401, 'Bad or missing authentication.');
|
|
70
|
-
}
|
|
70
|
+
}
|
|
71
71
|
|
|
72
|
-
protected onWebsocketUnauthorized
|
|
73
|
-
_req: Request,
|
|
74
|
-
socket: stream.Duplex,
|
|
75
|
-
) => {
|
|
72
|
+
protected onWebsocketUnauthorized(_req: Request, socket: stream.Duplex) {
|
|
76
73
|
this.logger.error(
|
|
77
74
|
`Websocket request is not properly authorized, responding with 401`,
|
|
78
75
|
);
|
|
79
76
|
this.metrics.addUnauthorized();
|
|
80
77
|
return writeResponse(socket, 401, 'Bad or missing authentication.');
|
|
81
|
-
}
|
|
78
|
+
}
|
|
82
79
|
|
|
83
80
|
public async start(): Promise<void> {
|
|
84
81
|
this.logger.info(`HTTP Server is starting`);
|
|
85
82
|
|
|
86
|
-
this.server.on('request', this.handleRequest);
|
|
87
|
-
this.server.on('upgrade', this.handleWebSocket);
|
|
83
|
+
this.server.on('request', this.handleRequest.bind(this));
|
|
84
|
+
this.server.on('upgrade', this.handleWebSocket.bind(this));
|
|
85
|
+
|
|
88
86
|
const listenMessage = [
|
|
89
87
|
`HTTP Server is listening on ${this.config.getServerAddress()}`,
|
|
90
88
|
`Use ${this.config.getExternalAddress()} for API and connect calls`,
|
|
@@ -105,10 +103,10 @@ export class HTTPServer extends EventEmitter {
|
|
|
105
103
|
});
|
|
106
104
|
}
|
|
107
105
|
|
|
108
|
-
protected
|
|
106
|
+
protected async handleRequest(
|
|
109
107
|
request: http.IncomingMessage,
|
|
110
108
|
res: http.ServerResponse,
|
|
111
|
-
)
|
|
109
|
+
) {
|
|
112
110
|
this.logger.trace(
|
|
113
111
|
`Handling inbound HTTP request on "${request.method}: ${request.url}"`,
|
|
114
112
|
);
|
|
@@ -299,13 +297,13 @@ export class HTTPServer extends EventEmitter {
|
|
|
299
297
|
|
|
300
298
|
return writeResponse(res, 500, e.toString());
|
|
301
299
|
});
|
|
302
|
-
}
|
|
300
|
+
}
|
|
303
301
|
|
|
304
|
-
protected
|
|
302
|
+
protected async handleWebSocket(
|
|
305
303
|
request: http.IncomingMessage,
|
|
306
304
|
socket: stream.Duplex,
|
|
307
305
|
head: Buffer,
|
|
308
|
-
)
|
|
306
|
+
) {
|
|
309
307
|
this.logger.trace(`Handling inbound WebSocket request on "${request.url}"`);
|
|
310
308
|
|
|
311
309
|
const req = request as Request;
|
|
@@ -414,7 +412,7 @@ export class HTTPServer extends EventEmitter {
|
|
|
414
412
|
`No matching WebSocket route handler for "${req.parsed.href}"`,
|
|
415
413
|
);
|
|
416
414
|
return writeResponse(socket, 404, 'Not Found');
|
|
417
|
-
}
|
|
415
|
+
}
|
|
418
416
|
|
|
419
417
|
public async shutdown(): Promise<void> {
|
|
420
418
|
this.logger.info(`HTTP Server is shutting down`);
|
|
@@ -429,5 +427,5 @@ export class HTTPServer extends EventEmitter {
|
|
|
429
427
|
/**
|
|
430
428
|
* Left blank for downstream SDK modules to optionally implement.
|
|
431
429
|
*/
|
|
432
|
-
public stop
|
|
430
|
+
public stop() {}
|
|
433
431
|
}
|
package/src/shared/browser.ws.ts
CHANGED
|
@@ -28,11 +28,13 @@ export default class ChromiumBrowserWebSocketRoute extends BrowserWebsocketRoute
|
|
|
28
28
|
);
|
|
29
29
|
path = WebsocketRoutes.browser;
|
|
30
30
|
tags = [APITags.browserWS];
|
|
31
|
-
|
|
31
|
+
async handler(
|
|
32
32
|
req: Request,
|
|
33
33
|
socket: Duplex,
|
|
34
34
|
head: Buffer,
|
|
35
35
|
_logger: Logger,
|
|
36
36
|
browser: ChromiumCDP,
|
|
37
|
-
): Promise<void>
|
|
37
|
+
): Promise<void> {
|
|
38
|
+
return browser.proxyWebSocket(req, socket, head);
|
|
39
|
+
}
|
|
38
40
|
}
|
|
@@ -27,13 +27,13 @@ export default class ChromiumPlaywrightWebSocketRoute extends BrowserWebsocketRo
|
|
|
27
27
|
WebsocketRoutes.chromiumPlaywright,
|
|
28
28
|
];
|
|
29
29
|
tags = [APITags.browserWS];
|
|
30
|
-
|
|
30
|
+
async handler(
|
|
31
31
|
req: Request,
|
|
32
32
|
socket: Duplex,
|
|
33
33
|
head: Buffer,
|
|
34
34
|
_logger: Logger,
|
|
35
35
|
browser: ChromiumPlaywright,
|
|
36
|
-
): Promise<void>
|
|
36
|
+
): Promise<void> {
|
|
37
37
|
const isPlaywright = req.headers['user-agent']
|
|
38
38
|
?.toLowerCase()
|
|
39
39
|
.includes('playwright');
|
|
@@ -45,5 +45,5 @@ export default class ChromiumPlaywrightWebSocketRoute extends BrowserWebsocketRo
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
return browser.proxyWebSocket(req, socket, head);
|
|
48
|
-
}
|
|
48
|
+
}
|
|
49
49
|
}
|
|
@@ -23,11 +23,13 @@ export default class ChromiumCDPWebSocketRoute extends BrowserWebsocketRoute {
|
|
|
23
23
|
description = `Launch and connect to Chromium with a library like puppeteer or others that work over chrome-devtools-protocol.`;
|
|
24
24
|
path = [WebsocketRoutes['/'], WebsocketRoutes.chromium];
|
|
25
25
|
tags = [APITags.browserWS];
|
|
26
|
-
|
|
26
|
+
async handler(
|
|
27
27
|
req: Request,
|
|
28
28
|
socket: Duplex,
|
|
29
29
|
head: Buffer,
|
|
30
30
|
_logger: Logger,
|
|
31
31
|
browser: ChromiumCDP,
|
|
32
|
-
): Promise<void>
|
|
32
|
+
): Promise<void> {
|
|
33
|
+
return browser.proxyWebSocket(req, socket, head);
|
|
34
|
+
}
|
|
33
35
|
}
|
|
@@ -75,12 +75,12 @@ export default class ChromiumContentPostRoute extends BrowserHTTPRoute {
|
|
|
75
75
|
method = Methods.post;
|
|
76
76
|
path = [HTTPRoutes.content, HTTPRoutes.chromiumContent];
|
|
77
77
|
tags = [APITags.browserAPI];
|
|
78
|
-
|
|
78
|
+
async handler(
|
|
79
79
|
req: Request,
|
|
80
80
|
res: ServerResponse,
|
|
81
81
|
logger: Logger,
|
|
82
82
|
browser: BrowserInstance,
|
|
83
|
-
): Promise<void>
|
|
83
|
+
): Promise<void> {
|
|
84
84
|
logger.info('Content API invoked with body:', req.body);
|
|
85
85
|
const contentType =
|
|
86
86
|
!req.headers.accept || req.headers.accept?.includes('*')
|
|
@@ -238,5 +238,5 @@ export default class ChromiumContentPostRoute extends BrowserHTTPRoute {
|
|
|
238
238
|
logger.info('Content API request completed');
|
|
239
239
|
|
|
240
240
|
return writeResponse(res, 200, markup, contentTypes.html);
|
|
241
|
-
}
|
|
241
|
+
}
|
|
242
242
|
}
|
|
@@ -59,13 +59,13 @@ export default class ChromiumDownloadPostRoute extends BrowserHTTPRoute {
|
|
|
59
59
|
method = Methods.post;
|
|
60
60
|
path = [HTTPRoutes.download, HTTPRoutes.chromiumDownload];
|
|
61
61
|
tags = [APITags.browserAPI];
|
|
62
|
-
|
|
62
|
+
async handler(
|
|
63
63
|
req: Request,
|
|
64
64
|
res: ServerResponse,
|
|
65
65
|
logger: Logger,
|
|
66
66
|
browser: BrowserInstance,
|
|
67
|
-
): Promise<void>
|
|
68
|
-
new Promise(async (resolve, reject) => {
|
|
67
|
+
): Promise<void> {
|
|
68
|
+
return new Promise(async (resolve, reject) => {
|
|
69
69
|
const config = this.config();
|
|
70
70
|
const downloadPath = path.join(
|
|
71
71
|
await config.getDownloadsDir(),
|
|
@@ -153,4 +153,5 @@ export default class ChromiumDownloadPostRoute extends BrowserHTTPRoute {
|
|
|
153
153
|
})
|
|
154
154
|
.pipe(res);
|
|
155
155
|
});
|
|
156
|
+
}
|
|
156
157
|
}
|
|
@@ -55,12 +55,12 @@ export default class ChromiumFunctionPostRoute extends BrowserHTTPRoute {
|
|
|
55
55
|
method = Methods.post;
|
|
56
56
|
path = [HTTPRoutes.function, HTTPRoutes.chromiumFunction];
|
|
57
57
|
tags = [APITags.browserAPI];
|
|
58
|
-
|
|
58
|
+
async handler(
|
|
59
59
|
req: Request,
|
|
60
60
|
res: ServerResponse,
|
|
61
61
|
logger: Logger,
|
|
62
62
|
browser: BrowserInstance,
|
|
63
|
-
): Promise<void>
|
|
63
|
+
): Promise<void> {
|
|
64
64
|
const config = this.config();
|
|
65
65
|
const handler = functionHandler(config, logger);
|
|
66
66
|
const { contentType, payload, page } = await handler(req, browser);
|
|
@@ -88,5 +88,5 @@ export default class ChromiumFunctionPostRoute extends BrowserHTTPRoute {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
return;
|
|
91
|
-
}
|
|
91
|
+
}
|
|
92
92
|
}
|
|
@@ -30,8 +30,8 @@ export default class ChromiumJSONListGetRoute extends HTTPRoute {
|
|
|
30
30
|
path = HTTPRoutes.jsonList;
|
|
31
31
|
tags = [APITags.browserAPI];
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
async handler(_req: Request, res: Response): Promise<void> {
|
|
34
34
|
const browserManage = this.browserManager();
|
|
35
35
|
return jsonResponse(res, 200, await browserManage.getJSONList());
|
|
36
|
-
}
|
|
36
|
+
}
|
|
37
37
|
}
|
|
@@ -44,7 +44,7 @@ export default class ChromiumJSONNewPutRoute extends HTTPRoute {
|
|
|
44
44
|
path = HTTPRoutes.jsonNew;
|
|
45
45
|
tags = [APITags.browserAPI];
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
async handler(_req: Request, res: Response): Promise<void> {
|
|
48
48
|
const config = this.config();
|
|
49
49
|
const externalAddress = config.getExternalWebSocketAddress();
|
|
50
50
|
const id = pageID();
|
|
@@ -64,5 +64,5 @@ export default class ChromiumJSONNewPutRoute extends HTTPRoute {
|
|
|
64
64
|
url: 'about:blank',
|
|
65
65
|
webSocketDebuggerUrl: href,
|
|
66
66
|
});
|
|
67
|
-
}
|
|
67
|
+
}
|
|
68
68
|
}
|
|
@@ -27,11 +27,7 @@ export default class ChromiumJSONProtocolGetRoute extends HTTPRoute {
|
|
|
27
27
|
path = HTTPRoutes.jsonProtocol;
|
|
28
28
|
tags = [APITags.browserAPI];
|
|
29
29
|
|
|
30
|
-
handler
|
|
31
|
-
_req: Request,
|
|
32
|
-
res: Response,
|
|
33
|
-
logger: Logger,
|
|
34
|
-
): Promise<void> => {
|
|
30
|
+
async handler(_req: Request, res: Response, logger: Logger): Promise<void> {
|
|
35
31
|
const browserManager = this.browserManager();
|
|
36
32
|
|
|
37
33
|
if (!this.cachedProtocol) {
|
|
@@ -39,5 +35,5 @@ export default class ChromiumJSONProtocolGetRoute extends HTTPRoute {
|
|
|
39
35
|
}
|
|
40
36
|
|
|
41
37
|
return jsonResponse(res, 200, this.cachedProtocol);
|
|
42
|
-
}
|
|
38
|
+
}
|
|
43
39
|
}
|
|
@@ -31,11 +31,7 @@ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
|
|
|
31
31
|
method = Methods.get;
|
|
32
32
|
path = HTTPRoutes.jsonVersion;
|
|
33
33
|
tags = [APITags.browserAPI];
|
|
34
|
-
handler
|
|
35
|
-
req: Request,
|
|
36
|
-
res: Response,
|
|
37
|
-
logger: Logger,
|
|
38
|
-
): Promise<void> => {
|
|
34
|
+
async handler(req: Request, res: Response, logger: Logger): Promise<void> {
|
|
39
35
|
const baseUrl = req.parsed.host;
|
|
40
36
|
const protocol = req.parsed.protocol.includes('s') ? 'wss' : 'ws';
|
|
41
37
|
|
|
@@ -56,5 +52,5 @@ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
|
|
|
56
52
|
contentTypes.text,
|
|
57
53
|
);
|
|
58
54
|
}
|
|
59
|
-
}
|
|
55
|
+
}
|
|
60
56
|
}
|
package/src/shared/page.ws.ts
CHANGED
|
@@ -29,11 +29,13 @@ export default class ChromiumPageWebSocketRoute extends BrowserWebsocketRoute {
|
|
|
29
29
|
);
|
|
30
30
|
path = WebsocketRoutes.page;
|
|
31
31
|
tags = [APITags.browserWS];
|
|
32
|
-
|
|
32
|
+
async handler(
|
|
33
33
|
req: Request,
|
|
34
34
|
socket: Duplex,
|
|
35
35
|
head: Buffer,
|
|
36
36
|
_logger: Logger,
|
|
37
37
|
browser: ChromiumCDP,
|
|
38
|
-
): Promise<void>
|
|
38
|
+
): Promise<void> {
|
|
39
|
+
return browser.proxyPageWebSocket(req, socket, head);
|
|
40
|
+
}
|
|
39
41
|
}
|
package/src/shared/pdf.http.ts
CHANGED
|
@@ -80,12 +80,12 @@ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
|
|
|
80
80
|
method = Methods.post;
|
|
81
81
|
path = [HTTPRoutes.pdf, HTTPRoutes.chromiumPdf];
|
|
82
82
|
tags = [APITags.browserAPI];
|
|
83
|
-
|
|
83
|
+
async handler(
|
|
84
84
|
req: Request,
|
|
85
85
|
res: ServerResponse,
|
|
86
86
|
logger: Logger,
|
|
87
87
|
browser: BrowserInstance,
|
|
88
|
-
): Promise<void>
|
|
88
|
+
): Promise<void> {
|
|
89
89
|
logger.info('PDF API invoked with body:', req.body);
|
|
90
90
|
const contentType =
|
|
91
91
|
!req.headers.accept || req.headers.accept?.includes('*')
|
|
@@ -246,5 +246,5 @@ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
|
|
|
246
246
|
page.close().catch(noop);
|
|
247
247
|
|
|
248
248
|
logger.info('PDF API request completed');
|
|
249
|
-
}
|
|
249
|
+
}
|
|
250
250
|
}
|
|
@@ -45,12 +45,12 @@ export default class PerformancePost extends BrowserHTTPRoute {
|
|
|
45
45
|
method = Methods.post;
|
|
46
46
|
path = [HTTPRoutes.performance, HTTPRoutes.chromiumPerformance];
|
|
47
47
|
tags = [APITags.browserAPI];
|
|
48
|
-
|
|
48
|
+
async handler(
|
|
49
49
|
req: Request,
|
|
50
50
|
res: ServerResponse,
|
|
51
51
|
_logger: Logger,
|
|
52
52
|
browser: BrowserInstance,
|
|
53
|
-
): Promise<void>
|
|
53
|
+
): Promise<void> {
|
|
54
54
|
const config = this.config();
|
|
55
55
|
const response = await main({
|
|
56
56
|
browser,
|
|
@@ -60,5 +60,5 @@ export default class PerformancePost extends BrowserHTTPRoute {
|
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
return jsonResponse(res, 200, response);
|
|
63
|
-
}
|
|
63
|
+
}
|
|
64
64
|
}
|
|
@@ -216,12 +216,12 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
|
|
|
216
216
|
method = Methods.post;
|
|
217
217
|
path = [HTTPRoutes.scrape, HTTPRoutes.chromiumScrape];
|
|
218
218
|
tags = [APITags.browserAPI];
|
|
219
|
-
|
|
219
|
+
async handler(
|
|
220
220
|
req: Request,
|
|
221
221
|
res: ServerResponse,
|
|
222
222
|
logger: Logger,
|
|
223
223
|
browser: BrowserInstance,
|
|
224
|
-
)
|
|
224
|
+
) {
|
|
225
225
|
logger.info('Scrape API invoked with body:', req.body);
|
|
226
226
|
const contentType =
|
|
227
227
|
!req.headers.accept || req.headers.accept?.includes('*')
|
|
@@ -440,5 +440,5 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
|
|
|
440
440
|
logger.info('Scrape API request completed');
|
|
441
441
|
|
|
442
442
|
return jsonResponse(res, 200, response, false);
|
|
443
|
-
}
|
|
443
|
+
}
|
|
444
444
|
}
|
|
@@ -83,12 +83,12 @@ export default class ScreenshotPost extends BrowserHTTPRoute {
|
|
|
83
83
|
method = Methods.post;
|
|
84
84
|
path = [HTTPRoutes.screenshot, HTTPRoutes.chromiumScreenshot];
|
|
85
85
|
tags = [APITags.browserAPI];
|
|
86
|
-
|
|
86
|
+
async handler(
|
|
87
87
|
req: Request,
|
|
88
88
|
res: ServerResponse,
|
|
89
89
|
logger: Logger,
|
|
90
90
|
browser: BrowserInstance,
|
|
91
|
-
): Promise<void>
|
|
91
|
+
): Promise<void> {
|
|
92
92
|
logger.info('Screenshot API invoked with body:', req.body);
|
|
93
93
|
const contentType =
|
|
94
94
|
!req.headers.accept || req.headers.accept?.includes('*')
|
|
@@ -267,5 +267,5 @@ export default class ScreenshotPost extends BrowserHTTPRoute {
|
|
|
267
267
|
|
|
268
268
|
page.close().catch(noop);
|
|
269
269
|
logger.info('Screenshot API request completed');
|
|
270
|
-
}
|
|
270
|
+
}
|
|
271
271
|
}
|
|
@@ -11,7 +11,9 @@ export class FunctionRunner {
|
|
|
11
11
|
protected browser?: Browser;
|
|
12
12
|
protected page?: Page;
|
|
13
13
|
|
|
14
|
-
public log
|
|
14
|
+
public log() {
|
|
15
|
+
return console.log.bind(console);
|
|
16
|
+
}
|
|
15
17
|
|
|
16
18
|
public async start(data: {
|
|
17
19
|
browserWSEndpoint: string;
|
package/src/shim.ts
CHANGED
|
@@ -14,7 +14,7 @@ const shimParam = ['headless', 'stealth', 'ignoreDefaultArgs', 'slowMo'];
|
|
|
14
14
|
*
|
|
15
15
|
* @param req A parsed user requests
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export function shimLegacyRequests(url: URL): URL {
|
|
18
18
|
const { searchParams } = url;
|
|
19
19
|
const params = [...searchParams];
|
|
20
20
|
const names = params.map(([k]) => k);
|
|
@@ -76,4 +76,4 @@ export const shimLegacyRequests = (url: URL): URL => {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
return url;
|
|
79
|
-
}
|
|
79
|
+
}
|
package/src/token.ts
CHANGED
|
@@ -14,14 +14,14 @@ export class Token extends EventEmitter {
|
|
|
14
14
|
super();
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
public
|
|
17
|
+
public async isAuthorized(
|
|
18
18
|
req: Request,
|
|
19
19
|
route:
|
|
20
20
|
| BrowserHTTPRoute
|
|
21
21
|
| BrowserWebsocketRoute
|
|
22
22
|
| HTTPRoute
|
|
23
23
|
| WebSocketRoute,
|
|
24
|
-
): Promise<boolean>
|
|
24
|
+
): Promise<boolean> {
|
|
25
25
|
const token = this.config.getToken();
|
|
26
26
|
|
|
27
27
|
if (token === null) {
|
|
@@ -39,18 +39,18 @@ export class Token extends EventEmitter {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return (Array.isArray(token) ? token : [token]).includes(requestToken);
|
|
42
|
-
}
|
|
42
|
+
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* Implement any browserless-core-specific shutdown logic here.
|
|
46
46
|
* Calls the empty-SDK stop method for downstream implementations.
|
|
47
47
|
*/
|
|
48
|
-
public
|
|
49
|
-
await this.stop();
|
|
50
|
-
}
|
|
48
|
+
public async shutdown() {
|
|
49
|
+
return await this.stop();
|
|
50
|
+
}
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Left blank for downstream SDK modules to optionally implement.
|
|
54
54
|
*/
|
|
55
|
-
public stop
|
|
55
|
+
public stop() {}
|
|
56
56
|
}
|
package/src/types.ts
CHANGED
|
@@ -251,11 +251,11 @@ export abstract class HTTPRoute extends BasicHTTPRoute {
|
|
|
251
251
|
/**
|
|
252
252
|
* Handles an inbound HTTP request, and supplies the Request and Response objects from node's HTTP request event
|
|
253
253
|
*/
|
|
254
|
-
abstract handler
|
|
254
|
+
abstract handler(
|
|
255
255
|
req: Request,
|
|
256
256
|
res: http.ServerResponse,
|
|
257
257
|
logger: Logger,
|
|
258
|
-
)
|
|
258
|
+
): Promise<unknown>;
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
/**
|
|
@@ -272,12 +272,12 @@ export abstract class BrowserHTTPRoute extends BasicHTTPRoute {
|
|
|
272
272
|
* Handles an inbound HTTP request with a 3rd param of the predefined
|
|
273
273
|
* browser used for the route -- only Chrome CDP is support currently.
|
|
274
274
|
*/
|
|
275
|
-
abstract handler
|
|
275
|
+
abstract handler(
|
|
276
276
|
req: Request,
|
|
277
277
|
res: http.ServerResponse,
|
|
278
278
|
logger: Logger,
|
|
279
279
|
browser: BrowserInstance,
|
|
280
|
-
)
|
|
280
|
+
): Promise<unknown>;
|
|
281
281
|
|
|
282
282
|
/**
|
|
283
283
|
* An optional function to automatically set up or handle new page
|
|
@@ -296,12 +296,12 @@ export abstract class WebSocketRoute extends Route {
|
|
|
296
296
|
/**
|
|
297
297
|
* Handles an inbound Websocket request, and handles the connection
|
|
298
298
|
*/
|
|
299
|
-
abstract handler
|
|
299
|
+
abstract handler(
|
|
300
300
|
req: Request,
|
|
301
301
|
socket: stream.Duplex,
|
|
302
302
|
head: Buffer,
|
|
303
303
|
logger: Logger,
|
|
304
|
-
)
|
|
304
|
+
): Promise<unknown>;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
/**
|
|
@@ -377,12 +377,12 @@ export interface BrowserServerOptions {
|
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
export interface BrowserlessSession {
|
|
380
|
-
id: string
|
|
380
|
+
id: string;
|
|
381
381
|
initialConnectURL: string;
|
|
382
382
|
isTempDataDir: boolean;
|
|
383
383
|
launchOptions: CDPLaunchOptions | BrowserServerOptions;
|
|
384
384
|
numbConnected: number;
|
|
385
|
-
resolver
|
|
385
|
+
resolver(val: unknown): void;
|
|
386
386
|
routePath: string | string[];
|
|
387
387
|
startedOn: number;
|
|
388
388
|
ttl: number;
|
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/src/webhooks.ts
CHANGED
|
@@ -55,12 +55,12 @@ export class WebHooks extends EventEmitter {
|
|
|
55
55
|
* Implement any browserless-core-specific shutdown logic here.
|
|
56
56
|
* Calls the empty-SDK stop method for downstream implementations.
|
|
57
57
|
*/
|
|
58
|
-
public
|
|
59
|
-
await this.stop();
|
|
60
|
-
}
|
|
58
|
+
public async shutdown() {
|
|
59
|
+
return await this.stop();
|
|
60
|
+
}
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* Left blank for downstream SDK modules to optionally implement.
|
|
64
64
|
*/
|
|
65
|
-
public stop
|
|
65
|
+
public stop() {}
|
|
66
66
|
}
|
package/static/docs/swagger.json
CHANGED
|
@@ -31207,7 +31207,9 @@ ${sourceUrlComment}
|
|
|
31207
31207
|
var FunctionRunner = class {
|
|
31208
31208
|
browser;
|
|
31209
31209
|
page;
|
|
31210
|
-
log
|
|
31210
|
+
log() {
|
|
31211
|
+
return console.log.bind(console);
|
|
31212
|
+
}
|
|
31211
31213
|
async start(data) {
|
|
31212
31214
|
console.log(`/function.js: Got endpoint: "${data.browserWSEndpoint}"`);
|
|
31213
31215
|
const { browserWSEndpoint, code, context: context2, options } = data;
|
|
@@ -31215,7 +31215,9 @@ ${sourceUrlComment}
|
|
|
31215
31215
|
var FunctionRunner = class {
|
|
31216
31216
|
browser;
|
|
31217
31217
|
page;
|
|
31218
|
-
log
|
|
31218
|
+
log() {
|
|
31219
|
+
return console.log.bind(console);
|
|
31220
|
+
}
|
|
31219
31221
|
async start(data) {
|
|
31220
31222
|
console.log(`/function.js: Got endpoint: "${data.browserWSEndpoint}"`);
|
|
31221
31223
|
const { browserWSEndpoint, code, context: context2, options } = data;
|