diff --git a/package-lock.json b/package-lock.json
index 3df7602dbb7bc59314af29d304ddfcde7c8e2c26..502b6ac5cd4a46aa7126a6d1cf45735fc7aa52a6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,14 +5,14 @@
   "packages": {
     "": {
       "dependencies": {
-        "puppeteer-core": "^24.8.1",
+        "puppeteer-core": "^24.8.2",
         "ws": "^8.18.2"
       }
     },
     "node_modules/@puppeteer/browsers": {
-      "version": "2.10.3",
-      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.3.tgz",
-      "integrity": "sha512-iPpnFpX25gKIVsHsqVjHV+/GzW36xPgsscWkCnrrETndcdxNsXLdCrTwhkCJNR/FGWr122dJUBeyV4niz/j3TA==",
+      "version": "2.10.4",
+      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.4.tgz",
+      "integrity": "sha512-9DxbZx+XGMNdjBynIs4BRSz+M3iRDeB7qRcAr6UORFLphCIM2x3DXgOucvADiifcqCE4XePFUKcnaAMyGbrDlQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "debug": "^4.4.0",
@@ -37,9 +37,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.15.12",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.12.tgz",
-      "integrity": "sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw==",
+      "version": "22.15.17",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz",
+      "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -613,12 +613,12 @@
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "24.8.1",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.8.1.tgz",
-      "integrity": "sha512-UP/VIxVk/Akrgql3a55ZAIuAIx7+yQevz6qEXFUtSTIynEcgsCJ6tlRdi7uKAAlovmNQG4iNMzq9f8WxZLnGGg==",
+      "version": "24.8.2",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.8.2.tgz",
+      "integrity": "sha512-wNw5cRZOHiFibWc0vdYCYO92QuKTbJ8frXiUfOq/UGJWMqhPoBThTKkV+dJ99YyWfzJ2CfQQ4T1nhhR0h8FlVw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@puppeteer/browsers": "2.10.3",
+        "@puppeteer/browsers": "2.10.4",
         "chromium-bidi": "5.1.0",
         "debug": "^4.4.0",
         "devtools-protocol": "0.0.1439962",
diff --git a/package.json b/package.json
index 66d6f54f79713cdabed6eec667bb7bcb56ae10f3..a584ab292832de5d009c85ffc106728ec132f4c6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "dependencies": {
-    "puppeteer-core": "^24.8.1",
+    "puppeteer-core": "^24.8.2",
     "ws": "^8.18.2"
   }
 }
diff --git a/pkgs/npm-deps.nix b/pkgs/npm-deps.nix
index c2698fbf467629c833ab1bb4251da48ad1e5f9e6..fb04dae180684cf453bece44a6cf6a6484c73643 100644
--- a/pkgs/npm-deps.nix
+++ b/pkgs/npm-deps.nix
@@ -12,7 +12,7 @@ buildNpmPackage {
     "package.json"
     "package-lock.json"
   ];
-  npmDepsHash = "sha512-vyVsKiTqi9CQpXTYI/9Mght9Tg0HszVSOng8jGX4joz1YmAqbmQNRpQDV70ScDhD/KW8KI1xdEVU3RXzOCQNnw==";
+  npmDepsHash = "sha512-dIrmbHAo0D+aWqgxdXP6IHTRM7ZsTnTPdo8Yns+W7n3zkIxEfqEDotsYALrlKK7Jta8yFu89yyBoJ8ZS7ldNzA==";
 
   dontNpmBuild = true;
   dontNpmInstall = true;
diff --git a/setup.sh b/setup.sh
index 5810adca0b30f52a4fb1b0791931e2f666329eef..a3f4d2b3622f73f9f8bffb8d91912685088cff8b 100755
--- a/setup.sh
+++ b/setup.sh
@@ -111,10 +111,11 @@ mkdir -p "$PREFIX/nodejs"
 curl -f -L --retry 5 "$(jq -r ".\"$NODEJS\".url" "$REPO"/autogen.json)" -o nodejs.tar.xz
 tar xJf nodejs.tar.xz -C "$PREFIX/nodejs" --no-same-owner --strip-components=1
 "$PREFIX/nodejs/bin/node" "$PREFIX/nodejs/bin/npm" install -g --prefix "$PREFIX/nodejs" \
-  puppeteer-core@^24.8.1 \
-  ws@^8.18.2 \
-  playwright@^1.52.0
+  puppeteer-core@^24.8.2 \
+  ws@^8.18.2
 if [[ -n "${PLAYWRIGHT:-}" ]]; then
+  "$PREFIX/nodejs/bin/node" "$PREFIX/nodejs/bin/npm" install -g --prefix "$PREFIX/nodejs" \
+    playwright
   PATH=$PREFIX/nodejs/bin:$PATH playwright install --with-deps
 fi