@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.
Files changed (199) hide show
  1. package/build/browserless.d.ts +3 -3
  2. package/build/browserless.js +6 -6
  3. package/build/browsers/chromium.cdp.d.ts +13 -13
  4. package/build/browsers/chromium.cdp.js +79 -67
  5. package/build/browsers/chromium.playwright.d.ts +12 -12
  6. package/build/browsers/chromium.playwright.js +44 -36
  7. package/build/browsers/firefox.playwright.d.ts +12 -12
  8. package/build/browsers/firefox.playwright.js +44 -36
  9. package/build/browsers/index.d.ts +17 -16
  10. package/build/browsers/index.js +63 -42
  11. package/build/browsers/webkit.playwright.d.ts +12 -12
  12. package/build/browsers/webkit.playwright.js +47 -39
  13. package/build/config.d.ts +65 -63
  14. package/build/config.js +162 -102
  15. package/build/file-system.d.ts +4 -4
  16. package/build/file-system.js +8 -8
  17. package/build/hooks.d.ts +2 -2
  18. package/build/hooks.js +4 -4
  19. package/build/limiter.d.ts +4 -4
  20. package/build/limiter.js +10 -10
  21. package/build/logger.d.ts +6 -6
  22. package/build/logger.js +12 -12
  23. package/build/metrics.d.ts +12 -12
  24. package/build/metrics.js +23 -23
  25. package/build/monitoring.d.ts +4 -4
  26. package/build/monitoring.js +8 -8
  27. package/build/router.d.ts +8 -8
  28. package/build/router.js +74 -70
  29. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  30. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  31. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  32. package/build/routes/chromium/http/content.post.body.json +8 -8
  33. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  34. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  35. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  36. package/build/routes/firefox/ws/playwright.d.ts +1 -1
  37. package/build/routes/firefox/ws/playwright.js +2 -2
  38. package/build/routes/management/http/active.get.d.ts +1 -1
  39. package/build/routes/management/http/active.get.js +3 -1
  40. package/build/routes/management/http/config.get.d.ts +1 -1
  41. package/build/routes/management/http/config.get.js +2 -2
  42. package/build/routes/management/http/metrics-total.get.d.ts +1 -1
  43. package/build/routes/management/http/metrics-total.get.js +2 -2
  44. package/build/routes/management/http/metrics.get.d.ts +1 -1
  45. package/build/routes/management/http/metrics.get.js +2 -2
  46. package/build/routes/management/http/pressure.get.d.ts +1 -1
  47. package/build/routes/management/http/pressure.get.js +2 -2
  48. package/build/routes/management/http/sessions.get.d.ts +1 -1
  49. package/build/routes/management/http/sessions.get.js +2 -2
  50. package/build/routes/management/http/static.get.d.ts +1 -1
  51. package/build/routes/management/http/static.get.js +2 -2
  52. package/build/routes/webkit/ws/playwright.d.ts +1 -1
  53. package/build/routes/webkit/ws/playwright.js +2 -2
  54. package/build/server.d.ts +5 -5
  55. package/build/server.js +11 -11
  56. package/build/shared/browser.ws.d.ts +1 -1
  57. package/build/shared/browser.ws.js +3 -1
  58. package/build/shared/chromium.playwright.ws.d.ts +1 -1
  59. package/build/shared/chromium.playwright.ws.js +2 -2
  60. package/build/shared/chromium.ws.d.ts +1 -1
  61. package/build/shared/chromium.ws.js +3 -1
  62. package/build/shared/content.http.d.ts +1 -1
  63. package/build/shared/content.http.js +2 -2
  64. package/build/shared/download.http.d.ts +1 -1
  65. package/build/shared/download.http.js +60 -58
  66. package/build/shared/function.http.d.ts +1 -1
  67. package/build/shared/function.http.js +2 -2
  68. package/build/shared/json-list.http.d.ts +1 -1
  69. package/build/shared/json-list.http.js +2 -2
  70. package/build/shared/json-new.http.d.ts +1 -1
  71. package/build/shared/json-new.http.js +2 -2
  72. package/build/shared/json-protocol.http.d.ts +1 -1
  73. package/build/shared/json-protocol.http.js +2 -2
  74. package/build/shared/json-version.http.d.ts +1 -1
  75. package/build/shared/json-version.http.js +2 -2
  76. package/build/shared/page.ws.d.ts +1 -1
  77. package/build/shared/page.ws.js +3 -1
  78. package/build/shared/pdf.http.d.ts +1 -1
  79. package/build/shared/pdf.http.js +2 -2
  80. package/build/shared/performance.http.d.ts +1 -1
  81. package/build/shared/performance.http.js +2 -2
  82. package/build/shared/scrape.http.d.ts +1 -1
  83. package/build/shared/scrape.http.js +2 -2
  84. package/build/shared/screenshot.http.d.ts +1 -1
  85. package/build/shared/screenshot.http.js +2 -2
  86. package/build/shared/utils/function/client.d.ts +1 -1
  87. package/build/shared/utils/function/client.js +3 -1
  88. package/build/shim.d.ts +1 -1
  89. package/build/shim.js +2 -2
  90. package/build/token.d.ts +3 -3
  91. package/build/token.js +6 -6
  92. package/build/types.d.ts +5 -5
  93. package/build/webhooks.d.ts +2 -2
  94. package/build/webhooks.js +4 -4
  95. package/extensions/ublock/_locales/eu/messages.json +4 -4
  96. package/extensions/ublock/_locales/hi/messages.json +5 -5
  97. package/extensions/ublock/_locales/kn/messages.json +11 -11
  98. package/extensions/ublock/_locales/nb/messages.json +2 -2
  99. package/extensions/ublock/_locales/no/messages.json +2 -2
  100. package/extensions/ublock/_locales/ro/messages.json +1 -1
  101. package/extensions/ublock/_locales/sv/messages.json +1 -1
  102. package/extensions/ublock/_locales/zh_CN/messages.json +2 -2
  103. package/extensions/ublock/assets/assets.json +3 -8
  104. package/extensions/ublock/assets/resources/scriptlets.js +128 -31
  105. package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +4870 -3560
  106. package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +662 -173
  107. package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +10 -42
  108. package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +241 -80
  109. package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2093 -1224
  110. package/extensions/ublock/assets/ublock/badlists.txt +2 -0
  111. package/extensions/ublock/assets/ublock/badware.min.txt +408 -287
  112. package/extensions/ublock/assets/ublock/filters.min.txt +947 -645
  113. package/extensions/ublock/assets/ublock/privacy.min.txt +43 -8
  114. package/extensions/ublock/assets/ublock/quick-fixes.min.txt +55 -93
  115. package/extensions/ublock/assets/ublock/unbreak.min.txt +52 -19
  116. package/extensions/ublock/css/1p-filters.css +2 -0
  117. package/extensions/ublock/css/codemirror.css +2 -2
  118. package/extensions/ublock/css/dashboard.css +2 -5
  119. package/extensions/ublock/css/epicker-ui.css +3 -3
  120. package/extensions/ublock/css/fa-icons.css +3 -0
  121. package/extensions/ublock/css/logger-ui-inspector.css +1 -0
  122. package/extensions/ublock/css/logger-ui.css +44 -32
  123. package/extensions/ublock/img/fontawesome/fontawesome-defs.svg +1 -0
  124. package/extensions/ublock/js/3p-filters.js +4 -5
  125. package/extensions/ublock/js/biditrie.js +16 -11
  126. package/extensions/ublock/js/cachestorage.js +37 -37
  127. package/extensions/ublock/js/contentscript-extra.js +0 -2
  128. package/extensions/ublock/js/contentscript.js +1 -6
  129. package/extensions/ublock/js/epicker-ui.js +28 -36
  130. package/extensions/ublock/js/fa-icons.js +1 -0
  131. package/extensions/ublock/js/hntrie.js +19 -13
  132. package/extensions/ublock/js/logger-ui-inspector.js +6 -13
  133. package/extensions/ublock/js/logger-ui.js +264 -264
  134. package/extensions/ublock/js/s14e-serializer.js +267 -264
  135. package/extensions/ublock/js/scriptlet-filtering.js +12 -18
  136. package/extensions/ublock/js/scriptlets/dom-inspector.js +1 -5
  137. package/extensions/ublock/js/scriptlets/epicker.js +53 -59
  138. package/extensions/ublock/js/start.js +0 -8
  139. package/extensions/ublock/js/storage.js +2 -9
  140. package/extensions/ublock/js/vapi-background.js +19 -20
  141. package/extensions/ublock/js/vapi-common.js +2 -7
  142. package/extensions/ublock/js/vapi.js +0 -4
  143. package/extensions/ublock/js/webext.js +23 -15
  144. package/extensions/ublock/logger-ui.html +24 -15
  145. package/extensions/ublock/manifest.json +2 -3
  146. package/package.json +4 -4
  147. package/src/browserless.ts +6 -6
  148. package/src/browsers/chromium.cdp.ts +35 -25
  149. package/src/browsers/chromium.playwright.ts +30 -23
  150. package/src/browsers/firefox.playwright.ts +30 -24
  151. package/src/browsers/index.ts +81 -50
  152. package/src/browsers/webkit.playwright.ts +33 -26
  153. package/src/config.ts +166 -104
  154. package/src/file-system.ts +9 -9
  155. package/src/hooks.ts +4 -4
  156. package/src/limiter.ts +12 -12
  157. package/src/logger.ts +12 -12
  158. package/src/metrics.ts +23 -23
  159. package/src/monitoring.ts +9 -9
  160. package/src/router.ts +31 -31
  161. package/src/routes/chrome/tests/websocket.spec.ts +2 -2
  162. package/src/routes/chromium/tests/websocket.spec.ts +2 -2
  163. package/src/routes/firefox/tests/websocket.spec.ts +2 -4
  164. package/src/routes/firefox/ws/playwright.ts +3 -3
  165. package/src/routes/management/http/active.get.ts +3 -2
  166. package/src/routes/management/http/config.get.ts +2 -2
  167. package/src/routes/management/http/metrics-total.get.ts +2 -2
  168. package/src/routes/management/http/metrics.get.ts +2 -2
  169. package/src/routes/management/http/pressure.get.ts +2 -2
  170. package/src/routes/management/http/sessions.get.ts +2 -2
  171. package/src/routes/management/http/static.get.ts +3 -3
  172. package/src/routes/webkit/tests/websocket.spec.ts +2 -3
  173. package/src/routes/webkit/ws/playwright.ts +3 -3
  174. package/src/server.ts +14 -16
  175. package/src/shared/browser.ws.ts +4 -2
  176. package/src/shared/chromium.playwright.ws.ts +3 -3
  177. package/src/shared/chromium.ws.ts +4 -2
  178. package/src/shared/content.http.ts +3 -3
  179. package/src/shared/download.http.ts +4 -3
  180. package/src/shared/function.http.ts +3 -3
  181. package/src/shared/json-list.http.ts +2 -2
  182. package/src/shared/json-new.http.ts +2 -2
  183. package/src/shared/json-protocol.http.ts +2 -6
  184. package/src/shared/json-version.http.ts +2 -6
  185. package/src/shared/page.ws.ts +4 -2
  186. package/src/shared/pdf.http.ts +3 -3
  187. package/src/shared/performance.http.ts +3 -3
  188. package/src/shared/scrape.http.ts +3 -3
  189. package/src/shared/screenshot.http.ts +3 -3
  190. package/src/shared/utils/function/client.ts +3 -1
  191. package/src/shim.ts +2 -2
  192. package/src/token.ts +7 -7
  193. package/src/types.ts +8 -8
  194. package/src/utils.ts +1 -1
  195. package/src/webhooks.ts +4 -4
  196. package/static/docs/swagger.json +1 -1
  197. package/static/docs/swagger.min.json +1 -1
  198. package/static/function/client.js +3 -1
  199. 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 = (_req: Request, res: Response) => {
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 handleRequest = async (
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 handleWebSocket = async (
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
  }
@@ -28,11 +28,13 @@ export default class ChromiumBrowserWebSocketRoute extends BrowserWebsocketRoute
28
28
  );
29
29
  path = WebsocketRoutes.browser;
30
30
  tags = [APITags.browserWS];
31
- handler = async (
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> => browser.proxyWebSocket(req, socket, head);
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
- handler = async (
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
- handler = async (
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> => browser.proxyWebSocket(req, socket, head);
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
- handler = async (
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
- handler = async (
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
- handler = async (
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
- handler = async (_req: Request, res: Response): Promise<void> => {
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
- handler = async (_req: Request, res: Response): Promise<void> => {
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 = async (
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 = async (
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
  }
@@ -29,11 +29,13 @@ export default class ChromiumPageWebSocketRoute extends BrowserWebsocketRoute {
29
29
  );
30
30
  path = WebsocketRoutes.page;
31
31
  tags = [APITags.browserWS];
32
- handler = async (
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> => browser.proxyPageWebSocket(req, socket, head);
38
+ ): Promise<void> {
39
+ return browser.proxyPageWebSocket(req, socket, head);
40
+ }
39
41
  }
@@ -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
- handler = async (
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
- handler = async (
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
- handler = async (
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
- handler = async (
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 = () => console.log.bind(console);
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 const shimLegacyRequests = (url: URL): URL => {
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 isAuthorized = async (
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 shutdown = async () => {
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
- ) => Promise<unknown>;
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
- ) => Promise<unknown>;
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
- ) => Promise<unknown>;
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 | null;
380
+ id: string;
381
381
  initialConnectURL: string;
382
382
  isTempDataDir: boolean;
383
383
  launchOptions: CDPLaunchOptions | BrowserServerOptions;
384
384
  numbConnected: number;
385
- resolver: (val: unknown) => void;
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 shutdown = async () => {
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
  }
@@ -1098,7 +1098,7 @@
1098
1098
  },
1099
1099
  "info": {
1100
1100
  "title": "Browserless",
1101
- "version": "2.12.0-beta-3",
1101
+ "version": "2.12.0-beta-6",
1102
1102
  "x-logo": {
1103
1103
  "altText": "browserless logo",
1104
1104
  "url": "./docs/browserless-logo-inline.svg"
@@ -1098,7 +1098,7 @@
1098
1098
  },
1099
1099
  "info": {
1100
1100
  "title": "Browserless",
1101
- "version": "2.12.0-beta-3",
1101
+ "version": "2.12.0-beta-6",
1102
1102
  "x-logo": {
1103
1103
  "altText": "browserless logo",
1104
1104
  "url": "./docs/browserless-logo-inline.svg"
@@ -31207,7 +31207,9 @@ ${sourceUrlComment}
31207
31207
  var FunctionRunner = class {
31208
31208
  browser;
31209
31209
  page;
31210
- log = () => console.log.bind(console);
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 = () => console.log.bind(console);
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;