@browserless.io/browserless 2.2.0 → 2.3.0-beta-2

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 (159) hide show
  1. package/README.md +2 -2
  2. package/bin/browserless.js +67 -27
  3. package/bin/scaffold/README.md +50 -0
  4. package/bin/scaffold/src/hello-world.http.ts +2 -1
  5. package/build/browserless.d.ts +3 -0
  6. package/build/browserless.js +43 -19
  7. package/build/browsers/chrome.cdp.js +1 -1
  8. package/build/browsers/chrome.playwright.js +1 -1
  9. package/build/browsers/index.d.ts +1 -0
  10. package/build/browsers/index.js +4 -1
  11. package/build/data/classes.json +1 -1
  12. package/build/data/selectors.json +1 -1
  13. package/build/exports.js +1 -2
  14. package/build/limiter.d.ts +2 -1
  15. package/build/limiter.js +6 -3
  16. package/build/routes/chrome/http/content.post.body.json +8 -8
  17. package/build/routes/chrome/http/content.post.d.ts +2 -1
  18. package/build/routes/chrome/http/content.post.js +3 -2
  19. package/build/routes/chrome/http/download.post.d.ts +2 -1
  20. package/build/routes/chrome/http/download.post.js +3 -2
  21. package/build/routes/chrome/http/function.post.d.ts +2 -1
  22. package/build/routes/chrome/http/function.post.js +3 -2
  23. package/build/routes/chrome/http/json-list.get.d.ts +5 -1
  24. package/build/routes/chrome/http/json-list.get.js +5 -1
  25. package/build/routes/chrome/http/json-new.put.d.ts +5 -1
  26. package/build/routes/chrome/http/json-new.put.js +5 -1
  27. package/build/routes/chrome/http/json-protocol.get.d.ts +5 -1
  28. package/build/routes/chrome/http/json-protocol.get.js +5 -1
  29. package/build/routes/chrome/http/json-version.get.d.ts +5 -1
  30. package/build/routes/chrome/http/json-version.get.js +5 -1
  31. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  32. package/build/routes/chrome/http/pdf.post.d.ts +2 -1
  33. package/build/routes/chrome/http/pdf.post.js +3 -2
  34. package/build/routes/chrome/http/performance.post.d.ts +2 -1
  35. package/build/routes/chrome/http/performance.post.js +3 -2
  36. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  37. package/build/routes/chrome/http/scrape.post.d.ts +2 -1
  38. package/build/routes/chrome/http/scrape.post.js +3 -2
  39. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  40. package/build/routes/chrome/http/screenshot.post.d.ts +2 -1
  41. package/build/routes/chrome/http/screenshot.post.js +3 -2
  42. package/build/routes/chrome/ws/browser.d.ts +2 -1
  43. package/build/routes/chrome/ws/browser.js +3 -2
  44. package/build/routes/chrome/ws/cdp.d.ts +2 -1
  45. package/build/routes/chrome/ws/cdp.js +3 -2
  46. package/build/routes/chrome/ws/page.d.ts +3 -2
  47. package/build/routes/chrome/ws/page.js +3 -2
  48. package/build/routes/chrome/ws/playwright.d.ts +1 -0
  49. package/build/routes/chrome/ws/playwright.js +2 -1
  50. package/build/routes/chromium/http/content.post.body.json +8 -8
  51. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  52. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  53. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  54. package/build/routes/firefox/ws/playwright.d.ts +7 -2
  55. package/build/routes/firefox/ws/playwright.js +3 -2
  56. package/build/routes/firefox/ws/playwright.query.json +29 -31
  57. package/build/routes/management/http/config.get.d.ts +1 -0
  58. package/build/routes/management/http/config.get.js +2 -1
  59. package/build/routes/management/http/metrics-total.get.d.ts +1 -0
  60. package/build/routes/management/http/metrics-total.get.js +2 -1
  61. package/build/routes/management/http/metrics.get.d.ts +1 -0
  62. package/build/routes/management/http/metrics.get.js +2 -1
  63. package/build/routes/management/http/sessions.get.d.ts +1 -0
  64. package/build/routes/management/http/sessions.get.js +2 -1
  65. package/build/routes/management/http/static.get.d.ts +1 -0
  66. package/build/routes/management/http/static.get.js +8 -7
  67. package/build/routes/webkit/ws/playwright.d.ts +2 -1
  68. package/build/routes/webkit/ws/playwright.js +3 -2
  69. package/build/shared/browser.ws.d.ts +2 -1
  70. package/build/shared/browser.ws.js +3 -2
  71. package/build/shared/chromium.playwright.ws.d.ts +2 -1
  72. package/build/shared/chromium.playwright.ws.js +3 -2
  73. package/build/shared/chromium.ws.d.ts +2 -1
  74. package/build/shared/chromium.ws.js +3 -2
  75. package/build/shared/content.http.d.ts +2 -1
  76. package/build/shared/content.http.js +3 -2
  77. package/build/shared/download.http.d.ts +2 -1
  78. package/build/shared/download.http.js +3 -2
  79. package/build/shared/function.http.d.ts +2 -1
  80. package/build/shared/function.http.js +3 -2
  81. package/build/shared/json-list.http.d.ts +2 -1
  82. package/build/shared/json-list.http.js +3 -2
  83. package/build/shared/json-new.http.d.ts +2 -1
  84. package/build/shared/json-new.http.js +3 -2
  85. package/build/shared/json-protocol.http.d.ts +2 -1
  86. package/build/shared/json-protocol.http.js +3 -2
  87. package/build/shared/json-version.http.d.ts +2 -1
  88. package/build/shared/json-version.http.js +3 -2
  89. package/build/shared/page.ws.d.ts +2 -1
  90. package/build/shared/page.ws.js +3 -2
  91. package/build/shared/pdf.http.d.ts +2 -1
  92. package/build/shared/pdf.http.js +3 -2
  93. package/build/shared/performance.http.d.ts +1 -0
  94. package/build/shared/performance.http.js +2 -1
  95. package/build/shared/scrape.http.d.ts +2 -1
  96. package/build/shared/scrape.http.js +3 -2
  97. package/build/shared/screenshot.http.d.ts +1 -0
  98. package/build/shared/screenshot.http.js +2 -1
  99. package/build/shared/utils/performance/main.js +1 -1
  100. package/build/types.d.ts +91 -0
  101. package/build/types.js +54 -0
  102. package/build/utils.d.ts +1 -1
  103. package/build/utils.js +11 -6
  104. package/docker/chromium/Dockerfile +1 -2
  105. package/docker/firefox/Dockerfile +1 -2
  106. package/docker/multi/Dockerfile +2 -4
  107. package/docker/webkit/Dockerfile +1 -2
  108. package/package.json +11 -11
  109. package/scripts/build-open-api.js +142 -124
  110. package/src/browserless.ts +60 -22
  111. package/src/browsers/chrome.cdp.ts +1 -1
  112. package/src/browsers/chrome.playwright.ts +1 -1
  113. package/src/browsers/index.ts +5 -1
  114. package/src/exports.ts +1 -3
  115. package/src/limiter.ts +7 -3
  116. package/src/router.ts +6 -2
  117. package/src/routes/chrome/http/content.post.ts +7 -2
  118. package/src/routes/chrome/http/download.post.ts +7 -2
  119. package/src/routes/chrome/http/function.post.ts +7 -2
  120. package/src/routes/chrome/http/json-list.get.ts +7 -1
  121. package/src/routes/chrome/http/json-new.put.ts +7 -1
  122. package/src/routes/chrome/http/json-protocol.get.ts +7 -1
  123. package/src/routes/chrome/http/json-version.get.ts +7 -1
  124. package/src/routes/chrome/http/pdf.post.ts +7 -2
  125. package/src/routes/chrome/http/performance.post.ts +7 -2
  126. package/src/routes/chrome/http/scrape.post.ts +7 -2
  127. package/src/routes/chrome/http/screenshot.post.ts +7 -2
  128. package/src/routes/chrome/ws/browser.ts +3 -2
  129. package/src/routes/chrome/ws/cdp.ts +7 -2
  130. package/src/routes/chrome/ws/page.ts +3 -2
  131. package/src/routes/chrome/ws/playwright.ts +6 -1
  132. package/src/routes/firefox/ws/playwright.ts +6 -2
  133. package/src/routes/management/http/config.get.ts +2 -0
  134. package/src/routes/management/http/metrics-total.get.ts +2 -0
  135. package/src/routes/management/http/metrics.get.ts +2 -0
  136. package/src/routes/management/http/sessions.get.ts +2 -0
  137. package/src/routes/management/http/static.get.ts +16 -9
  138. package/src/routes/webkit/ws/playwright.ts +3 -1
  139. package/src/shared/browser.ws.ts +3 -1
  140. package/src/shared/chromium.playwright.ws.ts +3 -1
  141. package/src/shared/chromium.ws.ts +3 -1
  142. package/src/shared/content.http.ts +3 -1
  143. package/src/shared/download.http.ts +3 -1
  144. package/src/shared/function.http.ts +3 -1
  145. package/src/shared/json-list.http.ts +3 -1
  146. package/src/shared/json-new.http.ts +3 -1
  147. package/src/shared/json-protocol.http.ts +3 -1
  148. package/src/shared/json-version.http.ts +3 -1
  149. package/src/shared/page.ws.ts +3 -1
  150. package/src/shared/pdf.http.ts +3 -1
  151. package/src/shared/performance.http.ts +2 -0
  152. package/src/shared/scrape.http.ts +3 -1
  153. package/src/shared/screenshot.http.ts +2 -0
  154. package/src/shared/utils/performance/main.ts +1 -2
  155. package/src/types.ts +66 -0
  156. package/src/utils.ts +13 -7
  157. package/static/docs/swagger.json +91 -49
  158. package/static/docs/swagger.min.json +6697 -0
  159. package/static/function/client.js +323 -323
@@ -1,6 +1,7 @@
1
- import { APITags, HTTPRoute, HTTPRoutes, Methods, contentTypes, dedent, jsonResponse, pageID, } from '@browserless.io/browserless';
1
+ import { APITags, BrowserlessRoutes, HTTPRoute, HTTPRoutes, Methods, contentTypes, dedent, jsonResponse, pageID, } from '@browserless.io/browserless';
2
2
  import path from 'path';
3
- export default class GetJSONList extends HTTPRoute {
3
+ export default class ChromiumJSONNewPutRoute extends HTTPRoute {
4
+ name = BrowserlessRoutes.ChromiumJSONNewPutRoute;
4
5
  accepts = [contentTypes.any];
5
6
  auth = true;
6
7
  browser = null;
@@ -1,7 +1,8 @@
1
1
  import { APITags, HTTPRoute, HTTPRoutes, Methods, Request, Response, contentTypes } from '@browserless.io/browserless';
2
2
  export type ResponseSchema = object;
3
- export default class GetJSONVersion extends HTTPRoute {
3
+ export default class ChromiumJSONProtocolGetRoute extends HTTPRoute {
4
4
  private cachedProtocol;
5
+ name: string;
5
6
  accepts: contentTypes[];
6
7
  auth: boolean;
7
8
  browser: null;
@@ -1,6 +1,7 @@
1
- import { APITags, HTTPRoute, HTTPRoutes, Methods, contentTypes, jsonResponse, } from '@browserless.io/browserless';
2
- export default class GetJSONVersion extends HTTPRoute {
1
+ import { APITags, BrowserlessRoutes, HTTPRoute, HTTPRoutes, Methods, contentTypes, jsonResponse, } from '@browserless.io/browserless';
2
+ export default class ChromiumJSONProtocolGetRoute extends HTTPRoute {
3
3
  cachedProtocol;
4
+ name = BrowserlessRoutes.ChromiumJSONProtocolGetRoute;
4
5
  accepts = [contentTypes.any];
5
6
  auth = true;
6
7
  browser = null;
@@ -1,7 +1,8 @@
1
1
  import { APITags, BrowserManager, HTTPRoute, HTTPRoutes, Methods, Request, Response, UnwrapPromise, contentTypes } from '@browserless.io/browserless';
2
2
  export type ResponseSchema = UnwrapPromise<ReturnType<BrowserManager['getVersionJSON']>>;
3
- export default class GetJSONVersion extends HTTPRoute {
3
+ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
4
4
  private cachedJSON;
5
+ name: string;
5
6
  accepts: contentTypes[];
6
7
  auth: boolean;
7
8
  browser: null;
@@ -1,6 +1,7 @@
1
- import { APITags, HTTPRoute, HTTPRoutes, Methods, contentTypes, jsonResponse, writeResponse, } from '@browserless.io/browserless';
2
- export default class GetJSONVersion extends HTTPRoute {
1
+ import { APITags, BrowserlessRoutes, HTTPRoute, HTTPRoutes, Methods, contentTypes, jsonResponse, writeResponse, } from '@browserless.io/browserless';
2
+ export default class ChromiumJSONVersionGetRoute extends HTTPRoute {
3
3
  cachedJSON;
4
+ name = BrowserlessRoutes.ChromiumJSONVersionGetRoute;
4
5
  accepts = [contentTypes.any];
5
6
  auth = true;
6
7
  browser = null;
@@ -5,7 +5,8 @@ import { Duplex } from 'stream';
5
5
  export interface QuerySchema extends SystemQueryParameters {
6
6
  launch?: CDPLaunchOptions | string;
7
7
  }
8
- export default class PageWebSocketRoute extends BrowserWebsocketRoute {
8
+ export default class ChromiumPageWebSocketRoute extends BrowserWebsocketRoute {
9
+ name: string;
9
10
  auth: boolean;
10
11
  browser: typeof ChromiumCDP;
11
12
  concurrency: boolean;
@@ -1,5 +1,6 @@
1
- import { APITags, BrowserWebsocketRoute, ChromiumCDP, WebsocketRoutes, dedent, } from '@browserless.io/browserless';
2
- export default class PageWebSocketRoute extends BrowserWebsocketRoute {
1
+ import { APITags, BrowserWebsocketRoute, BrowserlessRoutes, ChromiumCDP, WebsocketRoutes, dedent, } from '@browserless.io/browserless';
2
+ export default class ChromiumPageWebSocketRoute extends BrowserWebsocketRoute {
3
+ name = BrowserlessRoutes.ChromiumPageWebSocketRoute;
3
4
  auth = true;
4
5
  browser = ChromiumCDP;
5
6
  concurrency = false;
@@ -33,7 +33,8 @@ export interface QuerySchema extends SystemQueryParameters {
33
33
  * Responds with an application/pdf content-type and a binary PDF
34
34
  */
35
35
  export type ResponseSchema = string;
36
- export default class PDFPost extends BrowserHTTPRoute {
36
+ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
37
+ name: string;
37
38
  accepts: contentTypes[];
38
39
  auth: boolean;
39
40
  browser: typeof ChromiumCDP;
@@ -1,6 +1,7 @@
1
- import { APITags, BadRequest, BrowserHTTPRoute, ChromiumCDP, HTTPRoutes, Methods, bestAttemptCatch, contentTypes, dedent, noop, sleep, waitForEvent as waitForEvt, waitForFunction as waitForFn, writeResponse, } from '@browserless.io/browserless';
1
+ import { APITags, BadRequest, BrowserHTTPRoute, BrowserlessRoutes, ChromiumCDP, HTTPRoutes, Methods, bestAttemptCatch, contentTypes, dedent, noop, sleep, waitForEvent as waitForEvt, waitForFunction as waitForFn, writeResponse, } from '@browserless.io/browserless';
2
2
  import { Stream } from 'stream';
3
- export default class PDFPost extends BrowserHTTPRoute {
3
+ export default class ChromiumPDFPostRoute extends BrowserHTTPRoute {
4
+ name = BrowserlessRoutes.ChromiumPDFPostRoute;
4
5
  accepts = [contentTypes.json];
5
6
  auth = true;
6
7
  browser = ChromiumCDP;
@@ -16,6 +16,7 @@ export interface QuerySchema extends SystemQueryParameters {
16
16
  */
17
17
  export type ResponseSchema = object;
18
18
  export default class PerformancePost extends BrowserHTTPRoute {
19
+ name: string;
19
20
  accepts: contentTypes[];
20
21
  auth: boolean;
21
22
  browser: typeof ChromiumCDP;
@@ -1,6 +1,7 @@
1
- import { APITags, BrowserHTTPRoute, ChromiumCDP, HTTPRoutes, Methods, contentTypes, jsonResponse, } from '@browserless.io/browserless';
1
+ import { APITags, BrowserHTTPRoute, BrowserlessRoutes, ChromiumCDP, HTTPRoutes, Methods, contentTypes, jsonResponse, } from '@browserless.io/browserless';
2
2
  import main from './utils/performance/main.js';
3
3
  export default class PerformancePost extends BrowserHTTPRoute {
4
+ name = BrowserlessRoutes.ChromiumPerformancePostRoute;
4
5
  accepts = [contentTypes.json];
5
6
  auth = true;
6
7
  browser = ChromiumCDP;
@@ -104,7 +104,8 @@ export interface ResponseSchema {
104
104
  screenshot: string | null;
105
105
  } | null;
106
106
  }
107
- export default class ScrapePost extends BrowserHTTPRoute {
107
+ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
108
+ name: string;
108
109
  accepts: contentTypes[];
109
110
  auth: boolean;
110
111
  browser: typeof ChromiumCDP;
@@ -1,4 +1,4 @@
1
- import { APITags, BadRequest, BrowserHTTPRoute, ChromiumCDP, HTTPRoutes, Methods, Timeout, bestAttemptCatch, contentTypes, debugScreenshotOpts, dedent, jsonResponse, noop, sleep, waitForEvent as waitForEvt, waitForFunction as waitForFn, } from '@browserless.io/browserless';
1
+ import { APITags, BadRequest, BrowserHTTPRoute, BrowserlessRoutes, ChromiumCDP, HTTPRoutes, Methods, Timeout, bestAttemptCatch, contentTypes, debugScreenshotOpts, dedent, jsonResponse, noop, sleep, waitForEvent as waitForEvt, waitForFunction as waitForFn, } from '@browserless.io/browserless';
2
2
  const scrape = async (elements) => {
3
3
  const wait = (selector, timeout = 30000) => {
4
4
  return new Promise((resolve, reject) => {
@@ -39,7 +39,8 @@ const scrape = async (elements) => {
39
39
  };
40
40
  });
41
41
  };
42
- export default class ScrapePost extends BrowserHTTPRoute {
42
+ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
43
+ name = BrowserlessRoutes.ChromiumScrapePostRoute;
43
44
  accepts = [contentTypes.json];
44
45
  auth = true;
45
46
  browser = ChromiumCDP;
@@ -36,6 +36,7 @@ export interface BodySchema {
36
36
  waitForTimeout?: number;
37
37
  }
38
38
  export default class ScreenshotPost extends BrowserHTTPRoute {
39
+ name: string;
39
40
  accepts: contentTypes[];
40
41
  auth: boolean;
41
42
  browser: typeof ChromiumCDP;
@@ -1,6 +1,7 @@
1
- import { APITags, BadRequest, BrowserHTTPRoute, ChromiumCDP, HTTPRoutes, Methods, bestAttemptCatch, contentTypes, dedent, noop, scrollThroughPage, sleep, waitForEvent as waitForEvt, waitForFunction as waitForFn, } from '@browserless.io/browserless';
1
+ import { APITags, BadRequest, BrowserHTTPRoute, BrowserlessRoutes, ChromiumCDP, HTTPRoutes, Methods, bestAttemptCatch, contentTypes, dedent, noop, scrollThroughPage, sleep, waitForEvent as waitForEvt, waitForFunction as waitForFn, } from '@browserless.io/browserless';
2
2
  import Stream from 'stream';
3
3
  export default class ScreenshotPost extends BrowserHTTPRoute {
4
+ name = BrowserlessRoutes.ChromiumScreenshotPostRoute;
4
5
  accepts = [contentTypes.json];
5
6
  auth = true;
6
7
  browser = ChromiumCDP;
@@ -4,9 +4,9 @@ import path from 'path';
4
4
  const DEFAULT_AUDIT_CONFIG = {
5
5
  extends: 'lighthouse:default',
6
6
  };
7
- const debug = createLogger('http:performance:main');
8
7
  export default async ({ browser, context, timeout, }) => {
9
8
  return new Promise((resolve, reject) => {
9
+ const debug = createLogger('http:performance:main');
10
10
  const childPath = path.join('./', 'build', 'shared', 'utils', 'performance', 'child.js');
11
11
  debug(`Starting up child at ${childPath}`);
12
12
  const child = fork(childPath);
package/build/types.d.ts CHANGED
@@ -56,6 +56,11 @@ declare abstract class Route {
56
56
  protected _metrics: Browserless['metrics'];
57
57
  protected _monitoring: Browserless['monitoring'];
58
58
  constructor(_browserManager: Browserless['browserManager'], _config: Browserless['config'], _fileSystem: Browserless['fileSystem'], _debug: Browserless['debug'], _metrics: Browserless['metrics'], _monitoring: Browserless['monitoring']);
59
+ /**
60
+ * A unique name to identify this route. Used in downstream
61
+ * SDKs to potentially remove or disable.
62
+ */
63
+ abstract name: string;
59
64
  /**
60
65
  * A boolean, or a function that returns a boolean, on
61
66
  * whether the route requires an API token to access.
@@ -472,4 +477,90 @@ export interface CDPJSONPayload {
472
477
  */
473
478
  webSocketDebuggerUrl: string;
474
479
  }
480
+ export declare const BrowserlessChromeRoutes: {
481
+ ChromeBrowserWebSocketRoute: string;
482
+ ChromeCDPWebSocketRoute: string;
483
+ ChromeContentPostRoute: string;
484
+ ChromeDownloadPostRoute: string;
485
+ ChromeFunctionPostRoute: string;
486
+ ChromeJSONListGetRoute: string;
487
+ ChromeJSONNewPutRoute: string;
488
+ ChromeJSONProtocolGetRoute: string;
489
+ ChromeJSONVersionGetRoute: string;
490
+ ChromePDFPostRoute: string;
491
+ ChromePageWebSocketRoute: string;
492
+ ChromePerformancePostRoute: string;
493
+ ChromePlaywrightWebSocketRoute: string;
494
+ ChromeScrapePostRoute: string;
495
+ ChromeScreenshotPostRoute: string;
496
+ };
497
+ export declare const BrowserlessChromiumRoutes: {
498
+ ChromiumBrowserWebSocketRoute: string;
499
+ ChromiumCDPWebSocketRoute: string;
500
+ ChromiumContentPostRoute: string;
501
+ ChromiumDownloadPostRoute: string;
502
+ ChromiumFunctionPostRoute: string;
503
+ ChromiumJSONListGetRoute: string;
504
+ ChromiumJSONNewPutRoute: string;
505
+ ChromiumJSONProtocolGetRoute: string;
506
+ ChromiumJSONVersionGetRoute: string;
507
+ ChromiumPDFPostRoute: string;
508
+ ChromiumPageWebSocketRoute: string;
509
+ ChromiumPerformancePostRoute: string;
510
+ ChromiumPlaywrightWebSocketRoute: string;
511
+ ChromiumScrapePostRoute: string;
512
+ ChromiumScreenshotPostRoute: string;
513
+ };
514
+ export declare const BrowserlessFirefoxRoutes: {
515
+ FirefoxPlaywrightWebSocketRoute: string;
516
+ };
517
+ export declare const BrowserlessWebKitRoutes: {
518
+ WebKitPlaywrightWebSocketRoute: string;
519
+ };
520
+ export declare const BrowserlessManagementRoutes: {
521
+ ConfigGetRoute: string;
522
+ MetricsGetRoute: string;
523
+ MetricsTotalGetRoute: string;
524
+ SessionsGetRoute: string;
525
+ StaticGetRoute: string;
526
+ };
527
+ export declare const BrowserlessRoutes: {
528
+ ConfigGetRoute: string;
529
+ MetricsGetRoute: string;
530
+ MetricsTotalGetRoute: string;
531
+ SessionsGetRoute: string;
532
+ StaticGetRoute: string;
533
+ WebKitPlaywrightWebSocketRoute: string;
534
+ FirefoxPlaywrightWebSocketRoute: string;
535
+ ChromiumBrowserWebSocketRoute: string;
536
+ ChromiumCDPWebSocketRoute: string;
537
+ ChromiumContentPostRoute: string;
538
+ ChromiumDownloadPostRoute: string;
539
+ ChromiumFunctionPostRoute: string;
540
+ ChromiumJSONListGetRoute: string;
541
+ ChromiumJSONNewPutRoute: string;
542
+ ChromiumJSONProtocolGetRoute: string;
543
+ ChromiumJSONVersionGetRoute: string;
544
+ ChromiumPDFPostRoute: string;
545
+ ChromiumPageWebSocketRoute: string;
546
+ ChromiumPerformancePostRoute: string;
547
+ ChromiumPlaywrightWebSocketRoute: string;
548
+ ChromiumScrapePostRoute: string;
549
+ ChromiumScreenshotPostRoute: string;
550
+ ChromeBrowserWebSocketRoute: string;
551
+ ChromeCDPWebSocketRoute: string;
552
+ ChromeContentPostRoute: string;
553
+ ChromeDownloadPostRoute: string;
554
+ ChromeFunctionPostRoute: string;
555
+ ChromeJSONListGetRoute: string;
556
+ ChromeJSONNewPutRoute: string;
557
+ ChromeJSONProtocolGetRoute: string;
558
+ ChromeJSONVersionGetRoute: string;
559
+ ChromePDFPostRoute: string;
560
+ ChromePageWebSocketRoute: string;
561
+ ChromePerformancePostRoute: string;
562
+ ChromePlaywrightWebSocketRoute: string;
563
+ ChromeScrapePostRoute: string;
564
+ ChromeScreenshotPostRoute: string;
565
+ };
475
566
  export {};
package/build/types.js CHANGED
@@ -139,3 +139,57 @@ export const debugScreenshotOpts = {
139
139
  quality: 20,
140
140
  type: 'jpeg',
141
141
  };
142
+ export const BrowserlessChromeRoutes = {
143
+ ChromeBrowserWebSocketRoute: 'ChromeBrowserWebSocketRoute',
144
+ ChromeCDPWebSocketRoute: 'ChromeCDPWebSocketRoute',
145
+ ChromeContentPostRoute: 'ChromeContentPostRoute',
146
+ ChromeDownloadPostRoute: 'ChromeDownloadPostRoute',
147
+ ChromeFunctionPostRoute: 'ChromeFunctionPostRoute',
148
+ ChromeJSONListGetRoute: 'ChromeJSONListGetRoute',
149
+ ChromeJSONNewPutRoute: 'ChromeJSONNewPutRoute',
150
+ ChromeJSONProtocolGetRoute: 'ChromeJSONProtocolGetRoute',
151
+ ChromeJSONVersionGetRoute: 'ChromeJSONVersionGetRoute',
152
+ ChromePDFPostRoute: 'ChromePDFPostRoute',
153
+ ChromePageWebSocketRoute: 'ChromePageWebSocketRoute',
154
+ ChromePerformancePostRoute: 'ChromePerformancePostRoute',
155
+ ChromePlaywrightWebSocketRoute: 'ChromePlaywrightWebSocketRoute',
156
+ ChromeScrapePostRoute: 'ChromeScrapePostRoute',
157
+ ChromeScreenshotPostRoute: 'ChromeScreenshotPostRoute',
158
+ };
159
+ export const BrowserlessChromiumRoutes = {
160
+ ChromiumBrowserWebSocketRoute: 'ChromiumBrowserWebSocketRoute',
161
+ ChromiumCDPWebSocketRoute: 'ChromiumCDPWebSocketRoute',
162
+ ChromiumContentPostRoute: 'ChromiumContentPostRoute',
163
+ ChromiumDownloadPostRoute: 'ChromiumDownloadPostRoute',
164
+ ChromiumFunctionPostRoute: 'ChromiumFunctionPostRoute',
165
+ ChromiumJSONListGetRoute: 'ChromiumJSONListGetRoute',
166
+ ChromiumJSONNewPutRoute: 'ChromiumJSONNewPutRoute',
167
+ ChromiumJSONProtocolGetRoute: 'ChromiumJSONProtocolGetRoute',
168
+ ChromiumJSONVersionGetRoute: 'ChromiumJSONVersionGetRoute',
169
+ ChromiumPDFPostRoute: 'ChromiumPDFPostRoute',
170
+ ChromiumPageWebSocketRoute: 'ChromiumPageWebSocketRoute',
171
+ ChromiumPerformancePostRoute: 'ChromiumPerformancePostRoute',
172
+ ChromiumPlaywrightWebSocketRoute: 'ChromiumPlaywrightWebSocketRoute',
173
+ ChromiumScrapePostRoute: 'ChromiumScrapePostRoute',
174
+ ChromiumScreenshotPostRoute: 'ChromiumScreenshotPostRoute',
175
+ };
176
+ export const BrowserlessFirefoxRoutes = {
177
+ FirefoxPlaywrightWebSocketRoute: 'FirefoxPlaywrightWebSocketRoute',
178
+ };
179
+ export const BrowserlessWebKitRoutes = {
180
+ WebKitPlaywrightWebSocketRoute: 'WebKitPlaywrightWebSocketRoute',
181
+ };
182
+ export const BrowserlessManagementRoutes = {
183
+ ConfigGetRoute: 'ConfigGetRoute',
184
+ MetricsGetRoute: 'MetricsGetRoute',
185
+ MetricsTotalGetRoute: 'MetricsTotalGetRoute',
186
+ SessionsGetRoute: 'SessionsGetRoute',
187
+ StaticGetRoute: 'StaticGetRoute',
188
+ };
189
+ export const BrowserlessRoutes = {
190
+ ...BrowserlessChromeRoutes,
191
+ ...BrowserlessChromiumRoutes,
192
+ ...BrowserlessFirefoxRoutes,
193
+ ...BrowserlessWebKitRoutes,
194
+ ...BrowserlessManagementRoutes,
195
+ };
package/build/utils.d.ts CHANGED
@@ -38,7 +38,7 @@ export declare const readBody: (req: Request) => Promise<ReturnType<typeof safeP
38
38
  * Lists the path of Chromes (stable) install since
39
39
  * no library or utility out there does it including playwright.
40
40
  */
41
- export declare const chromeExecutablePath: string;
41
+ export declare const chromeExecutablePath: () => string;
42
42
  export declare const getRouteFiles: (config: Config) => Promise<string[][]>;
43
43
  export declare const make404: (...messages: string[]) => string;
44
44
  /**
package/build/utils.js CHANGED
@@ -203,11 +203,16 @@ export const readBody = async (req) => {
203
203
  * Lists the path of Chromes (stable) install since
204
204
  * no library or utility out there does it including playwright.
205
205
  */
206
- export const chromeExecutablePath = process.platform === 'win32'
207
- ? `%ProgramFiles%\\Google\\Chrome\\Application\\chrome.exe`
208
- : process.platform === 'darwin'
209
- ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
210
- : '/usr/bin/google-chrome-stable';
206
+ export const chromeExecutablePath = () => {
207
+ if (process.platform === 'win32') {
208
+ // Windows always includes the ProgramFiles variable in the environment
209
+ return `${process.env['ProgramFiles']}\\Google\\Chrome\\Application\\chrome.exe`;
210
+ }
211
+ if (process.platform === 'darwin') {
212
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
213
+ }
214
+ return '/usr/bin/google-chrome-stable';
215
+ };
211
216
  export const getRouteFiles = async (config) => {
212
217
  const routes = config.getRoutes();
213
218
  const foundRoutes = await fs
@@ -300,7 +305,7 @@ export const availableBrowsers = Promise.all([
300
305
  exists(playwright.chromium.executablePath()),
301
306
  exists(playwright.firefox.executablePath()),
302
307
  exists(playwright.webkit.executablePath()),
303
- exists(chromeExecutablePath),
308
+ exists(chromeExecutablePath()),
304
309
  ]).then(([chromiumExists, firefoxExists, webkitExists, chromeExists]) => {
305
310
  const availableBrowsers = [];
306
311
  if (chromiumExists) {
@@ -26,8 +26,7 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
26
26
  fonts-ubuntu \
27
27
  fonts-wqy-zenhei
28
28
 
29
- RUN npx --yes playwright install chromium &&\
30
- npx --yes playwright install-deps chromium &&\
29
+ RUN ./node_modules/.bin/playwright-core install --with-deps chromium &&\
31
30
  npm run build &&\
32
31
  npm run build:function &&\
33
32
  npm prune production &&\
@@ -26,8 +26,7 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
26
26
  fonts-ubuntu \
27
27
  fonts-wqy-zenhei
28
28
 
29
- RUN npx --yes playwright install firefox &&\
30
- npx --yes playwright install-deps firefox &&\
29
+ RUN ./node_modules/.bin/playwright-core install --with-deps firefox &&\
31
30
  npm run build &&\
32
31
  npm prune production &&\
33
32
  chown -R blessuser:blessuser $APP_DIR &&\
@@ -29,14 +29,12 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
29
29
  # Chrome stable is only supported on non-ARM builds
30
30
  # so it's installation is conditional on whether or not amd64
31
31
  RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
32
- npx --yes playwright install-deps chrome &&\
33
- npx --yes playwright install chrome; \
32
+ ./node_modules/.bin/playwright-core install --with-deps chrome; \
34
33
  else \
35
34
  rm -rf ./src/routes/chrome; \
36
35
  fi
37
36
 
38
- RUN npx --yes playwright install chromium firefox webkit &&\
39
- npx --yes playwright install-deps chromium firefox webkit &&\
37
+ RUN ./node_modules/.bin/playwright-core install --with-deps chromium firefox webkit &&\
40
38
  npm run build &&\
41
39
  npm run build:function &&\
42
40
  npm prune production &&\
@@ -27,8 +27,7 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
27
27
  fonts-ubuntu \
28
28
  fonts-wqy-zenhei
29
29
 
30
- RUN npx --yes playwright install webkit &&\
31
- npx --yes playwright install-deps webkit &&\
30
+ RUN ./node_modules/.bin/playwright-core install --with-deps webkit &&\
32
31
  npm run build &&\
33
32
  npm prune production &&\
34
33
  chown -R blessuser:blessuser $APP_DIR &&\
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@browserless.io/browserless",
3
- "version": "2.2.0",
3
+ "version": "2.3.0-beta-2",
4
4
  "license": "SSPL",
5
5
  "description": "The browserless platform",
6
6
  "author": "browserless.io",
@@ -30,7 +30,8 @@
30
30
  "lint": "eslint . --ext .ts --fix",
31
31
  "prepack": "npm run build:dev",
32
32
  "prettier": "prettier '{src,functions,scripts,bin,external,bin}/**/*.{js,ts,json}' --log-level error --write",
33
- "test": "cross-env DEBUG=quiet mocha"
33
+ "test": "cross-env DEBUG=quiet mocha",
34
+ "start": "env-cmd -f .env node build"
34
35
  },
35
36
  "files": [
36
37
  "assets/*",
@@ -56,33 +57,32 @@
56
57
  "http-proxy": "^1.18.1",
57
58
  "lighthouse": "^11.1.0",
58
59
  "micromatch": "^4.0.4",
59
- "playwright-core": "^1.41.2",
60
- "puppeteer-core": "^22.1.0",
60
+ "playwright-core": "^1.42.0",
61
+ "puppeteer-core": "^22.3.0",
61
62
  "puppeteer-extra": "^3.3.6",
62
63
  "puppeteer-extra-plugin-stealth": "^2.11.2",
63
64
  "queue": "^7.0.0",
64
65
  "systeminformation": "^5.22.0"
65
66
  },
66
67
  "optionalDependencies": {
67
- "@types/chai": "^4.3.11",
68
+ "@types/chai": "^4.3.12",
68
69
  "@types/debug": "^4.1.12",
69
70
  "@types/gradient-string": "^1.1.5",
70
71
  "@types/http-proxy": "^1.17.14",
71
72
  "@types/micromatch": "^4.0.6",
72
73
  "@types/mocha": "^10.0.6",
73
- "@types/node": "^20.11.19",
74
+ "@types/node": "^20.11.21",
74
75
  "@types/sinon": "^17.0.3",
75
- "@typescript-eslint/eslint-plugin": "^7.0.0",
76
- "@typescript-eslint/parser": "^6.21.0",
76
+ "@typescript-eslint/eslint-plugin": "^7.1.0",
77
+ "@typescript-eslint/parser": "^7.1.0",
77
78
  "assert": "^2.0.0",
78
79
  "chai": "^5.1.0",
79
80
  "cross-env": "^7.0.3",
80
81
  "env-cmd": "^10.1.0",
81
82
  "esbuild": "^0.20.1",
82
83
  "esbuild-plugin-polyfill-node": "^0.3.0",
83
- "eslint": "^8.56.0",
84
- "eslint-plugin-import": "^2.29.1",
85
- "eslint-plugin-typescript-sort-keys": "^3.1.0",
84
+ "eslint": "^8.57.0",
85
+ "eslint-plugin-typescript-sort-keys": "^3.2.0",
86
86
  "extract-zip": "^2.0.1",
87
87
  "marked": "^12.0.0",
88
88
  "mocha": "^10.3.0",