From b010db7788a1fadb1eee38b986b17e0f97f57a3f Mon Sep 17 00:00:00 2001 From: JacktheRanger <219502738+JacktheRanger@users.noreply.github.com> Date: Fri, 2 Oct 2026 18:18:21 +0800 Subject: [PATCH] chore(deps)!: update @puppeteer/browsers to 3.x @cloudflare/puppeteer pinned @puppeteer/browsers 2.2.4, whose transitive tree (extract-zip, proxy-agent -> get-uri -> basic-ftp, socks -> ip-address) carries advisories that cannot be fixed on the 2.x line. 3.x drops those dependencies. Only the Node launcher imports the package, so Workers bundles are unchanged. 3.x is ESM-only and needs Node >= 22.12, so engines, .nvmrc and the Cloudflare test workflows move to Node 22, and the unit script switches to the glob form that Node 22's test runner needs. FirefoxLauncher ports upstream 9feda9c so cleanup restores the user.js backup that 3.x's createProfile writes. Refs #238 BREAKING CHANGE: @cloudflare/puppeteer now requires Node.js >= 22.12.0. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/cf_test_full.yml | 2 +- .github/workflows/cf_test_smoke.yml | 2 +- .nvmrc | 2 +- package-lock.json | 498 +++++++++++++++++- .../tests/package-lock.json | 6 +- packages/puppeteer-core/package.json | 9 +- .../src/node/FirefoxLauncher.ts | 26 +- test/src/launcher.spec.ts | 3 + 8 files changed, 525 insertions(+), 23 deletions(-) diff --git a/.github/workflows/cf_test_full.yml b/.github/workflows/cf_test_full.yml index ddf673871..331a90dfa 100644 --- a/.github/workflows/cf_test_full.yml +++ b/.github/workflows/cf_test_full.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - run: | diff --git a/.github/workflows/cf_test_smoke.yml b/.github/workflows/cf_test_smoke.yml index 63eefd011..043bdb599 100644 --- a/.github/workflows/cf_test_smoke.yml +++ b/.github/workflows/cf_test_smoke.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - run: | diff --git a/.nvmrc b/.nvmrc index 85aee5a53..92f279e3e 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20 \ No newline at end of file +v22 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a396d0046..068231006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13431,10 +13431,10 @@ }, "packages/puppeteer-core": { "name": "@cloudflare/puppeteer", - "version": "1.2.0", + "version": "1.4.1", "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.2.4", + "@puppeteer/browsers": "^3.2.3", "debug": "^4.3.5", "devtools-protocol": "0.0.1299070", "ws": "^8.18.0" @@ -13448,8 +13448,231 @@ "parsel-js": "1.1.2", "rxjs": "7.8.1" }, + "engines": { + "node": ">=22.12.0" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.3.tgz", + "integrity": "sha512-2Bt3m6dDAJqmZehn0wiXSYyQmuhyiHHZ7FjvrVaS1W2RoFGV6eCK71UvKYkNJjkwC1Q9nobjhvTMhLQztFVINA==", + "license": "Apache-2.0", + "dependencies": { + "modern-tar": "^0.8.4", + "yargs": "^18.0.0" + }, + "bin": { + "browsers": "lib/main-cli.js" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "proxy-agent": ">=8.0.1", + "yauzl": "^2.10.0 || ^3.4.0" + }, + "peerDependenciesMeta": { + "proxy-agent": { + "optional": true + }, + "yauzl": { + "optional": true + } + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/modern-tar": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.8.5.tgz", + "integrity": "sha512-snEhs+6G5Tjd4I7tLCDOaoln2RgE0bD19RzEKgvgK2hZ5VKy3MpLhLTZ2fWpXSTg4K2cyPwp+VHATFJhxfnOeA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz", + "integrity": "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/string-width/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/string-width/node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/cliui/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/string-width/node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "license": "MIT", "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/string-width/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/puppeteer-core/node_modules/@puppeteer/browsers/node_modules/yargs/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "packages/puppeteer-core/node_modules/@types/node": { @@ -13462,6 +13685,277 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==" }, + "packages/puppeteer-core/node_modules/proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-8.0.2.tgz", + "integrity": "sha512-idLLRewuemWd7GH/BDJzGiB0dWGfT2SQs3jy6NtZtGWU9uPTTSdeC1/cdbqLwgzhfv027daGFuXX426e2Eg20A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "http-proxy-agent": "9.1.0", + "https-proxy-agent": "9.1.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "9.1.0", + "proxy-from-env": "^2.0.0", + "socks-proxy-agent": "10.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-9.1.0.tgz", + "integrity": "sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/http-proxy-agent/node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/https-proxy-agent/node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-9.1.0.tgz", + "integrity": "sha512-1aU+1mpj3DrQPfo3gh+3Gap3G5x+axnMx1P/y0ZF2ch7kb2meyOCAH8K2k9d27ROsTE7TnAerzxqF9aon2jqnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "get-uri": "8.0.1", + "http-proxy-agent": "9.1.0", + "https-proxy-agent": "9.1.0", + "pac-resolver": "9.0.1", + "quickjs-wasi": "^2.2.0", + "socks-proxy-agent": "10.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/get-uri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-8.0.1.tgz", + "integrity": "sha512-/5N/P4Lrh0p/mDwlDRi7Y1+P2o/OyzZI3l6Iz1Ov6XXwwm1y3RlZLuo3gVgML99djrEDtV980bBxSuOeHLk8ww==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "basic-ftp": "^5.3.1", + "data-uri-to-buffer": "8.0.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/get-uri/node_modules/basic-ftp": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/get-uri/node_modules/data-uri-to-buffer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-8.0.0.tgz", + "integrity": "sha512-6UHfyCux51b8PTGDgveqtz1tvphBku5DrMKKJbFAZAJOI2zsjDpDoYE1+QGj7FOMS4BdTFNJsJiR3zEB0xH0yQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/pac-resolver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-9.0.1.tgz", + "integrity": "sha512-lJbS008tmkj08VhoM8Hzuv/VE5tK9MS0OIQ/7+s0lIF+BYhiQWFYzkSpML7lXs9iBu2jfmzBTLzhe9n6BX+dYw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "degenerator": "7.0.1", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "quickjs-wasi": "^2.2.0" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/pac-resolver/node_modules/degenerator": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-7.0.1.tgz", + "integrity": "sha512-ABErK0IefDSyHjlPH7WUEenIAX2rPPnrDcDM+TS3z3+zu9TfyKKi07BQM+8rmxpdE2y1v5fjjdoAS/x4D2U60w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "quickjs-wasi": "^2.2.0" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/pac-proxy-agent/node_modules/quickjs-wasi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/quickjs-wasi/-/quickjs-wasi-2.2.0.tgz", + "integrity": "sha512-zQxXmQMrEoD3S+jQdYsloq4qAuaxKFHZj6hHqOYGwB2iQZH+q9e/lf5zQPXCKOk0WJuAjzRFbO4KwHIp2D05Iw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/socks-proxy-agent": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-10.1.0.tgz", + "integrity": "sha512-WlMj/67cEJ6MDI1OcsnjuYKDNDoyPCCYZ249kuuXPiMDw9F8PXkVaQ7YWu3siTydfQ/4BEZcvGzu+aYvz7dDCQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 20" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/socks-proxy-agent/node_modules/socks": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz", + "integrity": "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "packages/puppeteer-core/node_modules/proxy-agent/node_modules/socks-proxy-agent/node_modules/socks/node_modules/ip-address": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz", + "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 12" + } + }, "packages/puppeteer-core/node_modules/rxjs": { "version": "7.8.1", "dev": true, diff --git a/packages/puppeteer-cloudflare/tests/package-lock.json b/packages/puppeteer-cloudflare/tests/package-lock.json index c3c5fcfe7..d00000e7d 100644 --- a/packages/puppeteer-cloudflare/tests/package-lock.json +++ b/packages/puppeteer-cloudflare/tests/package-lock.json @@ -45,10 +45,10 @@ }, "../../puppeteer-core": { "name": "@cloudflare/puppeteer", - "version": "1.1.0", + "version": "1.4.1", "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.2.4", + "@puppeteer/browsers": "^3.2.3", "debug": "^4.3.5", "devtools-protocol": "0.0.1299070", "ws": "^8.18.0" @@ -63,7 +63,7 @@ "rxjs": "7.8.1" }, "engines": { - "node": ">=18" + "node": ">=22.12.0" } }, "node_modules/@babel/code-frame": { diff --git a/packages/puppeteer-core/package.json b/packages/puppeteer-core/package.json index 237f86a61..1d308c96e 100644 --- a/packages/puppeteer-core/package.json +++ b/packages/puppeteer-core/package.json @@ -32,7 +32,7 @@ "url": "https://github.com/cloudflare/puppeteer/tree/main/packages/puppeteer-core" }, "engines": { - "node": ">=18" + "node": ">=22.12.0" }, "scripts": { "build:docs": "wireit", @@ -72,9 +72,6 @@ "build:tsc": { "command": "hereby build", "clean": "if-file-deleted", - "dependencies": [ - "../browsers:build" - ], "files": [ "{src,third_party}/**", "../../versions.js", @@ -101,7 +98,7 @@ ] }, "unit": { - "command": "node --test --test-reporter spec lib/cjs", + "command": "node --test --test-reporter=spec \"lib/cjs/**/*.test.js\"", "dependencies": [ "build" ] @@ -121,7 +118,7 @@ "author": "The Chromium Authors", "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.2.4", + "@puppeteer/browsers": "^3.2.3", "debug": "^4.3.5", "devtools-protocol": "0.0.1299070", "ws": "^8.18.0" diff --git a/packages/puppeteer-core/src/node/FirefoxLauncher.ts b/packages/puppeteer-core/src/node/FirefoxLauncher.ts index 4af74619c..961a23455 100644 --- a/packages/puppeteer-core/src/node/FirefoxLauncher.ts +++ b/packages/puppeteer-core/src/node/FirefoxLauncher.ts @@ -169,15 +169,23 @@ export class FirefoxLauncher extends ProductLauncher { } } else { try { - // When an existing user profile has been used remove the user - // preferences file and restore possibly backuped preferences. - await unlink(path.join(userDataDir, 'user.js')); - - const prefsBackupPath = path.join(userDataDir, 'prefs.js.puppeteer'); - if (fs.existsSync(prefsBackupPath)) { - const prefsPath = path.join(userDataDir, 'prefs.js'); - await unlink(prefsPath); - await rename(prefsBackupPath, prefsPath); + const backupSuffix = '.puppeteer'; + const backupFiles = ['prefs.js', 'user.js']; + + const results = await Promise.allSettled( + backupFiles.map(async file => { + const prefsBackupPath = path.join(userDataDir, file + backupSuffix); + if (fs.existsSync(prefsBackupPath)) { + const prefsPath = path.join(userDataDir, file); + await unlink(prefsPath); + await rename(prefsBackupPath, prefsPath); + } + }) + ); + for (const result of results) { + if (result.status === 'rejected') { + throw result.reason; + } } } catch (error) { debugError(error); diff --git a/test/src/launcher.spec.ts b/test/src/launcher.spec.ts index a3f7b811c..2b46e2155 100644 --- a/test/src/launcher.spec.ts +++ b/test/src/launcher.spec.ts @@ -252,8 +252,10 @@ describe('Launcher specs', function () { const userDataDir = await mkdtemp(TMP_FOLDER); const prefsJSPath = path.join(userDataDir, 'prefs.js'); + const userJSPath = path.join(userDataDir, 'user.js'); const prefsJSContent = 'user_pref("browser.warnOnQuit", true)'; await writeFile(prefsJSPath, prefsJSContent); + await writeFile(userJSPath, prefsJSContent); const {context, close} = await launch({userDataDir}); try { @@ -264,6 +266,7 @@ describe('Launcher specs', function () { expect(fs.readdirSync(userDataDir).length).toBeGreaterThan(0); expect(await readFile(prefsJSPath, 'utf8')).toBe(prefsJSContent); + expect(await readFile(userJSPath, 'utf8')).toBe(prefsJSContent); } finally { await close(); }