@browserless.io/browserless 2.25.0-beta-2 → 2.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -3
- package/README.md +4 -5
- package/build/browserless.js +3 -1
- package/build/browsers/browsers.cdp.d.ts +3 -0
- package/build/browsers/browsers.cdp.js +4 -1
- package/build/browsers/browsers.playwright.d.ts +4 -0
- package/build/browsers/browsers.playwright.js +11 -2
- package/build/browsers/index.js +4 -3
- package/build/http.d.ts +9 -0
- package/build/http.js +9 -0
- package/build/routes/chrome/http/content.post.body.json +8 -8
- package/build/routes/chrome/http/pdf.post.body.json +8 -8
- package/build/routes/chrome/http/scrape.post.body.json +8 -8
- package/build/routes/chrome/http/screenshot.post.body.json +8 -8
- package/build/routes/chrome/tests/kill-sessions.spec.js +1 -1
- package/build/routes/chromium/http/content.post.body.json +8 -8
- package/build/routes/chromium/http/pdf.post.body.json +8 -8
- package/build/routes/chromium/http/scrape.post.body.json +8 -8
- package/build/routes/chromium/http/screenshot.post.body.json +8 -8
- package/build/routes/chromium/tests/kill-sessions.spec.js +1 -1
- package/build/routes/edge/http/content.post.body.json +579 -0
- package/build/routes/edge/http/content.post.d.ts +8 -0
- package/build/routes/edge/http/content.post.js +7 -0
- package/build/routes/edge/http/content.post.query.json +183 -0
- package/build/routes/edge/http/content.post.response.json +5 -0
- package/build/routes/edge/http/download.post.body.json +32 -0
- package/build/routes/edge/http/download.post.d.ts +8 -0
- package/build/routes/edge/http/download.post.js +7 -0
- package/build/routes/edge/http/download.post.query.json +120 -0
- package/build/routes/edge/http/download.post.response.json +4 -0
- package/build/routes/edge/http/function.post.body.json +32 -0
- package/build/routes/edge/http/function.post.d.ts +8 -0
- package/build/routes/edge/http/function.post.js +7 -0
- package/build/routes/edge/http/function.post.query.json +120 -0
- package/build/routes/edge/http/function.post.response.json +4 -0
- package/build/routes/edge/http/json-list.get.d.ts +5 -0
- package/build/routes/edge/http/json-list.get.js +5 -0
- package/build/routes/edge/http/json-list.get.response.json +52 -0
- package/build/routes/edge/http/json-new.put.d.ts +5 -0
- package/build/routes/edge/http/json-new.put.js +5 -0
- package/build/routes/edge/http/json-new.put.response.json +44 -0
- package/build/routes/edge/http/json-protocol.get.d.ts +5 -0
- package/build/routes/edge/http/json-protocol.get.js +5 -0
- package/build/routes/edge/http/json-protocol.get.response.json +6 -0
- package/build/routes/edge/http/json-version.get.d.ts +5 -0
- package/build/routes/edge/http/json-version.get.js +5 -0
- package/build/routes/edge/http/json-version.get.response.json +44 -0
- package/build/routes/edge/http/pdf.post.body.json +724 -0
- package/build/routes/edge/http/pdf.post.d.ts +8 -0
- package/build/routes/edge/http/pdf.post.js +7 -0
- package/build/routes/edge/http/pdf.post.query.json +120 -0
- package/build/routes/edge/http/pdf.post.response.json +5 -0
- package/build/routes/edge/http/performance.post.body.json +26 -0
- package/build/routes/edge/http/performance.post.d.ts +8 -0
- package/build/routes/edge/http/performance.post.js +7 -0
- package/build/routes/edge/http/performance.post.query.json +120 -0
- package/build/routes/edge/http/performance.post.response.json +7 -0
- package/build/routes/edge/http/scrape.post.body.json +626 -0
- package/build/routes/edge/http/scrape.post.d.ts +8 -0
- package/build/routes/edge/http/scrape.post.js +7 -0
- package/build/routes/edge/http/scrape.post.query.json +183 -0
- package/build/routes/edge/http/scrape.post.response.json +334 -0
- package/build/routes/edge/http/screenshot.post.body.json +669 -0
- package/build/routes/edge/http/screenshot.post.d.ts +8 -0
- package/build/routes/edge/http/screenshot.post.js +7 -0
- package/build/routes/edge/http/screenshot.post.query.json +120 -0
- package/build/routes/edge/http/screenshot.post.response.json +5 -0
- package/build/routes/edge/tests/content.spec.d.ts +1 -0
- package/build/routes/edge/tests/content.spec.js +312 -0
- package/build/routes/edge/tests/download.spec.d.ts +1 -0
- package/build/routes/edge/tests/download.spec.js +67 -0
- package/build/routes/edge/tests/function.spec.d.ts +1 -0
- package/build/routes/edge/tests/function.spec.js +277 -0
- package/build/routes/edge/tests/json-version.spec.d.ts +1 -0
- package/build/routes/edge/tests/json-version.spec.js +37 -0
- package/build/routes/edge/tests/kill-sessions.spec.d.ts +1 -0
- package/build/routes/edge/tests/kill-sessions.spec.js +80 -0
- package/build/routes/edge/tests/page-websocket.spec.d.ts +1 -0
- package/build/routes/edge/tests/page-websocket.spec.js +97 -0
- package/build/routes/edge/tests/pdf.spec.d.ts +1 -0
- package/build/routes/edge/tests/pdf.spec.js +345 -0
- package/build/routes/edge/tests/performance.spec.d.ts +1 -0
- package/build/routes/edge/tests/performance.spec.js +124 -0
- package/build/routes/edge/tests/scrape.spec.d.ts +1 -0
- package/build/routes/edge/tests/scrape.spec.js +354 -0
- package/build/routes/edge/tests/screenshot.spec.d.ts +1 -0
- package/build/routes/edge/tests/screenshot.spec.js +339 -0
- package/build/routes/edge/tests/websocket.spec.d.ts +1 -0
- package/build/routes/edge/tests/websocket.spec.js +384 -0
- package/build/routes/edge/ws/browser.d.ts +7 -0
- package/build/routes/edge/ws/browser.js +6 -0
- package/build/routes/edge/ws/browser.query.json +120 -0
- package/build/routes/edge/ws/cdp.d.ts +8 -0
- package/build/routes/edge/ws/cdp.js +7 -0
- package/build/routes/edge/ws/cdp.query.json +120 -0
- package/build/routes/edge/ws/page.d.ts +8 -0
- package/build/routes/edge/ws/page.js +7 -0
- package/build/routes/edge/ws/page.query.json +120 -0
- package/build/routes/edge/ws/playwright.d.ts +8 -0
- package/build/routes/edge/ws/playwright.js +7 -0
- package/build/routes/edge/ws/playwright.query.json +100 -0
- package/build/routes/firefox/tests/kill-sessions.spec.js +1 -1
- package/build/routes/management/http/meta.get.js +3 -1
- package/build/routes/webkit/tests/kill-sessions.spec.js +1 -1
- package/build/sdk-utils.js +1 -1
- package/build/shared/scrape.http.js +2 -2
- package/build/types.d.ts +32 -0
- package/build/types.js +18 -0
- package/build/utils.d.ts +1 -0
- package/build/utils.js +16 -2
- package/docker/chrome/Dockerfile +14 -14
- package/docker/chromium/Dockerfile +14 -14
- package/docker/edge/.dockerignore +16 -0
- package/docker/edge/Dockerfile +43 -0
- package/docker/firefox/Dockerfile +14 -14
- package/docker/multi/Dockerfile +18 -18
- package/docker/sdk/Dockerfile +10 -0
- package/extensions/ublock/_locales/ar/messages.json +3 -3
- package/extensions/ublock/_locales/bg/messages.json +1 -1
- package/extensions/ublock/_locales/br_FR/messages.json +2 -2
- package/extensions/ublock/_locales/cy/messages.json +11 -11
- package/extensions/ublock/_locales/el/messages.json +2 -2
- package/extensions/ublock/_locales/hu/messages.json +1 -1
- package/extensions/ublock/_locales/id/messages.json +1 -1
- package/extensions/ublock/_locales/lv/messages.json +4 -4
- package/extensions/ublock/_locales/mk/messages.json +130 -130
- package/extensions/ublock/_locales/oc/messages.json +1 -1
- package/extensions/ublock/_locales/pt_BR/messages.json +1 -1
- package/extensions/ublock/_locales/pt_PT/messages.json +2 -2
- package/extensions/ublock/_locales/si/messages.json +100 -100
- package/extensions/ublock/_locales/sr/messages.json +4 -4
- package/extensions/ublock/_locales/vi/messages.json +19 -19
- package/extensions/ublock/_locales/zh_TW/messages.json +28 -28
- package/extensions/ublock/assets/assets.json +33 -29
- package/extensions/ublock/assets/thirdparties/easylist/easylist.txt +2984 -3287
- package/extensions/ublock/assets/thirdparties/easylist/easyprivacy.txt +150 -171
- package/extensions/ublock/assets/thirdparties/pgl.yoyo.org/as/serverlist +37 -27
- package/extensions/ublock/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat +802 -888
- package/extensions/ublock/assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt +2355 -2071
- package/extensions/ublock/assets/ublock/badlists.txt +9 -1
- package/extensions/ublock/assets/ublock/badware.min.txt +354 -243
- package/extensions/ublock/assets/ublock/filters.min.txt +5837 -5737
- package/extensions/ublock/assets/ublock/privacy.min.txt +151 -38
- package/extensions/ublock/assets/ublock/quick-fixes.min.txt +83 -127
- package/extensions/ublock/assets/ublock/unbreak.min.txt +66 -50
- package/extensions/ublock/css/codemirror.css +4 -0
- package/extensions/ublock/document-blocked.html +3 -1
- package/extensions/ublock/js/arglist-parser.js +116 -0
- package/extensions/ublock/js/background.js +1 -1
- package/extensions/ublock/js/logger-ui.js +1 -1
- package/extensions/ublock/js/messaging.js +9 -2
- package/extensions/ublock/js/pagestore.js +3 -1
- package/extensions/ublock/js/redirect-engine.js +3 -1
- package/extensions/ublock/{assets/resources/set-attr.js → js/resources/attribute.js} +115 -11
- package/extensions/ublock/js/resources/base.js +38 -0
- package/extensions/ublock/js/resources/cookie.js +419 -0
- package/extensions/ublock/js/resources/href-sanitizer.js +188 -0
- package/extensions/ublock/js/resources/localstorage.js +235 -0
- package/extensions/ublock/js/resources/parse-replace.js +54 -0
- package/extensions/ublock/js/resources/prevent-settimeout.js +236 -0
- package/extensions/ublock/js/resources/proxy-apply.js +109 -0
- package/extensions/ublock/js/resources/replace-argument.js +120 -0
- package/extensions/ublock/{assets → js}/resources/run-at.js +20 -4
- package/extensions/ublock/{assets → js}/resources/safe-self.js +5 -4
- package/extensions/ublock/{assets → js}/resources/scriptlets.js +90 -1589
- package/extensions/ublock/js/resources/set-constant.js +287 -0
- package/extensions/ublock/js/resources/shared.js +44 -0
- package/extensions/ublock/js/resources/spoof-css.js +163 -0
- package/extensions/ublock/js/s14e-serializer.js +2 -1
- package/extensions/ublock/js/scriptlet-filtering-core.js +1 -1
- package/extensions/ublock/js/scriptlet-filtering.js +1 -31
- package/extensions/ublock/js/static-dnr-filtering.js +143 -129
- package/extensions/ublock/js/static-filtering-parser.js +27 -117
- package/extensions/ublock/js/static-net-filtering.js +53 -141
- package/extensions/ublock/js/traffic.js +1 -1
- package/extensions/ublock/js/urlskip.js +166 -0
- package/extensions/ublock/js/vapi-background-ext.js +38 -14
- package/extensions/ublock/manifest.json +1 -1
- package/package.json +22 -22
- package/src/browserless.ts +4 -0
- package/src/browsers/browsers.cdp.ts +5 -0
- package/src/browsers/browsers.playwright.ts +14 -1
- package/src/browsers/index.ts +5 -2
- package/src/http.ts +9 -0
- package/src/routes/chrome/tests/kill-sessions.spec.ts +1 -1
- package/src/routes/chromium/tests/kill-sessions.spec.ts +1 -1
- package/src/routes/edge/http/content.post.ts +20 -0
- package/src/routes/edge/http/download.post.ts +20 -0
- package/src/routes/edge/http/function.post.ts +20 -0
- package/src/routes/edge/http/json-list.get.ts +7 -0
- package/src/routes/edge/http/json-new.put.ts +7 -0
- package/src/routes/edge/http/json-protocol.get.ts +7 -0
- package/src/routes/edge/http/json-version.get.ts +7 -0
- package/src/routes/edge/http/pdf.post.ts +20 -0
- package/src/routes/edge/http/performance.post.ts +20 -0
- package/src/routes/edge/http/scrape.post.ts +20 -0
- package/src/routes/edge/http/screenshot.post.ts +20 -0
- package/src/routes/edge/tests/content.spec.ts +376 -0
- package/src/routes/edge/tests/download.spec.ts +77 -0
- package/src/routes/edge/tests/function.spec.ts +317 -0
- package/src/routes/edge/tests/json-version.spec.ts +52 -0
- package/src/routes/edge/tests/kill-sessions.spec.ts +99 -0
- package/src/routes/edge/tests/page-websocket.spec.ts +129 -0
- package/src/routes/edge/tests/pdf.spec.ts +389 -0
- package/src/routes/edge/tests/performance.spec.ts +155 -0
- package/src/routes/edge/tests/scrape.spec.ts +417 -0
- package/src/routes/edge/tests/screenshot.spec.ts +387 -0
- package/src/routes/edge/tests/websocket.spec.ts +510 -0
- package/src/routes/edge/ws/browser.ts +10 -0
- package/src/routes/edge/ws/cdp.ts +17 -0
- package/src/routes/edge/ws/page.ts +10 -0
- package/src/routes/edge/ws/playwright.ts +17 -0
- package/src/routes/firefox/tests/kill-sessions.spec.ts +1 -1
- package/src/routes/management/http/meta.get.ts +6 -1
- package/src/routes/management/http/static.get.ts +1 -1
- package/src/routes/webkit/tests/kill-sessions.spec.ts +1 -1
- package/src/sdk-utils.ts +1 -1
- package/src/shared/scrape.http.ts +2 -2
- package/src/types.ts +19 -0
- package/src/utils.ts +38 -16
- package/static/docs/swagger.json +2097 -10
- package/static/docs/swagger.min.json +2096 -9
- package/static/function/client.js +141 -253
- 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(
|
|
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`);
|
package/build/sdk-utils.js
CHANGED
|
@@ -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
|
-
|
|
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]) => {
|
package/docker/chrome/Dockerfile
CHANGED
|
@@ -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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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,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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
package/docker/multi/Dockerfile
CHANGED
|
@@ -12,28 +12,28 @@ 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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
# Chrome stable is only supported on non-ARM builds
|
|
31
|
+
# Chrome stable and Edge 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
|
-
|
|
34
|
+
./node_modules/playwright-core/cli.js install --with-deps chrome msedge; \
|
|
35
35
|
else \
|
|
36
|
-
|
|
36
|
+
rm -rf ./src/routes/chrome ./src/routes/edge; \
|
|
37
37
|
fi
|
|
38
38
|
|
|
39
39
|
# NOTE it's important to not use npx playwright-core here since it'll likely install
|