From 338c7da77fb293189fb5e67427369e86506dd481 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 18 Jun 2026 11:56:01 -0500 Subject: [PATCH 1/6] Update Node to 24.17.1 --- .mise.toml | 2 +- .nvmrc | 2 +- package.json | 2 +- packages/ai-bot/Dockerfile | 2 +- packages/bot-runner/Dockerfile | 2 +- packages/boxel-icons/package.json | 2 +- packages/boxel-ui/addon/package.json | 2 +- packages/postgres/Dockerfile | 2 +- packages/realm-server/prerender-manager.Dockerfile | 2 +- packages/realm-server/prerender.Dockerfile | 2 +- packages/realm-server/realm-server.Dockerfile | 2 +- packages/realm-server/worker.Dockerfile | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.mise.toml b/.mise.toml index 9ff84893e4c..52584806dcd 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,5 @@ [tools] -node = "24.13.1" +node = "24.17.1" "npm:pnpm" = "11.0.9" [env] diff --git a/.nvmrc b/.nvmrc index 32f8c50de0c..b27d8ec0d13 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.13.1 +24.17.1 diff --git a/package.json b/package.json index 48ade5c6148..b4f659389fe 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "devEngines": { "runtime": { "name": "node", - "version": "24.13.1" + "version": "24.17.1" } } } diff --git a/packages/ai-bot/Dockerfile b/packages/ai-bot/Dockerfile index a5cf270525c..5fad2631801 100644 --- a/packages/ai-bot/Dockerfile +++ b/packages/ai-bot/Dockerfile @@ -1,4 +1,4 @@ -ARG NODE_VERSION=24.13.1 +ARG NODE_VERSION=24.17.1 ARG PNPM_VERSION=11.0.9 FROM node:${NODE_VERSION}-slim ARG CI=1 diff --git a/packages/bot-runner/Dockerfile b/packages/bot-runner/Dockerfile index 9e40209cef3..1db04b650e0 100644 --- a/packages/bot-runner/Dockerfile +++ b/packages/bot-runner/Dockerfile @@ -1,4 +1,4 @@ -ARG NODE_VERSION=24.13.1 +ARG NODE_VERSION=24.17.1 ARG PNPM_VERSION=11.0.9 FROM node:${NODE_VERSION}-slim ARG CI=1 diff --git a/packages/boxel-icons/package.json b/packages/boxel-icons/package.json index de945d1a878..2ad929a6842 100644 --- a/packages/boxel-icons/package.json +++ b/packages/boxel-icons/package.json @@ -80,7 +80,7 @@ "typescript": "catalog:" }, "engines": { - "node": "24.13.1" + "node": "24.17.1" }, "ember": { "edition": "octane" diff --git a/packages/boxel-ui/addon/package.json b/packages/boxel-ui/addon/package.json index c76ca73e35f..d8f32175c20 100644 --- a/packages/boxel-ui/addon/package.json +++ b/packages/boxel-ui/addon/package.json @@ -111,7 +111,7 @@ "typescript": "catalog:" }, "engines": { - "node": "24.13.1" + "node": "24.17.1" }, "ember": { "edition": "octane" diff --git a/packages/postgres/Dockerfile b/packages/postgres/Dockerfile index 887a4381d62..be2e8fb83d2 100644 --- a/packages/postgres/Dockerfile +++ b/packages/postgres/Dockerfile @@ -1,4 +1,4 @@ -ARG NODE_VERSION=24.13.1 +ARG NODE_VERSION=24.17.1 ARG PNPM_VERSION=11.0.9 FROM node:${NODE_VERSION}-slim ARG CI=1 diff --git a/packages/realm-server/prerender-manager.Dockerfile b/packages/realm-server/prerender-manager.Dockerfile index 011efb8e5be..6e0c84728ea 100644 --- a/packages/realm-server/prerender-manager.Dockerfile +++ b/packages/realm-server/prerender-manager.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.13.1-slim +FROM node:24.17.1-slim ARG prerender_manager_script ENV prerender_manager_script=$prerender_manager_script diff --git a/packages/realm-server/prerender.Dockerfile b/packages/realm-server/prerender.Dockerfile index 7be58b3440a..436c4aa35b4 100644 --- a/packages/realm-server/prerender.Dockerfile +++ b/packages/realm-server/prerender.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.13.1-slim +FROM node:24.17.1-slim ARG prerender_script ENV prerender_script=$prerender_script diff --git a/packages/realm-server/realm-server.Dockerfile b/packages/realm-server/realm-server.Dockerfile index de4730fa188..1a45a44a483 100644 --- a/packages/realm-server/realm-server.Dockerfile +++ b/packages/realm-server/realm-server.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.13.1-slim +FROM node:24.17.1-slim ARG realm_server_script ENV realm_server_script=$realm_server_script diff --git a/packages/realm-server/worker.Dockerfile b/packages/realm-server/worker.Dockerfile index cd14fa4c0d2..5fcf2ba1da2 100644 --- a/packages/realm-server/worker.Dockerfile +++ b/packages/realm-server/worker.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.13.1-slim +FROM node:24.17.1-slim ARG worker_script ENV worker_script=$worker_script From 73b17126627497aebd80dcb655eb09c72da6ae8f Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Thu, 18 Jun 2026 12:35:25 -0500 Subject: [PATCH 2/6] Change to 24.17.0 --- .mise.toml | 2 +- .nvmrc | 2 +- package.json | 2 +- packages/ai-bot/Dockerfile | 2 +- packages/bot-runner/Dockerfile | 2 +- packages/boxel-icons/package.json | 2 +- packages/boxel-ui/addon/package.json | 2 +- packages/postgres/Dockerfile | 2 +- .../realm-server/prerender-manager.Dockerfile | 2 +- packages/realm-server/prerender.Dockerfile | 66 +++++++++---------- packages/realm-server/realm-server.Dockerfile | 2 +- packages/realm-server/worker.Dockerfile | 2 +- 12 files changed, 44 insertions(+), 44 deletions(-) diff --git a/.mise.toml b/.mise.toml index 52584806dcd..4bcf7da036c 100644 --- a/.mise.toml +++ b/.mise.toml @@ -1,5 +1,5 @@ [tools] -node = "24.17.1" +node = "24.17.0" "npm:pnpm" = "11.0.9" [env] diff --git a/.nvmrc b/.nvmrc index b27d8ec0d13..1dd37d53743 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.17.1 +24.17.0 diff --git a/package.json b/package.json index b4f659389fe..bfcb1c4ea0b 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "devEngines": { "runtime": { "name": "node", - "version": "24.17.1" + "version": "24.17.0" } } } diff --git a/packages/ai-bot/Dockerfile b/packages/ai-bot/Dockerfile index 5fad2631801..228e578e94a 100644 --- a/packages/ai-bot/Dockerfile +++ b/packages/ai-bot/Dockerfile @@ -1,4 +1,4 @@ -ARG NODE_VERSION=24.17.1 +ARG NODE_VERSION=24.17.0 ARG PNPM_VERSION=11.0.9 FROM node:${NODE_VERSION}-slim ARG CI=1 diff --git a/packages/bot-runner/Dockerfile b/packages/bot-runner/Dockerfile index 1db04b650e0..94c147d4cac 100644 --- a/packages/bot-runner/Dockerfile +++ b/packages/bot-runner/Dockerfile @@ -1,4 +1,4 @@ -ARG NODE_VERSION=24.17.1 +ARG NODE_VERSION=24.17.0 ARG PNPM_VERSION=11.0.9 FROM node:${NODE_VERSION}-slim ARG CI=1 diff --git a/packages/boxel-icons/package.json b/packages/boxel-icons/package.json index 2ad929a6842..2bb0e7a2833 100644 --- a/packages/boxel-icons/package.json +++ b/packages/boxel-icons/package.json @@ -80,7 +80,7 @@ "typescript": "catalog:" }, "engines": { - "node": "24.17.1" + "node": "24.17.0" }, "ember": { "edition": "octane" diff --git a/packages/boxel-ui/addon/package.json b/packages/boxel-ui/addon/package.json index d8f32175c20..edacc1757d2 100644 --- a/packages/boxel-ui/addon/package.json +++ b/packages/boxel-ui/addon/package.json @@ -111,7 +111,7 @@ "typescript": "catalog:" }, "engines": { - "node": "24.17.1" + "node": "24.17.0" }, "ember": { "edition": "octane" diff --git a/packages/postgres/Dockerfile b/packages/postgres/Dockerfile index be2e8fb83d2..4b442434eb3 100644 --- a/packages/postgres/Dockerfile +++ b/packages/postgres/Dockerfile @@ -1,4 +1,4 @@ -ARG NODE_VERSION=24.17.1 +ARG NODE_VERSION=24.17.0 ARG PNPM_VERSION=11.0.9 FROM node:${NODE_VERSION}-slim ARG CI=1 diff --git a/packages/realm-server/prerender-manager.Dockerfile b/packages/realm-server/prerender-manager.Dockerfile index 6e0c84728ea..3321bf95850 100644 --- a/packages/realm-server/prerender-manager.Dockerfile +++ b/packages/realm-server/prerender-manager.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.17.1-slim +FROM node:24.17.0-slim ARG prerender_manager_script ENV prerender_manager_script=$prerender_manager_script diff --git a/packages/realm-server/prerender.Dockerfile b/packages/realm-server/prerender.Dockerfile index 436c4aa35b4..4a0acb0925e 100644 --- a/packages/realm-server/prerender.Dockerfile +++ b/packages/realm-server/prerender.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.17.1-slim +FROM node:24.17.0-slim ARG prerender_script ENV prerender_script=$prerender_script @@ -10,37 +10,37 @@ WORKDIR /realm-server # drags in the shared libraries that Chromium needs at runtime. RUN apt-get update \ && apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - unzip \ - jq \ - wget \ - gnupg \ - libasound2 \ - libatk-bridge2.0-0 \ - libatk1.0-0 \ - libatspi2.0-0 \ - libdrm2 \ - libgbm1 \ - libgtk-3-0 \ - libnss3 \ - libnspr4 \ - libx11-6 \ - libx11-xcb1 \ - libxcb1 \ - libxcomposite1 \ - libxdamage1 \ - libxext6 \ - libxfixes3 \ - libxrandr2 \ - libxshmfence1 \ - libxss1 \ - libxtst6 \ - fonts-ipafont-gothic \ - fonts-wqy-zenhei \ - fonts-thai-tlwg \ - fonts-kacst \ - fonts-freefont-ttf \ + ca-certificates \ + curl \ + unzip \ + jq \ + wget \ + gnupg \ + libasound2 \ + libatk-bridge2.0-0 \ + libatk1.0-0 \ + libatspi2.0-0 \ + libdrm2 \ + libgbm1 \ + libgtk-3-0 \ + libnss3 \ + libnspr4 \ + libx11-6 \ + libx11-xcb1 \ + libxcb1 \ + libxcomposite1 \ + libxdamage1 \ + libxext6 \ + libxfixes3 \ + libxrandr2 \ + libxshmfence1 \ + libxss1 \ + libxtst6 \ + fonts-ipafont-gothic \ + fonts-wqy-zenhei \ + fonts-thai-tlwg \ + fonts-kacst \ + fonts-freefont-ttf \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ && apt-get update \ @@ -77,6 +77,6 @@ USER pptruser EXPOSE 4221 HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \ - CMD curl --fail --silent --show-error --max-time 5 --output /dev/null http://localhost:4221/ || exit 1 + CMD curl --fail --silent --show-error --max-time 5 --output /dev/null http://localhost:4221/ || exit 1 CMD exec /realm-server/packages/realm-server/$prerender_script diff --git a/packages/realm-server/realm-server.Dockerfile b/packages/realm-server/realm-server.Dockerfile index 1a45a44a483..7f2e27ee6e7 100644 --- a/packages/realm-server/realm-server.Dockerfile +++ b/packages/realm-server/realm-server.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.17.1-slim +FROM node:24.17.0-slim ARG realm_server_script ENV realm_server_script=$realm_server_script diff --git a/packages/realm-server/worker.Dockerfile b/packages/realm-server/worker.Dockerfile index 5fcf2ba1da2..70c02ff31f1 100644 --- a/packages/realm-server/worker.Dockerfile +++ b/packages/realm-server/worker.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:24.17.1-slim +FROM node:24.17.0-slim ARG worker_script ENV worker_script=$worker_script From f76e927e33f44b19188d6688d3a35d2a72d5fbb3 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 19 Jun 2026 08:53:49 -0500 Subject: [PATCH 3/6] ci: install prerender Chrome explicitly in init puppeteer's postinstall is an unreliable source of the prerender browser: it only downloads Chrome into ~/.cache/puppeteer when it decides the binary is absent, and that decision can silently skip the download, leaving the prerender service to fail at launch with "Could not find Chrome". When that happens, base-realm indexing never completes, the realm readiness check never returns 200, and every host-test shard fails at the "Wait for realms and assert public-read parity" gate before the suite runs. Install the browser explicitly from the puppeteer resolved in the workspace, which pins it to the version puppeteer-core launches at runtime, independent of the postinstall heuristic. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/actions/init/action.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/actions/init/action.yml b/.github/actions/init/action.yml index aaff14aea1a..23746fccafa 100644 --- a/.github/actions/init/action.yml +++ b/.github/actions/init/action.yml @@ -27,6 +27,19 @@ runs: shell: bash run: pnpm install --frozen-lockfile + # Provision the Chrome build the prerender service drives via puppeteer. + # puppeteer's postinstall is not a reliable source of the browser: it only + # downloads into ~/.cache/puppeteer when it decides the binary is absent, + # and that decision can silently skip the download, leaving the prerender + # to fail at launch with "Could not find Chrome (ver. )". Installing + # it explicitly from the puppeteer that's actually resolved in the workspace + # pins the browser to the version puppeteer-core launches at runtime, + # independent of the postinstall heuristic. chrome-headless-shell is fetched + # alongside chrome so both launch modes resolve. + - name: Ensure prerender Chrome is installed + shell: bash + run: pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome chrome-headless-shell + - name: Prune pnpm store if: ${{ steps.cache.outputs.cache-hit != 'true' }} shell: bash From afd8beec820c1e5318a06f803d76575b5d7dbcbb Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 19 Jun 2026 09:09:48 -0500 Subject: [PATCH 4/6] ci: clear stale puppeteer cache before installing Chrome A partial browser folder in the puppeteer cache (versioned directory present, executable missing) makes both puppeteer's postinstall and `browsers install` treat Chrome as already installed and skip the download, so the install step errors with "folder exists but executable missing" and the prerender later can't launch. Remove the cache first so the download actually runs, and install chrome and chrome-headless-shell as separate invocations since `install` accepts a single browser. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/actions/init/action.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/actions/init/action.yml b/.github/actions/init/action.yml index 23746fccafa..5b8dd25f65d 100644 --- a/.github/actions/init/action.yml +++ b/.github/actions/init/action.yml @@ -28,17 +28,21 @@ runs: run: pnpm install --frozen-lockfile # Provision the Chrome build the prerender service drives via puppeteer. - # puppeteer's postinstall is not a reliable source of the browser: it only - # downloads into ~/.cache/puppeteer when it decides the binary is absent, - # and that decision can silently skip the download, leaving the prerender - # to fail at launch with "Could not find Chrome (ver. )". Installing - # it explicitly from the puppeteer that's actually resolved in the workspace - # pins the browser to the version puppeteer-core launches at runtime, - # independent of the postinstall heuristic. chrome-headless-shell is fetched - # alongside chrome so both launch modes resolve. + # The puppeteer cache can carry a partial browser folder — the versioned + # directory present but its executable missing — which makes both + # puppeteer's postinstall and `browsers install` treat Chrome as already + # present and skip the download, so the prerender later fails to launch + # with "Could not find Chrome (ver. )". Clear the cache and install + # fresh from the puppeteer resolved in the workspace, which pins the browser + # to the version puppeteer-core launches at runtime. `install` takes a + # single browser, so chrome and chrome-headless-shell are installed in + # separate invocations; both launch modes then resolve. - name: Ensure prerender Chrome is installed shell: bash - run: pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome chrome-headless-shell + run: | + rm -rf "${PUPPETEER_CACHE_DIR:-$HOME/.cache/puppeteer}" + pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome + pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome-headless-shell - name: Prune pnpm store if: ${{ steps.cache.outputs.cache-hit != 'true' }} From 33da35d3e12c2d513e41f79382f592f3025a9811 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 19 Jun 2026 09:36:29 -0500 Subject: [PATCH 5/6] ci: cache prerender Chrome and provision it deterministically Cache the puppeteer browser (~/.cache/puppeteer, outside the pnpm store) so the ~150MB Chrome download happens once and is restored across shards and runs instead of re-downloading on every job. Skip puppeteer's postinstall download (PUPPETEER_SKIP_DOWNLOAD) and install the browser explicitly from the resolved puppeteer, which pins it to the version puppeteer-core launches and avoids the postinstall leaving a half-written browser folder that makes later consumers treat Chrome as present and skip it. The cache is saved only on a miss and only when the install succeeded, so a partial download is never persisted. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/actions/init/action.yml | 49 +++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/.github/actions/init/action.yml b/.github/actions/init/action.yml index 5b8dd25f65d..5a5b60cde36 100644 --- a/.github/actions/init/action.yml +++ b/.github/actions/init/action.yml @@ -23,27 +23,54 @@ runs: restore-keys: | ${{ runner.os }}-pnpm-store- + # The Chrome build the prerender service drives via puppeteer lives in + # ~/.cache/puppeteer, outside the pnpm store, so it is cached separately to + # avoid re-downloading ~150MB on every job. The key tracks the lockfile + # because the resolved puppeteer pins the browser version. + - uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + name: Restore puppeteer browser cache + id: puppeteer-cache + with: + path: ~/.cache/puppeteer + key: ${{ runner.os }}-puppeteer-${{ hashFiles('**/pnpm-lock.yaml') }} + + # PUPPETEER_SKIP_DOWNLOAD keeps puppeteer's postinstall from fetching the + # browser; it is provisioned explicitly below so the version is pinned and + # the postinstall can't leave a half-written browser folder that later makes + # puppeteer treat Chrome as present and skip it, breaking the prerender. - name: Install Dependencies shell: bash + env: + PUPPETEER_SKIP_DOWNLOAD: "true" run: pnpm install --frozen-lockfile - # Provision the Chrome build the prerender service drives via puppeteer. - # The puppeteer cache can carry a partial browser folder — the versioned - # directory present but its executable missing — which makes both - # puppeteer's postinstall and `browsers install` treat Chrome as already - # present and skip the download, so the prerender later fails to launch - # with "Could not find Chrome (ver. )". Clear the cache and install - # fresh from the puppeteer resolved in the workspace, which pins the browser - # to the version puppeteer-core launches at runtime. `install` takes a - # single browser, so chrome and chrome-headless-shell are installed in - # separate invocations; both launch modes then resolve. + # Install from the puppeteer resolved in the workspace, pinning the browser + # to the version puppeteer-core launches at runtime. A no-op when the cache + # restored a complete browser; downloads on a miss. On a miss any partial + # browser folder a postinstall may have left is dropped first so the install + # re-downloads rather than erroring on a missing executable. `install` takes + # a single browser, so chrome and chrome-headless-shell are installed + # separately; both launch modes then resolve. - name: Ensure prerender Chrome is installed shell: bash + env: + PUPPETEER_CACHE_HIT: ${{ steps.puppeteer-cache.outputs.cache-hit }} run: | - rm -rf "${PUPPETEER_CACHE_DIR:-$HOME/.cache/puppeteer}" + if [ "$PUPPETEER_CACHE_HIT" != "true" ]; then + rm -rf "$HOME/.cache/puppeteer" + fi pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome-headless-shell + # Persist the browser only on a miss and only once the install above + # succeeded, so a partial or failed download is never saved into the cache. + - uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + name: Save puppeteer browser cache + if: ${{ success() && steps.puppeteer-cache.outputs.cache-hit != 'true' }} + with: + path: ~/.cache/puppeteer + key: ${{ runner.os }}-puppeteer-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Prune pnpm store if: ${{ steps.cache.outputs.cache-hit != 'true' }} shell: bash From 836f0eb842259acbec29871ce396f4b164375515 Mon Sep 17 00:00:00 2001 From: Buck Doyle Date: Fri, 19 Jun 2026 11:40:54 -0500 Subject: [PATCH 6/6] fix: update puppeteer to 25.x so prerender Chrome installs on Node 24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit puppeteer 24's @puppeteer/browsers depends on extract-zip@2.0.1, which on newer Node silently aborts the Chrome unzip mid-stream without throwing — the install exits 0 with the executable missing, so the prerender can't launch Chrome and realm indexing never completes. puppeteer 25 replaced extract-zip with modern-tar, so the download extracts correctly again (puppeteer/puppeteer#14957). Revert the init-action workaround that pre-provisioned the browser; with the extractor fixed, puppeteer's own install handles it. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/actions/init/action.yml | 44 ----- packages/realm-server/package.json | 2 +- packages/realm-test-harness/package.json | 2 +- pnpm-lock.yaml | 204 +++++++++-------------- 4 files changed, 83 insertions(+), 169 deletions(-) diff --git a/.github/actions/init/action.yml b/.github/actions/init/action.yml index 5a5b60cde36..aaff14aea1a 100644 --- a/.github/actions/init/action.yml +++ b/.github/actions/init/action.yml @@ -23,54 +23,10 @@ runs: restore-keys: | ${{ runner.os }}-pnpm-store- - # The Chrome build the prerender service drives via puppeteer lives in - # ~/.cache/puppeteer, outside the pnpm store, so it is cached separately to - # avoid re-downloading ~150MB on every job. The key tracks the lockfile - # because the resolved puppeteer pins the browser version. - - uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 - name: Restore puppeteer browser cache - id: puppeteer-cache - with: - path: ~/.cache/puppeteer - key: ${{ runner.os }}-puppeteer-${{ hashFiles('**/pnpm-lock.yaml') }} - - # PUPPETEER_SKIP_DOWNLOAD keeps puppeteer's postinstall from fetching the - # browser; it is provisioned explicitly below so the version is pinned and - # the postinstall can't leave a half-written browser folder that later makes - # puppeteer treat Chrome as present and skip it, breaking the prerender. - name: Install Dependencies shell: bash - env: - PUPPETEER_SKIP_DOWNLOAD: "true" run: pnpm install --frozen-lockfile - # Install from the puppeteer resolved in the workspace, pinning the browser - # to the version puppeteer-core launches at runtime. A no-op when the cache - # restored a complete browser; downloads on a miss. On a miss any partial - # browser folder a postinstall may have left is dropped first so the install - # re-downloads rather than erroring on a missing executable. `install` takes - # a single browser, so chrome and chrome-headless-shell are installed - # separately; both launch modes then resolve. - - name: Ensure prerender Chrome is installed - shell: bash - env: - PUPPETEER_CACHE_HIT: ${{ steps.puppeteer-cache.outputs.cache-hit }} - run: | - if [ "$PUPPETEER_CACHE_HIT" != "true" ]; then - rm -rf "$HOME/.cache/puppeteer" - fi - pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome - pnpm --filter @cardstack/realm-server exec puppeteer browsers install chrome-headless-shell - - # Persist the browser only on a miss and only once the install above - # succeeded, so a partial or failed download is never saved into the cache. - - uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 - name: Save puppeteer browser cache - if: ${{ success() && steps.puppeteer-cache.outputs.cache-hit != 'true' }} - with: - path: ~/.cache/puppeteer - key: ${{ runner.os }}-puppeteer-${{ hashFiles('**/pnpm-lock.yaml') }} - - name: Prune pnpm store if: ${{ steps.cache.outputs.cache-hit != 'true' }} shell: bash diff --git a/packages/realm-server/package.json b/packages/realm-server/package.json index 7f077dcc4b9..a5486df7568 100644 --- a/packages/realm-server/package.json +++ b/packages/realm-server/package.json @@ -151,6 +151,6 @@ "@aws-sdk/client-s3": "^3.1065.0", "@aws-sdk/lib-storage": "^3.1065.0", "morphdom": "^2.7.8", - "puppeteer": "^24.8.2" + "puppeteer": "^25.0.2" } } diff --git a/packages/realm-test-harness/package.json b/packages/realm-test-harness/package.json index 5b69abc7f69..e90bec7432d 100644 --- a/packages/realm-test-harness/package.json +++ b/packages/realm-test-harness/package.json @@ -26,7 +26,7 @@ "fs-extra": "catalog:", "jsonwebtoken": "catalog:", "pg": "catalog:", - "puppeteer": "^24.8.2", + "puppeteer": "^25.0.2", "ts-node": "^10.9.1", "typescript": "catalog:" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a165b88edf..be35c655389 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -831,7 +831,7 @@ importers: version: 38.3.0(patch_hash=cee0baf579283943dc5a6b48977e8ed40a13fc111b5de9c91814893f9a4989fb) openai: specifier: 'catalog:' - version: 5.12.2(patch_hash=6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449)(ws@8.20.1)(zod@3.25.76) + version: 5.12.2(patch_hash=6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449)(ws@8.21.0)(zod@3.25.76) qunit: specifier: 'catalog:' version: 2.25.0 @@ -2588,8 +2588,8 @@ importers: specifier: ^2.7.8 version: 2.7.8 puppeteer: - specifier: ^24.8.2 - version: 24.43.1(typescript@5.9.3) + specifier: ^25.0.2 + version: 25.1.0 devDependencies: '@aws-crypto/sha256-js': specifier: 'catalog:' @@ -2898,8 +2898,8 @@ importers: specifier: 'catalog:' version: 8.20.0 puppeteer: - specifier: ^24.8.2 - version: 24.43.1(typescript@5.9.3) + specifier: ^25.0.2 + version: 25.1.0 ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@24.12.4)(typescript@5.9.3) @@ -3079,7 +3079,7 @@ importers: version: 2.1.35 openai: specifier: 'catalog:' - version: 5.12.2(patch_hash=6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449)(ws@8.20.1)(zod@3.25.76) + version: 5.12.2(patch_hash=6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449)(ws@8.21.0)(zod@3.25.76) pluralize: specifier: 'catalog:' version: 8.0.0 @@ -6163,10 +6163,15 @@ packages: '@prisma/instrumentation@5.22.0': resolution: {integrity: sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q==} - '@puppeteer/browsers@2.13.2': - resolution: {integrity: sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==} - engines: {node: '>=18'} + '@puppeteer/browsers@3.0.4': + resolution: {integrity: sha512-HGM8iAmGTf+Y7t0373szVbTmt3d7vPkYL/1bpOkOFO0YUYLgSeuYBCzESklogNPvOBnZ/MRD5f07OkpqH1trtA==} + engines: {node: '>=22.12.0'} hasBin: true + peerDependencies: + proxy-agent: '>=8.0.1' + peerDependenciesMeta: + proxy-agent: + optional: true '@rolldown/binding-android-arm64@1.0.0': resolution: {integrity: sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==} @@ -8397,8 +8402,9 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - chromium-bidi@14.0.0: - resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} + chromium-bidi@16.0.1: + resolution: {integrity: sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==} + engines: {node: '>=20.19.0 <22.0.0 || >=22.12.0'} peerDependencies: devtools-protocol: '*' @@ -8882,15 +8888,6 @@ packages: typescript: optional: true - cosmiconfig@9.0.1: - resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - countries-list@3.3.0: resolution: {integrity: sha512-XRUjS+dcZuNh/fg3+mka3bXgcg4TbQZ1gaK5IJqO6qulerBANl1bmrd20P2dgmPkBpP+5FnejiSF1gd7bgAg+g==} @@ -9375,8 +9372,8 @@ packages: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - devtools-protocol@0.0.1608973: - resolution: {integrity: sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ==} + devtools-protocol@0.0.1624250: + resolution: {integrity: sha512-YFAat/lOiIk0ARmBweG+ygrEcbZrq5B9urRyUoeQKp53MlidHXE2TmTbxKcaXoQj7u/aX+jebDO4BW55rs0WwA==} dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} @@ -10047,10 +10044,6 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -12069,6 +12062,10 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + line-column@1.0.2: resolution: {integrity: sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==} @@ -12592,6 +12589,10 @@ packages: resolution: {integrity: sha512-Bq72L2oi/isYSy0guN9ihNhAMQOyZEwts+Bezm/1U+wh8bQ+fVQ2ZiUoJJjceOMiiKv/BUrA0NF98jFc81CB6w==} engines: {node: 20 || 22 || 24} + modern-tar@0.7.6: + resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} + engines: {node: '>=18.0.0'} + module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -13518,10 +13519,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - promise-map-series@0.2.3: resolution: {integrity: sha512-wx9Chrutvqu1N/NHzTayZjE1BgIwt6SJykQoCOic4IZ9yUDjKyVYrpLa/4YCNsV61eRENfs29hrEquVuB13Zlw==} @@ -13544,10 +13541,6 @@ packages: resolution: {integrity: sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==} engines: {node: '>= 8'} - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -13580,13 +13573,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.43.1: - resolution: {integrity: sha512-T5ScUMAsmhdNbgDR41AGESYeS6V9MSgetkSnVhhW+gXvzC42VesKCn5ld87gAZDJ6vLHL9GkRvY9WtQWSnwFbw==} - engines: {node: '>=18'} + puppeteer-core@25.1.0: + resolution: {integrity: sha512-jKzy5y4WG6uNuFbTWgW1D7mqoT9o0nllc/6a1DGF775T1mPmgw3scdFEtEq67yVFikavQmbYq6NLfbTfxHSlqQ==} + engines: {node: '>=22.12.0'} - puppeteer@24.43.1: - resolution: {integrity: sha512-/FSOViCrqRdb1HDocpsM9Z1giA71gTQPUt3SpHGVRALKAy/rJr1fLFYZW9F23qPxqVxTHQnbh/5B5opJST3kAw==} - engines: {node: '>=18'} + puppeteer@25.1.0: + resolution: {integrity: sha512-7L6/0JM7XStK99lIL4xQySyNEXNfII6pk0BxkI5kKBTOhR7AsoQiv067YTsE/rIXxQiq9ajlO4WcqBjS/FWK1A==} + engines: {node: '>=22.12.0'} hasBin: true qs@6.15.1: @@ -14685,9 +14678,6 @@ packages: tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.1.2: - resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -15543,8 +15533,8 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webdriver-bidi-protocol@0.4.1: - resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} + webdriver-bidi-protocol@0.4.2: + resolution: {integrity: sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -15718,6 +15708,18 @@ packages: utf-8-validate: optional: true + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -19135,7 +19137,10 @@ snapshots: '@percy/cli-command': 1.31.13(typescript@5.9.3) '@percy/cli-exec': 1.31.13(typescript@5.9.3) transitivePeerDependencies: + - bufferutil + - supports-color - typescript + - utf-8-validate '@percy/cli-build@1.31.13(typescript@5.9.3)': dependencies: @@ -19190,7 +19195,10 @@ snapshots: cross-spawn: 7.0.6 which: 2.0.2 transitivePeerDependencies: + - bufferutil + - supports-color - typescript + - utf-8-validate '@percy/cli-snapshot@1.31.13(typescript@5.9.3)': dependencies: @@ -19364,20 +19372,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@puppeteer/browsers@2.13.2': + '@puppeteer/browsers@3.0.4': dependencies: - debug: 4.4.3(supports-color@8.1.1) - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.8.0 - tar-fs: 3.1.2 + modern-tar: 0.7.6 yargs: 17.7.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color '@rolldown/binding-android-arm64@1.0.0': optional: true @@ -22166,9 +22164,9 @@ snapshots: chrome-trace-event@1.0.4: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1608973): + chromium-bidi@16.0.1(devtools-protocol@0.0.1624250): dependencies: - devtools-protocol: 0.0.1608973 + devtools-protocol: 0.0.1624250 mitt: 3.0.1 zod: 3.25.76 @@ -22488,15 +22486,6 @@ snapshots: optionalDependencies: typescript: 5.9.3 - cosmiconfig@9.0.1(typescript@5.9.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.3 - countries-list@3.3.0: {} crc-32@1.2.2: {} @@ -23035,7 +23024,7 @@ snapshots: detect-newline@4.0.1: {} - devtools-protocol@0.0.1608973: {} + devtools-protocol@0.0.1624250: {} dezalgo@1.0.4: dependencies: @@ -24552,8 +24541,6 @@ snapshots: entities@7.0.1: {} - env-paths@2.2.1: {} - environment@1.1.0: {} errlop@2.2.0: {} @@ -27178,6 +27165,8 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + lilconfig@3.1.3: {} + line-column@1.0.2: dependencies: isarray: 1.0.0 @@ -27720,6 +27709,8 @@ snapshots: mktemp@2.0.3: {} + modern-tar@0.7.6: {} + module-details-from-path@1.0.4: {} moment@2.30.1: {} @@ -28044,9 +28035,9 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - openai@5.12.2(patch_hash=6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449)(ws@8.20.1)(zod@3.25.76): + openai@5.12.2(patch_hash=6833f1bcf56cde16edb25881777c31d2745994c6ea992d1e2051d1248d213449)(ws@8.21.0)(zod@3.25.76): optionalDependencies: - ws: 8.20.1 + ws: 8.21.0 zod: 3.25.76 opencode-ai@1.14.34: @@ -28660,8 +28651,6 @@ snapshots: process@0.11.10: {} - progress@2.0.3: {} - promise-map-series@0.2.3: dependencies: rsvp: 3.6.2 @@ -28694,19 +28683,6 @@ snapshots: transitivePeerDependencies: - supports-color - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@8.1.1) - http-proxy-agent: 7.0.2(supports-color@8.1.1) - https-proxy-agent: 7.0.6(supports-color@8.1.1) - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - proxy-from-env@1.1.0: {} proxy-from-env@2.1.0: {} @@ -28739,38 +28715,30 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.43.1: + puppeteer-core@25.1.0: dependencies: - '@puppeteer/browsers': 2.13.2 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1608973) - debug: 4.4.3(supports-color@8.1.1) - devtools-protocol: 0.0.1608973 + '@puppeteer/browsers': 3.0.4 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1624250) + devtools-protocol: 0.0.1624250 typed-query-selector: 2.12.2 - webdriver-bidi-protocol: 0.4.1 - ws: 8.20.1 + webdriver-bidi-protocol: 0.4.2 + ws: 8.21.0 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a - - supports-color + - proxy-agent - utf-8-validate - puppeteer@24.43.1(typescript@5.9.3): + puppeteer@25.1.0: dependencies: - '@puppeteer/browsers': 2.13.2 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1608973) - cosmiconfig: 9.0.1(typescript@5.9.3) - devtools-protocol: 0.0.1608973 - puppeteer-core: 24.43.1 + '@puppeteer/browsers': 3.0.4 + chromium-bidi: 16.0.1(devtools-protocol@0.0.1624250) + devtools-protocol: 0.0.1624250 + lilconfig: 3.1.3 + puppeteer-core: 25.1.0 typed-query-selector: 2.12.2 transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - bufferutil - - react-native-b4a - - supports-color - - typescript + - proxy-agent - utf-8-validate qs@6.15.1: @@ -30177,18 +30145,6 @@ snapshots: tar-stream: 2.2.0 optional: true - tar-fs@3.1.2: - dependencies: - pump: 3.0.4 - tar-stream: 3.2.0 - optionalDependencies: - bare-fs: 4.7.1 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -31158,7 +31114,7 @@ snapshots: dependencies: defaults: 1.0.4 - webdriver-bidi-protocol@0.4.1: {} + webdriver-bidi-protocol@0.4.2: {} webidl-conversions@3.0.1: {} @@ -31402,6 +31358,8 @@ snapshots: ws@8.20.1: {} + ws@8.21.0: {} + wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1