@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
@@ -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
- handler = async (req, res, logger, browser) => new Promise(async (resolve, reject) => {
25
- const config = this.config();
26
- const downloadPath = path.join(await config.getDownloadsDir(), `.browserless.download.${id()}`);
27
- logger.info(`Generating a download directory at "${downloadPath}"`);
28
- await mkdir(downloadPath);
29
- const handler = functionHandler(config, logger, { downloadPath });
30
- const response = await handler(req, browser).catch((e) => {
31
- logger.error(`Error running download code handler: "${e}"`);
32
- reject(e);
33
- return null;
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 [fileName] = await readdir(downloadPath);
46
- if (!fileName || fileName.endsWith('.crdownload')) {
47
- await sleep(500);
48
- return checkIfDownloadComplete();
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
- logger.info(`All files have finished downloading`);
51
- return path.join(downloadPath, fileName);
52
- }
53
- const filePath = await checkIfDownloadComplete();
54
- logger.info(`Closing pages.`);
55
- page.close();
56
- page.removeAllListeners();
57
- const rmDownload = once(() => filePath &&
58
- deleteAsync(filePath, { force: true })
59
- .then(() => {
60
- logger.info(`Successfully deleted downloads from disk at "${filePath}"`);
61
- })
62
- .catch((err) => {
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 reject(new NotFound(`Couldn't locate or send downloads in "${downloadPath}"`));
68
+ return;
78
69
  }
79
- })
80
- .on('end', () => {
81
- logger.info(`Downloads successfully sent`);
82
- rmDownload();
83
- return resolve();
84
- })
85
- .pipe(res);
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: (req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance) => Promise<void>;
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
- handler = async (req, res, logger, browser) => {
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
  }
@@ -11,5 +11,5 @@ export default class ChromiumJSONListGetRoute extends HTTPRoute {
11
11
  method: Methods;
12
12
  path: HTTPRoutes;
13
13
  tags: APITags[];
14
- handler: (_req: Request, res: Response) => Promise<void>;
14
+ handler(_req: Request, res: Response): Promise<void>;
15
15
  }
@@ -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
- handler = async (_req, res) => {
17
+ async handler(_req, res) {
18
18
  const browserManage = this.browserManager();
19
19
  return jsonResponse(res, 200, await browserManage.getJSONList());
20
- };
20
+ }
21
21
  }
@@ -11,5 +11,5 @@ export default class ChromiumJSONNewPutRoute extends HTTPRoute {
11
11
  method: Methods;
12
12
  path: HTTPRoutes;
13
13
  tags: APITags[];
14
- handler: (_req: Request, res: Response) => Promise<void>;
14
+ handler(_req: Request, res: Response): Promise<void>;
15
15
  }
@@ -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
- handler = async (_req, res) => {
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: (_req: Request, res: Response, logger: Logger) => Promise<void>;
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
- handler = async (_req, res, logger) => {
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: (req: Request, res: Response, logger: Logger) => Promise<void>;
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
- handler = async (req, res, logger) => {
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: (req: Request, socket: Duplex, head: Buffer, _logger: Logger, browser: ChromiumCDP) => Promise<void>;
16
+ handler(req: Request, socket: Duplex, head: Buffer, _logger: Logger, browser: ChromiumCDP): Promise<void>;
17
17
  }
@@ -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
- handler = async (req, socket, head, _logger, browser) => browser.proxyPageWebSocket(req, socket, head);
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: (req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance) => Promise<void>;
46
+ handler(req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance): Promise<void>;
47
47
  }
@@ -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
- handler = async (req, res, logger, browser) => {
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: (req: Request, res: ServerResponse, _logger: Logger, browser: BrowserInstance) => Promise<void>;
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
- handler = async (req, res, _logger, browser) => {
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: (req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance) => Promise<void>;
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
- handler = async (req, res, logger, browser) => {
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: (req: Request, res: ServerResponse, logger: Logger, browser: BrowserInstance) => Promise<void>;
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
- handler = async (req, res, logger, browser) => {
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
  }
@@ -6,7 +6,7 @@ type codeHandler = (params: {
6
6
  export declare class FunctionRunner {
7
7
  protected browser?: Browser;
8
8
  protected page?: Page;
9
- log: () => {
9
+ log(): {
10
10
  (...data: any[]): void;
11
11
  (message?: any, ...optionalParams: any[]): void;
12
12
  };
@@ -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 = () => console.log.bind(console);
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
@@ -6,4 +6,4 @@
6
6
  *
7
7
  * @param req A parsed user requests
8
8
  */
9
- export declare const shimLegacyRequests: (url: URL) => URL;
9
+ export declare function shimLegacyRequests(url: URL): URL;
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 const shimLegacyRequests = (url) => {
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: (req: Request, route: BrowserHTTPRoute | BrowserWebsocketRoute | HTTPRoute | WebSocketRoute) => Promise<boolean>;
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: () => Promise<void>;
12
+ shutdown(): Promise<void>;
13
13
  /**
14
14
  * Left blank for downstream SDK modules to optionally implement.
15
15
  */
16
- stop: () => void;
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
- isAuthorized = async (req, route) => {
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
- shutdown = async () => {
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: (req: Request, res: http.ServerResponse, logger: Logger) => Promise<unknown>;
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: (req: Request, res: http.ServerResponse, logger: Logger, browser: BrowserInstance) => Promise<unknown>;
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: (req: Request, socket: stream.Duplex, head: Buffer, logger: Logger) => Promise<unknown>;
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 | null;
277
+ id: string;
278
278
  initialConnectURL: string;
279
279
  isTempDataDir: boolean;
280
280
  launchOptions: CDPLaunchOptions | BrowserServerOptions;
281
281
  numbConnected: number;
282
- resolver: (val: unknown) => void;
282
+ resolver(val: unknown): void;
283
283
  routePath: string | string[];
284
284
  startedOn: number;
285
285
  ttl: number;
@@ -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: () => Promise<void>;
17
+ shutdown(): Promise<void>;
18
18
  /**
19
19
  * Left blank for downstream SDK modules to optionally implement.
20
20
  */
21
- stop: () => void;
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
- shutdown = async () => {
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": "Laguntza",
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": "Social widgets",
487
+ "message": "Widgets Sozialak",
488
488
  "description": "Filter lists section name"
489
489
  },
490
490
  "3pGroupCookies": {
491
- "message": "Cookie notices",
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": "Allow custom filters requiring trust",
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": {