@browserless.io/browserless 2.25.0-beta-2 → 2.25.0

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 (224) hide show
  1. package/CHANGELOG.md +39 -3
  2. package/README.md +4 -5
  3. package/build/browserless.js +3 -1
  4. package/build/browsers/browsers.cdp.d.ts +3 -0
  5. package/build/browsers/browsers.cdp.js +4 -1
  6. package/build/browsers/browsers.playwright.d.ts +4 -0
  7. package/build/browsers/browsers.playwright.js +11 -2
  8. package/build/browsers/index.js +4 -3
  9. package/build/http.d.ts +9 -0
  10. package/build/http.js +9 -0
  11. package/build/routes/chrome/http/content.post.body.json +8 -8
  12. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  13. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  14. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  15. package/build/routes/chrome/tests/kill-sessions.spec.js +1 -1
  16. package/build/routes/chromium/http/content.post.body.json +8 -8
  17. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  18. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  19. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  20. package/build/routes/chromium/tests/kill-sessions.spec.js +1 -1
  21. package/build/routes/edge/http/content.post.body.json +579 -0
  22. package/build/routes/edge/http/content.post.d.ts +8 -0
  23. package/build/routes/edge/http/content.post.js +7 -0
  24. package/build/routes/edge/http/content.post.query.json +183 -0
  25. package/build/routes/edge/http/content.post.response.json +5 -0
  26. package/build/routes/edge/http/download.post.body.json +32 -0
  27. package/build/routes/edge/http/download.post.d.ts +8 -0
  28. package/build/routes/edge/http/download.post.js +7 -0
  29. package/build/routes/edge/http/download.post.query.json +120 -0
  30. package/build/routes/edge/http/download.post.response.json +4 -0
  31. package/build/routes/edge/http/function.post.body.json +32 -0
  32. package/build/routes/edge/http/function.post.d.ts +8 -0
  33. package/build/routes/edge/http/function.post.js +7 -0
  34. package/build/routes/edge/http/function.post.query.json +120 -0
  35. package/build/routes/edge/http/function.post.response.json +4 -0
  36. package/build/routes/edge/http/json-list.get.d.ts +5 -0
  37. package/build/routes/edge/http/json-list.get.js +5 -0
  38. package/build/routes/edge/http/json-list.get.response.json +52 -0
  39. package/build/routes/edge/http/json-new.put.d.ts +5 -0
  40. package/build/routes/edge/http/json-new.put.js +5 -0
  41. package/build/routes/edge/http/json-new.put.response.json +44 -0
  42. package/build/routes/edge/http/json-protocol.get.d.ts +5 -0
  43. package/build/routes/edge/http/json-protocol.get.js +5 -0
  44. package/build/routes/edge/http/json-protocol.get.response.json +6 -0
  45. package/build/routes/edge/http/json-version.get.d.ts +5 -0
  46. package/build/routes/edge/http/json-version.get.js +5 -0
  47. package/build/routes/edge/http/json-version.get.response.json +44 -0
  48. package/build/routes/edge/http/pdf.post.body.json +724 -0
  49. package/build/routes/edge/http/pdf.post.d.ts +8 -0
  50. package/build/routes/edge/http/pdf.post.js +7 -0
  51. package/build/routes/edge/http/pdf.post.query.json +120 -0
  52. package/build/routes/edge/http/pdf.post.response.json +5 -0
  53. package/build/routes/edge/http/performance.post.body.json +26 -0
  54. package/build/routes/edge/http/performance.post.d.ts +8 -0
  55. package/build/routes/edge/http/performance.post.js +7 -0
  56. package/build/routes/edge/http/performance.post.query.json +120 -0
  57. package/build/routes/edge/http/performance.post.response.json +7 -0
  58. package/build/routes/edge/http/scrape.post.body.json +626 -0
  59. package/build/routes/edge/http/scrape.post.d.ts +8 -0
  60. package/build/routes/edge/http/scrape.post.js +7 -0
  61. package/build/routes/edge/http/scrape.post.query.json +183 -0
  62. package/build/routes/edge/http/scrape.post.response.json +334 -0
  63. package/build/routes/edge/http/screenshot.post.body.json +669 -0
  64. package/build/routes/edge/http/screenshot.post.d.ts +8 -0
  65. package/build/routes/edge/http/screenshot.post.js +7 -0
  66. package/build/routes/edge/http/screenshot.post.query.json +120 -0
  67. package/build/routes/edge/http/screenshot.post.response.json +5 -0
  68. package/build/routes/edge/tests/content.spec.d.ts +1 -0
  69. package/build/routes/edge/tests/content.spec.js +312 -0
  70. package/build/routes/edge/tests/download.spec.d.ts +1 -0
  71. package/build/routes/edge/tests/download.spec.js +67 -0
  72. package/build/routes/edge/tests/function.spec.d.ts +1 -0
  73. package/build/routes/edge/tests/function.spec.js +277 -0
  74. package/build/routes/edge/tests/json-version.spec.d.ts +1 -0
  75. package/build/routes/edge/tests/json-version.spec.js +37 -0
  76. package/build/routes/edge/tests/kill-sessions.spec.d.ts +1 -0
  77. package/build/routes/edge/tests/kill-sessions.spec.js +80 -0
  78. package/build/routes/edge/tests/page-websocket.spec.d.ts +1 -0
  79. package/build/routes/edge/tests/page-websocket.spec.js +97 -0
  80. package/build/routes/edge/tests/pdf.spec.d.ts +1 -0
  81. package/build/routes/edge/tests/pdf.spec.js +345 -0
  82. package/build/routes/edge/tests/performance.spec.d.ts +1 -0
  83. package/build/routes/edge/tests/performance.spec.js +124 -0
  84. package/build/routes/edge/tests/scrape.spec.d.ts +1 -0
  85. package/build/routes/edge/tests/scrape.spec.js +354 -0
  86. package/build/routes/edge/tests/screenshot.spec.d.ts +1 -0
  87. package/build/routes/edge/tests/screenshot.spec.js +339 -0
  88. package/build/routes/edge/tests/websocket.spec.d.ts +1 -0
  89. package/build/routes/edge/tests/websocket.spec.js +384 -0
  90. package/build/routes/edge/ws/browser.d.ts +7 -0
  91. package/build/routes/edge/ws/browser.js +6 -0
  92. package/build/routes/edge/ws/browser.query.json +120 -0
  93. package/build/routes/edge/ws/cdp.d.ts +8 -0
  94. package/build/routes/edge/ws/cdp.js +7 -0
  95. package/build/routes/edge/ws/cdp.query.json +120 -0
  96. package/build/routes/edge/ws/page.d.ts +8 -0
  97. package/build/routes/edge/ws/page.js +7 -0
  98. package/build/routes/edge/ws/page.query.json +120 -0
  99. package/build/routes/edge/ws/playwright.d.ts +8 -0
  100. package/build/routes/edge/ws/playwright.js +7 -0
  101. package/build/routes/edge/ws/playwright.query.json +100 -0
  102. package/build/routes/firefox/tests/kill-sessions.spec.js +1 -1
  103. package/build/routes/management/http/meta.get.js +3 -1
  104. package/build/routes/webkit/tests/kill-sessions.spec.js +1 -1
  105. package/build/sdk-utils.js +1 -1
  106. package/build/shared/scrape.http.js +2 -2
  107. package/build/types.d.ts +32 -0
  108. package/build/types.js +18 -0
  109. package/build/utils.d.ts +1 -0
  110. package/build/utils.js +16 -2
  111. package/docker/chrome/Dockerfile +14 -14
  112. package/docker/chromium/Dockerfile +14 -14
  113. package/docker/edge/.dockerignore +16 -0
  114. package/docker/edge/Dockerfile +43 -0
  115. package/docker/firefox/Dockerfile +14 -14
  116. package/docker/multi/Dockerfile +18 -18
  117. package/docker/sdk/Dockerfile +10 -0
  118. package/extensions/ublock/_locales/ar/messages.json +3 -3
  119. package/extensions/ublock/_locales/bg/messages.json +1 -1
  120. package/extensions/ublock/_locales/br_FR/messages.json +2 -2
  121. package/extensions/ublock/_locales/cy/messages.json +11 -11
  122. package/extensions/ublock/_locales/el/messages.json +2 -2
  123. package/extensions/ublock/_locales/hu/messages.json +1 -1
  124. package/extensions/ublock/_locales/id/messages.json +1 -1
  125. package/extensions/ublock/_locales/lv/messages.json +4 -4
  126. package/extensions/ublock/_locales/mk/messages.json +130 -130
  127. package/extensions/ublock/_locales/oc/messages.json +1 -1
  128. package/extensions/ublock/_locales/pt_BR/messages.json +1 -1
  129. package/extensions/ublock/_locales/pt_PT/messages.json +2 -2
  130. package/extensions/ublock/_locales/si/messages.json +100 -100
  131. package/extensions/ublock/_locales/sr/messages.json +4 -4
  132. package/extensions/ublock/_locales/vi/messages.json +19 -19
  133. package/extensions/ublock/_locales/zh_TW/messages.json +28 -28
  134. package/extensions/ublock/assets/assets.json +33 -29
  135. package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +2984 -3287
  136. package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +150 -171
  137. package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +37 -27
  138. package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +802 -888
  139. package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2355 -2071
  140. package/extensions/ublock/assets/ublock/badlists.txt +9 -1
  141. package/extensions/ublock/assets/ublock/badware.min.txt +354 -243
  142. package/extensions/ublock/assets/ublock/filters.min.txt +5837 -5737
  143. package/extensions/ublock/assets/ublock/privacy.min.txt +151 -38
  144. package/extensions/ublock/assets/ublock/quick-fixes.min.txt +83 -127
  145. package/extensions/ublock/assets/ublock/unbreak.min.txt +66 -50
  146. package/extensions/ublock/css/codemirror.css +4 -0
  147. package/extensions/ublock/document-blocked.html +3 -1
  148. package/extensions/ublock/js/arglist-parser.js +116 -0
  149. package/extensions/ublock/js/background.js +1 -1
  150. package/extensions/ublock/js/logger-ui.js +1 -1
  151. package/extensions/ublock/js/messaging.js +9 -2
  152. package/extensions/ublock/js/pagestore.js +3 -1
  153. package/extensions/ublock/js/redirect-engine.js +3 -1
  154. package/extensions/ublock/{assets/resources/set-attr.js → js/resources/attribute.js} +115 -11
  155. package/extensions/ublock/js/resources/base.js +38 -0
  156. package/extensions/ublock/js/resources/cookie.js +419 -0
  157. package/extensions/ublock/js/resources/href-sanitizer.js +188 -0
  158. package/extensions/ublock/js/resources/localstorage.js +235 -0
  159. package/extensions/ublock/js/resources/parse-replace.js +54 -0
  160. package/extensions/ublock/js/resources/prevent-settimeout.js +236 -0
  161. package/extensions/ublock/js/resources/proxy-apply.js +109 -0
  162. package/extensions/ublock/js/resources/replace-argument.js +120 -0
  163. package/extensions/ublock/{assets → js}/resources/run-at.js +20 -4
  164. package/extensions/ublock/{assets → js}/resources/safe-self.js +5 -4
  165. package/extensions/ublock/{assets → js}/resources/scriptlets.js +90 -1589
  166. package/extensions/ublock/js/resources/set-constant.js +287 -0
  167. package/extensions/ublock/js/resources/shared.js +44 -0
  168. package/extensions/ublock/js/resources/spoof-css.js +163 -0
  169. package/extensions/ublock/js/s14e-serializer.js +2 -1
  170. package/extensions/ublock/js/scriptlet-filtering-core.js +1 -1
  171. package/extensions/ublock/js/scriptlet-filtering.js +1 -31
  172. package/extensions/ublock/js/static-dnr-filtering.js +143 -129
  173. package/extensions/ublock/js/static-filtering-parser.js +27 -117
  174. package/extensions/ublock/js/static-net-filtering.js +53 -141
  175. package/extensions/ublock/js/traffic.js +1 -1
  176. package/extensions/ublock/js/urlskip.js +166 -0
  177. package/extensions/ublock/js/vapi-background-ext.js +38 -14
  178. package/extensions/ublock/manifest.json +1 -1
  179. package/package.json +22 -22
  180. package/src/browserless.ts +4 -0
  181. package/src/browsers/browsers.cdp.ts +5 -0
  182. package/src/browsers/browsers.playwright.ts +14 -1
  183. package/src/browsers/index.ts +5 -2
  184. package/src/http.ts +9 -0
  185. package/src/routes/chrome/tests/kill-sessions.spec.ts +1 -1
  186. package/src/routes/chromium/tests/kill-sessions.spec.ts +1 -1
  187. package/src/routes/edge/http/content.post.ts +20 -0
  188. package/src/routes/edge/http/download.post.ts +20 -0
  189. package/src/routes/edge/http/function.post.ts +20 -0
  190. package/src/routes/edge/http/json-list.get.ts +7 -0
  191. package/src/routes/edge/http/json-new.put.ts +7 -0
  192. package/src/routes/edge/http/json-protocol.get.ts +7 -0
  193. package/src/routes/edge/http/json-version.get.ts +7 -0
  194. package/src/routes/edge/http/pdf.post.ts +20 -0
  195. package/src/routes/edge/http/performance.post.ts +20 -0
  196. package/src/routes/edge/http/scrape.post.ts +20 -0
  197. package/src/routes/edge/http/screenshot.post.ts +20 -0
  198. package/src/routes/edge/tests/content.spec.ts +376 -0
  199. package/src/routes/edge/tests/download.spec.ts +77 -0
  200. package/src/routes/edge/tests/function.spec.ts +317 -0
  201. package/src/routes/edge/tests/json-version.spec.ts +52 -0
  202. package/src/routes/edge/tests/kill-sessions.spec.ts +99 -0
  203. package/src/routes/edge/tests/page-websocket.spec.ts +129 -0
  204. package/src/routes/edge/tests/pdf.spec.ts +389 -0
  205. package/src/routes/edge/tests/performance.spec.ts +155 -0
  206. package/src/routes/edge/tests/scrape.spec.ts +417 -0
  207. package/src/routes/edge/tests/screenshot.spec.ts +387 -0
  208. package/src/routes/edge/tests/websocket.spec.ts +510 -0
  209. package/src/routes/edge/ws/browser.ts +10 -0
  210. package/src/routes/edge/ws/cdp.ts +17 -0
  211. package/src/routes/edge/ws/page.ts +10 -0
  212. package/src/routes/edge/ws/playwright.ts +17 -0
  213. package/src/routes/firefox/tests/kill-sessions.spec.ts +1 -1
  214. package/src/routes/management/http/meta.get.ts +6 -1
  215. package/src/routes/management/http/static.get.ts +1 -1
  216. package/src/routes/webkit/tests/kill-sessions.spec.ts +1 -1
  217. package/src/sdk-utils.ts +1 -1
  218. package/src/shared/scrape.http.ts +2 -2
  219. package/src/types.ts +19 -0
  220. package/src/utils.ts +38 -16
  221. package/static/docs/swagger.json +2097 -10
  222. package/static/docs/swagger.min.json +2096 -9
  223. package/static/function/client.js +141 -253
  224. package/static/function/index.html +141 -253
@@ -0,0 +1,120 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "launch": {
5
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
6
+ "anyOf": [
7
+ {
8
+ "$ref": "#/definitions/CDPLaunchOptions"
9
+ },
10
+ {
11
+ "type": "string"
12
+ }
13
+ ]
14
+ },
15
+ "blockAds": {
16
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
17
+ "type": "boolean"
18
+ },
19
+ "timeout": {
20
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
21
+ "type": "number"
22
+ },
23
+ "token": {
24
+ "description": "The authorization token",
25
+ "type": "string"
26
+ },
27
+ "trackingId": {
28
+ "description": "Custom session identifier",
29
+ "type": "string"
30
+ }
31
+ },
32
+ "additionalProperties": false,
33
+ "definitions": {
34
+ "CDPLaunchOptions": {
35
+ "type": "object",
36
+ "properties": {
37
+ "args": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string"
41
+ }
42
+ },
43
+ "defaultViewport": {
44
+ "type": "object",
45
+ "properties": {
46
+ "deviceScaleFactor": {
47
+ "type": "number"
48
+ },
49
+ "hasTouch": {
50
+ "type": "boolean"
51
+ },
52
+ "height": {
53
+ "type": "number"
54
+ },
55
+ "isLandscape": {
56
+ "type": "boolean"
57
+ },
58
+ "isMobile": {
59
+ "type": "boolean"
60
+ },
61
+ "width": {
62
+ "type": "number"
63
+ }
64
+ },
65
+ "additionalProperties": false,
66
+ "required": [
67
+ "height",
68
+ "width"
69
+ ]
70
+ },
71
+ "devtools": {
72
+ "type": "boolean"
73
+ },
74
+ "dumpio": {
75
+ "type": "boolean"
76
+ },
77
+ "headless": {
78
+ "enum": [
79
+ false,
80
+ "shell",
81
+ true
82
+ ]
83
+ },
84
+ "ignoreDefaultArgs": {
85
+ "anyOf": [
86
+ {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "string"
90
+ }
91
+ },
92
+ {
93
+ "type": "boolean"
94
+ }
95
+ ]
96
+ },
97
+ "ignoreHTTPSErrors": {
98
+ "type": "boolean"
99
+ },
100
+ "slowMo": {
101
+ "type": "number"
102
+ },
103
+ "stealth": {
104
+ "type": "boolean"
105
+ },
106
+ "timeout": {
107
+ "type": "number"
108
+ },
109
+ "userDataDir": {
110
+ "type": "string"
111
+ },
112
+ "waitForInitialPage": {
113
+ "type": "boolean"
114
+ }
115
+ },
116
+ "additionalProperties": false
117
+ }
118
+ },
119
+ "$schema": "http://json-schema.org/draft-07/schema#"
120
+ }
@@ -0,0 +1,8 @@
1
+ import { EdgePlaywright, WebsocketRoutes } from '@browserless.io/browserless';
2
+ import { default as ChromiumPlaywrightWebSocketRoute, QuerySchema } from '../../../shared/chromium.playwright.ws.js';
3
+ export default class EdgePlaywrightWebSocketRoute extends ChromiumPlaywrightWebSocketRoute {
4
+ name: string;
5
+ browser: typeof EdgePlaywright;
6
+ path: WebsocketRoutes[];
7
+ }
8
+ export { QuerySchema };
@@ -0,0 +1,7 @@
1
+ import { BrowserlessRoutes, EdgePlaywright, WebsocketRoutes, } from '@browserless.io/browserless';
2
+ import { default as ChromiumPlaywrightWebSocketRoute, } from '../../../shared/chromium.playwright.ws.js';
3
+ export default class EdgePlaywrightWebSocketRoute extends ChromiumPlaywrightWebSocketRoute {
4
+ name = BrowserlessRoutes.EdgePlaywrightWebSocketRoute;
5
+ browser = EdgePlaywright;
6
+ path = [WebsocketRoutes.edgePlaywright];
7
+ }
@@ -0,0 +1,100 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "launch": {
5
+ "description": "Launch options, which can be either an object\nof puppeteer.launch options or playwright.launchServer\noptions, depending on the API. Must be either JSON\nobject, or a base64-encoded JSON object.",
6
+ "anyOf": [
7
+ {
8
+ "$ref": "#/definitions/BrowserServerOptions"
9
+ },
10
+ {
11
+ "type": "string"
12
+ }
13
+ ]
14
+ },
15
+ "blockAds": {
16
+ "description": "Whether or nor to load ad-blocking extensions for the session.\nThis currently uses uBlock Origin and may cause certain sites\nto not load properly.",
17
+ "type": "boolean"
18
+ },
19
+ "timeout": {
20
+ "description": "Override the system-level timeout for this request.\nAccepts a value in milliseconds.",
21
+ "type": "number"
22
+ },
23
+ "token": {
24
+ "description": "The authorization token",
25
+ "type": "string"
26
+ },
27
+ "trackingId": {
28
+ "description": "Custom session identifier",
29
+ "type": "string"
30
+ }
31
+ },
32
+ "additionalProperties": false,
33
+ "definitions": {
34
+ "BrowserServerOptions": {
35
+ "type": "object",
36
+ "properties": {
37
+ "args": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string"
41
+ }
42
+ },
43
+ "chromiumSandbox": {
44
+ "type": "boolean"
45
+ },
46
+ "devtools": {
47
+ "type": "boolean"
48
+ },
49
+ "downloadsPath": {
50
+ "type": "string"
51
+ },
52
+ "headless": {
53
+ "type": "boolean"
54
+ },
55
+ "ignoreDefaultArgs": {
56
+ "anyOf": [
57
+ {
58
+ "type": "array",
59
+ "items": {
60
+ "type": "string"
61
+ }
62
+ },
63
+ {
64
+ "type": "boolean"
65
+ }
66
+ ]
67
+ },
68
+ "proxy": {
69
+ "type": "object",
70
+ "properties": {
71
+ "bypass": {
72
+ "type": "string"
73
+ },
74
+ "password": {
75
+ "type": "string"
76
+ },
77
+ "server": {
78
+ "type": "string"
79
+ },
80
+ "username": {
81
+ "type": "string"
82
+ }
83
+ },
84
+ "additionalProperties": false,
85
+ "required": [
86
+ "server"
87
+ ]
88
+ },
89
+ "timeout": {
90
+ "type": "number"
91
+ },
92
+ "tracesDir": {
93
+ "type": "string"
94
+ }
95
+ },
96
+ "additionalProperties": false
97
+ }
98
+ },
99
+ "$schema": "http://json-schema.org/draft-07/schema#"
100
+ }
@@ -34,7 +34,7 @@ describe('/kill API firefox', function () {
34
34
  }
35
35
  expect(errorThrown1.message).contains('closed');
36
36
  expect(errorThrown2.message).contains('closed');
37
- });
37
+ }).timeout(45000);
38
38
  it('Kill session by browserId', async () => {
39
39
  await start();
40
40
  const browser = await firefox.connect(`ws://localhost:3000/playwright/firefox?token=browserless`);
@@ -1,9 +1,11 @@
1
1
  import { APITags, BrowserlessRoutes, ChromiumCDP, FirefoxPlaywright, HTTPManagementRoutes, HTTPRoute, Methods, WebKitPlaywright, availableBrowsers, contentTypes, jsonResponse, } from '@browserless.io/browserless';
2
2
  import { createRequire } from 'module';
3
+ import { fileURLToPath } from 'url';
3
4
  import path from 'path';
5
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
4
6
  const semverReg = /(\*|\^|>|=|<|~)/gi;
5
7
  const require = createRequire(import.meta.url);
6
- const blessPackageJSON = require(path.join(process.cwd(), 'package.json'));
8
+ const blessPackageJSON = require(path.join(__dirname, '..', '..', '..', '..', 'package.json'));
7
9
  const { browsers } = require(path.join(process.cwd(), 'node_modules', 'playwright-core', 'browsers.json'));
8
10
  const chromium = browsers.find((b) => b.name === 'chromium').browserVersion;
9
11
  const firefox = browsers.find((b) => b.name === 'firefox').browserVersion;
@@ -34,7 +34,7 @@ describe('/kill API webkit', function () {
34
34
  }
35
35
  expect(errorThrown1.message).contains('closed');
36
36
  expect(errorThrown2.message).contains('closed');
37
- });
37
+ }).timeout(45000);
38
38
  it('Kill session by browserId', async () => {
39
39
  await start();
40
40
  const browser = await webkit.connect(`ws://localhost:3000/webkit/playwright?token=browserless`);
@@ -72,7 +72,7 @@ export const installDependencies = async (workingDirectory) => {
72
72
  await installBrowsers(workingDirectory);
73
73
  };
74
74
  export const installBrowsers = async (workingDirectory) => {
75
- await waitForCommand('./node_modules/playwright-core/cli.js install --with-deps chromium firefox webkit', workingDirectory);
75
+ await waitForCommand('./node_modules/playwright-core/cli.js install --with-deps chromium firefox webkit msedge', workingDirectory);
76
76
  };
77
77
  export const buildDockerImage = async (cmd, projectDir) => waitForCommand(cmd, projectDir);
78
78
  export const buildTypeScript = async (buildDir, projectDir) => waitForCommand(`npx tsc --outDir ${buildDir}`, projectDir);
@@ -80,7 +80,7 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
80
80
  page.setRequestInterception(true);
81
81
  page.on('request', (req) => {
82
82
  outbound.push({
83
- headers: req.headers,
83
+ headers: req.headers(),
84
84
  method: req.method(),
85
85
  url: req.url(),
86
86
  });
@@ -88,7 +88,7 @@ export default class ChromiumScrapePostRoute extends BrowserHTTPRoute {
88
88
  });
89
89
  page.on('response', (res) => {
90
90
  inbound.push({
91
- headers: res.headers,
91
+ headers: res.headers(),
92
92
  status: res.status(),
93
93
  url: res.url(),
94
94
  });
package/build/types.d.ts CHANGED
@@ -494,6 +494,23 @@ export declare const BrowserlessChromeRoutes: {
494
494
  ChromeScrapePostRoute: string;
495
495
  ChromeScreenshotPostRoute: string;
496
496
  };
497
+ export declare const BrowserlessEdgeRoutes: {
498
+ EdgeBrowserWebSocketRoute: string;
499
+ EdgeCDPWebSocketRoute: string;
500
+ EdgeContentPostRoute: string;
501
+ EdgeDownloadPostRoute: string;
502
+ EdgeFunctionPostRoute: string;
503
+ EdgeJSONListGetRoute: string;
504
+ EdgeJSONNewPutRoute: string;
505
+ EdgeJSONProtocolGetRoute: string;
506
+ EdgeJSONVersionGetRoute: string;
507
+ EdgePDFPostRoute: string;
508
+ EdgePageWebSocketRoute: string;
509
+ EdgePerformancePostRoute: string;
510
+ EdgePlaywrightWebSocketRoute: string;
511
+ EdgeScrapePostRoute: string;
512
+ EdgeScreenshotPostRoute: string;
513
+ };
497
514
  export declare const BrowserlessChromiumRoutes: {
498
515
  ChromiumBrowserWebSocketRoute: string;
499
516
  ChromiumCDPWebSocketRoute: string;
@@ -540,6 +557,21 @@ export declare const BrowserlessRoutes: {
540
557
  StaticGetRoute: string;
541
558
  WebKitPlaywrightWebSocketRoute: string;
542
559
  FirefoxPlaywrightWebSocketRoute: string;
560
+ EdgeBrowserWebSocketRoute: string;
561
+ EdgeCDPWebSocketRoute: string;
562
+ EdgeContentPostRoute: string;
563
+ EdgeDownloadPostRoute: string;
564
+ EdgeFunctionPostRoute: string;
565
+ EdgeJSONListGetRoute: string;
566
+ EdgeJSONNewPutRoute: string;
567
+ EdgeJSONProtocolGetRoute: string;
568
+ EdgeJSONVersionGetRoute: string;
569
+ EdgePDFPostRoute: string;
570
+ EdgePageWebSocketRoute: string;
571
+ EdgePerformancePostRoute: string;
572
+ EdgePlaywrightWebSocketRoute: string;
573
+ EdgeScrapePostRoute: string;
574
+ EdgeScreenshotPostRoute: string;
543
575
  ChromiumBrowserWebSocketRoute: string;
544
576
  ChromiumCDPWebSocketRoute: string;
545
577
  ChromiumContentPostRoute: string;
package/build/types.js CHANGED
@@ -164,6 +164,23 @@ export const BrowserlessChromeRoutes = {
164
164
  ChromeScrapePostRoute: 'ChromeScrapePostRoute',
165
165
  ChromeScreenshotPostRoute: 'ChromeScreenshotPostRoute',
166
166
  };
167
+ export const BrowserlessEdgeRoutes = {
168
+ EdgeBrowserWebSocketRoute: 'EdgeBrowserWebSocketRoute',
169
+ EdgeCDPWebSocketRoute: 'EdgeCDPWebSocketRoute',
170
+ EdgeContentPostRoute: 'EdgeContentPostRoute',
171
+ EdgeDownloadPostRoute: 'EdgeDownloadPostRoute',
172
+ EdgeFunctionPostRoute: 'EdgeFunctionPostRoute',
173
+ EdgeJSONListGetRoute: 'EdgeJSONListGetRoute',
174
+ EdgeJSONNewPutRoute: 'EdgeJSONNewPutRoute',
175
+ EdgeJSONProtocolGetRoute: 'EdgeJSONProtocolGetRoute',
176
+ EdgeJSONVersionGetRoute: 'EdgeJSONVersionGetRoute',
177
+ EdgePDFPostRoute: 'EdgePDFPostRoute',
178
+ EdgePageWebSocketRoute: 'EdgePageWebSocketRoute',
179
+ EdgePerformancePostRoute: 'EdgePerformancePostRoute',
180
+ EdgePlaywrightWebSocketRoute: 'EdgePlaywrightWebSocketRoute',
181
+ EdgeScrapePostRoute: 'EdgeScrapePostRoute',
182
+ EdgeScreenshotPostRoute: 'EdgeScreenshotPostRoute',
183
+ };
167
184
  export const BrowserlessChromiumRoutes = {
168
185
  ChromiumBrowserWebSocketRoute: 'ChromiumBrowserWebSocketRoute',
169
186
  ChromiumCDPWebSocketRoute: 'ChromiumCDPWebSocketRoute',
@@ -201,6 +218,7 @@ export const BrowserlessManagementRoutes = {
201
218
  export const BrowserlessRoutes = {
202
219
  ...BrowserlessChromeRoutes,
203
220
  ...BrowserlessChromiumRoutes,
221
+ ...BrowserlessEdgeRoutes,
204
222
  ...BrowserlessFirefoxRoutes,
205
223
  ...BrowserlessWebKitRoutes,
206
224
  ...BrowserlessManagementRoutes,
package/build/utils.d.ts CHANGED
@@ -53,6 +53,7 @@ export declare const readBody: (req: Request) => Promise<ReturnType<typeof safeP
53
53
  * no library or utility out there does it including playwright.
54
54
  */
55
55
  export declare const chromeExecutablePath: () => string;
56
+ export declare const edgeExecutablePath: () => string;
56
57
  export declare const getRouteFiles: (config: Config) => Promise<string[][]>;
57
58
  export declare const make404: (...messages: string[]) => string;
58
59
  /**
package/build/utils.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as fs from 'fs/promises';
2
- import { BLESS_PAGE_IDENTIFIER, ChromeCDP, ChromePlaywright, ChromiumCDP, ChromiumPlaywright, FirefoxPlaywright, WebKitPlaywright, codes, contentTypes, encodings, encryptionAlgo, encryptionSep, } from '@browserless.io/browserless';
2
+ import { BLESS_PAGE_IDENTIFIER, ChromeCDP, ChromePlaywright, ChromiumCDP, ChromiumPlaywright, EdgeCDP, EdgePlaywright, FirefoxPlaywright, WebKitPlaywright, codes, contentTypes, encodings, encryptionAlgo, encryptionSep, } from '@browserless.io/browserless';
3
3
  import playwright from 'playwright-core';
4
4
  import crypto from 'crypto';
5
5
  import debug from 'debug';
@@ -239,6 +239,16 @@ export const chromeExecutablePath = () => {
239
239
  }
240
240
  return '/usr/bin/google-chrome-stable';
241
241
  };
242
+ export const edgeExecutablePath = () => {
243
+ if (process.platform === 'win32') {
244
+ // Windows always includes the ProgramFiles variable in the environment
245
+ return `${process.env['ProgramFiles(x86)']}\\Microsoft\\Edge\\Application\\msedge.exe`;
246
+ }
247
+ if (process.platform === 'darwin') {
248
+ return '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge';
249
+ }
250
+ return '/usr/bin/microsoft-edge-stable';
251
+ };
242
252
  export const getRouteFiles = async (config) => {
243
253
  const routes = config.getRoutes();
244
254
  const foundRoutes = await fs
@@ -332,7 +342,8 @@ export const availableBrowsers = Promise.all([
332
342
  exists(playwright.firefox.executablePath()),
333
343
  exists(playwright.webkit.executablePath()),
334
344
  exists(chromeExecutablePath()),
335
- ]).then(([chromiumExists, firefoxExists, webkitExists, chromeExists]) => {
345
+ exists(edgeExecutablePath()),
346
+ ]).then(([chromiumExists, firefoxExists, webkitExists, chromeExists, edgeExists]) => {
336
347
  const availableBrowsers = [];
337
348
  if (chromiumExists) {
338
349
  availableBrowsers.push(ChromiumCDP, ChromiumPlaywright);
@@ -346,6 +357,9 @@ export const availableBrowsers = Promise.all([
346
357
  if (webkitExists) {
347
358
  availableBrowsers.push(WebKitPlaywright);
348
359
  }
360
+ if (edgeExists) {
361
+ availableBrowsers.push(EdgeCDP, EdgePlaywright);
362
+ }
349
363
  return availableBrowsers;
350
364
  });
351
365
  export const queryParamsToObject = (params) => [...params.entries()].reduce((accum, [key, value]) => {
@@ -12,20 +12,20 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
12
12
  apt-get -y -qq install software-properties-common &&\
13
13
  apt-add-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -sc) partner" && \
14
14
  apt-get -y -qq --no-install-recommends install \
15
- fontconfig \
16
- fonts-freefont-ttf \
17
- fonts-gfs-neohellenic \
18
- fonts-indic \
19
- fonts-ipafont-gothic \
20
- fonts-kacst \
21
- fonts-liberation \
22
- fonts-noto-cjk \
23
- fonts-noto-color-emoji \
24
- fonts-roboto \
25
- fonts-thai-tlwg \
26
- fonts-ubuntu \
27
- fonts-wqy-zenhei \
28
- fonts-open-sans
15
+ fontconfig \
16
+ fonts-freefont-ttf \
17
+ fonts-gfs-neohellenic \
18
+ fonts-indic \
19
+ fonts-ipafont-gothic \
20
+ fonts-kacst \
21
+ fonts-liberation \
22
+ fonts-noto-cjk \
23
+ fonts-noto-color-emoji \
24
+ fonts-roboto \
25
+ fonts-thai-tlwg \
26
+ fonts-ubuntu \
27
+ fonts-wqy-zenhei \
28
+ fonts-open-sans
29
29
 
30
30
  # NOTE it's important to not use npx playwright-core here since it'll likely install
31
31
  # a more recent version than we potentially have in our own package.json
@@ -12,20 +12,20 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
12
12
  apt-get -y -qq install software-properties-common &&\
13
13
  apt-add-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -sc) partner" && \
14
14
  apt-get -y -qq --no-install-recommends install \
15
- fontconfig \
16
- fonts-freefont-ttf \
17
- fonts-gfs-neohellenic \
18
- fonts-indic \
19
- fonts-ipafont-gothic \
20
- fonts-kacst \
21
- fonts-liberation \
22
- fonts-noto-cjk \
23
- fonts-noto-color-emoji \
24
- fonts-roboto \
25
- fonts-thai-tlwg \
26
- fonts-ubuntu \
27
- fonts-wqy-zenhei \
28
- fonts-open-sans
15
+ fontconfig \
16
+ fonts-freefont-ttf \
17
+ fonts-gfs-neohellenic \
18
+ fonts-indic \
19
+ fonts-ipafont-gothic \
20
+ fonts-kacst \
21
+ fonts-liberation \
22
+ fonts-noto-cjk \
23
+ fonts-noto-color-emoji \
24
+ fonts-roboto \
25
+ fonts-thai-tlwg \
26
+ fonts-ubuntu \
27
+ fonts-wqy-zenhei \
28
+ fonts-open-sans
29
29
 
30
30
  # NOTE it's important to not use npx playwright-core here since it'll likely install
31
31
  # a more recent version than we potentially have in our own package.json
@@ -0,0 +1,16 @@
1
+ # Build Files
2
+ node_modules/
3
+ build/
4
+
5
+ # Editor preferences
6
+ .editorconfig
7
+ .dockerignore
8
+ .git/
9
+ .no-git/
10
+ .vscode/
11
+
12
+ # ENV files
13
+ *.env*
14
+
15
+ # Other non-production dotfiles
16
+ .eslintrc
@@ -0,0 +1,43 @@
1
+ ARG VERSION=latest
2
+ FROM ghcr.io/browserless/base:$VERSION
3
+ LABEL org.opencontainers.image.source https://github.com/browserless/browserless
4
+
5
+ COPY fonts/* /usr/share/fonts/truetype/
6
+ COPY src src/
7
+ RUN rm -r src/routes/
8
+ COPY src/routes/management src/routes/management/
9
+ COPY src/routes/edge src/routes/edge/
10
+
11
+ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections && \
12
+ apt-get -y -qq install software-properties-common &&\
13
+ apt-add-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -sc) partner" && \
14
+ apt-get -y -qq --no-install-recommends install \
15
+ fontconfig \
16
+ fonts-freefont-ttf \
17
+ fonts-gfs-neohellenic \
18
+ fonts-indic \
19
+ fonts-ipafont-gothic \
20
+ fonts-kacst \
21
+ fonts-liberation \
22
+ fonts-noto-cjk \
23
+ fonts-noto-color-emoji \
24
+ fonts-roboto \
25
+ fonts-thai-tlwg \
26
+ fonts-ubuntu \
27
+ fonts-wqy-zenhei \
28
+ fonts-open-sans
29
+
30
+ # NOTE it's important to not use npx playwright-core here since it'll likely install
31
+ # a more recent version than we potentially have in our own package.json
32
+ RUN ./node_modules/playwright-core/cli.js install --with-deps msedge &&\
33
+ npm run build &&\
34
+ npm run build:function &&\
35
+ npm prune production &&\
36
+ npm run install:debugger &&\
37
+ chown -R blessuser:blessuser $APP_DIR &&\
38
+ fc-cache -f -v && \
39
+ apt-get -qq clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/fonts/truetype/noto
40
+
41
+ USER blessuser
42
+
43
+ CMD ["./scripts/start.sh"]
@@ -12,20 +12,20 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
12
12
  apt-get -y -qq install software-properties-common &&\
13
13
  apt-add-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -sc) partner" && \
14
14
  apt-get -y -qq --no-install-recommends install \
15
- fontconfig \
16
- fonts-freefont-ttf \
17
- fonts-gfs-neohellenic \
18
- fonts-indic \
19
- fonts-ipafont-gothic \
20
- fonts-kacst \
21
- fonts-liberation \
22
- fonts-noto-cjk \
23
- fonts-noto-color-emoji \
24
- fonts-roboto \
25
- fonts-thai-tlwg \
26
- fonts-ubuntu \
27
- fonts-wqy-zenhei \
28
- fonts-open-sans
15
+ fontconfig \
16
+ fonts-freefont-ttf \
17
+ fonts-gfs-neohellenic \
18
+ fonts-indic \
19
+ fonts-ipafont-gothic \
20
+ fonts-kacst \
21
+ fonts-liberation \
22
+ fonts-noto-cjk \
23
+ fonts-noto-color-emoji \
24
+ fonts-roboto \
25
+ fonts-thai-tlwg \
26
+ fonts-ubuntu \
27
+ fonts-wqy-zenhei \
28
+ fonts-open-sans
29
29
 
30
30
  # NOTE it's important to not use npx playwright-core here since it'll likely install
31
31
  # a more recent version than we potentially have in our own package.json
@@ -12,33 +12,33 @@ RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula sele
12
12
  apt-get -y -qq install software-properties-common &&\
13
13
  apt-add-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -sc) partner" &&\
14
14
  apt-get -y -qq --no-install-recommends install \
15
- fontconfig \
16
- fonts-freefont-ttf \
17
- fonts-gfs-neohellenic \
18
- fonts-indic \
19
- fonts-ipafont-gothic \
20
- fonts-kacst \
21
- fonts-liberation \
22
- fonts-noto-cjk \
23
- fonts-noto-color-emoji \
24
- fonts-roboto \
25
- fonts-thai-tlwg \
26
- fonts-ubuntu \
27
- fonts-wqy-zenhei \
28
- fonts-open-sans \
29
- libwebp-dev
15
+ fontconfig \
16
+ fonts-freefont-ttf \
17
+ fonts-gfs-neohellenic \
18
+ fonts-indic \
19
+ fonts-ipafont-gothic \
20
+ fonts-kacst \
21
+ fonts-liberation \
22
+ fonts-noto-cjk \
23
+ fonts-noto-color-emoji \
24
+ fonts-roboto \
25
+ fonts-thai-tlwg \
26
+ fonts-ubuntu \
27
+ fonts-wqy-zenhei \
28
+ fonts-open-sans \
29
+ libwebp-dev
30
30
 
31
31
  # Chrome stable is only supported on non-ARM builds
32
32
  # so it's installation is conditional on whether or not amd64
33
33
  RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
34
- ./node_modules/playwright-core/cli.js install --with-deps chrome; \
34
+ ./node_modules/playwright-core/cli.js install --with-deps chrome; \
35
35
  else \
36
- rm -rf ./src/routes/chrome; \
36
+ rm -rf ./src/routes/chrome; \
37
37
  fi
38
38
 
39
39
  # NOTE it's important to not use npx playwright-core here since it'll likely install
40
40
  # a more recent version than we potentially have in our own package.json
41
- RUN ./node_modules/playwright-core/cli.js install --with-deps chromium firefox webkit &&\
41
+ RUN ./node_modules/playwright-core/cli.js install --with-deps chromium firefox webkit msedge &&\
42
42
  npm run build &&\
43
43
  npm run build:function &&\
44
44
  npm prune production &&\