From ed12cd6dbd55af2de30fbe67f9dfd7380ace5e9c Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:42:56 +0200 Subject: [PATCH 01/32] chore(deps): clear the follow-redirects and vite audit advisories pnpm audit fails the gate on follow-redirects below 1.16.1 (two high, reached through CCC spore and axios) and on vite 8.3.0 to 8.3.2 (six advisories in vite and launch-editor). An override pins the transitive follow-redirects range to 1.16.1, following the existing security pins; vite moves to 8.3.4, the newest release past the seven-day age rule. --- interface/package.json | 2 +- pnpm-lock.yaml | 69 +++++++++++++++++++++--------------------- pnpm-workspace.yaml | 1 + 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/interface/package.json b/interface/package.json index 04520120..bfefeaf0 100644 --- a/interface/package.json +++ b/interface/package.json @@ -42,7 +42,7 @@ "oxc-transform-react": "^0.152.0", "tailwindcss": "^4.3.3", "typescript": "^6.0.3", - "vite": "^8.3.2" + "vite": "^8.3.4" }, "dependencies": { "@ckb-ccc/ccc": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b51015c1..27aa72fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -182,6 +182,7 @@ overrides: brace-expansion@>=5.0.0 <5.0.12: 5.0.12 esbuild@>=0.27.3 <0.28.1: 0.28.1 fast-uri@>=3.0.0 <3.1.8: 3.1.8 + follow-redirects@>=1.16.0 <1.16.1: 1.16.1 form-data@>=4.0.0 <4.0.6: 4.0.6 nanoid@<3.3.18: 3.3.18 shell-quote@>=1.8.4 <1.11.0: 1.11.0 @@ -278,7 +279,7 @@ importers: version: 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) vitest: specifier: ^5.0.3 - version: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) interface: dependencies: @@ -306,7 +307,7 @@ importers: version: link:../testkit '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 4.3.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@types/node': specifier: 'catalog:' version: 22.20.4 @@ -318,10 +319,10 @@ importers: version: 19.3.0(@types/react@19.3.0) '@vitejs/plugin-basic-ssl': specifier: ^2.3.0 - version: 2.3.0(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 2.3.0(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@vitejs/plugin-react': specifier: ^6.1.1 - version: 6.1.1(oxc-transform-react@0.152.0)(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) oxc-transform-react: specifier: ^0.152.0 version: 0.152.0 @@ -332,8 +333,8 @@ importers: specifier: ^6.0.3 version: 6.0.3 vite: - specifier: ^8.3.2 - version: 8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + specifier: ^8.3.4 + version: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) sdk: dependencies: @@ -2422,8 +2423,8 @@ packages: resolution: {integrity: sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==} engines: {node: '>=0.4.0'} - follow-redirects@1.16.0: - resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + follow-redirects@1.16.1: + resolution: {integrity: sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3197,8 +3198,8 @@ packages: multiformats@14.0.5: resolution: {integrity: sha512-vbIm83F2yZ1pWJGS0yl0ysracIvv56LtbrIyiIQHoLdYDJOMoLfVFsXhh9DUH4SFdkdkFhucyWniihsNzVEjkQ==} - nanoid@3.3.19: - resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -3341,8 +3342,8 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - postcss@8.5.28: - resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} + postcss@8.5.30: + resolution: {integrity: sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -3913,8 +3914,8 @@ packages: varuint-bitcoin@2.0.1: resolution: {integrity: sha512-TTl5qSPJ3FzjuTHo0Ex9WUE3jTxnUsQHR38vIDhHApoVstzJK4gE20WqmTWOT5oo7ilvOSNejXt4CJrfDcqm5A==} - vite@8.3.2: - resolution: {integrity: sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==} + vite@8.3.4: + resolution: {integrity: sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -5555,12 +5556,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 - '@tailwindcss/vite@4.3.3(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@tailwindcss/vite@4.3.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) '@tanstack/query-core@5.104.0': {} @@ -5800,14 +5801,14 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260707.2 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260707.2 - '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: - vite: 8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) - '@vitejs/plugin-react@6.1.1(oxc-transform-react@0.152.0)(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-react@6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) optionalDependencies: oxc-transform-react: 0.152.0 @@ -5821,7 +5822,7 @@ snapshots: obug: 2.2.1 std-env: 4.3.0 tinyrainbow: 3.2.0 - vitest: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + vitest: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@vitest/eslint-plugin@1.6.27(@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(vitest@5.0.3)': dependencies: @@ -5831,7 +5832,7 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) typescript: 6.0.3 - vitest: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + vitest: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) transitivePeerDependencies: - supports-color @@ -5841,14 +5842,14 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.2 - '@vitest/mocker@5.0.3(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitest/mocker@5.0.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.3 estree-walker: 3.0.3 magic-string: 1.4.2 optionalDependencies: - vite: 8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) '@vitest/spy@5.0.3': {} @@ -5956,7 +5957,7 @@ snapshots: axios@1.20.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2): dependencies: - follow-redirects: 1.16.0(debug@4.4.3(supports-color@10.2.2)) + follow-redirects: 1.16.1(debug@4.4.3(supports-color@10.2.2)) form-data: 4.0.6 https-proxy-agent: 5.0.1(supports-color@10.2.2) proxy-from-env: 2.1.0 @@ -6524,7 +6525,7 @@ snapshots: dependencies: flow-estree: 0.331.0 - follow-redirects@1.16.0(debug@4.4.3(supports-color@10.2.2)): + follow-redirects@1.16.1(debug@4.4.3(supports-color@10.2.2)): optionalDependencies: debug: 4.4.3(supports-color@10.2.2) @@ -7376,7 +7377,7 @@ snapshots: multiformats@14.0.5: {} - nanoid@3.3.19: {} + nanoid@3.3.20: {} nanoid@6.0.1: {} @@ -7553,9 +7554,9 @@ snapshots: pluralize@8.0.0: {} - postcss@8.5.28: + postcss@8.5.30: dependencies: - nanoid: 3.3.19 + nanoid: 3.3.20 picocolors: 1.1.1 source-map-js: 1.2.2 @@ -8057,11 +8058,11 @@ snapshots: dependencies: uint8array-tools: 0.0.10 - vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): + vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 - postcss: 8.5.28 + postcss: 8.5.30 rolldown: 1.2.12 tinyglobby: 0.2.17 optionalDependencies: @@ -8071,10 +8072,10 @@ snapshots: terser: 5.51.2 yaml: 2.9.1 - vitest@5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): + vitest@5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.3(vite@8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + '@vitest/mocker': 5.0.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) chai: 6.3.0 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -8085,7 +8086,7 @@ snapshots: tinybench: 6.2.0 tinyexec: 1.3.1 tinyglobby: 0.2.17 - vite: 8.3.2(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) why-is-node-running: 3.2.1 optionalDependencies: '@types/node': 22.20.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1371a328..1546d98f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -26,6 +26,7 @@ overrides: brace-expansion@>=5.0.0 <5.0.12: 5.0.12 esbuild@>=0.27.3 <0.28.1: 0.28.1 fast-uri@>=3.0.0 <3.1.8: 3.1.8 + follow-redirects@>=1.16.0 <1.16.1: 1.16.1 form-data@>=4.0.0 <4.0.6: 4.0.6 nanoid@<3.3.18: 3.3.18 shell-quote@>=1.8.4 <1.11.0: 1.11.0 From 723cc81828f070d75fe47010a5b932e2324d986d Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:37:29 +0200 Subject: [PATCH 02/32] chore: require Node 22.23.4, the October 21 security release The 2026-10-21 Node.js security release fixes two high TLS hostname checks, a Brotli decoder out-of-bounds write and undici, c-ares and CA-bundle issues in 22.x, 24.x and 26.x; 20.x got no release. The bot is a long-running fetch-over-TLS client, so the floor moves to the first fixed 22.x in every engines field, the CI pin and the READMEs. --- .github/workflows/check.yaml | 4 ++-- README.md | 2 +- interface/package.json | 2 +- package.json | 2 +- pnpm-workspace.yaml | 2 +- sdk/node/README.md | 2 +- sdk/node/package.json | 2 +- sdk/package.json | 2 +- testkit/package.json | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index ee5b880f..cef9d8a4 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: # The declared Node floor; the example units run the current release. - node-version: 22.19.0 + node-version: 22.23.4 - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 - name: Install pinned dependencies @@ -82,7 +82,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: - node-version: 22.19.0 + node-version: 22.23.4 - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 - name: Install pinned dependencies diff --git a/README.md b/README.md index 79307ff0..345723e4 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Stack assumes user-owned cells have [locks whose signatures bind the whole trans ## Dependencies and checks -Use Node 22.19 or later and the pinned pnpm 12.4.2. From a plain checkout: +Use Node 22.23.4 or later and the pinned pnpm 12.4.2. From a plain checkout: ```bash pnpm install --frozen-lockfile diff --git a/interface/package.json b/interface/package.json index bfefeaf0..6228f7e0 100644 --- a/interface/package.json +++ b/interface/package.json @@ -21,7 +21,7 @@ "type": "module", "private": true, "engines": { - "node": ">=22.19.0" + "node": ">=22.23.4" }, "scripts": { "dev": "vite", diff --git a/package.json b/package.json index f89a3afd..90832f32 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "test": "vitest" }, "engines": { - "node": ">=22.19.0" + "node": ">=22.23.4" }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1546d98f..61ccb031 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -56,7 +56,7 @@ minimumReleaseAgeStrict: true patchedDependencies: # JoyID only needs a standard fetch implementation, but 1.1.4 imports # cross-fetch, which loads node-fetch@2 and Node's deprecated builtin - # punycode during native source imports. Stack requires Node 22.19+ and + # punycode during native source imports. Stack requires Node 22.23.4+ and # modern browsers, so use globalThis.fetch until JoyID publishes this fix. # pnpm still resolves JoyID's original cross-fetch dependency in the lockfile; # scripts/test/build/native-source-smoke.ts guards the runtime path so it stays dormant. diff --git a/sdk/node/README.md b/sdk/node/README.md index c2d52b33..ca88c796 100644 --- a/sdk/node/README.md +++ b/sdk/node/README.md @@ -30,7 +30,7 @@ The process owns the CCC client and disposes it at the end of the turn so open s ## Run -From a plain checkout, run `pnpm install` from the repo root. CCC is resolved as a normal package dependency, and the app runs from TypeScript source under Node 22.19+. The key file lives outside the checkout, in a private directory: +From a plain checkout, run `pnpm install` from the repo root. CCC is resolved as a normal package dependency, and the app runs from TypeScript source under Node 22.23.4+. The key file lives outside the checkout, in a private directory: ```bash pnpm install diff --git a/sdk/node/package.json b/sdk/node/package.json index 4b28c1be..5869d186 100644 --- a/sdk/node/package.json +++ b/sdk/node/package.json @@ -5,7 +5,7 @@ "private": true, "type": "module", "engines": { - "node": ">=22.19.0" + "node": ">=22.23.4" }, "scripts": { "bot": "node src/bot.ts", diff --git a/sdk/package.json b/sdk/package.json index b4df675f..89d6b1cb 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -21,7 +21,7 @@ "sideEffects": false, "type": "module", "engines": { - "node": ">=22.19.0" + "node": ">=22.23.4" }, "main": "src/index.ts", "types": "src/index.ts", diff --git a/testkit/package.json b/testkit/package.json index 7bcc32a1..8ae51087 100644 --- a/testkit/package.json +++ b/testkit/package.json @@ -5,7 +5,7 @@ "sideEffects": false, "type": "module", "engines": { - "node": ">=22.19.0" + "node": ">=22.23.4" }, "main": "src/index.ts", "types": "src/index.ts", From ab43dd63c09a434be94e0a101063514a77a1c466 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:48:04 +0200 Subject: [PATCH 03/32] fix(bot): the stress line counts the reserve, so one matured anchor restores it The line was one deposit's cost, receipt included, beyond the reserve, and stress compared spendable CKB plus requests in flight against it. A cap anchor in flight carries its capacity plus the owner marker that came out of the liquid cells, and matured it returns about the capacity less fees: 208 CKB plus fees under the cost. From the floor the line was never restored, in flight or after maturity (journal 2026-10-19 08:47 to 09:49: pending 119,537 CKB against a cost of about 119,647, spendable near zero, stress true throughout), so each dip took a second anchor and a quiet bot would settle near two deposits of CKB, the line already rejected. Stress now compares total CKB, reserve included, against the same cost, so the reserve is the slack: in flight and matured, a cap anchor clears the line by about 790 CKB. Coverage still keeps two deposits spendable, above the line. A cap-sized seller right after restoration may be served short by up to the reserve less the receipt, above the minimum match; the tail follows. The replaced test used a pending amount of one shannon against a balance one shannon short, which hid the gap; the new one uses the journal's shape. Reviewed independently by Fable 5.1 and Opus 5.5 at d4a5b0ae, both arriving at this change over comparing against the capacity (zero margin), counting a request as a full line (short after maturity) or dropping the guard. --- sdk/node/README.md | 2 +- sdk/node/docs/policy.md | 4 ++-- sdk/node/src/bot/policy.ts | 9 +++++--- sdk/node/test/bot/policy.ts | 41 ++++++++++++++++++++++++++++++------- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/sdk/node/README.md b/sdk/node/README.md index ca88c796..dac15726 100644 --- a/sdk/node/README.md +++ b/sdk/node/README.md @@ -160,7 +160,7 @@ jq -r '"\(.outcome) \(.draw.kind // "-") \(.draw.direction // "-") \(.skip.reaso | Empty book | Nothing live | `match.reason` `no_market_orders` | unattended | | Deposit | Under 2,000 iCKB; or the tip's ring segment thin, with two deposits of CKB spendable | `core.kind` `deposit`, `rebalance.deposit` `low_ickb` or `ring_coverage` | operator: fund or drain the bot; wait for maturity | | Withdrawal requests | Over 120,000 iCKB with ready surplus deposits | `core.kind` `withdraw`, `core.withdrawalRequests`, `rebalance.withdrawal` | operator: fund the bot with iCKB; wait for maturity | -| Anchors under stress | Spendable CKB, in hand and in flight, under one deposit | `rebalance.withdrawal.stress` `true` | operator: drain the bot's CKB | +| Anchors under stress | CKB in hand and in flight, reserve included, under one deposit's cost | `rebalance.withdrawal.stress` `true` | operator: drain the bot's CKB | | Nothing fundable | No core, match, or collection completes | skip `no_fundable_candidate`, `core.attempts` | operator: a thin bot | ## systemd Deployment diff --git a/sdk/node/docs/policy.md b/sdk/node/docs/policy.md index 65ffa2b0..a8bb2762 100644 --- a/sdk/node/docs/policy.md +++ b/sdk/node/docs/policy.md @@ -46,7 +46,7 @@ The ring spreads deposit maturities over a DAO cycle. It partitions the cycle in The count follows pool value, not deposit count, because a deposit created without iCKB Logic running carries no iCKB, so zero-value spam would multiply the segments. Two caps per segment leave room for the bot's own fills: a covered ring holds about one cap per segment, so with one cap per segment the fills after a doubling would double the ring again. A hysteresis on the count was rejected because user withdrawal plans need the ring to be a pure function of the pool. A value threshold on deposits was rejected because deposits just above it still inflate a count. Tiny non-ready deposits can still take a segment's anchor slot; the coverage rule repairs that segment with one deposit per cycle. Zero-value deposits are neither filtered from withdrawal chains nor sorted after valued ones: withdrawing one returns its 82 CKB occupied capacity, so a flood of them costs a withdrawer only the order fee on the iCKB they displace, under an eighth of what the flood costs its sender, and a value threshold is defeated by one shannon of free capacity. -The bot keeps one deposit's cost, receipt included, in CKB beyond the reserve, so a cap-sized seller is served at once; a larger order is served in partials, and the tail follows as anchors mature. Under stress, when spendable CKB plus the bot's own requests in flight is under that line, ready anchors may be withdrawn too, surplus first, and the next matured request restores the line. Requests in flight count because they claim within the ready window; without them a second anchor went to the same dip. Taking an anchor can cost that segment its coverage for a cycle; the ring is a heuristic, not a liquidity guarantee. +The bot keeps one deposit's cost, receipt included, in CKB, the reserve counted in, so a cap-sized seller arriving at a quiet bot is served at once but for the tail the reserve covers; a larger order is served in partials, and the tail follows as anchors mature. With a queue, matured CKB goes to the best-priced sellers in the same transaction that collects it, so the line is the trigger for stress, not a balance the bot holds. Under stress, when CKB in hand plus the bot's own requests in flight is under that line, ready anchors may be withdrawn too, surplus first, and the next matured request restores the line. Requests in flight count because they claim within the ready window; without them a second anchor went to the same dip. The line counts the reserve because a matured cap anchor returns about the deposit's capacity, under its cost by the receipt and the fees: measured beyond the reserve, no single anchor ever restored it, each dip took a second anchor, and a quiet bot settled near two deposits of CKB, the line rejected below. Taking an anchor can cost that segment its coverage for a cycle; the ring is a heuristic, not a liquidity guarantee. A coverage deposit keeps that line, so it cannot cause stress: keeping only the reserve let stress withdraw the next segment's anchor and the matured CKB re-seed that segment, with the bot's CKB pinned at the reserve. A fraction of a deposit was rejected as the line because immediate service saturates at one; more than one deposit removes a seed from every levelling cycle and raises the funding floor for a tail partials already cover. The refill keeps only the reserve: a bot with one deposit of CKB and no iCKB gets CKB only from buyers, who need its iCKB. @@ -73,5 +73,5 @@ The bot waits up to two minutes so its journal can join a send to a commit. It r ## Operating assumptions - Prefer an exclusive node with `[indexer_v2] index_tx_pool = false`. With pool indexing on, a timed-out intent can be duplicated with disjoint inputs on a later turn. A public node is acceptable when the operator accepts that risk. -- Recommended funding is about 3.2 deposits of total value plus the reserve: 1.2 deposits of iCKB before withdrawal, one deposit's worth of CKB to refill, and one deposit's worth of CKB kept for sellers. Recompute the recommendation if the thresholds change. Below two deposits of CKB the bot matches, refills and sheds surplus but never seeds the ring; below one deposit of CKB it still matches what it can but may idle at its reserve. +- Recommended funding is about 3.2 deposits of total value, the reserve inside: 1.2 deposits of iCKB before withdrawal, one deposit's worth of CKB to refill, and one deposit's worth of CKB kept for sellers, the reserve counted in that one. Recompute the recommendation if the thresholds change. Below two deposits of CKB the bot matches, refills and sheds surplus but never seeds the ring; below one deposit of CKB it still matches what it can but may idle at its reserve. - No process state has to be cleared after a failed turn, partial collection or reorg. Recovery still depends on the available inventory, chain state and market; it is not a promise to serve every order or to make an unfunded account progress. diff --git a/sdk/node/src/bot/policy.ts b/sdk/node/src/bot/policy.ts index da49a2da..0d819a25 100644 --- a/sdk/node/src/bot/policy.ts +++ b/sdk/node/src/bot/policy.ts @@ -57,7 +57,7 @@ export interface RebalancePlan { candidates: IckbDepositCell[]; /** iCKB the requests may consume: the balance minus the retained buffer. */ budget: bigint; - /** Anchors were admitted because the bot's CKB, in hand or in flight, is under one deposit. */ + /** Anchors were admitted because the bot's CKB, in hand or in flight, reserve included, is under one deposit's cost. */ stress: boolean; }; ring: RingSummary; @@ -65,7 +65,7 @@ export interface RebalancePlan { /** * Refill under 2,000 iCKB keeping the reserve; seed the ring keeping one deposit more, the - * line stress restores. Withdraw ready surplus while over 120,000 iCKB, keeping 20,000; + * line stress restores, measured on total CKB. Withdraw ready surplus while over 120,000 iCKB, keeping 20,000; * anchors too under stress. Rationale in node/docs/policy.md. */ export function planRebalance(input: RebalanceInput): RebalancePlan { @@ -83,7 +83,10 @@ export function planRebalance(input: RebalanceInput): RebalancePlan { if (ickb > ICKB_WITHDRAW_ABOVE) { const ready = sortByClaim(readyDeposits(poolDeposits, tip, lockUp)); const isSurplus = ringSurplusDepositFilter(poolDeposits, ready); - const stress = spendable + pendingCkb < depositCost; + // Total CKB, reserve included: a matured cap anchor returns about the deposit's + // capacity, under its cost by the receipt and the fees, so a line beyond the reserve + // was never restored by one anchor and each dip took a second. The reserve is the slack. + const stress = ckb + pendingCkb < depositCost; const candidates = [ ...ready.filter(isSurplus), ...(stress ? ready.filter((deposit) => !isSurplus(deposit)) : []), diff --git a/sdk/node/test/bot/policy.ts b/sdk/node/test/bot/policy.ts index 6804005b..ca8f5df5 100644 --- a/sdk/node/test/bot/policy.ts +++ b/sdk/node/test/bot/policy.ts @@ -22,7 +22,13 @@ import { import { BOT_TIP, readyDeposit } from "./fixtures/bot.ts"; const TIP = BOT_TIP; -const DEPOSIT_COST = ccc.fixedPointFrom(100_300); +/** A cap-sized deposit's capacity and its receipt: what a deposit costs the bot. */ +const DEPOSIT_CAPACITY = ccc.fixedPointFrom(100_082); +const RECEIPT = ccc.fixedPointFrom(218); +const DEPOSIT_COST = DEPOSIT_CAPACITY + RECEIPT; +/** What a cap-sized withdrawal request carries beyond the deposit: its owner marker. */ +const OWNER_MARKER = ccc.fixedPointFrom(98); +const FEE = ccc.fixedPointFrom(1); /** Minutes in the nominal epoch: a whole number of these out is another ring segment. */ const EPOCH_MINUTES = 240n; @@ -132,12 +138,12 @@ describe("planRebalance withdrawal", () => { }); }); - it("admits anchors after the surplus only under stress, counting CKB in flight", () => { + it("admits anchors after the surplus only under stress, measured on total CKB in hand and in flight", () => { const surplus = readyDeposit("d1", ICKB_DEPOSIT_CAP); const anchor = readyDeposit("d2", ICKB_DEPOSIT_CAP + 1n); const stressed = input({ ickb: ICKB_WITHDRAW_ABOVE + 1n, - ckb: CKB_RESERVE + DEPOSIT_COST - 1n, + ckb: DEPOSIT_COST - 1n, poolDeposits: [anchor, surplus], }); @@ -145,13 +151,34 @@ describe("planRebalance withdrawal", () => { candidates: [surplus, anchor], stress: true, }); - expect( - planRebalance({ ...stressed, ckb: CKB_RESERVE + DEPOSIT_COST }).withdrawal, - ).toMatchObject({ candidates: [surplus], stress: false }); - expect(planRebalance({ ...stressed, pendingCkb: 1n }).withdrawal).toMatchObject({ + // The line counts the reserve: one deposit's cost in total CKB clears it. + expect(planRebalance({ ...stressed, ckb: DEPOSIT_COST }).withdrawal).toMatchObject({ candidates: [surplus], stress: false, }); + + // A cap anchor requested from the floor: the marker left the liquid cells and rides in + // flight with the deposit's capacity, which is under the cost by the receipt. The + // reserve is what keeps that request on the line. + const inFlight = { + ...stressed, + ckb: CKB_RESERVE - OWNER_MARKER - FEE, + pendingCkb: DEPOSIT_CAPACITY + OWNER_MARKER, + }; + expect(planRebalance(inFlight).withdrawal).toMatchObject({ + candidates: [surplus], + stress: false, + }); + // Matured: the same CKB in hand, less the fee, still clears the line. + expect( + planRebalance({ ...stressed, ckb: CKB_RESERVE + DEPOSIT_CAPACITY - FEE }) + .withdrawal, + ).toMatchObject({ candidates: [surplus], stress: false }); + // A half-cap anchor in flight does not. + expect( + planRebalance({ ...inFlight, pendingCkb: DEPOSIT_CAPACITY / 2n + OWNER_MARKER }) + .withdrawal, + ).toMatchObject({ candidates: [surplus, anchor], stress: true }); }); it("returns both moves when coverage and excess apply, and none without ready deposits", () => { From c6e03f0d1a132050fe0336d6a0af2deb4c1c951d Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:57:54 +0200 Subject: [PATCH 04/32] docs(node): the host must stay up, and what to watch from another host The bot's request window is twenty to sixty minutes before a deposit's claim, so a deposit maturing during an outage waits a full cycle; nothing said so. Two days of a laptop host at 23% uptime showed it. The alerting example forwarded every bot.turn.failed while the prose said consecutive; each single failure in the journal recovered on the next turn. The watcher also ran on the same host and died with it, which was the actual failure, so the example is now an off-host staleness check. `systemctl --user --failed` never lists a Restart=always unit, so that line is gone. --- sdk/node/README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sdk/node/README.md b/sdk/node/README.md index dac15726..c6ea3dda 100644 --- a/sdk/node/README.md +++ b/sdk/node/README.md @@ -130,11 +130,13 @@ pnpm --filter ./sdk/node stimulus ### Alerting -Neither program carries a notification channel: a run is one turn, and anything worth an operator's attention is a run of turns, which only the journal sees. Both journals are JSON lines with `type` and `timestamp` first, so a watcher is a pipe. Consecutive `bot.turn.failed` lines, or `bot.decision.skipped` lines whose `decision.match.reason` is `unfunded_gain`, are the two conditions worth forwarding; a `stale` count above zero in the generator's `orders` is a third. Put the destination in an environment file with mode `0600` next to the key, since a Telegram or ntfy URL carries the token, and let `curl` encode the message: +Neither program carries a notification channel: a run is one turn, and anything worth an operator's attention is a run of turns, which only the journal sees. A single `bot.turn.failed` is noise: a DNS or RPC failure ends the turn and the next one rebuilds from committed state. The conditions worth forwarding are silence, a run of failed turns, hours of `bot.decision.skipped` lines whose `decision.match.reason` is `unfunded_gain` (sellers are waiting and only CKB serves them before the next anchor), and a `stale` count above zero in the generator's `orders`. Silence is the one a watcher on the same host cannot see, since it dies with the host, so check it from another machine over SSH. Put the destination in an environment file with mode `0600` next to the key, since a Telegram or ntfy URL carries the token, and let `curl` encode the message: ```bash -journalctl -f --user -u ickb-bot-testnet.service -o cat | jq -R -c 'fromjson? | select(.type == "bot.turn.failed")' \ - | while read -r line; do curl -sG --data-urlencode "text=$line" "$ALERT_URL" >/dev/null; done +# From another host: the newest bot event must be under twenty minutes old. +last=$(ssh "$HOST" journalctl --user -u ickb-bot-testnet.service -o cat -n 1 | jq -r .timestamp) +[ $(( $(date +%s) - $(date -d "$last" +%s) )) -lt 1200 ] \ + || curl -sG --data-urlencode "text=bot silent since $last" "$ALERT_URL" >/dev/null ``` ### What the journals should show @@ -167,6 +169,8 @@ jq -r '"\(.outcome) \(.draw.kind // "-") \(.draw.direction // "-") \(.skip.reaso The actors run as the operator's user under systemd, from an ordinary git checkout with an absolute Node path. systemd 255 and later are supported. One hand-edited unit per network owns configuration; Git owns revisions. This trades per-network user isolation and atomic updates for a stopped-checkout update procedure. A root installer, release-directory swap or template/drop-in hierarchy would add deployment concepts without changing that operating model. +The host must stay up. The bot requests a deposit only while its claim is twenty to sixty minutes out ([`BOT_LOCK_UP`](../src/dao.ts)), so every deposit whose window passes while the bot or its node is down waits a full cycle, about thirty days, and the sellers it would have served wait with it. A suspended laptop, a reboot of forty minutes, or a node outage of that length costs exactly that; the node's availability bounds the bot's. A user unit cannot order itself after the system's network target, so the first turn after boot can fail on DNS and retries a minute later, which is harmless. + ### Host isolation A mode `0600` key file excludes other users, not other processes under the same UID. The operator sets the mode; the runtime does not check it. `LoadCredential` would copy the same user's readable file without creating another boundary, and local encryption without a separate key boundary would leave both on the same disk. @@ -196,7 +200,6 @@ Operate the unit as usual: ```bash systemctl --user status ickb-bot-testnet.service -systemctl --user --failed systemctl --user restart ickb-bot-testnet.service ``` From 9e0c484307b1e9fe6dabe21751dfbc7f897095cb Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:58:28 +0200 Subject: [PATCH 05/32] docs(bot): coverage repair waits for two deposits of spendable CKB The ring section said the coverage rule repairs a thin segment once per cycle without its precondition. Two days of testnet sell pressure showed the tip walking empty segments for a whole window with no repair possible, since matured CKB went to sellers and spendable never reached two deposits. --- sdk/node/docs/policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/node/docs/policy.md b/sdk/node/docs/policy.md index a8bb2762..19660a96 100644 --- a/sdk/node/docs/policy.md +++ b/sdk/node/docs/policy.md @@ -44,7 +44,7 @@ The band is expressed in [`policy.ts`](../src/bot/policy.ts) in units of the 100 The ring spreads deposit maturities over a DAO cycle. It partitions the cycle into a power-of-two number of segments, one per two deposit caps of pool iCKB, and protects one anchor per occupied segment, preferring a non-ready deposit. Unlike fixed-width windows, segments shrink as the pool grows; doubling splits each old segment into two. -The count follows pool value, not deposit count, because a deposit created without iCKB Logic running carries no iCKB, so zero-value spam would multiply the segments. Two caps per segment leave room for the bot's own fills: a covered ring holds about one cap per segment, so with one cap per segment the fills after a doubling would double the ring again. A hysteresis on the count was rejected because user withdrawal plans need the ring to be a pure function of the pool. A value threshold on deposits was rejected because deposits just above it still inflate a count. Tiny non-ready deposits can still take a segment's anchor slot; the coverage rule repairs that segment with one deposit per cycle. Zero-value deposits are neither filtered from withdrawal chains nor sorted after valued ones: withdrawing one returns its 82 CKB occupied capacity, so a flood of them costs a withdrawer only the order fee on the iCKB they displace, under an eighth of what the flood costs its sender, and a value threshold is defeated by one shannon of free capacity. +The count follows pool value, not deposit count, because a deposit created without iCKB Logic running carries no iCKB, so zero-value spam would multiply the segments. Two caps per segment leave room for the bot's own fills: a covered ring holds about one cap per segment, so with one cap per segment the fills after a doubling would double the ring again. A hysteresis on the count was rejected because user withdrawal plans need the ring to be a pure function of the pool. A value threshold on deposits was rejected because deposits just above it still inflate a count. Tiny non-ready deposits can still take a segment's anchor slot; the coverage rule repairs that segment with one deposit per cycle, once the bot has two deposits of CKB spendable, which a bot drained by sellers does not have until demand turns. Zero-value deposits are neither filtered from withdrawal chains nor sorted after valued ones: withdrawing one returns its 82 CKB occupied capacity, so a flood of them costs a withdrawer only the order fee on the iCKB they displace, under an eighth of what the flood costs its sender, and a value threshold is defeated by one shannon of free capacity. The bot keeps one deposit's cost, receipt included, in CKB, the reserve counted in, so a cap-sized seller arriving at a quiet bot is served at once but for the tail the reserve covers; a larger order is served in partials, and the tail follows as anchors mature. With a queue, matured CKB goes to the best-priced sellers in the same transaction that collects it, so the line is the trigger for stress, not a balance the bot holds. Under stress, when CKB in hand plus the bot's own requests in flight is under that line, ready anchors may be withdrawn too, surplus first, and the next matured request restores the line. Requests in flight count because they claim within the ready window; without them a second anchor went to the same dip. The line counts the reserve because a matured cap anchor returns about the deposit's capacity, under its cost by the receipt and the fees: measured beyond the reserve, no single anchor ever restored it, each dip took a second anchor, and a quiet bot settled near two deposits of CKB, the line rejected below. Taking an anchor can cost that segment its coverage for a cycle; the ring is a heuristic, not a liquidity guarantee. From f5800a836a0a37c795ee18390c249a911b5201c9 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:58:28 +0200 Subject: [PATCH 06/32] docs(sdk): the seller estimate's optimistic cases under sustained selling The supply model counts every pool deposit at its claim date. Wallets take surplus deposits days before the bot can see them, downtime rolls deposits a cycle without warning, and the bot's iCKB float caps a claim cluster. Recorded as accepted limits; a model change needs mainnet evidence. --- sdk/docs/pool_maturity_estimates.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/docs/pool_maturity_estimates.md b/sdk/docs/pool_maturity_estimates.md index e94411b3..5998fba3 100644 --- a/sdk/docs/pool_maturity_estimates.md +++ b/sdk/docs/pool_maturity_estimates.md @@ -44,4 +44,5 @@ The [SDK's direct-first completion walk](../README.md#transaction-completion) ch - In a thin pool with a sitting seller, removing assumed working capital can move the date to the next claim even if a bot could fill within a turn. This accepts a conservative date rather than maintaining a list of operator balances. - A buyer-side distress signal (a fillable buyer sitting for over a turn) is not modelled; add it only when a journal shows buyers sitting. - In-flight withdrawal requests are not read as a dated supply grade; the simpler policy was preferred. +- Under sustained selling the seller's date runs optimistic in three ways, none modelled: wallet plans request surplus deposits up to three days ahead (`WALLET_LOCK_UP`) while the bot looks one hour ahead, so those deposits never reach the order book; a deposit whose window passes while the bot is down rolls a cycle and the date jumps on the next refresh; and the bot withdraws at most its iCKB beyond the retained 20,000 per claim cluster, so a cluster larger than its float waits a cycle. A model change waits for a mainnet journal showing the gap. - The pool is read by direct scans, whose cost grows with the pool. A bot-written snapshot would need an explicit format identity, a writer, a reader, freshness and fallback rules; none exists yet. From 3c840f8e04193d8677c146ebcda31792bae7e364 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:58:30 +0200 Subject: [PATCH 07/32] fix(interface): the order intent says a bot fills it, and the README says what that means "Converts at a variable time" hid the dependency: an order is filled only when a bot holds the other side, at the one price the interface asks, with no priority to buy and no promise of eventual service, and an unfilled sell returns at the age cutoff. The intent line now names the bot; the README owns the rest, next to the fee the form already cites. --- interface/README.md | 2 +- interface/src/action/actionStatus.ts | 4 ++-- interface/test/action/actionStatus.ts | 6 +++--- interface/test/hook/appAction.tsx | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/interface/README.md b/interface/README.md index 00515716..05961f80 100644 --- a/interface/README.md +++ b/interface/README.md @@ -31,7 +31,7 @@ After a transaction error, the app gives the client a new cache object. CCC's `c The interface describes conversions by when funds return: direct actions have a claim date; standing orders depend on a bot. One [estimated date](../sdk/docs/pool_maturity_estimates.md) covers the wallet's converting funds and the new request. A position list or completed-history index would add protocol bookkeeping without another action the user needs here. -Form quotes use `conversionQuote` in `src/view/formState.ts`, at the SDK's [default order fee](../sdk/src/conversion/estimate.ts). The completed preview shows the actual plan: a direct conversion, a standing order, or both. Its rounded output can differ from the form quote. The SDK chooses the [first fundable direct-first plan](../sdk/README.md#transaction-completion), not the plan with the earliest estimated completion. +Form quotes use `conversionQuote` in `src/view/formState.ts`, at the SDK's [default order fee](../sdk/src/conversion/estimate.ts). Every order from the interface therefore asks the same price, and none can buy priority: a [bot fills by price](../sdk/node/docs/policy.md#matching-makes-progress-from-available-inventory), at equal price in an order of its choosing, and only while it holds the other side, so no order is promised eventual service; an unfilled sell comes back at the age cutoff below. The intent line says "when a bot fills it" for that reason. The completed preview shows the actual plan: a direct conversion, a standing order, or both. Its rounded output can differ from the form quote. The SDK chooses the [first fundable direct-first plan](../sdk/README.md#transaction-completion), not the plan with the earliest estimated completion. Every transaction also collects fulfilled orders, receipts and matured withdrawals, subject to the SDK's batch limits. The intent line of a collection says whether a withdrawal or order stays converting after it: the button reads the same either way, and the balance row's "converting" word alone went unnoticed when a receipt was collected while its sibling order was still open. Live orders join that collection when: diff --git a/interface/src/action/actionStatus.ts b/interface/src/action/actionStatus.ts index b128e984..c5494731 100644 --- a/interface/src/action/actionStatus.ts +++ b/interface/src/action/actionStatus.ts @@ -176,9 +176,9 @@ export function conversionIntentText( string > = { direct: "Converts at a fixed time, shown below.", - order: "Converts at a variable time, estimated below.", + order: "Converts when a bot fills it, estimated below.", "direct-plus-order": - "Part converts at a fixed time, the rest at a variable time, estimated below.", + "Part converts at a fixed time, the rest when a bot fills it, estimated below.", }; return intent[kind]; diff --git a/interface/test/action/actionStatus.ts b/interface/test/action/actionStatus.ts index 6b1f4dce..790fd862 100644 --- a/interface/test/action/actionStatus.ts +++ b/interface/test/action/actionStatus.ts @@ -88,7 +88,7 @@ describe("action status", () => { { ...flags(), hasCollectable: true }, ), ).toBe( - "Part converts at a fixed time, the rest at a variable time, estimated below. Also collects converted funds.", + "Part converts at a fixed time, the rest when a bot fills it, estimated below. Also collects converted funds.", ); expect( actionMessage(txInfo, { ...flags(), amount: undefined, amountError: "Bad amount" }), @@ -110,10 +110,10 @@ describe("action status", () => { it.each([ ["direct", "Converts at a fixed time, shown below."], - ["order", "Converts at a variable time, estimated below."], + ["order", "Converts when a bot fills it, estimated below."], [ "direct-plus-order", - "Part converts at a fixed time, the rest at a variable time, estimated below.", + "Part converts at a fixed time, the rest when a bot fills it, estimated below.", ], ] as const)("describes %s intent exactly", (kind, expected) => { expect(conversionIntentText(kind)).toBe(expected); diff --git a/interface/test/hook/appAction.tsx b/interface/test/hook/appAction.tsx index 0497cab6..29534ea5 100644 --- a/interface/test/hook/appAction.tsx +++ b/interface/test/hook/appAction.tsx @@ -454,7 +454,7 @@ function registerActionConfirmationTests(): void { expect(waiting.fee).toBe("0.00000009 CKB"); expect(waiting.maturity).toBe("in 3 minutes"); expect(waiting.message).toContain( - "Part converts at a fixed time, the rest at a variable time, estimated below.", + "Part converts at a fixed time, the rest when a bot fills it, estimated below.", ); confirmation.resolve(undefined); From ed0e91cd07dff039108400245e72e50ad7b6f4c6 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 16:46:13 +0100 Subject: [PATCH 08/32] fix(interface): the source link points at interface/, not apps/interface The apps/ layout predates the workspace; the link 404ed since the rewrite. --- interface/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/index.html b/interface/index.html index badf31b8..f6f8287a 100644 --- a/interface/index.html +++ b/interface/index.html @@ -128,7 +128,7 @@

This web app is separate from the contracts. Review its web app source code From d0a496824b1fdd7d915ce5168ad39e1980727081 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:40:51 +0100 Subject: [PATCH 09/32] fix(interface): relative asset URLs, so the bundle works at any mount point Vite's default base assumed the domain root, so the deploy that lands before ickb.org moves would serve a page whose assets 404 at ickb.github.io/stack/. The app has no client-side routes, so relative URLs cost nothing. --- interface/vite.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/vite.config.ts b/interface/vite.config.ts index 14e14a2b..08b43f0b 100644 --- a/interface/vite.config.ts +++ b/interface/vite.config.ts @@ -34,6 +34,9 @@ export default defineConfig(({ command, mode }) => { : []), ], }, + // Relative asset URLs: the bundle works at any mount point, the domain root or a + // project path such as ickb.github.io/stack/. The app has no client-side routes. + base: "./", server: { host }, // The React Compiler runs natively in the plugin over the app's JSX and TSX modules. plugins: [ From a7d53be6bb5cc32a3a3d655025c271c5383f9698 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sat, 24 Oct 2026 14:45:00 +0200 Subject: [PATCH 10/32] docs(bot): the funding recommendation keeps the reserve on top of 3.2 deposits 00497265 moved the stress line onto total CKB and reworded the funding bullet to put the reserve inside the 3.2 deposits. That was wrong: a coverage deposit still needs two deposits of CKB spendable beyond the reserve (spendable >= 2 * depositCost), so a bot funded with the reserve inside never seeds the ring. Restore master's wording and say why. --- sdk/node/docs/policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/node/docs/policy.md b/sdk/node/docs/policy.md index 19660a96..5c8cee78 100644 --- a/sdk/node/docs/policy.md +++ b/sdk/node/docs/policy.md @@ -73,5 +73,5 @@ The bot waits up to two minutes so its journal can join a send to a commit. It r ## Operating assumptions - Prefer an exclusive node with `[indexer_v2] index_tx_pool = false`. With pool indexing on, a timed-out intent can be duplicated with disjoint inputs on a later turn. A public node is acceptable when the operator accepts that risk. -- Recommended funding is about 3.2 deposits of total value, the reserve inside: 1.2 deposits of iCKB before withdrawal, one deposit's worth of CKB to refill, and one deposit's worth of CKB kept for sellers, the reserve counted in that one. Recompute the recommendation if the thresholds change. Below two deposits of CKB the bot matches, refills and sheds surplus but never seeds the ring; below one deposit of CKB it still matches what it can but may idle at its reserve. +- Recommended funding is about 3.2 deposits of total value plus the reserve: 1.2 deposits of iCKB before withdrawal, one deposit's worth of CKB to refill, and one deposit's worth of CKB kept for sellers. The stress line counts the reserve, but a coverage deposit needs two deposits of CKB beyond it, so the reserve stays on top. Recompute the recommendation if the thresholds change. Below two deposits of CKB the bot matches, refills and sheds surplus but never seeds the ring; below one deposit of CKB it still matches what it can but may idle at its reserve. - No process state has to be cleared after a failed turn, partial collection or reorg. Recovery still depends on the available inventory, chain state and market; it is not a promise to serve every order or to make an unfunded account progress. From df8b1b90c5c5e844645e0cb7be85b1c6dc3364ce Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sat, 24 Oct 2026 14:45:00 +0200 Subject: [PATCH 11/32] chore(deps): pin zod to 4.6.6 for GHSA-mrhx-c7xc-m3w5 Transitive through @ckb-ccc/core > @joyid/ckb > @joyid/common > abitype. The audit step also reports four fast-uri advisories fixed in 3.1.9, under @microsoft/api-extractor > @microsoft/tsdoc-config > ajv; that version was published 2026-10-19 and is inside the seven-day minimumReleaseAge until 2026-10-27, so the gate stays red on audit until then. --- pnpm-lock.yaml | 161 ++++++++++++++++++++++---------------------- pnpm-workspace.yaml | 1 + 2 files changed, 82 insertions(+), 80 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27aa72fc..bac9b0d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -189,6 +189,7 @@ overrides: smol-toml@<1.9.0: 1.9.0 source-map-js@>=1.0.0 <1.2.2: 1.2.2 ws@>=8.0.0 <8.21.1: 8.21.1 + zod@<4.6.6: 4.6.6 zod-validation-error@^3.5.0 || ^4.0.0: 4.0.2 '@ckb-ccc/connector-react>react': 19.3.0 @@ -285,10 +286,10 @@ importers: dependencies: '@ckb-ccc/ccc': specifier: 'catalog:' - version: 1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5) + version: 1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@ckb-ccc/connector-react': specifier: 'catalog:' - version: 2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5) + version: 2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@ickb/sdk': specifier: workspace:* version: link:../sdk @@ -340,7 +341,7 @@ importers: dependencies: '@ckb-ccc/core': specifier: 'catalog:' - version: 1.23.0(typescript@6.0.3)(zod@4.6.5) + version: 1.23.0(typescript@6.0.3)(zod@4.6.6) devDependencies: '@ickb/testkit': specifier: workspace:* @@ -350,7 +351,7 @@ importers: dependencies: '@ckb-ccc/core': specifier: 'catalog:' - version: 1.23.0(typescript@6.0.3)(zod@4.6.5) + version: 1.23.0(typescript@6.0.3)(zod@4.6.6) devDependencies: '@ickb/testkit': specifier: workspace:* @@ -363,7 +364,7 @@ importers: dependencies: '@ckb-ccc/core': specifier: 'catalog:' - version: 1.23.0(typescript@6.0.3)(zod@4.6.5) + version: 1.23.0(typescript@6.0.3)(zod@4.6.6) devDependencies: '@types/node': specifier: 'catalog:' @@ -1826,7 +1827,7 @@ packages: resolution: {integrity: sha512-wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w==} peerDependencies: typescript: '>=5.0.4' - zod: ^3 >=3.19.1 + zod: 4.6.6 peerDependenciesMeta: zod: optional: true @@ -4099,10 +4100,10 @@ packages: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} peerDependencies: - zod: ^3.25.0 || ^4.0.0 + zod: 4.6.6 - zod@4.6.5: - resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} + zod@4.6.6: + resolution: {integrity: sha512-4UmzQUF5fxvfcYHlbjBmejU+w+hbDnWFx4aS8kBx7nPBHcO2SqPbpAG8snbdg+Xse4pRefR98hgjFgIMCI/UhA==} snapshots: @@ -4257,17 +4258,17 @@ snapshots: dependencies: '@chainsafe/is-ip': 2.1.0 - '@ckb-ccc/ccc@1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5)': - dependencies: - '@ckb-ccc/eip6963': 1.1.15(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/joy-id': 1.2.6(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/nip07': 1.1.15(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/okx': 1.2.6(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/rei': 1.1.15(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/shell': 1.3.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/uni-sat': 1.2.6(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/utxo-global': 1.2.6(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/xverse': 1.2.6(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/ccc@1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': + dependencies: + '@ckb-ccc/eip6963': 1.1.15(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/joy-id': 1.2.6(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/nip07': 1.1.15(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/okx': 1.2.6(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/rei': 1.1.15(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/shell': 1.3.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/uni-sat': 1.2.6(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/utxo-global': 1.2.6(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/xverse': 1.2.6(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - debug @@ -4277,9 +4278,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/connector-react@2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/connector-react@2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/connector': 2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/connector': 2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@lit/react': 1.0.8(@types/react@19.3.0) '@types/react': 19.3.0 react: 19.3.0 @@ -4293,12 +4294,12 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/connector@2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/connector@2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': dependencies: '@chainsafe/libp2p-noise': 17.0.0 '@chainsafe/libp2p-yamux': 8.0.1 - '@ckb-ccc/ccc': 1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/libp2p': 0.3.2(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/ccc': 1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/libp2p': 0.3.2(typescript@6.0.3)(zod@4.6.6) '@libp2p/circuit-relay-v2': 4.2.13 '@libp2p/identify': 4.1.14 '@libp2p/interface': 3.3.0 @@ -4319,9 +4320,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/core@1.23.0(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/core@1.23.0(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@joyid/ckb': 1.1.4(patch_hash=d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424)(typescript@6.0.3)(zod@4.6.5) + '@joyid/ckb': 1.1.4(patch_hash=d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424)(typescript@6.0.3)(zod@4.6.6) '@noble/ciphers': 2.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 @@ -4338,10 +4339,10 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/did-ckb@0.2.15(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/did-ckb@0.2.15(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/type-id': 0.1.15(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/type-id': 0.1.15(typescript@6.0.3)(zod@4.6.6) '@ipld/dag-cbor': 10.0.2 '@noble/curves': 2.4.0 transitivePeerDependencies: @@ -4351,9 +4352,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/eip6963@1.1.15(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/eip6963@1.1.15(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4361,11 +4362,11 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/joy-id@1.2.6(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/joy-id@1.2.6(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) - '@joyid/ckb': 1.1.4(patch_hash=d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424)(typescript@6.0.3)(zod@4.6.5) - '@joyid/common': 0.2.2(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) + '@joyid/ckb': 1.1.4(patch_hash=d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424)(typescript@6.0.3)(zod@4.6.6) + '@joyid/common': 0.2.2(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4373,9 +4374,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/libp2p@0.3.2(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/libp2p@0.3.2(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) '@libp2p/interface': 3.3.0 '@libp2p/interface-internal': 3.1.13 '@libp2p/utils': 7.4.1 @@ -4388,9 +4389,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/nip07@1.1.15(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/nip07@1.1.15(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4398,11 +4399,11 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/okx@1.2.6(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/okx@1.2.6(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/nip07': 1.1.15(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/uni-sat': 1.2.6(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/nip07': 1.1.15(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/uni-sat': 1.2.6(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4410,9 +4411,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/rei@1.1.15(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/rei@1.1.15(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4420,14 +4421,14 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/shell@1.3.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/shell@1.3.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/did-ckb': 0.2.15(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/spore': 1.6.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/ssri': 0.4.5(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/type-id': 0.1.15(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/udt': 0.2.15(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/did-ckb': 0.2.15(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/spore': 1.6.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/ssri': 0.4.5(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/type-id': 0.1.15(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/udt': 0.2.15(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - debug @@ -4437,9 +4438,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/spore@1.6.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/spore@1.6.15(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) axios: 1.20.0(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2) transitivePeerDependencies: - bufferutil @@ -4450,9 +4451,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/ssri@0.4.5(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/ssri@0.4.5(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4460,9 +4461,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/type-id@0.1.15(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/type-id@0.1.15(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4470,10 +4471,10 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/udt@0.2.15(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/udt@0.2.15(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) - '@ckb-ccc/ssri': 0.4.5(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/ssri': 0.4.5(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4481,9 +4482,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/uni-sat@1.2.6(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/uni-sat@1.2.6(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4491,9 +4492,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/utxo-global@1.2.6(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/utxo-global@1.2.6(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) transitivePeerDependencies: - bufferutil - encoding @@ -4501,9 +4502,9 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/xverse@1.2.6(typescript@6.0.3)(zod@4.6.5)': + '@ckb-ccc/xverse@1.2.6(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.5) + '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) bitcoinjs-lib: 7.0.2(typescript@6.0.3) valibot: 1.5.0(typescript@6.0.3) transitivePeerDependencies: @@ -4615,9 +4616,9 @@ snapshots: '@types/yargs': 17.0.35 chalk: 4.1.2 - '@joyid/ckb@1.1.4(patch_hash=d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424)(typescript@6.0.3)(zod@4.6.5)': + '@joyid/ckb@1.1.4(patch_hash=d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424)(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@joyid/common': 0.2.2(typescript@6.0.3)(zod@4.6.5) + '@joyid/common': 0.2.2(typescript@6.0.3)(zod@4.6.6) '@nervosnetwork/ckb-sdk-utils': 0.109.5 cross-fetch: 4.0.0 uncrypto: 0.1.3 @@ -4626,9 +4627,9 @@ snapshots: - typescript - zod - '@joyid/common@0.2.2(typescript@6.0.3)(zod@4.6.5)': + '@joyid/common@0.2.2(typescript@6.0.3)(zod@4.6.6)': dependencies: - abitype: 0.8.7(typescript@6.0.3)(zod@4.6.5) + abitype: 0.8.7(typescript@6.0.3)(zod@4.6.6) type-fest: 4.6.0 transitivePeerDependencies: - typescript @@ -5853,11 +5854,11 @@ snapshots: '@vitest/spy@5.0.3': {} - abitype@0.8.7(typescript@6.0.3)(zod@4.6.5): + abitype@0.8.7(typescript@6.0.3)(zod@4.6.6): dependencies: typescript: 6.0.3 optionalDependencies: - zod: 4.6.5 + zod: 4.6.6 abort-error@1.0.2: {} @@ -6288,8 +6289,8 @@ snapshots: '@babel/parser': 7.29.9 eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) hermes-parser: 0.25.1 - zod: 4.6.5 - zod-validation-error: 4.0.2(zod@4.6.5) + zod: 4.6.6 + zod-validation-error: 4.0.2(zod@4.6.6) transitivePeerDependencies: - supports-color @@ -6952,7 +6953,7 @@ snapshots: tinyglobby: 0.2.17 unbash: 4.0.12 yaml: 2.9.1 - zod: 4.6.5 + zod: 4.6.6 leven@3.1.0: {} @@ -8164,8 +8165,8 @@ snapshots: yocto-queue@0.1.0: {} - zod-validation-error@4.0.2(zod@4.6.5): + zod-validation-error@4.0.2(zod@4.6.6): dependencies: - zod: 4.6.5 + zod: 4.6.6 - zod@4.6.5: {} + zod@4.6.6: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 61ccb031..19541e6c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -33,6 +33,7 @@ overrides: smol-toml@<1.9.0: 1.9.0 source-map-js@>=1.0.0 <1.2.2: 1.2.2 ws@>=8.0.0 <8.21.1: 8.21.1 + zod@<4.6.6: 4.6.6 # eslint-plugin-react-hooks imports this subpath, but pnpm can otherwise pick # 3.5.4 from its union range, which does not export `zod-validation-error/v4`. zod-validation-error@^3.5.0 || ^4.0.0: 4.0.2 From 2f15129aebf348b75ceaea1efb9847c3715ed929 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sat, 24 Oct 2026 15:14:33 +0200 Subject: [PATCH 12/32] chore(deps): fail resolution for packages without a publish time pnpm skips the minimumReleaseAge check when registry metadata lacks a time field (minimumReleaseAgeIgnoreMissingTime, added in 11.0.0 with default true, unchanged in the pinned 12.4.2; see pnpm.io/settings/dependency-resolution). The seven-day rule is meant to hold for every package, so such a package now fails instead. Lockfile unchanged; only future resolutions are affected. --- pnpm-workspace.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 19541e6c..9399c8fe 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -53,6 +53,9 @@ catalog: # rewrite merged). minimumReleaseAge: 10080 minimumReleaseAgeStrict: true +# A package whose registry metadata has no publish time fails resolution instead of +# skipping the age check, which pnpm has done by default since 11. +minimumReleaseAgeIgnoreMissingTime: false patchedDependencies: # JoyID only needs a standard fetch implementation, but 1.1.4 imports From 19decf1d5368750cef11aa890d8cfe6bd7c88d6b Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:36:21 +0100 Subject: [PATCH 13/32] chore(deps): three-day release age, and fast-uri 3.1.9 for the four October advisories Seven days was chosen on September 14 so that a compromised release has time to be caught before it can be installed. The wait is also how long a fix stays unadopted, and three days is what a pulled or regressed release needs to show (user decision 2026-10-25). The first fix it admits: fast-uri 3.1.9, published 2026-10-19, closes GHSA-w74x-v6f9-j3xg, GHSA-wjr9-j795-jxcr (moderate), GHSA-xhq7-xmqj-769h and GHSA-333x-w4r6-6crp (low), which the audit reported. --- README.md | 2 +- pnpm-lock.yaml | 12 ++++++------ pnpm-workspace.yaml | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 345723e4..82256a68 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ The lockfile holds the CCC 1.23.0 set. CCC 1.23 made `mol.union` dynamic-size, s TypeScript stays on 6. The 7.x package ships the native compiler only, without the JavaScript compiler API that typescript-eslint and `scripts/tooling/dead-members.ts` use, and typescript-eslint declares `typescript <6.1.0`. Type checking already runs on the native preview. -pnpm 12 supplies the trusted-publishing support the previous pin lacked. Its lockfile format is not backward-compatible with pnpm 10. The seven-day release age gives newly published dependencies time to be scrutinized; build-script permissions and advisory exceptions live beside their entries in [pnpm-workspace.yaml](pnpm-workspace.yaml). +pnpm 12 supplies the trusted-publishing support the previous pin lacked. Its lockfile format is not backward-compatible with pnpm 10. The release age, build-script permissions and advisory exceptions live with their reasons in [pnpm-workspace.yaml](pnpm-workspace.yaml). `pnpm check` runs the audit, full lint suite and interface build against installed dependencies. CI first installs from the pinned lockfile, then runs the same gate on the declared Node floor. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bac9b0d7..1bcace0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,7 +181,7 @@ overrides: axios@>=1.0.0 <1.20.0: 1.20.0 brace-expansion@>=5.0.0 <5.0.12: 5.0.12 esbuild@>=0.27.3 <0.28.1: 0.28.1 - fast-uri@>=3.0.0 <3.1.8: 3.1.8 + fast-uri@>=3.0.0 <3.1.9: 3.1.9 follow-redirects@>=1.16.0 <1.16.1: 1.16.1 form-data@>=4.0.0 <4.0.6: 4.0.6 nanoid@<3.3.18: 3.3.18 @@ -2365,8 +2365,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.1.8: - resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==} + fast-uri@3.1.9: + resolution: {integrity: sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==} fb-dotslash@0.5.8: resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} @@ -5911,14 +5911,14 @@ snapshots: ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.8 + fast-uri: 3.1.9 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.8 + fast-uri: 3.1.9 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -6467,7 +6467,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-uri@3.1.8: {} + fast-uri@3.1.9: {} fb-dotslash@0.5.8: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9399c8fe..38f48c3e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,7 +25,7 @@ overrides: axios@>=1.0.0 <1.20.0: 1.20.0 brace-expansion@>=5.0.0 <5.0.12: 5.0.12 esbuild@>=0.27.3 <0.28.1: 0.28.1 - fast-uri@>=3.0.0 <3.1.8: 3.1.8 + fast-uri@>=3.0.0 <3.1.9: 3.1.9 follow-redirects@>=1.16.0 <1.16.1: 1.16.1 form-data@>=4.0.0 <4.0.6: 4.0.6 nanoid@<3.3.18: 3.3.18 @@ -47,11 +47,11 @@ catalog: "@ckb-ccc/core": ^1.23.0 "@types/node": ~22.20.4 -# Seven days. A freshly published patch cannot be installed until it matures, so a -# compromised release has time to be caught (user decision 2026-09-14; the three-day -# window that applied while the stack was unpublished was restored to this before the -# rewrite merged). -minimumReleaseAge: 10080 +# Three days. A freshly published release cannot be installed until it matures, so a +# compromised one has time to be caught; the wait is also how long a fix stays +# unadopted, and three days is what a pulled or regressed release needs to show (user +# decision 2026-10-25, back from the seven days chosen on 2026-09-14). +minimumReleaseAge: 4320 minimumReleaseAgeStrict: true # A package whose registry metadata has no publish time fails resolution instead of # skipping the age check, which pnpm has done by default since 11. From 7980ce19583a385228310e2f1a4b951f1bb37c1b Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 15:02:01 +0100 Subject: [PATCH 14/32] release: 9000.0.1 for the SDK and the interface The first master push (9582ab44, run 38780788044) tried to release 9000.0.0 before GitHub Pages was enabled and the npm trusted publisher existed, so both jobs failed with 404 and nothing was published. That run cannot be replayed: its Pages artifact expired and a full rerun would fail today's audit. The release rule only fires on a version change against the previous commit, so this bump makes the merge of this PR the first release; 9000.0.0 is skipped rather than consumed, as the README now records. --- README.md | 2 +- interface/package.json | 2 +- sdk/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 82256a68..bd367f5b 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ A push to the default branch releases a package only when its version differs fr Both jobs require the gate to pass. Other merges release nothing. This assumes each reviewed change lands as a squash commit, so comparing with the previous commit covers it. Tags, a manual trigger or a second confirmation environment would add another release step for the same maintainer without another reviewer. A mistaken publish still consumes a version number and needs a bump. -The rewrite's versioned packages start at `9000.0.0`, above the old `@ickb/sdk` line at `1000.0.82`. The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. +The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82`; `9000.0.0` was the first release attempt, which failed before the services below were configured, so nothing was published under it. The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. ### First release setup diff --git a/interface/package.json b/interface/package.json index 6228f7e0..499f2513 100644 --- a/interface/package.json +++ b/interface/package.json @@ -1,6 +1,6 @@ { "name": "@ickb/interface", - "version": "9000.0.0", + "version": "9000.0.1", "description": "iCKB interface built on top of CCC", "keywords": [ "ickb", diff --git a/sdk/package.json b/sdk/package.json index 89d6b1cb..63d069d3 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@ickb/sdk", - "version": "9000.0.0", + "version": "9000.0.1", "description": "iCKB SDK built on top of CCC", "keywords": [ "ickb", From c79092899cbac2f4dd00d185ebaac6a874bc7c16 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 15:18:56 +0100 Subject: [PATCH 15/32] chore(interface): drop the CNAME file, which Actions-sourced Pages ignores The legacy site kept public/CNAME because a branch-sourced Pages site reads the domain from the published branch. This repository publishes through actions/deploy-pages, and GitHub's custom-domain guide states that for a custom workflow "any existing CNAME file is ignored and is not required": the domain is the repository's Pages setting alone. --- interface/README.md | 2 +- interface/public/CNAME | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 interface/public/CNAME diff --git a/interface/README.md b/interface/README.md index 05961f80..35009ff3 100644 --- a/interface/README.md +++ b/interface/README.md @@ -72,4 +72,4 @@ Views keep the order form, action, chart. Putting the chart between the form and A [version-changing release](../README.md#releases) deploys the `interface/dist` bundle produced by the successful check job. A failed check leaves the previous site live. -Before the first deployment, set this repository's Pages source to GitHub Actions and attach `ickb.org` here, detaching it from `ickb/legacy-lumos-interface`. Archive that repository after the new site is live. `public/CNAME` records the domain; `public/favicon.png` is the other static file copied to the site root. Files added under `public/` are published as-is. +Before the first deployment, set this repository's Pages source to GitHub Actions and attach `ickb.org` here, detaching it from `ickb/legacy-lumos-interface`. Archive that repository after the new site is live. The domain is a repository setting: with the Actions source GitHub ignores a `CNAME` file, so none is shipped. `public/favicon.png` is the only static file copied to the site root; files added under `public/` are published as-is. diff --git a/interface/public/CNAME b/interface/public/CNAME deleted file mode 100644 index e2295bf7..00000000 --- a/interface/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -ickb.org From 1acd56ffd07042d6f3f7a5da093228e9a958a0fb Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 15:23:50 +0100 Subject: [PATCH 16/32] chore(release): one owner for each publish setting pnpm 12.4.2 (pnpm/pnpm@9502f3c4, crates/publish/src/publish_options.rs) falls back to publishConfig.access when --access is absent and never reads publishConfig.provenance, so the flag and the field each duplicated or duplicated nothing. The access setting stays in publishConfig; the explicit --provenance flag stays because without it pnpm decides from the OIDC token and proceeds silently without provenance when the visibility lookup fails. --- .github/workflows/check.yaml | 6 ++++-- sdk/package.json | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index cef9d8a4..6338ed8d 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -89,6 +89,8 @@ jobs: run: pnpm install --frozen-lockfile - name: Build the SDK run: pnpm build - # The checkout is a detached commit, so pnpm's branch and remote checks do not apply. + # Access comes from publishConfig. The flag keeps provenance explicit: without it pnpm + # decides from the OIDC token and skips silently when the visibility lookup fails. The + # checkout is a detached commit, so pnpm's branch and remote checks do not apply. - name: Publish @ickb/sdk - run: pnpm --filter @ickb/sdk publish --provenance --access public --no-git-checks + run: pnpm --filter @ickb/sdk publish --provenance --no-git-checks diff --git a/sdk/package.json b/sdk/package.json index 63d069d3..2c532437 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -46,7 +46,6 @@ ], "publishConfig": { "access": "public", - "provenance": true, "main": "dist/index.js", "types": "dist/index.d.ts", "exports": { From 2017738cc72ba4f66806ab21d2ac6018b012063e Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 15:25:23 +0100 Subject: [PATCH 17/32] docs(release): replace the one-time setup checklists with the standing dependencies The maintainer's first-release steps (register the npm trusted publisher, enable Pages, move the domain, archive the legacy repository) are being carried out and would go stale once done. What a future maintainer needs is what the two release jobs depend on outside the tree: the trusted publisher's organization, repository and workflow name, and the Pages source and domain. --- README.md | 11 ++--------- interface/README.md | 2 +- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bd367f5b..871acbaa 100644 --- a/README.md +++ b/README.md @@ -54,16 +54,9 @@ A push to the default branch releases a package only when its version differs fr Both jobs require the gate to pass. Other merges release nothing. This assumes each reviewed change lands as a squash commit, so comparing with the previous commit covers it. Tags, a manual trigger or a second confirmation environment would add another release step for the same maintainer without another reviewer. A mistaken publish still consumes a version number and needs a bump. -The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82`; `9000.0.0` was the first release attempt, which failed before the services below were configured, so nothing was published under it. The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. +The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82` (`9000.0.0` was never published: its release run failed before the settings below existed). The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. -### First release setup - -The maintainer must configure the external services before the release merge: - -1. Register the npm trusted publisher for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `check.yaml`, no environment. Configure the package to require two-factor authentication and disallow tokens. -2. Enable GitHub Pages with GitHub Actions as its source. Move the `ickb.org` domain from `ickb/legacy-lumos-interface` to this repository, then archive the old repository after the new site is live. - -Whether to deprecate the old `1000.x` SDK line and its companion packages remains optional. The [workflow](.github/workflows/check.yaml) owns the release mechanics; the [interface README](interface/README.md#deployment) owns the site setup. +The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `check.yaml`, no environment. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/check.yaml) owns the release mechanics. ## Live testnet validation diff --git a/interface/README.md b/interface/README.md index 35009ff3..21dce2f8 100644 --- a/interface/README.md +++ b/interface/README.md @@ -72,4 +72,4 @@ Views keep the order form, action, chart. Putting the chart between the form and A [version-changing release](../README.md#releases) deploys the `interface/dist` bundle produced by the successful check job. A failed check leaves the previous site live. -Before the first deployment, set this repository's Pages source to GitHub Actions and attach `ickb.org` here, detaching it from `ickb/legacy-lumos-interface`. Archive that repository after the new site is live. The domain is a repository setting: with the Actions source GitHub ignores a `CNAME` file, so none is shipped. `public/favicon.png` is the only static file copied to the site root; files added under `public/` are published as-is. +The domain `ickb.org` is the repository's Pages setting; with the Actions source GitHub ignores a `CNAME` file, so none is shipped. `public/favicon.png` is the only static file copied to the site root; files added under `public/` are published as-is. From aed863fb670882cd24ec4f134771fa715a65f08f Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 16:01:58 +0100 Subject: [PATCH 18/32] chore(ci): name the workflow for what it does check.yaml also published the SDK and deployed the site. One file stays, because a separate release workflow would either rerun the gate or trust a workflow_run hand-off from it. The npm trusted publisher pins the workflow filename, so the rename lands before that registration. --- .github/workflows/{check.yaml => ci.yaml} | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{check.yaml => ci.yaml} (99%) diff --git a/.github/workflows/check.yaml b/.github/workflows/ci.yaml similarity index 99% rename from .github/workflows/check.yaml rename to .github/workflows/ci.yaml index 6338ed8d..52b07a2c 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/ci.yaml @@ -1,4 +1,4 @@ -name: Check (lint, build and test) +name: Check and release on: pull_request: diff --git a/README.md b/README.md index 871acbaa..c30bf394 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Both jobs require the gate to pass. Other merges release nothing. This assumes e The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82` (`9000.0.0` was never published: its release run failed before the settings below existed). The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. -The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `check.yaml`, no environment. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/check.yaml) owns the release mechanics. +The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `ci.yaml`, no environment. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/ci.yaml) owns the release mechanics. ## Live testnet validation From d8d707a854f22ea8ac26f205bee7e22fabdcb04b Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 16:03:27 +0100 Subject: [PATCH 19/32] chore(ci): install pnpm with the runner's npm instead of pnpm/action-setup At its pinned commit the action runs a vendored pnpm to install pnpm@ with --no-lockfile; npm, present once setup-node runs, does the same from the packageManager field with the registry's integrity check. The workflow now uses GitHub-owned actions only, which lets the repository's Actions policy allow nothing else. --- .github/workflows/ci.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 52b07a2c..61d68b08 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -25,7 +25,9 @@ jobs: with: # The declared Node floor; the example units run the current release. node-version: 22.23.4 - - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 + # npm ships with Node and installs the pnpm version package.json pins, so no + # third-party action runs; pnpm/action-setup did the same with a vendored pnpm. + - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" - name: Install pinned dependencies run: pnpm install --frozen-lockfile @@ -83,7 +85,9 @@ jobs: - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: node-version: 22.23.4 - - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 + # npm ships with Node and installs the pnpm version package.json pins, so no + # third-party action runs; pnpm/action-setup did the same with a vendored pnpm. + - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" - name: Install pinned dependencies run: pnpm install --frozen-lockfile From bc1dc25c88f9808c09a26739e42492ee9fcb463f Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 17:32:19 +0100 Subject: [PATCH 20/32] chore(release): the SDK publishes from a pnpm deploy tree, the interface from its own job The publish job installed the whole workspace (736 packages) to run tsgo, and the deploy job shipped the bundle the gate built in a job where eslint, vitest and the rest had already executed. The publish job now resolves only the SDK's declared dependencies from the lockfile with `pnpm deploy` (47 packages), moves that node_modules into place because deploy refuses the package directory as a target, and runs the build script with npm: `pnpm run` would first reinstall the whole workspace, since verifyDepsBeforeRun defaults to install in pnpm 11+. The SDK declares tsgo itself, through the catalog so the gate's compiler and the release's compiler stay the same version. The interface job installs the workspace in a fresh job instead: its bundle pulls the SDK from source, and the minimal tree cannot resolve that without a second deploy and a typecheck-free build. The gate's tooling is never run in either job. Verified in a scratch clone: no root node_modules in the SDK job and a dist byte-identical to the full-workspace build. The same README paragraph and the workflow comment said each push to master is a squash commit; the ruleset allows only the merge method, so the release rule compares with the merge commit's first parent, and they now say so. The README also gains the recovery rule for a failed release. --- .github/workflows/ci.yaml | 54 ++++++++++++++++++++++++--------------- README.md | 4 +-- interface/README.md | 2 +- package.json | 2 +- pnpm-lock.yaml | 8 +++++- pnpm-workspace.yaml | 1 + sdk/package.json | 3 ++- 7 files changed, 48 insertions(+), 26 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 61d68b08..b45e91d9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -25,8 +25,9 @@ jobs: with: # The declared Node floor; the example units run the current release. node-version: 22.23.4 - # npm ships with Node and installs the pnpm version package.json pins, so no - # third-party action runs; pnpm/action-setup did the same with a vendored pnpm. + # npm ships with Node and installs the pnpm version package.json pins, verified by + # the registry's integrity field (npm ignores the hash in packageManager); no + # third-party action runs, pnpm/action-setup did the same with a vendored pnpm. - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" - name: Install pinned dependencies @@ -34,11 +35,12 @@ jobs: - name: Run pnpm check run: pnpm check - # A release is a push to the default branch whose commit changes a package's version - # field. Every such push is one squash commit, so the - # previous commit is the comparison; a path absent there counts as changed. + # A release is a push to master (the only push trigger) whose commit changes a + # package's version field. The ruleset admits only merge commits of pull requests, + # whose first parent is the previous tip, so HEAD^ is the comparison; a path absent + # there counts as changed. - id: releases - if: github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) + if: github.event_name == 'push' run: | released() { now=$(node -p "require('./$1/package.json').version") @@ -47,17 +49,16 @@ jobs: } echo "interface=$(released interface)" >> "$GITHUB_OUTPUT" echo "sdk=$(released sdk)" >> "$GITHUB_OUTPUT" - - if: steps.releases.outputs.interface == 'true' - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 - with: - path: interface/dist - # Deploy the bundle the gate just built; a failed run leaves the previous site live. + # The release jobs build again from a fresh checkout in which none of the gate's tooling + # has run; the interface job installs the workspace because its build bundles the SDK + # from source. A failed run leaves the previous release live. deploy: needs: build if: needs.build.outputs.interface == 'true' runs-on: ubuntu-latest permissions: + contents: read pages: write id-token: write environment: @@ -65,6 +66,18 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + with: + persist-credentials: false + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 + with: + node-version: 22.23.4 + - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" + - run: pnpm install --frozen-lockfile + - run: pnpm --filter @ickb/interface build + - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 + with: + path: interface/dist - id: deployment uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 @@ -85,16 +98,17 @@ jobs: - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: node-version: 22.23.4 - # npm ships with Node and installs the pnpm version package.json pins, so no - # third-party action runs; pnpm/action-setup did the same with a vendored pnpm. - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" - - - name: Install pinned dependencies - run: pnpm install --frozen-lockfile - - name: Build the SDK - run: pnpm build + # `pnpm deploy` resolves only the SDK's dependencies from the lockfile and refuses the + # package directory as its target, so its node_modules moves into place. npm runs the + # build script because `pnpm run` would first install the whole workspace + # (verifyDepsBeforeRun defaults to install). + - run: pnpm --filter @ickb/sdk deploy --frozen-lockfile /tmp/deploy && mv /tmp/deploy/node_modules sdk/node_modules + - run: npm run build + working-directory: sdk # Access comes from publishConfig. The flag keeps provenance explicit: without it pnpm - # decides from the OIDC token and skips silently when the visibility lookup fails. The - # checkout is a detached commit, so pnpm's branch and remote checks do not apply. + # decides from the OIDC token and, when the visibility lookup fails, warns and continues + # without provenance. The checkout is a detached commit, so pnpm's branch and remote + # checks do not apply. - name: Publish @ickb/sdk run: pnpm --filter @ickb/sdk publish --provenance --no-git-checks diff --git a/README.md b/README.md index c30bf394..e8977c48 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,9 @@ pnpm 12 supplies the trusted-publishing support the previous pin lacked. Its loc A push to the default branch releases a package only when its version differs from the previous commit. The reviewed version change is the release decision: - A change to `sdk/package.json` publishes `@ickb/sdk` to npm through trusted publishing, with provenance and no registry token in the workflow. -- A change to `interface/package.json` deploys the bundle that the check job built to GitHub Pages at `ickb.org`. +- A change to `interface/package.json` builds the interface again and deploys it to GitHub Pages at `ickb.org`. -Both jobs require the gate to pass. Other merges release nothing. This assumes each reviewed change lands as a squash commit, so comparing with the previous commit covers it. Tags, a manual trigger or a second confirmation environment would add another release step for the same maintainer without another reviewer. A mistaken publish still consumes a version number and needs a bump. +Both jobs require the gate to pass, then build their package again in a fresh job where none of the gate's tooling runs; the SDK job installs only the SDK's declared dependencies, resolved from the lockfile by `pnpm deploy`. Other merges release nothing. If a release job fails, rerun that run's failed jobs: the next merge compares with its own parent and releases nothing. The ruleset admits only merge commits of pull requests, whose first parent is the previous tip, so comparing with it covers the whole change. Tags, a manual trigger or a second confirmation environment would add another release step for the same maintainer without another reviewer. A mistaken publish still consumes a version number and needs a bump. The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82` (`9000.0.0` was never published: its release run failed before the settings below existed). The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. diff --git a/interface/README.md b/interface/README.md index 21dce2f8..f3cb4027 100644 --- a/interface/README.md +++ b/interface/README.md @@ -70,6 +70,6 @@ Views keep the order form, action, chart. Putting the chart between the form and ## Deployment -A [version-changing release](../README.md#releases) deploys the `interface/dist` bundle produced by the successful check job. A failed check leaves the previous site live. +A [version-changing release](../README.md#releases) builds `interface/dist` again in a fresh job where none of the gate's tooling runs, and deploys it. A failed check leaves the previous site live. The domain `ickb.org` is the repository's Pages setting; with the Actions source GitHub ignores a `CNAME` file, so none is shipped. `public/favicon.png` is the only static file copied to the site root; files added under `public/` are published as-is. diff --git a/package.json b/package.json index 90832f32..3d1d7076 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@eslint/js": "^10.0.1", "@microsoft/api-extractor": "^7.59.3", "@types/node": "catalog:", - "@typescript/native-preview": "7.0.0-dev.20260707.2", + "@typescript/native-preview": "catalog:", "@vitest/coverage-v8": "5.0.3", "@vitest/eslint-plugin": "^1.6.27", "dependency-cruiser": "^18.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1bcace0e..af509bbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -176,6 +176,9 @@ catalogs: '@types/node': specifier: ~22.20.4 version: 22.20.4 + '@typescript/native-preview': + specifier: 7.0.0-dev.20260707.2 + version: 7.0.0-dev.20260707.2 overrides: axios@>=1.0.0 <1.20.0: 1.20.0 @@ -213,7 +216,7 @@ importers: specifier: 'catalog:' version: 22.20.4 '@typescript/native-preview': - specifier: 7.0.0-dev.20260707.2 + specifier: 'catalog:' version: 7.0.0-dev.20260707.2 '@vitest/coverage-v8': specifier: 5.0.3 @@ -346,6 +349,9 @@ importers: '@ickb/testkit': specifier: workspace:* version: link:../testkit + '@typescript/native-preview': + specifier: 'catalog:' + version: 7.0.0-dev.20260707.2 sdk/node: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 38f48c3e..27693633 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -46,6 +46,7 @@ catalog: "@ckb-ccc/connector-react": ^2.2.2 "@ckb-ccc/core": ^1.23.0 "@types/node": ~22.20.4 + "@typescript/native-preview": 7.0.0-dev.20260707.2 # Three days. A freshly published release cannot be installed until it matures, so a # compromised one has time to be caught; the wait is also how long a fix stays diff --git a/sdk/package.json b/sdk/package.json index 2c532437..40e07f6c 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -59,6 +59,7 @@ "@ckb-ccc/core": "catalog:" }, "devDependencies": { - "@ickb/testkit": "workspace:*" + "@ickb/testkit": "workspace:*", + "@typescript/native-preview": "catalog:" } } From 3e4a302a789c0d592c8b127d37a37de2a8d11de0 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 16:34:02 +0100 Subject: [PATCH 21/32] chore(ci): the publish job runs in the npm environment, master only npm's trusted publisher matches organization, repository and workflow file, not the branch, so without an environment a workflow edit on any branch could mint an accepted token. The `npm` environment exists in the repository with a deployment branch policy of master and no reviewers, so it adds no step; the trusted publisher is to be registered with that environment name. The README also records that the package disallows tokens (Opus audit of b647269a, D2/D3). --- .github/workflows/ci.yaml | 4 +++- README.md | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b45e91d9..64e457ec 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -82,7 +82,8 @@ jobs: uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # npm trusted publishing: the id token stands in for a registry token, and npm records - # the provenance of this run with the package. + # the provenance of this run with the package. The environment's branch policy admits + # master only, so a token minted on another branch is refused. publish: needs: build if: needs.build.outputs.sdk == 'true' @@ -90,6 +91,7 @@ jobs: permissions: contents: read id-token: write + environment: npm steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 diff --git a/README.md b/README.md index e8977c48..5883bd88 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Both jobs require the gate to pass, then build their package again in a fresh jo The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82` (`9000.0.0` was never published: its release run failed before the settings below existed). The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. -The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `ci.yaml`, no environment. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/ci.yaml) owns the release mechanics. +The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `ci.yaml`, environment `npm`, whose branch policy in this repository admits `master` only; the package requires two-factor authentication and disallows tokens, so this workflow is the only publishing path. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/ci.yaml) owns the release mechanics. ## Live testnet validation From 96893b78f92d42b6c8ad3ebf0205d45b20c361d2 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 16:49:34 +0100 Subject: [PATCH 22/32] chore(ci): checkout v7.0.1 and setup-node v7.1.0 Three majors behind on both. The majors moved the actions to the node24 runtime and, for checkout v6, persist credentials in a separate file; this workflow sets persist-credentials: false on every checkout, so neither changes its behaviour. --- .github/workflows/ci.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 64e457ec..98f50ef6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,12 +16,12 @@ jobs: sdk: ${{ steps.releases.outputs.sdk }} steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: persist-credentials: false # The release rule below reads the previous commit. fetch-depth: 2 - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 with: # The declared Node floor; the example units run the current release. node-version: 22.23.4 @@ -66,10 +66,10 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 with: node-version: 22.23.4 - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" @@ -94,10 +94,10 @@ jobs: environment: npm steps: - - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: persist-credentials: false - - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 + - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 with: node-version: 22.23.4 - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" From a321e9b8912b27dafdf78e4d48ea41a7c7710e7f Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:45:45 +0100 Subject: [PATCH 23/32] chore: pnpm installs the pinned Node, 26.12.1 devEngines.runtime pins Node once, in the root package.json; pnpm 12 resolves it like a dependency, records each platform's tarball URL and sha256 in the lockfile, installs it under node_modules on `pnpm install`, and runs every script on it. The workflow no longer needs setup-node or a version of its own: the runner image's npm only installs pnpm. 26 becomes the LTS line on October 28; 26.12.1 is the October security release, four days old, so it passes the release age. The published SDK promises the major, `engines.node >=26`, the same kind of claim as a dependency range; the private packages declare no floor, since they run on the pin; the @types/node line follows. The tracked unit examples run the checkout's node_modules/node/bin/node, so a pin change reaches a host with pull and install (user decision 2026-10-25: an exact pin rather than an `lts` alias, since the host gets the locked version either way). Two notes: npm 11 enforces devEngines in the repository root, so inside the checkout npm runs as `pnpm exec npm ...`; the SDK publish job builds in a deploy tree without devEngines, so its two build commands run on the image's Node, which cannot affect the artifact (tsgo is native, the rewrite script edits specifiers). --- .github/workflows/ci.yaml | 19 +- README.md | 6 +- interface/package.json | 3 - package.json | 10 +- pnpm-lock.yaml | 248 +++++++++++++++++++------ pnpm-workspace.yaml | 4 +- sdk/node/README.md | 4 +- sdk/node/ickb-bot-testnet.service | 2 +- sdk/node/ickb-stimulus-testnet.service | 2 +- sdk/node/package.json | 3 - sdk/package.json | 2 +- testkit/package.json | 3 - 12 files changed, 213 insertions(+), 93 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 98f50ef6..372dee72 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -21,13 +21,9 @@ jobs: persist-credentials: false # The release rule below reads the previous commit. fetch-depth: 2 - - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 - with: - # The declared Node floor; the example units run the current release. - node-version: 22.23.4 - # npm ships with Node and installs the pnpm version package.json pins, verified by - # the registry's integrity field (npm ignores the hash in packageManager); no - # third-party action runs, pnpm/action-setup did the same with a vendored pnpm. + # The image's npm installs the pnpm version package.json pins, verified by the + # registry's integrity field (npm ignores the hash in packageManager); pnpm then + # installs the Node the lockfile pins (devEngines.runtime) and runs every script on it. - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" - name: Install pinned dependencies @@ -69,9 +65,6 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: persist-credentials: false - - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 - with: - node-version: 22.23.4 - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" - run: pnpm install --frozen-lockfile - run: pnpm --filter @ickb/interface build @@ -97,15 +90,15 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with: persist-credentials: false - - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 - with: - node-version: 22.23.4 - run: npm install --global pnpm@"$(node -p "require('./package.json').packageManager.split('@')[1]")" # `pnpm deploy` resolves only the SDK's dependencies from the lockfile and refuses the # package directory as its target, so its node_modules moves into place. npm runs the # build script because `pnpm run` would first install the whole workspace # (verifyDepsBeforeRun defaults to install). - run: pnpm --filter @ickb/sdk deploy --frozen-lockfile /tmp/deploy && mv /tmp/deploy/node_modules sdk/node_modules + # This tree has no devEngines, so these two commands run on the image's Node, which + # may trail the floor; tsgo is a native binary and the rewrite script only edits import + # specifiers, so the artifact does not depend on it. - run: npm run build working-directory: sdk # Access comes from publishConfig. The flag keeps provenance explicit: without it pnpm diff --git a/README.md b/README.md index 5883bd88..acdf7397 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Stack assumes user-owned cells have [locks whose signatures bind the whole trans ## Dependencies and checks -Use Node 22.23.4 or later and the pinned pnpm 12.4.2. From a plain checkout: +Install the pinned pnpm 12.4.2 with npm; `pnpm install` then fetches the Node the lockfile pins (`devEngines.runtime` in package.json) into `node_modules/node` and runs every script on it; a host that runs the bot from source points its units at that binary. Inside the checkout run npm as `pnpm exec npm ...`: npm 11 refuses to run on a host Node that differs from the pin, and `pnpm exec` puts the pinned one first on PATH. From a plain checkout: ```bash pnpm install --frozen-lockfile @@ -43,7 +43,7 @@ TypeScript stays on 6. The 7.x package ships the native compiler only, without t pnpm 12 supplies the trusted-publishing support the previous pin lacked. Its lockfile format is not backward-compatible with pnpm 10. The release age, build-script permissions and advisory exceptions live with their reasons in [pnpm-workspace.yaml](pnpm-workspace.yaml). -`pnpm check` runs the audit, full lint suite and interface build against installed dependencies. CI first installs from the pinned lockfile, then runs the same gate on the declared Node floor. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. +`pnpm check` runs the audit, full lint suite and interface build against installed dependencies. CI first installs from the pinned lockfile, then runs the same gate on the pinned Node. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. ## Releases @@ -56,7 +56,7 @@ Both jobs require the gate to pass, then build their package again in a fresh jo The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82` (`9000.0.0` was never published: its release run failed before the settings below existed). The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. -The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `ci.yaml`, environment `npm`, whose branch policy in this repository admits `master` only; the package requires two-factor authentication and disallows tokens, so this workflow is the only publishing path. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/ci.yaml) owns the release mechanics. +The publish job depends on the npm trusted publisher registered for `@ickb/sdk`: organization `ickb`, repository `stack`, workflow `ci.yaml`, environment `npm`, whose branch policy in this repository admits `master` only; the package requires two-factor authentication and disallows tokens, so no token can publish and this workflow is the only unattended path. The deploy job depends on this repository's Pages settings: source GitHub Actions, custom domain `ickb.org`. Renaming the workflow file or moving the repository breaks the release until those settings follow. The [workflow](.github/workflows/ci.yaml) owns the release mechanics. ## Live testnet validation diff --git a/interface/package.json b/interface/package.json index 499f2513..da678550 100644 --- a/interface/package.json +++ b/interface/package.json @@ -20,9 +20,6 @@ }, "type": "module", "private": true, - "engines": { - "node": ">=22.23.4" - }, "scripts": { "dev": "vite", "dev:testnet-wallet": "vite --mode testnet-wallet --host 127.0.0.1", diff --git a/package.json b/package.json index 3d1d7076..b255d6da 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,6 @@ "format": "pnpm lint:eslint:files --fix && prettier --write .", "test": "vitest" }, - "engines": { - "node": ">=22.23.4" - }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1", "@eslint/js": "^10.0.1", @@ -50,5 +47,12 @@ "typescript-eslint": "^8.71.0", "vitest": "^5.0.3" }, + "devEngines": { + "runtime": { + "name": "node", + "version": "26.12.1", + "onFail": "download" + } + }, "packageManager": "pnpm@12.4.2+sha512.08adc6613180275c7c9edada39dcf08c9c61ad4e7eaf330a4f3461f102b0f907423454d117f98e72d47fef0616070644d7bffc973a6a57f5090a6d7c368b07c9" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af509bbf..0ce7c3b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -174,8 +174,8 @@ catalogs: specifier: ^1.23.0 version: 1.23.0 '@types/node': - specifier: ~22.20.4 - version: 22.20.4 + specifier: ~26.6.5 + version: 26.6.5 '@typescript/native-preview': specifier: 7.0.0-dev.20260707.2 version: 7.0.0-dev.20260707.2 @@ -211,10 +211,10 @@ importers: version: 10.0.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) '@microsoft/api-extractor': specifier: ^7.59.3 - version: 7.59.3(@types/node@22.20.4) + version: 7.59.3(@types/node@26.6.5) '@types/node': specifier: 'catalog:' - version: 22.20.4 + version: 26.6.5 '@typescript/native-preview': specifier: 'catalog:' version: 7.0.0-dev.20260707.2 @@ -263,6 +263,9 @@ importers: knip: specifier: ^6.39.0 version: 6.39.0 + node: + specifier: runtime:26.12.1 + version: runtime:26.12.1 prettier: specifier: ^3.9.9 version: 3.9.9 @@ -283,7 +286,7 @@ importers: version: 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) vitest: specifier: ^5.0.3 - version: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) interface: dependencies: @@ -311,10 +314,10 @@ importers: version: link:../testkit '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@types/node': specifier: 'catalog:' - version: 22.20.4 + version: 26.6.5 '@types/react': specifier: ^19.3.0 version: 19.3.0 @@ -323,10 +326,10 @@ importers: version: 19.3.0(@types/react@19.3.0) '@vitejs/plugin-basic-ssl': specifier: ^2.3.0 - version: 2.3.0(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 2.3.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@vitejs/plugin-react': specifier: ^6.1.1 - version: 6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) oxc-transform-react: specifier: ^0.152.0 version: 0.152.0 @@ -338,7 +341,7 @@ importers: version: 6.0.3 vite: specifier: ^8.3.4 - version: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) sdk: dependencies: @@ -364,7 +367,7 @@ importers: version: link:../../testkit '@types/node': specifier: 'catalog:' - version: 22.20.4 + version: 26.6.5 testkit: dependencies: @@ -374,7 +377,7 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 22.20.4 + version: 26.6.5 packages: @@ -1591,15 +1594,15 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@22.20.4': - resolution: {integrity: sha512-zJRE40jpHtKqE/C4fgHrAKQLJuSpzEnP9ff9Y7YtoR3Wd2pwqzlekDeEuUQXjRd+QCYnVnNwuJYmhdk9XV8gvA==} - '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} '@types/node@26.6.3': resolution: {integrity: sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==} + '@types/node@26.6.5': + resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} + '@types/react-dom@19.3.0': resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} peerDependencies: @@ -3246,6 +3249,138 @@ packages: resolution: {integrity: sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==} engines: {node: '>=18'} + node@runtime:26.12.1: + resolution: + type: variations + variants: + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-DLlub0CRtke2b4EQMNXEvw0Kbm9H5B4SSBe2RMr/kcE= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-aix-ppc64.tar.gz + targets: + - cpu: ppc64 + os: aix + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-GQHVOZEsAq+hDRzBJpQ6iFWn7t6+gwEZRjRw215sWeg= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-darwin-arm64.tar.gz + targets: + - cpu: arm64 + os: darwin + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-uFwupEIK0LxKvy3Gzx9VEw7WgfHKv2DPP1JuTJ4nEv8= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-darwin-x64.tar.gz + targets: + - cpu: x64 + os: darwin + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-psAa9FndiXKrP7CO5dqBJE0muoxJRKYtW7uoxZeuFU8= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-arm64.tar.gz + targets: + - cpu: arm64 + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-lnFXnUWHMf6rAX+bGZ8hUAVKtxkQotbN81QAQoUbMnA= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-ppc64le.tar.gz + targets: + - cpu: ppc64le + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-2oK09HBZlNL5IpHjStc2IHpaa4sTm2k5OHXYEwLtedg= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-s390x.tar.gz + targets: + - cpu: s390x + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-Q8QG48qIFItZaBoHu5Ru3HXeAF1e9IuZg1IizyyHiT0= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-x64-musl.tar.gz + targets: + - cpu: x64 + os: linux + libc: musl + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-D9Hrd3BZj1KiGZXt9u01/GkEAPpDfCOGrzKVGekUMTI= + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-x64.tar.gz + targets: + - cpu: x64 + os: linux + - resolution: + archive: zip + bin: + node: node.exe + integrity: sha256-NFZ1ge5jlns3r7a3oMxjotVQpD1dg4rbdZgtfjVvLiw= + prefix: node-v26.12.1-win-arm64 + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-win-arm64.zip + targets: + - cpu: arm64 + os: win32 + - resolution: + archive: zip + bin: + node: node.exe + integrity: sha256-s+/Vxwy6MwjtRufmmam4qsB1u8awJ/yznITDGswl4rQ= + prefix: node-v26.12.1-win-x64 + type: binary + url: https://nodejs.org/download/release/v26.12.1/node-v26.12.1-win-x64.zip + targets: + - cpu: x64 + os: win32 + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-w2lFUfbLiI/gvvtMsuE//kWwuyUo7BQefDopp9eXTRM= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-arm64-musl.tar.gz + targets: + - cpu: arm64 + os: linux + libc: musl + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-i/nMDn+OPH7FNo3KGSQsrWUbawnTW83PKQrD+Akl6N0= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v26.12.1/node-v26.12.1-linux-x64-musl.tar.gz + targets: + - cpu: x64 + os: linux + libc: musl + version: 26.12.1 + hasBin: true + nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} @@ -3873,9 +4008,6 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@8.9.0: resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} @@ -4919,23 +5051,23 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.6.0 - '@microsoft/api-extractor-model@7.33.14(@types/node@22.20.4)': + '@microsoft/api-extractor-model@7.33.14(@types/node@26.6.5)': dependencies: '@microsoft/tsdoc': 0.17.1 '@microsoft/tsdoc-config': 0.18.3 - '@rushstack/node-core-library': 5.25.0(@types/node@22.20.4) + '@rushstack/node-core-library': 5.25.0(@types/node@26.6.5) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.59.3(@types/node@22.20.4)': + '@microsoft/api-extractor@7.59.3(@types/node@26.6.5)': dependencies: - '@microsoft/api-extractor-model': 7.33.14(@types/node@22.20.4) + '@microsoft/api-extractor-model': 7.33.14(@types/node@26.6.5) '@microsoft/tsdoc': 0.17.1 '@microsoft/tsdoc-config': 0.18.3 - '@rushstack/node-core-library': 5.25.0(@types/node@22.20.4) + '@rushstack/node-core-library': 5.25.0(@types/node@26.6.5) '@rushstack/rig-package': 0.7.3 - '@rushstack/terminal': 0.24.6(@types/node@22.20.4) - '@rushstack/ts-command-line': 5.3.16(@types/node@22.20.4) + '@rushstack/terminal': 0.24.6(@types/node@26.6.5) + '@rushstack/ts-command-line': 5.3.16(@types/node@26.6.5) diff: 8.0.4 minimatch: 10.2.3 resolve: 1.22.12 @@ -5457,7 +5589,7 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rushstack/node-core-library@5.25.0(@types/node@22.20.4)': + '@rushstack/node-core-library@5.25.0(@types/node@26.6.5)': dependencies: ajv: 8.20.0 ajv-draft-04: 1.0.0(ajv@8.20.0) @@ -5468,28 +5600,28 @@ snapshots: resolve: 1.22.12 semver: 7.7.4 optionalDependencies: - '@types/node': 22.20.4 + '@types/node': 26.6.5 - '@rushstack/problem-matcher@0.2.1(@types/node@22.20.4)': + '@rushstack/problem-matcher@0.2.1(@types/node@26.6.5)': optionalDependencies: - '@types/node': 22.20.4 + '@types/node': 26.6.5 '@rushstack/rig-package@0.7.3': dependencies: jju: 1.4.0 resolve: 1.22.12 - '@rushstack/terminal@0.24.6(@types/node@22.20.4)': + '@rushstack/terminal@0.24.6(@types/node@26.6.5)': dependencies: - '@rushstack/node-core-library': 5.25.0(@types/node@22.20.4) - '@rushstack/problem-matcher': 0.2.1(@types/node@22.20.4) + '@rushstack/node-core-library': 5.25.0(@types/node@26.6.5) + '@rushstack/problem-matcher': 0.2.1(@types/node@26.6.5) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.20.4 + '@types/node': 26.6.5 - '@rushstack/ts-command-line@5.3.16(@types/node@22.20.4)': + '@rushstack/ts-command-line@5.3.16(@types/node@26.6.5)': dependencies: - '@rushstack/terminal': 0.24.6(@types/node@22.20.4) + '@rushstack/terminal': 0.24.6(@types/node@26.6.5) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -5563,12 +5695,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 - '@tailwindcss/vite@4.3.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@tailwindcss/vite@4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) '@tanstack/query-core@5.104.0': {} @@ -5607,10 +5739,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@22.20.4': - dependencies: - undici-types: 6.21.0 - '@types/node@22.7.5': dependencies: undici-types: 6.19.8 @@ -5619,6 +5747,10 @@ snapshots: dependencies: undici-types: 8.9.0 + '@types/node@26.6.5': + dependencies: + undici-types: 8.9.0 + '@types/react-dom@19.3.0(@types/react@19.3.0)': dependencies: '@types/react': 19.3.0 @@ -5808,14 +5940,14 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260707.2 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260707.2 - '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: - vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) - '@vitejs/plugin-react@6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-react@6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) optionalDependencies: oxc-transform-react: 0.152.0 @@ -5829,7 +5961,7 @@ snapshots: obug: 2.2.1 std-env: 4.3.0 tinyrainbow: 3.2.0 - vitest: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + vitest: 5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@vitest/eslint-plugin@1.6.27(@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(vitest@5.0.3)': dependencies: @@ -5839,7 +5971,7 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) typescript: 6.0.3 - vitest: 5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + vitest: 5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) transitivePeerDependencies: - supports-color @@ -5849,14 +5981,14 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.2 - '@vitest/mocker@5.0.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitest/mocker@5.0.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.3 estree-walker: 3.0.3 magic-string: 1.4.2 optionalDependencies: - vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) '@vitest/spy@5.0.3': {} @@ -6919,7 +7051,7 @@ snapshots: jsdoc-type-pratt-parser@9.2.2: dependencies: '@types/estree': 1.0.9 - '@types/node': 26.6.3 + '@types/node': 26.6.5 jsesc@3.1.0: {} @@ -7418,6 +7550,8 @@ snapshots: node-releases@2.0.57: {} + node@runtime:26.12.1: {} + nullthrows@1.1.1: {} ob1@0.87.1: @@ -8031,8 +8165,6 @@ snapshots: undici-types@6.19.8: {} - undici-types@6.21.0: {} - undici-types@8.9.0: {} universalify@2.0.1: {} @@ -8065,7 +8197,7 @@ snapshots: dependencies: uint8array-tools: 0.0.10 - vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): + vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -8073,16 +8205,16 @@ snapshots: rolldown: 1.2.12 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.20.4 + '@types/node': 26.6.5 fsevents: 2.3.3 jiti: 2.7.0 terser: 5.51.2 yaml: 2.9.1 - vitest@5.0.3(@types/node@22.20.4)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): + vitest@5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.3(vite@8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + '@vitest/mocker': 5.0.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) chai: 6.3.0 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -8093,10 +8225,10 @@ snapshots: tinybench: 6.2.0 tinyexec: 1.3.1 tinyglobby: 0.2.17 - vite: 8.3.4(@types/node@22.20.4)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) why-is-node-running: 3.2.1 optionalDependencies: - '@types/node': 22.20.4 + '@types/node': 26.6.5 '@vitest/coverage-v8': 5.0.3(vitest@5.0.3) transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 27693633..fe6e5766 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -45,7 +45,7 @@ catalog: "@ckb-ccc/ccc": ^1.3.6 "@ckb-ccc/connector-react": ^2.2.2 "@ckb-ccc/core": ^1.23.0 - "@types/node": ~22.20.4 + "@types/node": ~26.6.5 "@typescript/native-preview": 7.0.0-dev.20260707.2 # Three days. A freshly published release cannot be installed until it matures, so a @@ -61,7 +61,7 @@ minimumReleaseAgeIgnoreMissingTime: false patchedDependencies: # JoyID only needs a standard fetch implementation, but 1.1.4 imports # cross-fetch, which loads node-fetch@2 and Node's deprecated builtin - # punycode during native source imports. Stack requires Node 22.23.4+ and + # punycode during native source imports. Stack requires Node 26+ and # modern browsers, so use globalThis.fetch until JoyID publishes this fix. # pnpm still resolves JoyID's original cross-fetch dependency in the lockfile; # scripts/test/build/native-source-smoke.ts guards the runtime path so it stays dormant. diff --git a/sdk/node/README.md b/sdk/node/README.md index c6ea3dda..c0d5753a 100644 --- a/sdk/node/README.md +++ b/sdk/node/README.md @@ -30,7 +30,7 @@ The process owns the CCC client and disposes it at the end of the turn so open s ## Run -From a plain checkout, run `pnpm install` from the repo root. CCC is resolved as a normal package dependency, and the app runs from TypeScript source under Node 22.23.4+. The key file lives outside the checkout, in a private directory: +From a plain checkout, run `pnpm install` from the repo root. CCC is resolved as a normal package dependency, and the app runs from TypeScript source on the Node that `pnpm install` placed in `node_modules/node`. The key file lives outside the checkout, in a private directory: ```bash pnpm install @@ -194,7 +194,7 @@ systemctl --user enable --now ickb-bot-testnet.service journalctl --user -u ickb-bot-testnet.service -f -o cat ``` -`ExecStart` needs the absolute path of the node binary: the user manager never sees the shell PATH, and a version manager's per-shell link vanishes at logout, so point at the versioned install itself (`readlink -f "$(command -v node)"`). A literal `%` in any value must be written `%%`. Linger keeps the user manager running without a login session, so the unit survives logout and starts at boot. A mainnet bot unit is the same file with `mainnet` values and its own key file; the generator refuses any chain but testnet. +`ExecStart` needs the absolute path of the node binary: the user manager never sees the shell PATH. Point at the checkout's `node_modules/node/bin/node`, the version the lockfile pins, which `pnpm install` keeps current. A literal `%` in any value must be written `%%`. Linger keeps the user manager running without a login session, so the unit survives logout and starts at boot. A mainnet bot unit is the same file with `mainnet` values and its own key file; the generator refuses any chain but testnet. Operate the unit as usual: diff --git a/sdk/node/ickb-bot-testnet.service b/sdk/node/ickb-bot-testnet.service index e40a653b..2c946a93 100644 --- a/sdk/node/ickb-bot-testnet.service +++ b/sdk/node/ickb-bot-testnet.service @@ -9,7 +9,7 @@ Description=iCKB bot testnet Type=exec WorkingDirectory=/home/user/Projects/ickb/stack # The user manager does not see the shell PATH, so name the node binary by absolute path. -ExecStart=/home/user/.local/share/fnm/node-versions/v24.18.0/installation/bin/node sdk/node/src/bot.ts +ExecStart=/home/user/Projects/ickb/stack/node_modules/node/bin/node sdk/node/src/bot.ts Environment=BOT_CHAIN=testnet # The key stays in a 0600 file: unit files, `systemctl show`, and child processes all expose Environment values. Environment=BOT_PRIVATE_KEY_FILE=/home/user/.config/ickb-bot/testnet.key diff --git a/sdk/node/ickb-stimulus-testnet.service b/sdk/node/ickb-stimulus-testnet.service index 37086f01..01bb59a3 100644 --- a/sdk/node/ickb-stimulus-testnet.service +++ b/sdk/node/ickb-stimulus-testnet.service @@ -9,7 +9,7 @@ Description=iCKB stimulus generator testnet Type=exec WorkingDirectory=/home/user/Projects/ickb/stack # The user manager does not see the shell PATH, so name the node binary by absolute path. -ExecStart=/home/user/.local/share/fnm/node-versions/v24.18.0/installation/bin/node sdk/node/src/stimulus.ts +ExecStart=/home/user/Projects/ickb/stack/node_modules/node/bin/node sdk/node/src/stimulus.ts Environment=STIMULUS_CHAIN=testnet # The key stays in a 0600 file: unit files, `systemctl show`, and child processes all expose Environment values. Environment=STIMULUS_PRIVATE_KEY_FILE=/home/user/.config/ickb-bot/stimulus-testnet.key diff --git a/sdk/node/package.json b/sdk/node/package.json index 5869d186..1f233078 100644 --- a/sdk/node/package.json +++ b/sdk/node/package.json @@ -4,9 +4,6 @@ "description": "iCKB bot, testnet stimulus generator, and rate sampler", "private": true, "type": "module", - "engines": { - "node": ">=22.23.4" - }, "scripts": { "bot": "node src/bot.ts", "stimulus": "node src/stimulus.ts", diff --git a/sdk/package.json b/sdk/package.json index 40e07f6c..d30b6414 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -21,7 +21,7 @@ "sideEffects": false, "type": "module", "engines": { - "node": ">=22.23.4" + "node": ">=26" }, "main": "src/index.ts", "types": "src/index.ts", diff --git a/testkit/package.json b/testkit/package.json index 8ae51087..c9570ca8 100644 --- a/testkit/package.json +++ b/testkit/package.json @@ -4,9 +4,6 @@ "private": true, "sideEffects": false, "type": "module", - "engines": { - "node": ">=22.23.4" - }, "main": "src/index.ts", "types": "src/index.ts", "exports": { From 7d852e1c863e5784b7d07f0fed1537564e77b708 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:47:29 +0100 Subject: [PATCH 24/32] chore(ci): pnpm fresh holds the date-dependent checks, on pull requests only Nothing audited the actions or asked for newer dependencies, and the audit sat inside `pnpm check`, whose result therefore moved with the advisory database while the tree stood still: the base commit passed the gate on October 15 and fails it today. A release push running that gate could fail on an advisory or a release that appeared after review, with no rerun able to recover and the next merge releasing nothing. `pnpm check` is now a function of the tree. `pnpm fresh` holds the date-dependent checks and CI runs it on pull_request events only, where the required `build` check still enforces it: the audit, and `pnpm -r outdated --include-github-actions`, which reports every newer release of a dependency past the three-day age, majors included, and any newer release of a pinned action (pnpm applies no age to actions; the Actions policy limits them to GitHub-owned ones). The project tracks the latest majors; the one hold, TypeScript 6 while typescript-eslint declares `typescript <6.1.0`, is an update.ignoreDeps entry with its reason beside it. Verified at pnpm 12.4.2: outdated honours minimumReleaseAge and exits 1 when outdated; a bare SHA pin is matched to its tag through git, with no API or token. --- .github/workflows/ci.yaml | 6 ++++++ AGENTS.md | 2 +- README.md | 4 ++-- package.json | 3 ++- pnpm-workspace.yaml | 8 ++++++++ scripts/README.md | 2 +- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 372dee72..25da45e0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,6 +30,12 @@ jobs: run: pnpm install --frozen-lockfile - name: Run pnpm check run: pnpm check + # The freshness checks depend on the date, not the tree: an advisory is published, a + # dependency or Node release ages past its waiting period, an action releases. They + # gate pull requests only, so a release push cannot fail on something that appeared + # after the review; the next pull request catches it. + - if: github.event_name == 'pull_request' + run: pnpm fresh # A release is a push to master (the only push trigger) whose commit changes a # package's version field. The ruleset admits only merge commits of pull requests, diff --git a/AGENTS.md b/AGENTS.md index 67c43185..8e1f60b2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -26,7 +26,7 @@ For a material revision: ## The gate -Run the [whole gate](README.md#dependencies-and-checks), `CI=true pnpm check`, once per commit and check its exit code. A green result on that tree makes the commit publishable. +Run the [whole gate](README.md#dependencies-and-checks), `CI=true pnpm check`, once per commit and check its exit code. A green result on that tree makes the commit publishable. Pull requests also run `pnpm fresh`, whose result depends on the date, so run it before opening one. Keep each commit small and scoped to one concern. Its message explains the concern and what it prevents. Changes share a commit only when they share that reason to change. diff --git a/README.md b/README.md index acdf7397..483ae3d7 100644 --- a/README.md +++ b/README.md @@ -39,11 +39,11 @@ CCC is an ordinary dependency resolved through the catalog in `pnpm-workspace.ya The lockfile holds the CCC 1.23.0 set. CCC 1.23 made `mol.union` dynamic-size, so the order master pointer uses `mol.fixedUnion`, whose two variants are the same 36 bytes. The gate exercises core and the SDK paths; connector changes are only exercised by live wallet testing, so a CCC update that moves the connector is followed by one. -TypeScript stays on 6. The 7.x package ships the native compiler only, without the JavaScript compiler API that typescript-eslint and `scripts/tooling/dead-members.ts` use, and typescript-eslint declares `typescript <6.1.0`. Type checking already runs on the native preview. +TypeScript stays on 6 until typescript-eslint supports 7; the reason sits with the hold in `pnpm-workspace.yaml`. Type checking already runs on the native preview. pnpm 12 supplies the trusted-publishing support the previous pin lacked. Its lockfile format is not backward-compatible with pnpm 10. The release age, build-script permissions and advisory exceptions live with their reasons in [pnpm-workspace.yaml](pnpm-workspace.yaml). -`pnpm check` runs the audit, full lint suite and interface build against installed dependencies. CI first installs from the pinned lockfile, then runs the same gate on the pinned Node. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. +`pnpm check` runs the full lint suite and interface build against installed dependencies; its result is a function of the tree. `pnpm fresh` depends on the date instead: the audit fails on a newly published advisory; `pnpm outdated` fails when a dependency has a newer release past the release age, majors included, and when a pinned action has any newer release, since pnpm applies no release age to actions. CI first installs from the pinned lockfile, then runs the gate on the pinned Node; pull requests also run the freshness checks, release pushes do not, so a release cannot fail on an advisory or a version that appeared after the review. pnpm itself is pinned by `packageManager` and bumped by hand. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. ## Releases diff --git a/package.json b/package.json index b255d6da..151f21f8 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "type": "module", "scripts": { "build": "pnpm --filter @ickb/sdk build && node scripts/tooling/build/rewrite-dts-imports.ts --check sdk/dist", - "check": "CI=true pnpm audit && CI=true pnpm lint && CI=true pnpm --filter ./interface build", + "check": "CI=true pnpm lint && CI=true pnpm --filter ./interface build", + "fresh": "CI=true pnpm audit && pnpm -r outdated --include-github-actions", "lint": "pnpm lint:typecheck && pnpm lint:format && pnpm lint:duplication && pnpm lint:knip && pnpm lint:architecture && pnpm lint:api && pnpm lint:publish && pnpm lint:coverage && pnpm lint:eslint", "lint:typecheck": "tsgo --noEmit -p tsconfig.json && pnpm --filter ./interface lint:typecheck", "lint:format": "prettier --check .", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fe6e5766..0bb0bd4f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -41,6 +41,14 @@ overrides: # auto-install a second peer copy and React hooks fail at runtime. "@ckb-ccc/connector-react>react": 19.3.0 +# The one hold, which silences every typescript release, patches included: 7 ships the +# native compiler only, without the JavaScript API that typescript-eslint +# (`typescript <6.1.0`) and scripts/tooling/dead-members.ts use. Drop the entry when +# typescript-eslint supports 7. +update: + ignoreDeps: + - typescript + catalog: "@ckb-ccc/ccc": ^1.3.6 "@ckb-ccc/connector-react": ^2.2.2 diff --git a/scripts/README.md b/scripts/README.md index 46e69943..0f67b4d9 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -10,7 +10,7 @@ Repository tooling, run from the root by the `package.json` scripts; nothing her ## What the gate enforces -[`CI=true pnpm check`](../package.json) runs the audit, full lint suite and interface build against installed dependencies. The lint suite includes typechecking, formatting, duplication, unused code, dependency boundaries, API and package checks, coverage and ESLint. +[`CI=true pnpm check`](../package.json) runs the full lint suite and interface build against installed dependencies; `pnpm fresh`, run on pull requests, holds the date-dependent checks that the root README's [dependency policy](../README.md#dependencies-and-checks) lists. The lint suite includes typechecking, formatting, duplication, unused code, dependency boundaries, API and package checks, coverage and ESLint. The custom ESLint rules sit beside their rationale in [`eslint.config.mts`](../eslint.config.mts): compare whole script identities, use one uncached paging loop, parse untyped input at its boundary, justify type assertions and keep `@__PURE__` annotations out of class static blocks. The last rule prevents the bundler from removing codec initialization while retaining the class. Other production restrictions keep test-only dependency bags and fallback implementations out of runtime APIs. General style and test-shape checks use established presets rather than another local metrics framework. From 9a24a47bd76f1b04becad24e1613172bdd652acf Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:49:22 +0100 Subject: [PATCH 25/32] chore(ci): the Node check, against security releases of the pinned major pnpm outdated does not report devEngines, and the resolver applies no release age to it (a ^22.23.0 range resolved a five-day-old release under a seven-day rule), so the runtime had no freshness check: the October security release was found by reading the announcement. scripts/tooling/pins.ts, run by `pnpm fresh`, reads the pin from package.json, requires the SDK's engines floor to be the pin's major, and fails when the Node project lists a newer release of that major flagged as a security release that is at least three days old (user decision 2026-10-25). Non-security releases are not flagged. --- .dependency-cruiser.jsonc | 1 + README.md | 2 +- knip.jsonc | 2 +- package.json | 2 +- scripts/tooling/pins.ts | 78 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 scripts/tooling/pins.ts diff --git a/.dependency-cruiser.jsonc b/.dependency-cruiser.jsonc index 55a9b248..82107ab1 100644 --- a/.dependency-cruiser.jsonc +++ b/.dependency-cruiser.jsonc @@ -13,6 +13,7 @@ "^scripts/run-node-tests[.](?:mts|ts)$", "^scripts/tooling/build/rewrite-dts-imports[.](?:mts|ts)$", "^scripts/tooling/dead-members[.]ts$", + "^scripts/tooling/pins[.]ts$", "^scripts/tooling/eslint/plugins[.]ts$", "^scripts/test/.+[.](?:mts|ts)$", "^sdk/node/test/.+[.]ts$", diff --git a/README.md b/README.md index 483ae3d7..f4d3c4d8 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ TypeScript stays on 6 until typescript-eslint supports 7; the reason sits with t pnpm 12 supplies the trusted-publishing support the previous pin lacked. Its lockfile format is not backward-compatible with pnpm 10. The release age, build-script permissions and advisory exceptions live with their reasons in [pnpm-workspace.yaml](pnpm-workspace.yaml). -`pnpm check` runs the full lint suite and interface build against installed dependencies; its result is a function of the tree. `pnpm fresh` depends on the date instead: the audit fails on a newly published advisory; `pnpm outdated` fails when a dependency has a newer release past the release age, majors included, and when a pinned action has any newer release, since pnpm applies no release age to actions. CI first installs from the pinned lockfile, then runs the gate on the pinned Node; pull requests also run the freshness checks, release pushes do not, so a release cannot fail on an advisory or a version that appeared after the review. pnpm itself is pinned by `packageManager` and bumped by hand. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. +`pnpm check` runs the full lint suite and interface build against installed dependencies; its result is a function of the tree. `pnpm fresh` depends on the date instead: the audit fails on a newly published advisory; `pnpm outdated` fails when a dependency has a newer release past the release age, majors included, and when a pinned action has any newer release, since pnpm applies no release age to actions; the Node check, `scripts/tooling/pins.ts`, fails when the pinned major has a newer security release that is at least three days old. CI first installs from the pinned lockfile, then runs the gate on the pinned Node; pull requests also run the freshness checks, release pushes do not, so a release cannot fail on an advisory or a version that appeared after the review. pnpm itself is pinned by `packageManager` and bumped by hand. [Tooling](scripts/README.md#what-the-gate-enforces) explains the checks worth maintaining. ## Releases diff --git a/knip.jsonc b/knip.jsonc index ba582870..40205532 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -3,7 +3,7 @@ "workspaces": { ".": { "entry": [ - "scripts/{run-node-tests,tooling/build/rewrite-dts-imports}.ts!", + "scripts/{run-node-tests,tooling/build/rewrite-dts-imports,tooling/pins}.ts!", "scripts/test/**/*.ts", "!scripts/test/**/*support.ts", ], diff --git a/package.json b/package.json index 151f21f8..c02a684f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "scripts": { "build": "pnpm --filter @ickb/sdk build && node scripts/tooling/build/rewrite-dts-imports.ts --check sdk/dist", "check": "CI=true pnpm lint && CI=true pnpm --filter ./interface build", - "fresh": "CI=true pnpm audit && pnpm -r outdated --include-github-actions", + "fresh": "CI=true pnpm audit && pnpm -r outdated --include-github-actions && node scripts/tooling/pins.ts", "lint": "pnpm lint:typecheck && pnpm lint:format && pnpm lint:duplication && pnpm lint:knip && pnpm lint:architecture && pnpm lint:api && pnpm lint:publish && pnpm lint:coverage && pnpm lint:eslint", "lint:typecheck": "tsgo --noEmit -p tsconfig.json && pnpm --filter ./interface lint:typecheck", "lint:format": "prettier --check .", diff --git a/scripts/tooling/pins.ts b/scripts/tooling/pins.ts new file mode 100644 index 00000000..2aa5c83a --- /dev/null +++ b/scripts/tooling/pins.ts @@ -0,0 +1,78 @@ +// Fails when the pinned Node major has a newer release that the Node project flags as a +// security release and that is old enough to trust. Nothing else audits the runtime: +// pnpm outdated does not report devEngines, and the resolver applies no release age to it. +import { readFile } from "node:fs/promises"; + +// Three days: long enough for a pulled or regressed release to show (user decision 2026-10-25). +const ACCEPTANCE_AGE_MS = 3 * 24 * 60 * 60 * 1000; + +const cutoff = Date.now() - ACCEPTANCE_AGE_MS; +const problems: string[] = []; + +const isRecord = (value: unknown): value is Record => + typeof value === "object" && value !== null; + +function text(value: unknown, key: string): string { + const found = isRecord(value) ? value[key] : undefined; + if (typeof found === "string") { + return found; + } + throw new TypeError(`${key} is not a string`); +} + +const parseVersion = (version: string): number[] => + version.replace(/^v/, "").split(".").map(Number); +const newer = (a: number[], b: number[]): boolean => { + const index = a.findIndex((part, at) => part !== (b[at] ?? 0)); + return index !== -1 && (a[index] ?? 0) > (b[index] ?? 0); +}; + +async function manifest(path: string): Promise { + const parsed: unknown = JSON.parse(await readFile(path, "utf8")); + return parsed; +} + +// The published SDK's engines floor is the pin's major; private packages run on the pin itself. +const root = await manifest("package.json"); +const devEngines = isRecord(root) ? root["devEngines"] : undefined; +const nodeVersion = text( + isRecord(devEngines) ? devEngines["runtime"] : undefined, + "version", +); +const pinned = parseVersion(nodeVersion); +const sdk = await manifest("sdk/package.json"); +const floor = text(isRecord(sdk) ? sdk["engines"] : undefined, "node"); +if (floor !== `>=${String(pinned[0])}`) { + problems.push( + `sdk/package.json: engines.node is "${floor}", devEngines pins ${nodeVersion}`, + ); +} + +const response = await fetch("https://nodejs.org/dist/index.json"); +if (!response.ok) { + throw new Error(`nodejs.org index: ${String(response.status)}`); +} +const releases: unknown = await response.json(); +if (!Array.isArray(releases)) { + throw new TypeError("nodejs.org index is not an array"); +} +for (const release of releases) { + if (!isRecord(release)) { + continue; + } + const version = text(release, "version"); + const date = text(release, "date"); + if ( + parseVersion(version)[0] === pinned[0] && + newer(parseVersion(version), pinned) && + release["security"] === true && + Date.parse(date) <= cutoff + ) { + problems.push(`Node ${version} (security, ${date}) supersedes ${nodeVersion}`); + } +} + +if (problems.length > 0) { + console.error(problems.join("\n")); + process.exitCode = 1; +} From 5e182956334cbe5e139528ec24159cdb7ca5667c Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 21:37:43 +0100 Subject: [PATCH 26/32] chore(deps): eslint-plugin-unicorn 78 Two majors behind. The new no-top-level-side-effects rule is off for config modules, which exist to build a value at top level; a test helper's fallback expression becomes a default parameter. --- eslint.config.mts | 5 + package.json | 2 +- pnpm-lock.yaml | 276 +++++++++++++++++++++++++++++++++++++--- sdk/test/utils/utils.ts | 4 +- 4 files changed, 267 insertions(+), 20 deletions(-) diff --git a/eslint.config.mts b/eslint.config.mts index 7a6482fc..92bb087b 100644 --- a/eslint.config.mts +++ b/eslint.config.mts @@ -416,6 +416,11 @@ export default defineConfig( ], }, }, + { + // A config module is evaluated for the value it builds; the rule targets libraries. + files: ["**/*.config.{ts,mts}"], + rules: { "unicorn/no-top-level-side-effects": "off" }, + }, { // The oracle's independence from the SDK is a dependency-cruiser rule. files: ["testkit/src/contract_oracle.ts"], diff --git a/package.json b/package.json index c02a684f..68b217a2 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-plugin-security": "^4.2.0", "eslint-plugin-sonarjs": "^4.2.2", "eslint-plugin-tsdoc": "^0.5.4", - "eslint-plugin-unicorn": "76.0.0", + "eslint-plugin-unicorn": "78", "fast-check": "^4.10.2", "jscpd": "^5.4.0", "knip": "^6.39.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ce7c3b4..81e3f4af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -252,8 +252,8 @@ importers: specifier: ^0.5.4 version: 0.5.4(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) eslint-plugin-unicorn: - specifier: 76.0.0 - version: 76.0.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + specifier: '78' + version: 78.0.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) fast-check: specifier: ^4.10.2 version: 4.10.2 @@ -1573,6 +1573,9 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -1594,12 +1597,12 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@26.6.3': - resolution: {integrity: sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==} - '@types/node@26.6.5': resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} @@ -2048,6 +2051,9 @@ packages: change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} @@ -2151,6 +2157,9 @@ packages: supports-color: optional: true + decode-named-character-reference@1.3.0: + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2171,6 +2180,10 @@ packages: engines: {node: ^22||^24||>=26} hasBin: true + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -2183,6 +2196,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@8.0.4: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} @@ -2292,11 +2308,15 @@ packages: eslint: optional: true - eslint-plugin-unicorn@76.0.0: - resolution: {integrity: sha512-3ywJrCMHKYhcBP5yFzGaOOX3dY7+iR3hvpuoS/0EnhRFgVWLejly+t4fOdJvWQxJdHZl1C+QBW7hybXPDld4Pw==} + eslint-plugin-unicorn@78.0.0: + resolution: {integrity: sha512-XTDqxcJeAmh2lhgU75TpuMDdFtPDnAU+DCW56nR5UzXTG+uOyvOGjV80O11my7kNb2bYSCPlWa8c4K8/rwlYog==} engines: {node: '>=22'} peerDependencies: eslint: '>=10.4' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true eslint-scope@9.1.2: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} @@ -3135,6 +3155,69 @@ packages: engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} hasBin: true + micromark-core-commonmark@2.0.4: + resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.1.0: + resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-edit-map@1.0.0: + resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.3: + resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==} + + micromark@4.0.3: + resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3454,6 +3537,9 @@ packages: package-manager-detector@1.8.0: resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4750,7 +4836,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 26.6.3 + '@types/node': 26.6.5 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -5721,6 +5807,10 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} '@types/esrecurse@4.3.1': {} @@ -5739,14 +5829,12 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/ms@2.1.0': {} + '@types/node@22.7.5': dependencies: undici-types: 6.19.8 - '@types/node@26.6.3': - dependencies: - undici-types: 8.9.0 - '@types/node@26.6.5': dependencies: undici-types: 8.9.0 @@ -6204,9 +6292,11 @@ snapshots: change-case@5.4.4: {} + character-entities@2.0.2: {} + chrome-launcher@0.15.2(supports-color@10.2.2): dependencies: - '@types/node': 26.6.3 + '@types/node': 26.6.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2(supports-color@10.2.2) @@ -6215,7 +6305,7 @@ snapshots: chromium-edge-launcher@0.3.0(supports-color@10.2.2): dependencies: - '@types/node': 26.6.3 + '@types/node': 26.6.5 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2(supports-color@10.2.2) @@ -6316,6 +6406,10 @@ snapshots: optionalDependencies: supports-color: 10.2.2 + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + deep-is@0.1.4: {} delay@7.0.0: @@ -6348,12 +6442,18 @@ snapshots: tsconfig-paths-webpack-plugin: 4.2.0 watskeburt: 6.0.0 + dequal@2.0.3: {} + destroy@1.2.0: {} detect-indent@7.0.2: {} detect-libc@2.1.2: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + diff@8.0.4: {} dunder-proto@1.0.1: @@ -6480,7 +6580,7 @@ snapshots: - supports-color - typescript - eslint-plugin-unicorn@76.0.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)): + eslint-plugin-unicorn@78.0.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) '@eslint/css-tree': 4.1.1 @@ -6496,6 +6596,8 @@ snapshots: identifier-regex: 1.1.0 indent-string: 5.0.0 is-builtin-module: 5.0.0 + micromark: 4.0.3(supports-color@10.2.2) + parse5: 8.0.1 pluralize: 8.0.0 quote-js-string: 0.1.0 regjsparser: 0.13.3 @@ -6503,6 +6605,10 @@ snapshots: semver: 7.8.5 strip-indent: 4.1.1 yaml: 2.9.1 + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color eslint-scope@9.1.2: dependencies: @@ -6979,7 +7085,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 26.6.3 + '@types/node': 26.6.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6996,7 +7102,7 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 26.6.3 + '@types/node': 26.6.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -7461,6 +7567,138 @@ snapshots: - supports-color - utf-8-validate + micromark-core-commonmark@2.0.4: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.1.0 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-edit-map: 1.0.0 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-space@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.3 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-edit-map@1.0.0: + dependencies: + micromark-util-types: 2.0.3 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.3 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.3: {} + + micromark@4.0.3(supports-color@10.2.2): + dependencies: + '@types/debug': 4.1.13 + debug: 4.4.3(supports-color@10.2.2) + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.4 + micromark-factory-space: 2.1.0 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-edit-map: 1.0.0 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.3 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -7679,6 +7917,10 @@ snapshots: package-manager-detector@1.8.0: {} + parse5@8.0.1: + dependencies: + entities: 8.1.0 + parseurl@1.3.3: {} path-exists@4.0.0: {} diff --git a/sdk/test/utils/utils.ts b/sdk/test/utils/utils.ts index 5b6e5bc4..633119e8 100644 --- a/sdk/test/utils/utils.ts +++ b/sdk/test/utils/utils.ts @@ -74,9 +74,9 @@ describe("findCells", () => { const fullPage = Array.from({ length: defaultCellPageSize }, () => cell); const noCache = vi .spyOn(client, "findCellsPagedNoCache") - .mockImplementation(async (_key, _order, _limit, after) => { + .mockImplementation(async (_key, _order, _limit, after = "stuck") => { await Promise.resolve(); - return { cells: fullPage, lastCursor: after ?? "stuck" }; + return { cells: fullPage, lastCursor: after }; }); await expect( From ad6edc7ac31ea8da54786cc3e2c427a19657e479 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 17:57:49 +0100 Subject: [PATCH 27/32] chore(deps): the connector's React override follows the app's range The exact 19.3.0 went stale when the app moved to 19.3.1; a caret range keeps the connector on the same single React without an edit per patch release. --- pnpm-lock.yaml | 4 ++-- pnpm-workspace.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81e3f4af..ee847392 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -194,7 +194,7 @@ overrides: ws@>=8.0.0 <8.21.1: 8.21.1 zod@<4.6.6: 4.6.6 zod-validation-error@^3.5.0 || ^4.0.0: 4.0.2 - '@ckb-ccc/connector-react>react': 19.3.0 + '@ckb-ccc/connector-react>react': ^19.3.0 patchedDependencies: '@joyid/ckb@1.1.4': d19be4b61698e780a6eb914cf2d654b06b0f8ef49c5e78dc7c68475063355424 @@ -490,7 +490,7 @@ packages: resolution: {integrity: sha512-oCKX/UGeKAFNXiymCbXheW/ZG76AMQwfEacUQvFfgjQ9kIQSDfVuHN1XAVWgtfoslEJ6Rtaexy0qLStrq9m8HQ==} peerDependencies: '@types/react': '>=16' - react: 19.3.0 + react: ^19.3.0 '@ckb-ccc/connector@2.3.2': resolution: {integrity: sha512-HsNZ1g0N51Jkjj5/vTjFrbD2lIQ+BhsdZpXTVP3hqsJRMim+AArLkmW07VWoRoB78Ngj6SclTw7GrF7TftYXnw==} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0bb0bd4f..e8f0f89b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -39,7 +39,7 @@ overrides: zod-validation-error@^3.5.0 || ^4.0.0: 4.0.2 # Keep CCC React connector on the app's React instance; otherwise pnpm may # auto-install a second peer copy and React hooks fail at runtime. - "@ckb-ccc/connector-react>react": 19.3.0 + "@ckb-ccc/connector-react>react": ^19.3.0 # The one hold, which silences every typescript release, patches included: 7 ships the # native compiler only, without the JavaScript API that typescript-eslint From e551209a6bcbedc2d3391af4ef598de25630278f Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 21:37:43 +0100 Subject: [PATCH 28/32] fix(sdk): the package ships its source, and the maps reach it The emitted maps pointed at the source through a fixed `sourceRoot` of `../src`, which the dist-only tarball did not contain and which, resolved against a nested map's own location, named `dist/src/...` for 46 of the 60 references. `src` now ships beside `dist`, so an integrator's debugger shows the code and anyone can read what they installed, and `sourceRoot` is gone, so each map carries its own relative path. The build's exclude list and the matching `files` negations guarded against test files under `src`, where none live (tests are under `test/`); both are deleted (Fable and Opus reviews of e3d220bf). --- sdk/package.json | 3 ++- sdk/tsconfig.build.json | 6 ++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/sdk/package.json b/sdk/package.json index d30b6414..a0a68f35 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -42,7 +42,8 @@ "lint:publish": "publint --strict --pack pnpm" }, "files": [ - "dist" + "dist", + "src" ], "publishConfig": { "access": "public", diff --git a/sdk/tsconfig.build.json b/sdk/tsconfig.build.json index ca89ac28..115e8f99 100644 --- a/sdk/tsconfig.build.json +++ b/sdk/tsconfig.build.json @@ -5,9 +5,7 @@ "removeComments": false, "rewriteRelativeImportExtensions": true, "rootDir": "src", - "outDir": "dist", - "sourceRoot": "../src" + "outDir": "dist" }, - "include": ["src"], - "exclude": ["src/**/*.test.ts", "src/**/*_test_support.ts"] + "include": ["src"] } From b302429ceb565a509986bea5086cfa68bcfc59a4 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:58:01 +0100 Subject: [PATCH 29/32] chore(deps): update to the newest versions the release age admits The lockfile is regenerated from scratch under the three-day age and the direct ranges move to the newest admitted releases; the freshness check requires this state. --- interface/package.json | 12 +- package.json | 24 +- pnpm-lock.yaml | 2083 ++++++++++++++++++++-------------------- 3 files changed, 1039 insertions(+), 1080 deletions(-) diff --git a/interface/package.json b/interface/package.json index da678550..f6749740 100644 --- a/interface/package.json +++ b/interface/package.json @@ -35,18 +35,18 @@ "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-basic-ssl": "^2.3.0", - "@vitejs/plugin-react": "^6.1.1", - "oxc-transform-react": "^0.152.0", + "@vitejs/plugin-react": "^6.1.2", + "oxc-transform-react": "^0.155.0", "tailwindcss": "^4.3.3", "typescript": "^6.0.3", - "vite": "^8.3.4" + "vite": "^8.3.5" }, "dependencies": { "@ckb-ccc/ccc": "catalog:", "@ckb-ccc/connector-react": "catalog:", "@ickb/sdk": "workspace:*", - "@tanstack/react-query": "^5.104.0", - "react": "^19.3.0", - "react-dom": "^19.3.0" + "@tanstack/react-query": "^5.104.5", + "react": "^19.3.1", + "react-dom": "^19.3.1" } } diff --git a/package.json b/package.json index 68b217a2..c4975c05 100644 --- a/package.json +++ b/package.json @@ -22,13 +22,13 @@ "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1", "@eslint/js": "^10.0.1", - "@microsoft/api-extractor": "^7.59.3", + "@microsoft/api-extractor": "^7.59.4", "@types/node": "catalog:", "@typescript/native-preview": "catalog:", - "@vitest/coverage-v8": "5.0.3", - "@vitest/eslint-plugin": "^1.6.27", - "dependency-cruiser": "^18.5.0", - "eslint": "^10.11.0", + "@vitest/coverage-v8": "5.0.5", + "@vitest/eslint-plugin": "^1.6.28", + "dependency-cruiser": "^18.7.0", + "eslint": "^10.13.0", "eslint-plugin-promise": "^7.3.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.7", @@ -36,17 +36,17 @@ "eslint-plugin-security": "^4.2.0", "eslint-plugin-sonarjs": "^4.2.2", "eslint-plugin-tsdoc": "^0.5.4", - "eslint-plugin-unicorn": "78", + "eslint-plugin-unicorn": "^78.0.0", "fast-check": "^4.10.2", - "jscpd": "^5.4.0", - "knip": "^6.39.0", - "prettier": "^3.9.9", + "jscpd": "^5.4.2", + "knip": "^6.42.1", + "prettier": "^3.9.10", "prettier-plugin-organize-imports": "^4.3.0", "prettier-plugin-tailwindcss": "^0.8.1", - "publint": "^0.3.24", + "publint": "^0.3.25", "typescript": "^6.0.3", - "typescript-eslint": "^8.71.0", - "vitest": "^5.0.3" + "typescript-eslint": "^8.72.0", + "vitest": "^5.0.5" }, "devEngines": { "runtime": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee847392..f4cd579d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -205,13 +205,13 @@ importers: devDependencies: '@eslint-community/eslint-plugin-eslint-comments': specifier: ^4.8.1 - version: 4.8.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 4.8.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 10.0.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) '@microsoft/api-extractor': - specifier: ^7.59.3 - version: 7.59.3(@types/node@26.6.5) + specifier: ^7.59.4 + version: 7.59.4(@types/node@26.6.5) '@types/node': specifier: 'catalog:' version: 26.6.5 @@ -219,74 +219,74 @@ importers: specifier: 'catalog:' version: 7.0.0-dev.20260707.2 '@vitest/coverage-v8': - specifier: 5.0.3 - version: 5.0.3(vitest@5.0.3) + specifier: 5.0.5 + version: 5.0.5(vitest@5.0.5) '@vitest/eslint-plugin': - specifier: ^1.6.27 - version: 1.6.27(@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(vitest@5.0.3) + specifier: ^1.6.28 + version: 1.6.28(@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(vitest@5.0.5) dependency-cruiser: - specifier: ^18.5.0 - version: 18.5.0 + specifier: ^18.7.0 + version: 18.7.0 eslint: - specifier: ^10.11.0 - version: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + specifier: ^10.13.0 + version: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) eslint-plugin-promise: specifier: ^7.3.0 - version: 7.3.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 7.3.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) eslint-plugin-react-hooks: specifier: ^7.1.1 - version: 7.1.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2) + version: 7.1.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2) eslint-plugin-react-refresh: specifier: ^0.5.7 - version: 0.5.7(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 0.5.7(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) eslint-plugin-regexp: specifier: 3.3.1 - version: 3.3.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 3.3.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) eslint-plugin-security: specifier: ^4.2.0 version: 4.2.0 eslint-plugin-sonarjs: specifier: ^4.2.2 - version: 4.2.2(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + version: 4.2.2(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) eslint-plugin-tsdoc: specifier: ^0.5.4 - version: 0.5.4(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + version: 0.5.4(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) eslint-plugin-unicorn: - specifier: '78' - version: 78.0.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + specifier: ^78.0.0 + version: 78.0.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) fast-check: specifier: ^4.10.2 version: 4.10.2 jscpd: - specifier: ^5.4.0 - version: 5.4.0 + specifier: ^5.4.2 + version: 5.4.2 knip: - specifier: ^6.39.0 - version: 6.39.0 + specifier: ^6.42.1 + version: 6.42.1 node: specifier: runtime:26.12.1 version: runtime:26.12.1 prettier: - specifier: ^3.9.9 - version: 3.9.9 + specifier: ^3.9.10 + version: 3.9.10 prettier-plugin-organize-imports: specifier: ^4.3.0 - version: 4.3.0(prettier@3.9.9)(typescript@6.0.3) + version: 4.3.0(prettier@3.9.10)(typescript@6.0.3) prettier-plugin-tailwindcss: specifier: ^0.8.1 - version: 0.8.1(prettier-plugin-organize-imports@4.3.0(prettier@3.9.9)(typescript@6.0.3))(prettier@3.9.9) + version: 0.8.1(prettier-plugin-organize-imports@4.3.0(prettier@3.9.10)(typescript@6.0.3))(prettier@3.9.10) publint: - specifier: ^0.3.24 - version: 0.3.24 + specifier: ^0.3.25 + version: 0.3.25 typescript: specifier: ^6.0.3 version: 6.0.3 typescript-eslint: - specifier: ^8.71.0 - version: 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + specifier: ^8.72.0 + version: 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) vitest: - specifier: ^5.0.3 - version: 5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + specifier: ^5.0.5 + version: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) interface: dependencies: @@ -295,26 +295,26 @@ importers: version: 1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@ckb-ccc/connector-react': specifier: 'catalog:' - version: 2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) + version: 2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(react@19.3.1)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@ickb/sdk': specifier: workspace:* version: link:../sdk '@tanstack/react-query': - specifier: ^5.104.0 - version: 5.104.0(react@19.3.0) + specifier: ^5.104.5 + version: 5.104.5(@types/react@19.3.0)(react@19.3.1) react: - specifier: ^19.3.0 - version: 19.3.0 + specifier: ^19.3.1 + version: 19.3.1 react-dom: - specifier: ^19.3.0 - version: 19.3.0(react@19.3.0) + specifier: ^19.3.1 + version: 19.3.1(react@19.3.1) devDependencies: '@ickb/testkit': specifier: workspace:* version: link:../testkit '@tailwindcss/vite': specifier: ^4.3.3 - version: 4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 4.3.3(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@types/node': specifier: 'catalog:' version: 26.6.5 @@ -326,13 +326,13 @@ importers: version: 19.3.0(@types/react@19.3.0) '@vitejs/plugin-basic-ssl': specifier: ^2.3.0 - version: 2.3.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + version: 2.3.0(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) '@vitejs/plugin-react': - specifier: ^6.1.1 - version: 6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + specifier: ^6.1.2 + version: 6.1.2(oxc-transform-react@0.155.0)(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) oxc-transform-react: - specifier: ^0.152.0 - version: 0.152.0 + specifier: ^0.155.0 + version: 0.155.0 tailwindcss: specifier: ^4.3.3 version: 4.3.3 @@ -340,8 +340,8 @@ importers: specifier: ^6.0.3 version: 6.0.3 vite: - specifier: ^8.3.4 - version: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + specifier: ^8.3.5 + version: 8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) sdk: dependencies: @@ -430,8 +430,8 @@ packages: resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.29.7': - resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + '@babel/helpers@7.29.10': + resolution: {integrity: sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==} engines: {node: '>=6.9.0'} '@babel/parser@7.29.9': @@ -439,16 +439,16 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + '@babel/runtime@7.29.10': + resolution: {integrity: sha512-NpugTzbKgGrNe45Ui32cN8vCFFMxVtP/9rtfwv0nP5FRDAjvYBxJcLVpYA9mr1jxP6cnIT7x9LUzuDTbWYYNRA==} engines: {node: '>=6.9.0'} '@babel/template@7.29.7': resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.8': - resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} + '@babel/traverse@7.29.10': + resolution: {integrity: sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==} engines: {node: '>=6.9.0'} '@babel/types@7.29.8': @@ -584,8 +584,8 @@ packages: resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/css-tree@4.1.1': - resolution: {integrity: sha512-A+s89eP+yDAPkKjnIOfjlkGifg5J7GPn01nWx14UjBVWktfkxOU4975F9ZZ13xNxkGiblNcBaAqgKhnQrW6SWA==} + '@eslint/css-tree@4.1.2': + resolution: {integrity: sha512-rVcxLmwSkEL3aWS3vAgsTRrQHoYE1b0XcgDtKHDJ92XOkyUpcbS/g0tUJKhvCtlEhYzgKBWsgDd+Z/aPhd166w==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/js@10.0.1': @@ -677,53 +677,53 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@libp2p/circuit-relay-v2@4.2.13': - resolution: {integrity: sha512-AGEzj72W7Ae5eizaM+HeDzJBR28zK4yYp4BYvUOHQViT62W97FIITo/9Gc5rlkKti+gJJAurBm3cHV4A8Wcoxw==} + '@libp2p/circuit-relay-v2@4.2.17': + resolution: {integrity: sha512-1/bXp2Q01LWe86UvyCvoMkE7Yrdr5+dnqADLkibpjsWfA3PsBj8CtYNrtZtznvImya6r6I+9IUT6uso17O+rYg==} - '@libp2p/crypto@5.1.23': - resolution: {integrity: sha512-u6XVMD1YpUJgjS5MAayrxlzi+hQcj3FHY0wS6/M/T93ntyCW13BmmRzFb2ESamk65PEuSCAChmQeSzRV2sh2rQ==} + '@libp2p/crypto@5.2.0': + resolution: {integrity: sha512-nLKTzyX6PKQoGFrb+OKds4NyFnedBcCgr50jYd5sIwFPVOEiQiCYBeQSdBbqjn9crFFca/l7dxBcFtXQ5qKiVw==} - '@libp2p/identify@4.1.14': - resolution: {integrity: sha512-c7oU0DSKzkMNsanruOQc4Zy6mSf3fq8/W+4E/I936HiHZc/LIbUuCWaxbgmQexdfKqECH1qH4q9IwaCUWmjPMQ==} + '@libp2p/identify@4.1.18': + resolution: {integrity: sha512-9uZWEj1TmNeHQO7YMjVacnOGHdG5SFejZN2PcXIQmXf6aLpI9q4CFbmAlaPWO0yfUd53AN8tRFG5QNvrRKNeJg==} - '@libp2p/interface-internal@3.1.13': - resolution: {integrity: sha512-+vjQzpQl+0uoWCyNwV5NDnv1RAK9LDeWGeMbx/Fl2ZWrndtuFUPa9LxwqHXrTly6YOhgUatSzVqZBWnrQ1PxGg==} + '@libp2p/interface-internal@3.2.2': + resolution: {integrity: sha512-TyrBtIDcqqaMsGUi44QpiVG88PpNGSP3gDEsutDPNubjXgnAYEE+nqkhzeGDITQrRFIspQJz3zVWisPe8IEVyw==} - '@libp2p/interface@3.3.0': - resolution: {integrity: sha512-SXahM/4IgpiFKTtocbXYSTA1wEUVjktmT1yBCzBbc2Vgsu1VBCg6SvsFmXo2Hbeyev3D8EU+y3uaCKDB43C/Vg==} + '@libp2p/interface@3.4.0': + resolution: {integrity: sha512-WBBw0NyLAWZz2HYfG2bXjBB2Qa0Aa6ssrQQCLZXHaMEJTdXiEagmQDojqXpy2Y6uvn1C+c4vBJkUulrgV0nfsg==} - '@libp2p/keychain@6.1.7': - resolution: {integrity: sha512-kemRM/37UXfkqmZsFFIsICX8iMX3TUShYGaRL7xXqNq3oIebm12e54DW1dtDuUnpNLctdF6zWPPelUHQm50Szg==} + '@libp2p/keychain@6.1.10': + resolution: {integrity: sha512-PRZwNYDwrutTRVlA4JzTUfzLMQ5rkDKIl+eiCLN5DevrNg3hUXTFVNc1KgDQjMt5WongNh25L2peYKj9vB82YQ==} - '@libp2p/logger@6.2.13': - resolution: {integrity: sha512-+tkZuRPoiFdh+frG//3hQ3goV1uMzRblpZ+mwtezgLXkRNqB5YKBLl+c/rtrurwAUqjCuI/yoEPJBiCizg2z6w==} + '@libp2p/logger@6.2.16': + resolution: {integrity: sha512-dnSdu7/82qZ1IsB7WlcKsZyRcZGbzGGqYfUye5e9svLQ4kO3gsfI238Iw4nbrKHz2Cfcf0f6Jv1xc0uHFwSGwQ==} - '@libp2p/multistream-select@7.0.28': - resolution: {integrity: sha512-X6rmxeAlFeTDHDc4IPujz+y9TdA8cSMFfWyGJfxdIbQpDc1PwZI/Ttt3YWp0LAT9sbSYVFaWA6cGTN9EnMWtGQ==} + '@libp2p/multistream-select@7.0.32': + resolution: {integrity: sha512-X06d9MSipJZ5hRQHp8Akrhog9NT27Qf3/KZct6hfx3JP2nTQfomDlDYgxE6w1BWoQrVOYKnMI+dlHFg/2X75rQ==} - '@libp2p/noise@17.0.3': - resolution: {integrity: sha512-dUmOjqkkeyUm9NCaFiSEqif1vsLsRFmlZXEfIeREerKXB7sLBvRLbpGiglsLNu7BlA6mrnsQk4BMjZ8aEDqzdA==} + '@libp2p/noise@17.0.7': + resolution: {integrity: sha512-PSqVKlx919Wh+D+VC/y0amUu8t6qCUZmZlzeeTdLszxDOzOOQjZ9Wievzh/b/N5vQIRI9iXEqzhWpn2QFfFvNg==} - '@libp2p/peer-collections@7.0.28': - resolution: {integrity: sha512-+evafZ5oSnGRfB7z+ycf09ehzNhCKoOZaiHgi6TpnDitpRQM5KQeN0H9Ep2uNJtzyW944HOG41BqcSaHbEHv7Q==} + '@libp2p/peer-collections@7.0.32': + resolution: {integrity: sha512-B+FegCCbDhbuUnRijCOLgLZBWFhfd7Ys1d56T47bHo2gRHdyly+j96n2J8L26N8SZoQUD33Nw/K+qQTIMAKIlw==} - '@libp2p/peer-id@6.0.15': - resolution: {integrity: sha512-aIbYJcldMNOIzmm9J57aESjZInYFdrQ9AY0ij+qn0Oam2vBxDfEIJZxJu+JzVkB2rVvT+FHDQXKWT2nAqNgB8w==} + '@libp2p/peer-id@6.0.18': + resolution: {integrity: sha512-qQNWJbU+2g5TNjvbT58tTbI3oftSCea7rtcslRjFOD7KkmVi7YgNy9KVH8XbLra0K/f3sH6XOAIYIDsxwFm3ZQ==} - '@libp2p/peer-record@9.0.16': - resolution: {integrity: sha512-J4QoPr0F1v6xqjHjAJ9KPbg4jdDlGutDk2K3Km6+o0nWzZCgCGeSEIDOO2UvPa2bFoZTL62cD73fn8tm5K06cg==} + '@libp2p/peer-record@9.0.19': + resolution: {integrity: sha512-xlF/sVQzuYF18nNH85k1kkMmNPL7J/jY7p0NhUSE5/8hNEvkF+GJLueNWP18oyU6/O63XtAryga9w4irmWg45A==} - '@libp2p/peer-store@12.0.28': - resolution: {integrity: sha512-dj4qRhN01kml/It5/4P4DVcjfEZXJ2uZVVItCrs2YBGG2HLEYfWQZYROVbTCXDOCWwZK46aJ8eSLt4orsefq7Q==} + '@libp2p/peer-store@12.0.32': + resolution: {integrity: sha512-YFg6JrtN2dEBOL4ungkrQq3qL+fSJV2IKa8+9HFgNFkmf7YjGX0xY1HJpPS0ogsEAvJLZcTII3i+tHWNud1J1Q==} - '@libp2p/utils@7.4.1': - resolution: {integrity: sha512-e9cZeop+awI0rFczG4DvAwVeHqBhuCZfTyskvgONfKQrsT7L0BSlTlTTzZoFF8Dnb+QrzHsoIpnl0PrCr0h+Hg==} + '@libp2p/utils@7.4.5': + resolution: {integrity: sha512-R8657U2WD9tBtVrISa4gnMu0rkIZUQA8quT+RqIsxNQy4OzBYhXmnKr1zSC/xqnez0XrORpI3EaUwjVPgtcWBQ==} - '@libp2p/webrtc@6.0.33': - resolution: {integrity: sha512-vnjOnmUl7+0Cuy/khNjbDY0KUk/7JZ+fyf27lGmHHZas2mXJ5wzLZOS1b63/5yIq6EtIdouF0wpSdjLh1cvA7g==} + '@libp2p/webrtc@6.1.0': + resolution: {integrity: sha512-fEwM34KUzKHB3vvLhiExSG5ZtQFY6If8zRedt9JgNS1+Tcfgy0glN2WeqlGGjxOJUVnP3tqn7xTg7xJ9ebNPvA==} - '@libp2p/websockets@10.1.21': - resolution: {integrity: sha512-2iItZGEfTlGFUEcFCghtlsIiQ+fBowopysBB/8ya0MvZkRic/6o9oSklWT5pWDmXtmqmbp1Dko/iLcBOhDOgFw==} + '@libp2p/websockets@10.1.25': + resolution: {integrity: sha512-3jeTNh8Tgz2LGPapH/hlHSnfRATJdv83qGnQ2H4YDXOJQ20iToIC4unn5MD/wQB5zjhGY5Q7rM/2HSRNIDwSlg==} '@lit-labs/ssr-dom-shim@1.6.0': resolution: {integrity: sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==} @@ -736,12 +736,12 @@ packages: '@lit/reactive-element@2.1.2': resolution: {integrity: sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==} - '@microsoft/api-extractor-model@7.33.14': - resolution: {integrity: sha512-HdFzU14NGrm04SxA8CfEByX4R1S06o08qVCrGgIepb4miUgky771TwiDi2b3/ZJSQ1QKEJzq452MW09zenL19w==} + '@microsoft/api-extractor-model@7.33.15': + resolution: {integrity: sha512-UpCnItIJwu03iNTWtJVKv8Qbf0MXN7WLQZUail9cpAQmnZiIX36YPRRoRxz0pocwytzUpmJhstsLkyW5tsaHBA==} engines: {node: '>=20.9.0'} - '@microsoft/api-extractor@7.59.3': - resolution: {integrity: sha512-L1w0pe8/Af3PhjT7JDSsYZAtwFQ3l5pw7QjiNiNFpHA32nvvwYpvHWPedu8ulaJYiNWdKKq7We0FLSfZt0mbFA==} + '@microsoft/api-extractor@7.59.4': + resolution: {integrity: sha512-XqseDKIw736qlhQwS9SOpbY4veOiP2Nc7YiWmgXXBmeA3kY9qGXw+Tu7DFpU9FvXywE1z8SvLJKUVxFpcX0kig==} engines: {node: '>=20.9.0'} hasBin: true @@ -763,8 +763,8 @@ packages: '@multiformats/multiaddr@13.0.3': resolution: {integrity: sha512-mEqqJ4r3a/uuFMTpRkU316wGNIDQNhuVWpm+ebKTQeYsfv9jXbPONWM6VVnj3KGUrwfsX7GZOyp4TFqEA2SPCw==} - '@napi-rs/wasm-runtime@1.2.4': - resolution: {integrity: sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==} + '@napi-rs/wasm-runtime@1.2.5': + resolution: {integrity: sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 @@ -848,133 +848,133 @@ packages: cpu: [x64] os: [win32] - '@oxc-parser/binding-android-arm-eabi@0.150.0': - resolution: {integrity: sha512-oQef2Zu4Prz1KLKznz3HqZzU9uVoA5PMoDZuuLmqms7hKmKSAPzlaMnLllJq3t+rgKmfJJ2siPrpZfFrW06btw==} + '@oxc-parser/binding-android-arm-eabi@0.154.0': + resolution: {integrity: sha512-sDdEtDl7vKdCvf54j72RJbowE3jCmyRz/+oOB6IAwQxAHZ0eI+Dcj4hvVnm0b9Dy31plUkdmfds9C+/Zt895Tg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.150.0': - resolution: {integrity: sha512-B6ofpoFiAUwIZ0MJ2IgHPvZK8FAtL4qzSZRwOkAKIfxEobE1mQC8nDdiFZj7pUaJiVUVCsfkMsBJKedzO8rZvA==} + '@oxc-parser/binding-android-arm64@0.154.0': + resolution: {integrity: sha512-UHrDPELzvWZoVkIDdSycj4bzcTMCJG3IbN++mSUgVBaUtNtWHjQ98U6Vz5bpF/1Ic3FYJyYhMr74huO5tVvpZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.150.0': - resolution: {integrity: sha512-J+9IHKzx/bSz1JetOfD4zKXSK9sOm4/a7+0qomJODcTL6JsRXGeV/ZdkAPSIDydfFmWzYCraMlQEosSZEyBYkQ==} + '@oxc-parser/binding-darwin-arm64@0.154.0': + resolution: {integrity: sha512-mokYzajOSXxtSRDWCdHARGdntrKH+rZZ24Jzo8AtafyNzz0NARmpMm26Tc5B6qiGrr6UliWibHCOif1qRN2vaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.150.0': - resolution: {integrity: sha512-v6IPfcAcSYrBWXV5Tce1DmxDMXLhEYpIIWiRFPJopgCVscZdLaV4MRQOUxvL3usQlw+yrwYOjBFB9IwBx+jUiQ==} + '@oxc-parser/binding-darwin-x64@0.154.0': + resolution: {integrity: sha512-WbtUBrclOVItWfLRSvs+Z/WLtXxJ2Ctv50PyuX894HzDN5/e0qzxVpTNPIVMzOerBhgKtFsSMcfxlYIAbvdVgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.150.0': - resolution: {integrity: sha512-AoR/4jD02HET0KO0yNT4nbTE+XJUxiO9jB1X/ycEjUE3WrIJ3IjV/Vf+gskhWLcqqeXfvNnkDtBR7epllAm88A==} + '@oxc-parser/binding-freebsd-x64@0.154.0': + resolution: {integrity: sha512-YooHZSLawOe2fqm+lDdG8oAaQh2NYV/RMYTYzWRLy72stm2BgE9O/8Al6kFENjkmzyyBccDLLBirGxVtpzQfrw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.150.0': - resolution: {integrity: sha512-A/hycCFjLUrCmLoL5O/vBp40ohlaXO1Ta3v5hqYZxicYFs129wZmgZJggcW4mYGYbZebQLhup+N8JjeQl8qwyw==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.154.0': + resolution: {integrity: sha512-hKOwhZbrXdTwc4bGVfbLCXl9f2swl6zWdISocLQSNX9MgPmwHE3qGzOUkCrkuGpwdCVHPnkfOwsqTuYsrP5uNg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.150.0': - resolution: {integrity: sha512-pbqahg1Pkz7J4RKmXm30s/iQu99hv64ayXCu8P4p75HcEH5azOdR4eGqiB6lFGkFR3mMpzaYsSKLkS8oJbjmeQ==} + '@oxc-parser/binding-linux-arm-musleabihf@0.154.0': + resolution: {integrity: sha512-tnjiooXEU013349O/yxKbF5Cusp1CfHWQ8kYR8tGeRzR/P4sOpQGQo21fsS71M0fMD6ESLq+lbvXFWi43PuKeQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.150.0': - resolution: {integrity: sha512-HV11aRbBQGwqv8bEo+K/6qr88uB4fEe1mhXncMhlVCrj+WpBSraxrUzHaPVmeQRU6x6x8v/3DuCbbo93rpp+fw==} + '@oxc-parser/binding-linux-arm64-gnu@0.154.0': + resolution: {integrity: sha512-Cao2kj+8d7BT6XJU1gV9eVQjV+Cr+e8vQm3tddDRZiM2hHrMDxwy3j6t+ofaSl0idyuPPCZ4AlpmQoj8yOT1QA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.150.0': - resolution: {integrity: sha512-k6pVkJqALwtEuP4zukVhGRhdIy4+ofChUIUUsAHHyqDZlNsknmel3JjbggrJiWGaes6h/dIcWmEXsKW4SmK9oQ==} + '@oxc-parser/binding-linux-arm64-musl@0.154.0': + resolution: {integrity: sha512-uiwA0V3q8llWA7/8r+a9BBjk4j5YMDmi6wfOsyQfGOJMQSLHEiZ3HI8ulea766ykUa9wJFWk9XWEl4uJrZLQqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.150.0': - resolution: {integrity: sha512-tEFg39mw/rHO5n8GK2DR4ZMFfsPQZtnQIPbsIpjoQRomJc/2tRfsCSmCT6gNit+NZGoeJG5aH9ATDH5bf0WnoQ==} + '@oxc-parser/binding-linux-ppc64-gnu@0.154.0': + resolution: {integrity: sha512-LICfN0Xs4Zdko+bJy6eOAEQojDuIR26suF2JtOsMaXjgbCrpRSH7/NCvJhY13YvYBx12V6hnwrL8n0lk0rbNJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.150.0': - resolution: {integrity: sha512-0JO7IFkoek6HqV589Menx3hJySNXi6quRhO4tq2P7kpEHKEXoDATnoPVUpn5B7gDH2KLkdo751N0uIrGJFCTCw==} + '@oxc-parser/binding-linux-riscv64-gnu@0.154.0': + resolution: {integrity: sha512-gbbSYxLF8ssRbQ2qQPy+2EhGNwNH1bAoRdkk6cnWaKHqmCikpSIPtpXjFbCCtjTi0uojqOM3ghFQwQPbDQsU0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.150.0': - resolution: {integrity: sha512-7XPzREnyAS5wHU9aB+49Uaqgoo1gVCklHc3DRlc3fJy2tXD/eAJFN1QFz/crj+Ulup5P1+axNREF+/RGaB/IRA==} + '@oxc-parser/binding-linux-riscv64-musl@0.154.0': + resolution: {integrity: sha512-nSnRYYDLCcRVjSQzF3g6rKqCNYwo5o+aQgnn8BBXfe+ofCgMGlGqkfRyvXm6ptZvoxNkkWtLlqM8W7Xc3j6ZnQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.150.0': - resolution: {integrity: sha512-7n7ZxcbRWDFaTdyj8M8p0O9OfzoMKm8O6syBAIgcSutbOALq0Bb9G52Me+XH0anMLZV+NgXc726gqgG2q39vcQ==} + '@oxc-parser/binding-linux-s390x-gnu@0.154.0': + resolution: {integrity: sha512-BxBQoJKtzRQgZEKQIt6CDUm8RGKC5T8Qo4576yDa5/xgc10X3fBDItMbRabzLtbUBfTqKLl+8AVr/H6CF7W22g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.150.0': - resolution: {integrity: sha512-Vx0GSA9ZCRTUiczoEQnIIyXkMvtEY8uc6IiwLQtMe5ci2sXPqjrry0Ek5fsPP1k2kCzkML3ow9UOOEgnEDi7Bw==} + '@oxc-parser/binding-linux-x64-gnu@0.154.0': + resolution: {integrity: sha512-/whkust2vYy+GjRUVL5cWaJmEu6jkdFfo5mkxgckyeOX61eMwo4iBoiwzeJZeMWAdzb/XOtQyLApHhFht3sOWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.150.0': - resolution: {integrity: sha512-ii4/9m3viDLssMnfXU7/Pni/3nYplApuGayceX4qsVGaqqQJCx3tHIH9M/HWIeSty5i8LjS21zPYT6lVIkwLxw==} + '@oxc-parser/binding-linux-x64-musl@0.154.0': + resolution: {integrity: sha512-EXURTyW9riw4B/kZnnE+58emAtw6+3VEszQfXUZkRqGaKIcmWDYkZtKB+xY/blHvuZ+Qy/fDclc31nmUCgtkSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.150.0': - resolution: {integrity: sha512-ZtoxX5rez36ZWkwtiEhjkCPnlTPoQ2I7lIL0IYZ1yjxMYohbvoOjBmUIZzrf9W/HouONq0omIfTeCWEY+R380w==} + '@oxc-parser/binding-openharmony-arm64@0.154.0': + resolution: {integrity: sha512-ZRFooyH3qsR6vuR4jFGlG3XM36490SvvXtNaUahBK4zHpooMdTHNaOMtGGJI0EW38m5hi4rOco9kw7ZwCIp28w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-win32-arm64-msvc@0.150.0': - resolution: {integrity: sha512-VqeRb5JX/bKYBrff7TUDvJyKY0914UzuCkuXIGxJS4FUmvMNfqkCbc7Sq90iMz9DlmAtlggwaBYQ9eg3h3ltiw==} + '@oxc-parser/binding-win32-arm64-msvc@0.154.0': + resolution: {integrity: sha512-U0Vp+4lvwUa/PnOCJTZOjydj1rX2+VLHz4Y2vSFqlN8/7LTiURgD7z4uQ9yNv9O/NlU3mELBnPDlu7aaSYG1zQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.150.0': - resolution: {integrity: sha512-EPqJfeZ4Pgg2BJSsCV8GozxV0FDltRzpVtGVa1r2noJu1iu+opOw3gtBWXwIo9odCT/MdFfyHxdy0/CRqs3OqA==} + '@oxc-parser/binding-win32-ia32-msvc@0.154.0': + resolution: {integrity: sha512-Hc8QgsFY5eUUP25we8TISUruibG2cDt0H4IcPG9RKdabb6odkCzIqjV6Gk9beGWGuOwMVCr81H/Su1q363LCCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.150.0': - resolution: {integrity: sha512-n5YMzbqwPQqozbkrexi0lNZrUz5cnPHalYpFWe6Dau7AmKIWNo+y24IwzDuZEQtEdUHuKhXmMMih/MPjOI+CMw==} + '@oxc-parser/binding-win32-x64-msvc@0.154.0': + resolution: {integrity: sha512-hD7judkUMA/hZPoamvKADs6+an1smp8UTK0aMYRijkvi00K/1vl7vEtmyn2JyQ9S+vibtnfcNzxqTLGyJUZCRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.150.0': - resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==} + '@oxc-project/types@0.154.0': + resolution: {integrity: sha512-KYOUGQFlLWR+s4QMV2Q9ko38TZm7EdO87Qm7rvZLqk/webse/cDjtyxKhg/47l0byCbs/k46LT8qc4PKjAikzA==} - '@oxc-project/types@0.152.0': - resolution: {integrity: sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==} + '@oxc-project/types@0.155.0': + resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==} '@oxc-resolver/binding-android-arm-eabi@11.24.2': resolution: {integrity: sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==} @@ -1079,174 +1079,174 @@ packages: cpu: [x64] os: [win32] - '@oxc-transform-react/binding-android-arm-eabi@0.152.0': - resolution: {integrity: sha512-HrGZlhhyJUxz5tDWnsBliNrlhSVxM9lLF468EKab1uBBUMbMzfwHdO4aOHbI8x4EbI/gIzpMXqJbtWRwBLdwZw==} + '@oxc-transform-react/binding-android-arm-eabi@0.155.0': + resolution: {integrity: sha512-X0gdaAcnVLdTUduUdsJ7pRPDpTwhiHRcq8wOC37HXMA1L5XaHbu/zQkeCmb84CChiIvRiQqHF6WkO8DLl62yeA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-transform-react/binding-android-arm64@0.152.0': - resolution: {integrity: sha512-h+LtkA/nSQsfZdCe6c3F28236gIZhpl3Bu9MjwEI7X0J+CGpEEShmZuXw5b7lwqXQnhr5l1ZIIZ4NA5tU5FW+Q==} + '@oxc-transform-react/binding-android-arm64@0.155.0': + resolution: {integrity: sha512-OtYUiF+jniic0JVMoyZPABnSckQUjDJwIyawDCjq8dM5f0bTDvURKgbDJrL7tR+Z86xvdxkvzwtqb0Xb+HlrBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-transform-react/binding-darwin-arm64@0.152.0': - resolution: {integrity: sha512-EycvN1vJ5gjer1+AD4Czi/Z0gpD4ud/oRbiwDV3BDOiuN5PVrR5Dz0oqkoKtE+/eKK6QqygEtZrZzc8ARJkLLA==} + '@oxc-transform-react/binding-darwin-arm64@0.155.0': + resolution: {integrity: sha512-6EjLyB0XcCaXDWS8/q7QfMdmEGkeI11L9dtKu7Ju3Pl0dRKLcwXVdzdjGP3itzHy4RDbEAuVlCwO6lfFRpkiWg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-transform-react/binding-darwin-x64@0.152.0': - resolution: {integrity: sha512-5YUXuvxXi+7GmZPho95qteMlG8WgIhCbpYOug8MhyuTZzYtrr8CDBsdMzheBgiRNj9lPkFvduhQ4MK+QVQ06CQ==} + '@oxc-transform-react/binding-darwin-x64@0.155.0': + resolution: {integrity: sha512-n80yhAy3DNm3u5OqJDpNf+S7gaNpWyICSCoiTt6+oO9YC9oWkm/ywc12Qwrg7wCFtvniR64w+hWjkxKjETdscw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-transform-react/binding-freebsd-x64@0.152.0': - resolution: {integrity: sha512-HZrLNspvHfOo1umeCkeskU7UBEXWjuQSoBGidHwjUQVOhsbDNp9k3oihXenEBFgShPycLEC11wAZSD3DtiIkXA==} + '@oxc-transform-react/binding-freebsd-x64@0.155.0': + resolution: {integrity: sha512-zZH3IX7fFrQA+zmy/amDrAe1OxqJl3vBmh+yROvsfPPaUWSn8+0Z451F9tMGhQ1iL6miBcDUHChBOVjfaJXBUg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-transform-react/binding-linux-arm-gnueabihf@0.152.0': - resolution: {integrity: sha512-qfPsGd0sbaUeLtQDojSf+reHYMBHWX+4mdq1lsARkRzGjoHCvstnTr+nKb7sTtGsdPYhbSgbPINI+h1V+KSF5A==} + '@oxc-transform-react/binding-linux-arm-gnueabihf@0.155.0': + resolution: {integrity: sha512-/WnW+j/lVYwNHzaFK6uONgbC9M1S7nTWV+ONe7F9pDz3xCfvhTeWTDrqN84/vrPbxT7Xh9j3PXVnU2cw+L2NHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform-react/binding-linux-arm-musleabihf@0.152.0': - resolution: {integrity: sha512-lYpuYevetblWvNsylYb3BxKbXd2t+BhUqwIoa3/98zmWeLbB+VBfxV8APdZV9gbw2W04HknXKU386pt/5duvfw==} + '@oxc-transform-react/binding-linux-arm-musleabihf@0.155.0': + resolution: {integrity: sha512-VzH6NX11/y0S4nhvYRYWP54G7VPhTy7MoHiAp1nOsRIOaGssUATn1/fLglgz2EgJmxr5AHy1SK9dDd/PUmW5iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-transform-react/binding-linux-arm64-gnu@0.152.0': - resolution: {integrity: sha512-8eIPBuC+1WpE3Z7AiieAVhbkt6PLEbT4Rnm4SeVOMvIUKTml+s2PSzMu2qAUtFdIB4SFVshTj9SliturT3GHCg==} + '@oxc-transform-react/binding-linux-arm64-gnu@0.155.0': + resolution: {integrity: sha512-mLF5v1yiJghvDG5wUXWv9P0iEItM3EuFgSFfqdyY134fUsU5f7t5B7nxLr4T7DrEUWhs1+SwKNWZA+Mv4HSFiw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-transform-react/binding-linux-arm64-musl@0.152.0': - resolution: {integrity: sha512-rv4dvLnqhgen1tqb7eoB/fNfD5fq+Bf3RTH9YuJ+8SNdqOk2TjAXFUdve0XtjD9Wost0fQ605bVXVrStVY/IEQ==} + '@oxc-transform-react/binding-linux-arm64-musl@0.155.0': + resolution: {integrity: sha512-EkBHEZKR4kDTU7+/mdleIu6VREm0zsQwDzQXAsMvbaRsmy8RkD8tOiXPNh6vyyqtahkLhEdj4vBs9c9h9iO66A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-transform-react/binding-linux-ppc64-gnu@0.152.0': - resolution: {integrity: sha512-zP9xCGiJFyHkP6B7UtVQ99nfYXe8e7eqLqZv0C+Zr2jlhNuLMBsB77QuRczlhtRQqncRWzBI8BkQzy/Lo7GyaQ==} + '@oxc-transform-react/binding-linux-ppc64-gnu@0.155.0': + resolution: {integrity: sha512-Iz26Sm7q5tO2h+da6leks3y62raTyZp32n3FX6WydxsecbFNzKpm+rKNPoti9Syd3u03rmkYlS8q7tPQMLLjUw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-transform-react/binding-linux-riscv64-gnu@0.152.0': - resolution: {integrity: sha512-INC57B7OIgMEoUe4NquHvg77tlYL4E6aMglhKs3FY5k5oB9/+hd2y0Xg1DVco5uDtkgilnSQRM5P0Ptz7CxXPg==} + '@oxc-transform-react/binding-linux-riscv64-gnu@0.155.0': + resolution: {integrity: sha512-CvKMO4MNKLdmy8Q75r1rwBz+VBcSYDObCyQaJOLWAwJnsWXiV7I788N4p2iWUYPWPmfvUd6d0UrrRz5ma5CCnw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-transform-react/binding-linux-riscv64-musl@0.152.0': - resolution: {integrity: sha512-4oPU+QTufHexk7GOGe/JapxAfYlU5EXUsN5J0IsBC9s3SsGUTTjpmXQYiDe4dkX5/BGerE+9mYDG94jNwuk99A==} + '@oxc-transform-react/binding-linux-riscv64-musl@0.155.0': + resolution: {integrity: sha512-OfYtP9jEMZwdnjPLVrrMvy3CQSqwdQJw6Q6YU23fObDECt1lEe2o+TJ6nFgDVAKhTl7pc9dca3vGXRgNfiBfoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-transform-react/binding-linux-s390x-gnu@0.152.0': - resolution: {integrity: sha512-xt4qy3y+9s32F/pz7ymaf1VfDRI+cKwDnW2poFID2r51dC/gln3QGGDaqv2XLaZGQT5o4uGwIry+9CQY5AHNeA==} + '@oxc-transform-react/binding-linux-s390x-gnu@0.155.0': + resolution: {integrity: sha512-u5USLM5psVaNX2KEzTwfcKlzgGI16EY7Iod/Z/7Fw9FwBQiN+DUyhC99NL63aJ/Qyq0N5HIG4Y95DIEekc+EfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-transform-react/binding-linux-x64-gnu@0.152.0': - resolution: {integrity: sha512-6va4CIMFzejx2i8KhLAYuunai7b85vRpZSLvuBR4bK2ywuTb6V0kJDFJwiKjWHQRNzEvRjbl887+jqa1rKl8QQ==} + '@oxc-transform-react/binding-linux-x64-gnu@0.155.0': + resolution: {integrity: sha512-Kbddg5Eu/B+l6xW0CS5kaNNRK79IWu7o4NsDkn8SMz7k0N8CHV5watP0pscPIUuxcknBZkQxGqQ+b+qV7B18vA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-transform-react/binding-linux-x64-musl@0.152.0': - resolution: {integrity: sha512-l1QfEbsREILsAWIcmpEsEu9PKjmN6BKmE1Oe97QJDUjeJ3z5lBn5g2feC3nof3JJc5SsG8BiY4F+cm1yHRhmeQ==} + '@oxc-transform-react/binding-linux-x64-musl@0.155.0': + resolution: {integrity: sha512-hFZ69Mh6rZ1XeqSv4njgAB5WgKGBSTgH596EHusayzH+jtgczsMPK81k4SWlguKxrrzIqezLC8pyzhgruaNQGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-transform-react/binding-openharmony-arm64@0.152.0': - resolution: {integrity: sha512-UmdDypmnG1WSZxzQXd8GfhbZQq//XsvMu5/mm+I1uCW3v+9UwpD1J7H+jg91W4xtRY1c0qAhUoMsZi+6vB7Qug==} + '@oxc-transform-react/binding-openharmony-arm64@0.155.0': + resolution: {integrity: sha512-XikOLTZAchqLWNep6ptHZnA47EGlV0s7zpCA7iPRuiM/V9xfgqBbolryFu9/lNjoN6twmt8k0aRuW0frxSTVNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-transform-react/binding-win32-arm64-msvc@0.152.0': - resolution: {integrity: sha512-JgETFwNiqqB0BfTKMamnVF1zBMnburMoeqnyBgWwKj+JdEqgFqO/0G/O+eWUfNW4xPryjh6HGuq9eNHZLRYrjg==} + '@oxc-transform-react/binding-win32-arm64-msvc@0.155.0': + resolution: {integrity: sha512-3aJKnNR9dBcSTfrrB3PxaYP5N1Myua8DZSHhe4SEp8M/SusvxdaK6bf9h6h801UsQB66S75fk4iTyEShLHZztA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-transform-react/binding-win32-ia32-msvc@0.152.0': - resolution: {integrity: sha512-j2oFkpEG89D38wVY43OtU1s9QUmq0C1+Dpp62PB+SDDTAMsUwU2HofnhK3h9iYTAs7wH/6YqzWOM4XjQ6g/Nmw==} + '@oxc-transform-react/binding-win32-ia32-msvc@0.155.0': + resolution: {integrity: sha512-i2ZSZ79dSgVvC+Ksxju3/4p9+6vXzbeY7iOoBreL4mNOCjQziYChdv5Z921V9AZ4E4LVnD/NoHpez6M8T0Ga3A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-transform-react/binding-win32-x64-msvc@0.152.0': - resolution: {integrity: sha512-iFxYqUqkN/8D0migw/RVZoEvVcJhZ1NzJuRBal0Fgt7V1yJed0QQIHd719kL4OrVmX5f5u2tNZxJB1UJiQ0D/Q==} + '@oxc-transform-react/binding-win32-x64-msvc@0.155.0': + resolution: {integrity: sha512-lrPIzcUHw/hB/LuT/G639+IrPCvvMlthF3xCE9grz1IbsSk+22sb5zyCxTvmpBxZR7/E1ckwZdnw7AmpAd+7Jg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@peculiar/asn1-asym-key@2.10.0': - resolution: {integrity: sha512-1R8xUTeqcUTSMLFTTCzJyFuKiq3y25EQKs9DezUetJ8qMqbJyxo3XkzykiwwT/Xzlt5/vRzS/sW4M1r+pq1FTg==} + '@peculiar/asn1-asym-key@2.11.0': + resolution: {integrity: sha512-r2957WdSZle/Zt4t9og7OMQYXNJ9/3ANXVtFwLCDJuHORlBZ4AFmDt1Qee0CzyTbHQg4ZZApBGEz5/6cFsyCRg==} engines: {node: '>=14'} - '@peculiar/asn1-cms@2.10.0': - resolution: {integrity: sha512-CkX0H4NCIOMHOU3rh2xXZywinYZ/EnJlaOlJiGI0e5L4XjFqHf4iH30LMbXWChVppdA9ljbanjtzQFOhDNfTWg==} + '@peculiar/asn1-cms@2.11.0': + resolution: {integrity: sha512-SlAiDoT/Cd8qaNmbTt78gqyaEvu2fQd6ML6KWJkdjXGrgDKnHHrusVkfQUelkfinL2p665IIADb0JBixtT8W1g==} engines: {node: '>=14'} - '@peculiar/asn1-csr@2.10.0': - resolution: {integrity: sha512-jTPTr/9rxKM+niQLMF3jiAMb0lWHUhUHIuSOhdGCIfpB4FAQYf9SoiXOgxP8bS/68IB+bj+1OHvVnDVCQfVUZw==} + '@peculiar/asn1-csr@2.11.0': + resolution: {integrity: sha512-M/ED0yJ05qMK+UADPKnIa8vhAeewOJALSxTAZB7RQ/batRHhIJZkwznCcWAbFO5saHJ1yEQ+m4lncEcG9RnQSg==} engines: {node: '>=14'} - '@peculiar/asn1-ecc@2.10.0': - resolution: {integrity: sha512-GFd3iOjFrWX+QWH2R2dO5QSJyyRGv9CIBKtRlGlPNCvb2RvmCbBDexe91MJgV76c69d998Xsa+CvuQ98seoiPg==} + '@peculiar/asn1-ecc@2.11.0': + resolution: {integrity: sha512-jj1alGEKev7/un+cI+exyVK9m31lmP7cCBMCZuCb0wkFQH2zmKmJzNiG4wqXFNzlcP8timHLnzf3lV3OxBpb/Q==} engines: {node: '>=14'} - '@peculiar/asn1-pfx@2.10.0': - resolution: {integrity: sha512-1y3QK9ZH1IPleAMmRoJlPS10eGkAWnULETW8zDFNUK1ffqpG7zmDY+kYBMYQgwlcQZ2iitLm2z2EBP0xzRXpaA==} + '@peculiar/asn1-pfx@2.11.0': + resolution: {integrity: sha512-ykSAWRu8KkmzU8LRpk9ZQC3zuLmBEtoSMjIv9XHVamD5W7amqreV5wttKqnvtjWOzzSJQxA/HVT8/tHwpEEGSQ==} engines: {node: '>=14'} - '@peculiar/asn1-pkcs8@2.10.0': - resolution: {integrity: sha512-Ri+BZT9bnwqlHWmhs7lvWjvJRxKev2hA2+4EbZajgeYWCbR8hyv0znF4DhsFouOhMj2nSDV/iGJ6DMQtwITnCw==} + '@peculiar/asn1-pkcs8@2.11.0': + resolution: {integrity: sha512-lragjkjQGnQ5luxC+sxoAfAO/jBiQ7hOEGlDKJUk7MC5zY3AzjB2DU0GyPUH1Sswdv10t7DurY0zylOYMLb88w==} engines: {node: '>=14'} - '@peculiar/asn1-pkcs9@2.10.0': - resolution: {integrity: sha512-XIXsbDQFezYk6fudczkuvawkRD4GNpISGCqfYhdkJlvcGF/RFknU+0DDJagOaJqBf+PdPzk4J9oMqDGcvfR9HQ==} + '@peculiar/asn1-pkcs9@2.11.0': + resolution: {integrity: sha512-gDdFjpqV0weJjgNUvueUVf4D8uVbpq+VbG0TsxLAY2QGljAkJyL9qwQ7avol9j0jaYSJ7Ey7v7RZp0M3GTcQSA==} engines: {node: '>=14'} - '@peculiar/asn1-rsa@2.10.0': - resolution: {integrity: sha512-4Jvmwlh3gZAhNZ4/u7JSyLuce9hofOFZ4o3PYKAccCImGnyaT5CMym/ATgvAvqpOYFNW531oPZvJlEBhJy9VfA==} + '@peculiar/asn1-rsa@2.11.0': + resolution: {integrity: sha512-S2sBJmbfI09Kzdt9cEhE6pDNjHpVTkURs+811+PxS8AvsTLxC4woMNRhxHYaIbClkkNfAVt0tZxJdINVfUmzuA==} engines: {node: '>=14'} - '@peculiar/asn1-schema@2.10.0': - resolution: {integrity: sha512-GhokD41lV4gQrrLYm3wCkHfBOnJrnhDMgt4XeMW8gzfE1UdJqIuSwsE+ggf82XBjUXRJylcm+KIGQFa4utIVLw==} + '@peculiar/asn1-schema@2.11.0': + resolution: {integrity: sha512-8xh4avo53/vXO6UEv9yaoJ83hY581geaLTygf61NPIXP5AeIZCPjJhpTaYU23IZkG+NpLN/C9FYzWp7hphIT9A==} engines: {node: '>=14'} - '@peculiar/asn1-x509-attr@2.10.0': - resolution: {integrity: sha512-/85GtKOKmgvuSJNlaFfwGWNdRSZZ+hpF02NyM01XiCdzpaZONiBltDyfluFPvFx966CR+ZHNSG1jniwpy07oGg==} + '@peculiar/asn1-x509-attr@2.11.0': + resolution: {integrity: sha512-Fgvnd9REmLxEj/4cbDP54dNUNUXkzUksXLqEHqs1mHBuSRjSTCUSPM/WQIZYSvrdG7ND9CX1AQtPoIBekhgQSA==} engines: {node: '>=14'} - '@peculiar/asn1-x509-post-quantum@2.10.0': - resolution: {integrity: sha512-cXKcZ30wKbUkRK5RK4Z3W1imewXvHAB9apEAuIqJ0OOkOQCpJrwLOuN38QlsEXqOI+3gtUv8Kf3UZohUmCbf3w==} + '@peculiar/asn1-x509-post-quantum@2.11.0': + resolution: {integrity: sha512-K6EnquTX3xJ2G+uLPFH0jVkh7W8y6eTzoCxvSoXAj0sWS5uvVB2PEvpBPdzY4+ytaedUM3x9ZVgX0AZKb316ew==} engines: {node: '>=14'} - '@peculiar/asn1-x509@2.10.0': - resolution: {integrity: sha512-ucNVg8+ANveTpMN3fy9lA2alryONdXc2A4cEG2hMniWbvQt+YOZoe8BI80YYNO8FBcuDY1qbDQ4uQGQVraHxGA==} + '@peculiar/asn1-x509@2.11.0': + resolution: {integrity: sha512-J1sHAwGNlk+8J+FeR1eLVc6Gq0T9f9ITc3HWyPYgJraoW6U8AJuQiWVJ3SCEpltfTdpOY7fHdHT5oKAsbK/jww==} engines: {node: '>=14'} '@peculiar/json-schema@1.1.12': @@ -1260,158 +1260,158 @@ packages: resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} engines: {node: '>=14.18.0'} - '@peculiar/x509@2.1.0': - resolution: {integrity: sha512-IYbg1R03CSQGWwl24kGyqrdVtixNSbRaDvBg1r5wyYjTP+VwPQkka1BzTgU5+vxiuwqg04OxdvdJ1xYYFIdUSA==} + '@peculiar/x509@2.2.0': + resolution: {integrity: sha512-adpW58ySPQMOUPv8pTKT3RIyCFqfUFt8X05ukPdtkQToXDVr8dMtxuenik1yx8tNFTbpApWsM/Hi5SzlIx48+Q==} engines: {node: '>=20.0.0'} '@publint/pack@0.1.7': resolution: {integrity: sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g==} engines: {node: '>=18'} - '@react-native/asset-utils@0.87.1': - resolution: {integrity: sha512-FeFnbn9ENPs7IVBzZt1bBWfiRGvT4q+CsWwXGFyKVW/1ol3ylBRuTtXBGHIAmcNN4fUR60nSXsCN19pzNHkPgA==} + '@react-native/asset-utils@0.88.0': + resolution: {integrity: sha512-Bj1DxQt5f4OrjdlgSVkZT37Z3hx5hUIN5AUDSqL/e99vgtTcqj5vnm067epZL1EF/QiqsniZO8Q1GSkItOakDg==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/codegen@0.87.1': - resolution: {integrity: sha512-qbaqEdlUfj2vRgvWTpMoNgHnEqAhAYJLUrpGkb0WC9n0kdtqUvgigpz4bDktZwolM9BemXwgGFgyiAnbs3t0xw==} + '@react-native/codegen@0.88.0': + resolution: {integrity: sha512-SAGg+XfzsrPiYTscbKa9bo2/H2ei2TjyxW8RTMq2Ps661kRK3AnmpMGVfrEFshEMr3FGEbuQIvj86X98kaXlRA==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@babel/core': '*' - '@react-native/community-cli-plugin@0.87.1': - resolution: {integrity: sha512-aGBae6v+ngy8fIpU1EOaVxn/8DOgmJNphEdn5Eb0wTchUCxr8bDjpTJYNdrptyn3qI/elk8r9agQ2OBaFvrRlw==} + '@react-native/community-cli-plugin@0.88.0': + resolution: {integrity: sha512-WrQdXbjVt1gwAay8ZzYtpOi9ly99ksJ0VMYFdVcMe6nq3vtiRgqKRpHgCdN6ySIbtr5o+aJ+Vr7OTDY98ec/Ow==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@react-native-community/cli': '*' - '@react-native/metro-config': 0.87.1 + '@react-native/metro-config': 0.88.0 peerDependenciesMeta: '@react-native-community/cli': optional: true '@react-native/metro-config': optional: true - '@react-native/debugger-frontend@0.87.1': - resolution: {integrity: sha512-RNm7soJB+8YSauLnsCCylA1eVfT6JWaDTPUEF01uu9YwDyZ7remKlZbXtmVbtscbNGcp+hbI4iZUdVOpQWsHuA==} + '@react-native/debugger-frontend@0.88.0': + resolution: {integrity: sha512-v5cnBaaWhDRPcQv8EC20zj53jOAKH7u2wnzzXS4JTNu+diPC+cA2+kC7rq3eKI5vGhlAcG2kDPoViRuC0AY0oA==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/debugger-shell@0.87.1': - resolution: {integrity: sha512-eNbKjcnseJIjy5XCDwyhKOT1ngOg3Dv1fVxTDtnVFqdqjqsbfY4v9JuJG1RZJ7+mFoRRe05HE8GSQU8B7n5xwQ==} + '@react-native/debugger-shell@0.88.0': + resolution: {integrity: sha512-p82zT8ZKNx7nIm/8zf8pi55sxm5KQBm8td47kzoJysTdqHLyPsRMUvDXtvCJIWadHSv7RJ6t/yiCc+IoImLBtw==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/dev-middleware@0.87.1': - resolution: {integrity: sha512-KgvAGUaVl6/XrWFAPK8e0ojDRbsdBjr4bnwyn6PC3CwxPQc5iv+i7hMoUwYS8ORSkHKfjt+cV86/mBQ4lG8yfA==} + '@react-native/dev-middleware@0.88.0': + resolution: {integrity: sha512-sHLxVHOwfkF672ZzMepNh4d3IKbrZy3qXDKWSwN5LC5VJkzzZ5FdmSPP4N/CCn2pcKJ4oSqvojXwN4De3Xk92A==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/gradle-plugin@0.87.1': - resolution: {integrity: sha512-bZ5X2BNxaSlfp2KlDtUM910QqW9G1yTIeZXghuv4ag8SAQLzm5Mf9j5GjJfT6ax2Qo2aRT15Vi3Tro/yLGJstA==} + '@react-native/gradle-plugin@0.88.0': + resolution: {integrity: sha512-4jPSKslOfJj8NKY/jv9qmWkxZYmqPyamoS3Vs0JOFxw9t4PM6L/ea0fUsjNV0LxC9zJlvWilPJOCTOf7h8wlyw==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - '@react-native/normalize-colors@0.87.1': - resolution: {integrity: sha512-8+AutemzX+a7cuKgTUyb7JUk3sFYgLyrSnlTLrL6LuW/LKDE+FYE8lJGWYhJPJcE51Ge1D8yRzxgQEdEFZtuIw==} + '@react-native/normalize-colors@0.88.0': + resolution: {integrity: sha512-eZCu3tGAQCfvMCPQJVY4dmoMX8ZZYBvqIGHX7lwOYyzNK+Dl8e5ky7ZoXub1Rq75oSrQXNNmSP2CDjNNXXZpFQ==} - '@react-native/virtualized-lists@0.87.1': - resolution: {integrity: sha512-qSZjeX3UJrDvyfjf7yc3E68rp1XnzE+5nu8ImklhkVC0+p/XiaHPb/KGkRqDdnQyWHN55BRYSsCMEwgVI6WRNQ==} + '@react-native/virtualized-lists@0.88.0': + resolution: {integrity: sha512-zpZIOAbobdS93edwHkNUdGDzvElNeQJqukRERRPns3/ucPvuMd2G4fYpmVJSVjhxtGCcLLB1PFndLYYfwaYoBQ==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} peerDependencies: '@types/react': ^19.2.0 react: '*' - react-native: 0.87.1 + react-native: 0.88.0 peerDependenciesMeta: '@types/react': optional: true - '@rolldown/binding-android-arm-eabi@1.2.12': - resolution: {integrity: sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==} + '@rolldown/binding-android-arm-eabi@1.2.15': + resolution: {integrity: sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rolldown/binding-android-arm64@1.2.12': - resolution: {integrity: sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==} + '@rolldown/binding-android-arm64@1.2.15': + resolution: {integrity: sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.12': - resolution: {integrity: sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==} + '@rolldown/binding-darwin-arm64@1.2.15': + resolution: {integrity: sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.12': - resolution: {integrity: sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==} + '@rolldown/binding-darwin-x64@1.2.15': + resolution: {integrity: sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.12': - resolution: {integrity: sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==} + '@rolldown/binding-freebsd-x64@1.2.15': + resolution: {integrity: sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.12': - resolution: {integrity: sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': + resolution: {integrity: sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.12': - resolution: {integrity: sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==} + '@rolldown/binding-linux-arm64-gnu@1.2.15': + resolution: {integrity: sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.12': - resolution: {integrity: sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==} + '@rolldown/binding-linux-arm64-musl@1.2.15': + resolution: {integrity: sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.12': - resolution: {integrity: sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==} + '@rolldown/binding-linux-ppc64-gnu@1.2.15': + resolution: {integrity: sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.12': - resolution: {integrity: sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==} + '@rolldown/binding-linux-s390x-gnu@1.2.15': + resolution: {integrity: sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.12': - resolution: {integrity: sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==} + '@rolldown/binding-linux-x64-gnu@1.2.15': + resolution: {integrity: sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.12': - resolution: {integrity: sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==} + '@rolldown/binding-linux-x64-musl@1.2.15': + resolution: {integrity: sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.12': - resolution: {integrity: sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==} + '@rolldown/binding-openharmony-arm64@1.2.15': + resolution: {integrity: sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.12': - resolution: {integrity: sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==} + '@rolldown/binding-win32-arm64-msvc@1.2.15': + resolution: {integrity: sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.12': - resolution: {integrity: sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==} + '@rolldown/binding-win32-x64-msvc@1.2.15': + resolution: {integrity: sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1419,8 +1419,8 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rushstack/node-core-library@5.25.0': - resolution: {integrity: sha512-JWd5MVInIQqTlujjqV2gO4aJi/QZvBdGCD5jQ4tF0Swcz1Ba80fP0dvxIYTaHawUujyQaCixtzzz9LM8bM26hQ==} + '@rushstack/node-core-library@5.25.1': + resolution: {integrity: sha512-ozoRDwIx3jStOYpx86rFyXH4SaUR+DVT6HubQ59avLplJkWXSm5InztYH7RrOzzq9PJXTdq9/+lKX06SfkLVsA==} engines: {node: '>=20.9.0'} peerDependencies: '@types/node': '*' @@ -1436,11 +1436,12 @@ packages: '@types/node': optional: true - '@rushstack/rig-package@0.7.3': - resolution: {integrity: sha512-aAA518n6wxxjCfnTAOjQnm7ngNE0FVHxHAw2pxKlIhxrMn0XQjGcXKF0oKWpjBgJOmsaJpVob/v+zr3zxgPWuA==} + '@rushstack/rig-package@0.7.4': + resolution: {integrity: sha512-SHZdzc9b2ptUb5uvRWALtAceD/QKZ4UAnZjcaKviTMPmHBnW14gs7XDocn6sDv2EqgnxxFPFkpV7/I3cUijCbw==} + engines: {node: '>=20.9.0'} - '@rushstack/terminal@0.24.6': - resolution: {integrity: sha512-MuSbKmMnP8CVEEBZ2kJpE22farLfxrScOrJ3pN3PoCOSaxemEhD/0H1lXZYj2PmKJxQMHb5pib5rVfIlOX/DlA==} + '@rushstack/terminal@0.24.7': + resolution: {integrity: sha512-o8J9nHOIwfYb0s0eG2WYhx7ed3YIvBXQHVFxYdXCmVdBOkTkdArJcgVzRS8ewUepmlic4nGgJPjKIVaNKSqEnA==} engines: {node: '>=20.9.0'} peerDependencies: '@types/node': '*' @@ -1448,8 +1449,8 @@ packages: '@types/node': optional: true - '@rushstack/ts-command-line@5.3.16': - resolution: {integrity: sha512-k1L7MQQEuQ1v0rsQ8pRzoZ3NRsrvSifBguWlLnl2a5iWGTTW9E0/G/B39291eAf3zF45wheybuJ2onwB/PPsfA==} + '@rushstack/ts-command-line@5.3.17': + resolution: {integrity: sha512-pIwhWawZXAT0nTXwvcE/InQ7uaVAgSeIzILMb2mBrI01Hz1yEvxrhV2+DE2Fzux8aZY9OJTdLsI+sk9kZDuAJw==} engines: {node: '>=20.9.0'} '@sinclair/typebox@0.27.12': @@ -1556,13 +1557,17 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@tanstack/query-core@5.104.0': - resolution: {integrity: sha512-JrC2r/JQlXt7khBSdUpsgxNvybzOg+aITa+ARRMlP2AFo93Y8vIqz077rp+e61mJetSZ0T6AJbwW1JHer1vrPQ==} + '@tanstack/query-core@5.104.5': + resolution: {integrity: sha512-Q94gI8Opd+CbdVNOdj8ZCyV8WqLYitrDq1t96Xc8WZT6lY0r5iRnJLXYDxMex7EEf2v+mXvn4FcjaBKSxXZQ9A==} - '@tanstack/react-query@5.104.0': - resolution: {integrity: sha512-e1TZmDCQnWIfiDVryIHeA6Idj+Lfx1hORLOhXS/l5wcgvtVD4yYqbTDl378sGQKIi2cSgb0TEMC9cKK8GGoJEw==} + '@tanstack/react-query@5.104.5': + resolution: {integrity: sha512-RORgFe052U+93weaNuqg7qHq7vNVNzXN/VrXqD4bbAuQCWUqOl2lV5Ui9flWk5CVvMyL/Bh27QWhzwH0aaOx9g==} peerDependencies: + '@types/react': ^18 || ^19 react: ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true '@tybys/wasm-util@0.10.4': resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} @@ -1623,16 +1628,16 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.71.0': - resolution: {integrity: sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==} + '@typescript-eslint/eslint-plugin@8.72.0': + resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.71.0 + '@typescript-eslint/parser': ^8.72.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.71.0': - resolution: {integrity: sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==} + '@typescript-eslint/parser@8.72.0': + resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1644,8 +1649,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.71.0': - resolution: {integrity: sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==} + '@typescript-eslint/project-service@8.72.0': + resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' @@ -1654,8 +1659,8 @@ packages: resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.71.0': - resolution: {integrity: sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==} + '@typescript-eslint/scope-manager@8.72.0': + resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.56.1': @@ -1664,14 +1669,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.71.0': - resolution: {integrity: sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==} + '@typescript-eslint/tsconfig-utils@8.72.0': + resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.71.0': - resolution: {integrity: sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==} + '@typescript-eslint/type-utils@8.72.0': + resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1681,8 +1686,8 @@ packages: resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.71.0': - resolution: {integrity: sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==} + '@typescript-eslint/types@8.72.0': + resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.56.1': @@ -1691,8 +1696,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.71.0': - resolution: {integrity: sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==} + '@typescript-eslint/typescript-estree@8.72.0': + resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' @@ -1704,8 +1709,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.71.0': - resolution: {integrity: sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==} + '@typescript-eslint/utils@8.72.0': + resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1715,8 +1720,8 @@ packages: resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.71.0': - resolution: {integrity: sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==} + '@typescript-eslint/visitor-keys@8.72.0': + resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260707.2': @@ -1772,13 +1777,13 @@ packages: peerDependencies: vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitejs/plugin-react@6.1.1': - resolution: {integrity: sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==} + '@vitejs/plugin-react@6.1.2': + resolution: {integrity: sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 babel-plugin-react-compiler: ^1.0.0 - oxc-transform-react: ^0.145.0 + oxc-transform-react: ^0.152.0 vite: ^8.0.0 peerDependenciesMeta: '@rolldown/plugin-babel': @@ -1788,22 +1793,22 @@ packages: oxc-transform-react: optional: true - '@vitest/coverage-v8@5.0.3': - resolution: {integrity: sha512-+klsyz7BvT1vCU28Zkfzms1Ia78XD0V41U3FUtRaa3S+vOr/EXvK1O6BvVD7l1RzEjm6SONR2aybOvDDf9u0mQ==} + '@vitest/coverage-v8@5.0.5': + resolution: {integrity: sha512-4KpkGdIrSqBihx/JyP/e+S+IKB98etg1XDQiLAxksLfcShnwi1VReGeOT9NI43hLHbknosKp/1CCLn9Zgcs8mg==} peerDependencies: - '@vitest/browser': 5.0.3 - vitest: 5.0.3 + '@vitest/browser': 5.0.5 + vitest: 5.0.5 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.6.27': - resolution: {integrity: sha512-X1RCAfwbatG4GFbJ/1PIHP9MSZMt0JJThqbYID+vS4L783k6QGlLPe421wQE8dHXuGCcenVLsydiM4qzsYWxhg==} - engines: {node: '>=18'} + '@vitest/eslint-plugin@1.6.28': + resolution: {integrity: sha512-2QorUqhTIR7gaDkANEBTjuG2SE5MJgFaWElINyq9bIaOEJXycZUliu5xYSzG6QRLunWopYshgcRs2vW2CTRqGA==} + engines: {node: '>=22'} peerDependencies: '@typescript-eslint/eslint-plugin': '*' eslint: '>=8.57.0' - typescript: '>=5.0.0' + typescript: '>=6.0.0' vitest: '*' peerDependenciesMeta: '@typescript-eslint/eslint-plugin': @@ -1821,10 +1826,10 @@ packages: resolution: {integrity: sha512-gUsfXZJbzPamoIY5TvHFiMMoXESBrUMo+xqaj+rYrWI69+EnvRlYBlP96ZnHPY4vX8kyUpgAnFUCg5wZG/HkDQ==} engines: {node: '>=22'} - '@vitest/mocker@5.0.3': - resolution: {integrity: sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==} + '@vitest/mocker@5.0.5': + resolution: {integrity: sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==} peerDependencies: - msw: ^2.4.9 + msw: ^2.4.9 || ^3.0.0 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: @@ -1832,8 +1837,8 @@ packages: vite: optional: true - '@vitest/spy@5.0.3': - resolution: {integrity: sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==} + '@vitest/spy@5.0.5': + resolution: {integrity: sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==} abitype@0.8.7: resolution: {integrity: sha512-wQ7hV8Yg/yKmGyFpqrNZufCxbszDe5es4AZGYPBitocfSqXtjrTG9JMWFcc4N30ukl2ve48aBTwt7NJxVQdU3w==} @@ -1867,8 +1872,8 @@ packages: resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} - acorn@8.18.0: - resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + acorn@8.19.0: + resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} engines: {node: '>=0.4.0'} hasBin: true @@ -1933,8 +1938,8 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1js@3.0.10: - resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + asn1js@3.1.0: + resolution: {integrity: sha512-HWYi1THkOqguCiO+vwj09ZkQFD2kKEsejYHAYCtX0D80WVdoDnvRc9IukXX/jeb0T9NRWJnRtqwdbHltnFjwXA==} engines: {node: '>=12.0.0'} assertion-error@2.0.1: @@ -1950,9 +1955,6 @@ packages: axios@1.20.0: resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==} - babel-plugin-syntax-hermes-parser@0.36.1: - resolution: {integrity: sha512-ycduwJbvdvIMmVvlAZqGggS+pm5Eu4Bk9pcV9Sm2Z4PJNRVsKkv0g7vHj+LeuC1gHTeF67sJXFOq61IlqCa2hA==} - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} @@ -1963,8 +1965,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.11.26: - resolution: {integrity: sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ==} + baseline-browser-mapping@2.11.31: + resolution: {integrity: sha512-b0k7wXlWjpuL/Uxb/pYlpjY0ej5BjAmurtPUk3eRGuloI4yjK32m8TiKUQ81l1ptcLjKS/KH2+uqIolZti1x4Q==} engines: {node: '>=6.0.0'} hasBin: true @@ -1975,8 +1977,8 @@ packages: resolution: {integrity: sha512-avOnOoLOwdjw1MebWKh3bHqWOH558Q9VpqmRKUv2S63vjw0pnX7Y+yRihxIibgP55twhc7+YfC0IAH43IF5FqQ==} engines: {node: '>=18.0.0'} - bitcoinjs-lib@7.0.2: - resolution: {integrity: sha512-ugLk9SR+2gvhpNA7kqQL1eVDKyBNo/rbr+df72nrZj4OOdZvQRHDVtyogPGXAU2MLQimLL7EbUdz95QGh6Th5Q==} + bitcoinjs-lib@7.0.4: + resolution: {integrity: sha512-aAPVW36PHKDodJbLMdKQiuPAmXt50BQPBQUvyZWZRYFI8lkdg8EqcklmT1t8X6izAJ74rhaHuOOqkbVlDtJrPg==} engines: {node: '>=18.0.0'} bn.js@4.12.5: @@ -1993,8 +1995,8 @@ packages: brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - browserslist@4.29.3: - resolution: {integrity: sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==} + browserslist@4.29.4: + resolution: {integrity: sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2004,8 +2006,8 @@ packages: bs58check@4.0.0: resolution: {integrity: sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==} - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.2: + resolution: {integrity: sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw==} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2033,11 +2035,11 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001814: - resolution: {integrity: sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==} + caniuse-lite@1.0.30001819: + resolution: {integrity: sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==} - cborg@6.1.3: - resolution: {integrity: sha512-Kb/wD/AFuVcqvVjR+HYNOjNiuhVJ2C+RWxQE2Yqq2WVlVkRjdvVLkkM6QsL3NMsBRh+rgNc+aXmcraA+X0HObQ==} + cborg@6.1.4: + resolution: {integrity: sha512-JqjDDfTuED2qUvy570NGQUXqfzC34H++AHJIZnLAmiAdHNqHJKbtzox5yViRz5rc0gM9OPSX7n7Sh+BNU263Xw==} hasBin: true chai@6.3.0: @@ -2054,14 +2056,6 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} - engines: {node: '>=12.13.0'} - hasBin: true - - chromium-edge-launcher@0.3.0: - resolution: {integrity: sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA==} - ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -2111,12 +2105,12 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - core-js-compat@3.50.0: - resolution: {integrity: sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==} + core-js-compat@3.51.0: + resolution: {integrity: sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==} engines: {node: '>=6.4.0'} - core-js@3.50.0: - resolution: {integrity: sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==} + core-js@3.51.0: + resolution: {integrity: sha512-7bDKx/5jm5MxzsXxc93g6Z2+4ZsuT/MddrfRmTDJNAkWsYWHU8EVNEsBiIEWnMAMCHMmRfUEjkuo3jeNBOIHRw==} cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} @@ -2163,6 +2157,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + delay@7.0.0: resolution: {integrity: sha512-C3vaGs818qzZjCvVJ98GQUMVyWeg7dr5w2Nwwb2t5K8G98jOyyVO2ti2bKYk5yoYElqH3F2yA53ykuEnwD6MCg==} engines: {node: '>=20'} @@ -2175,8 +2173,8 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dependency-cruiser@18.5.0: - resolution: {integrity: sha512-LFvJOvufjQ7XTucSI40NHqse0gcQBevDGkZabLAKcGwO+VWOywTqZ5EyFRYWSokNxvLOO7v6EXyNi+9I72oWUA==} + dependency-cruiser@18.7.0: + resolution: {integrity: sha512-WexT4OswA6Gy86ms2J7SJ4FJscN43dyS+i5skpbtXlPTFQW4yWbontjFip1TOBAVnc+U+9zdH0a56YTRZX/IGw==} engines: {node: ^22||^24||>=26} hasBin: true @@ -2210,8 +2208,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.443: - resolution: {integrity: sha512-TDJG36L9A3CWWwZ97HKaE+Iz1sW80pNp6sAU0owzCIV3Zc9eVyRqZK8Vz6NKuMIU8WjP0pIkoqCa0VRf/yFD0Q==} + electron-to-chromium@1.5.463: + resolution: {integrity: sha512-nVWNU6ltFjopvOdD44J4zoBkgO0M+WZiFKKFV7EjebOH9z0KNphk6bCEjplXtJofL21ARIuuwWOCsFkBVklm6w==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -2330,8 +2328,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.11.0: - resolution: {integrity: sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==} + eslint@10.13.0: + resolution: {integrity: sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2402,8 +2400,8 @@ packages: engines: {node: '>=20'} hasBin: true - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.4: + resolution: {integrity: sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ==} fd-package-json@2.0.0: resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} @@ -2445,10 +2443,18 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + flow-estree@0.327.0: + resolution: {integrity: sha512-f9vK751YUzD0qaHSpKc5/qQM6gqOlgGS+4ZRqTNcZOpVqn3mC55yEQ6dUG2K1eaVm5FbKkz9CFWe6XNvrkQFQg==} + engines: {node: '>=18'} + flow-estree@0.331.0: resolution: {integrity: sha512-FVLYkSL/ITb/QXBEQvNWPjPooRGswuUtGOwrH+puSlMDneNkxy640+FZsk/TfKL+b7Wbw/Fg9FTUv2bMQDpj2w==} engines: {node: '>=18'} + flow-parser@0.327.0: + resolution: {integrity: sha512-/MYZ5hXWf5ozpbdfUDmazMgQXviLxWEiRLH3MppEGDdW0itRVqmB5UaU7QX+SBCDNiq+gEesSVn8nlxmPDyDkw==} + engines: {node: '>=0.4.0'} + flow-parser@0.331.0: resolution: {integrity: sha512-vEZcHIlnKeN8JSVtYFczj8sWJfHIJOkz+YG00O/oul/Bete+t1ZhTi+O6JRRLFYvGW+yJkZ0YgL16iStnbkUqQ==} engines: {node: '>=0.4.0'} @@ -2466,9 +2472,9 @@ packages: resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} - formatly@0.7.1: - resolution: {integrity: sha512-ESuCEJE0SGgabl9q+zABI8LhJDmF+8nhpuqDzuM48HfJ9QTD5o6PqFJDFZY7w6f8xsh5lixuj5nJsQNvYOWvKQ==} - engines: {node: '>=18.3.0'} + formatly@0.11.4: + resolution: {integrity: sha512-TeCC10lP8KCgoX+Fe5lryILIT0/Dy+nP0OSVnsuB5CwXoLuOdqxCYlPFF1inR8S/zTy1ec7TjhS2TeRKWzzImA==} + engines: {node: '>=18.14.0'} hasBin: true fresh@0.5.2: @@ -2558,21 +2564,15 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} - hermes-compiler@250829098.0.17: - resolution: {integrity: sha512-qG1PXzTEtriF6oQLZF3vyHhSMxOdW5h2TqqLri0rdpstPustd2fSvRZQMVAPdlhgFwBfYnj3OUZtiO6LjYsEFw==} + hermes-compiler@260318099.0.4: + resolution: {integrity: sha512-8odcPFkPC82HlqCl0C5QI9mBN4rEAT+IAo55sJhzwKw//K3qZloiv3ex6J2O8CuBbhdmkJozfidNsset2KH25w==} hermes-estree@0.25.1: resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - hermes-estree@0.36.1: - resolution: {integrity: sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==} - hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hermes-parser@0.36.1: - resolution: {integrity: sha512-GApNk4zLHi2UWoWZZkx7LNCOSzLSc5lB55pZ/PhK7ycFeg7u5LcF88p/WbpIi1XUDtE0MpHE3uRR3u3KB7TjSQ==} - hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -2602,8 +2602,12 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.11: - resolution: {integrity: sha512-YChdK5txDjwGUvgR7oCJcLGkwi3LDh8Zx8tS7ndYciLEg/oOCL26VUBSUEtgS7EjiybcBqFxh5j0rAdDX7/bbg==} + ignore@7.0.12: + resolution: {integrity: sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==} + engines: {node: '>= 4'} + + ignore@7.0.13: + resolution: {integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==} engines: {node: '>= 4'} import-lazy@4.0.0: @@ -2790,57 +2794,57 @@ packages: jsc-safe-url@0.2.4: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} - jscpd-darwin-arm64@5.4.0: - resolution: {integrity: sha512-fNIDtNn9WE4YXoFoqf+3tkHb1+GaKKOeKzh77Wx61Gfa9iDxlCv5rO0Fjy7oWmGehUUKqslDaeXXtn/RoDprCg==} + jscpd-darwin-arm64@5.4.2: + resolution: {integrity: sha512-EGoPYQZqESW2kJfxKZrUYsYWhzq2Irk6sBQQWZ7VPAGj2wwk3n8HtDP2FnJOiHWZtSz55I8zQWldzIrD55B5Vw==} cpu: [arm64] os: [darwin] - jscpd-darwin-x64@5.4.0: - resolution: {integrity: sha512-bxlnCVEb69SGIsas1+PaqZyFY8iYVTVjCBxfjVD74UafX115Ysw+oO9LAlsJaGsKUnK8Zsq5bhM33kBHux6bTA==} + jscpd-darwin-x64@5.4.2: + resolution: {integrity: sha512-/bz/rgoahqeK0p5r+KjeTTS59d7bZpMxD7hQ4CaQ0qKZWBZIyu7hRdExzJ7/KrCEJ5cmRogvXX1jhFqldYLNXw==} cpu: [x64] os: [darwin] - jscpd-linux-arm64-gnu@5.4.0: - resolution: {integrity: sha512-c4hX5QjuRyzLFJ+A+jNGHRpGlDvxcx+zzs4RJmZHpl23istuTMIkelwTOWliF4gXOm0RWXDlX/ywWKr9+Lre7w==} + jscpd-linux-arm64-gnu@5.4.2: + resolution: {integrity: sha512-YW/eX+mOYZmT/A3QEARYmJQoVQNV/cfecKCobNXZcD3mE57drpKHmJnvuL9uS85z0cUKWGCM57JVkVz6Y9oxxw==} cpu: [arm64] os: [linux] libc: [glibc] - jscpd-linux-arm64-musl@5.4.0: - resolution: {integrity: sha512-p4FUCNyL8WPTlizdZqfjontFwJ/+jnERYM2+YX2miYvm0NxzsIi23MhfzPl/eUHxkiT5wethV0NRYEAkJr999Q==} + jscpd-linux-arm64-musl@5.4.2: + resolution: {integrity: sha512-jOLTO8YVRz65NaeYNeXoIf13yOPWhbM61xKXpv51DXQ2BXce6XfgPaJVeDCOM5s+8mt6aDtq0BZ8zptNeqGuIw==} cpu: [arm64] os: [linux] libc: [musl] - jscpd-linux-x64-gnu@5.4.0: - resolution: {integrity: sha512-44NXS0gtYbjBCc53Gwilgj7PPwnWv9YTF/rGc0ZfnFcpzSoOKKU11yH+qHfCVie1hHte1wHyZ1f9Kjc8nGe2/g==} + jscpd-linux-x64-gnu@5.4.2: + resolution: {integrity: sha512-eAmKLxx+pIOEX4lZ342CCCjL5bvf+a3gdmaaVHXiGIx2Zr3zKkF32YkfuN2sCvCui5I/wnely80XsRvVVFO47Q==} cpu: [x64] os: [linux] libc: [glibc] - jscpd-linux-x64-musl@5.4.0: - resolution: {integrity: sha512-m9XHj14Zwia9RjWDkHDrl6VJ3W/b7m8qjFqjhcJ668Vkxoj4Ri/qeo0bo6is+fSw+bYxYexV6xxqIKRDolc8Lg==} + jscpd-linux-x64-musl@5.4.2: + resolution: {integrity: sha512-ers9YFscD6DrmhyjBDXo/L+yBKcclHdWTFLMulYVGLcoGRKfBFhmK08MI3ajN/GMmCpJu7rkDYKL3egdfE8OIw==} cpu: [x64] os: [linux] libc: [musl] - jscpd-windows-arm64-msvc@5.4.0: - resolution: {integrity: sha512-AoP5RXyb9gIf8xmFwAc+Rgh4XJNyX1upcD+R1A6u4XjsDo2/oF+KKB4dtKnG2DbFQ+0fyFg/ClOcw+asQZJfPg==} + jscpd-windows-arm64-msvc@5.4.2: + resolution: {integrity: sha512-kOhVw4cVhN8T9jr3OVThB3pPpbff0ITHTwpJ/+4EGzMkbf0y6QtPpHDzRgiHJj7u1FSTBXTI6VhPhDUhT/os1g==} cpu: [arm64] os: [win32] - jscpd-windows-x64-msvc@5.4.0: - resolution: {integrity: sha512-dYkb5mAo5i7fjrtf2Ft6z9a/I38RJMd4JirEgJiW2BIv5pAGmfMVPDy1xEXL3hJqraXzeMIfnzqJFanefCyC6g==} + jscpd-windows-x64-msvc@5.4.2: + resolution: {integrity: sha512-BuR5DCV7F/G5ukMEIzCrz43ea5C0t0ALcP7v+opOWefoi4aiQYCEmtoRwfXMM/zjOmNYmvJBDDfeH05U9uuzEg==} cpu: [x64] os: [win32] - jscpd@5.4.0: - resolution: {integrity: sha512-6mU8OHff4rPJ3D5lIsQns82/aQhDas22gMsGurHx1wcrfXWOZDNaobi6rKhLevo+77ntWKUXOwtM6lcrkJeL7w==} + jscpd@5.4.2: + resolution: {integrity: sha512-bxZ1ObA4NyWBcM7Zh+QoGrdcMovbCxrDofFaLo2Lwgk/Axe/e45VYu8EM+mpPx2CpU/QGCoktONRnaRZl8Yq2w==} engines: {node: '>=18'} hasBin: true - jsdoc-type-pratt-parser@9.2.2: - resolution: {integrity: sha512-eFY7Rlscvv/BpY6UsVsjKwMhu1tJO/F4U/vC9g3yeRy/JqszuO1UP6Vdq+85G+3FP6fEw/sWR8a5ftPFY86csw==} + jsdoc-type-pratt-parser@9.4.0: + resolution: {integrity: sha512-orXhi2Y06rag47r4SW4JPII6WlUJbp0xe9cIcqLaSbb/8tREcEZSq99Lu3AFfra6PAlMqTYIxV+ZHxl1dFUrWw==} engines: {node: ^22.22.2 || >=24.15.0} jsesc@3.1.0: @@ -2876,8 +2880,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knip@6.39.0: - resolution: {integrity: sha512-Y7g6Ve1ATMox1u1v+gx3z9LTlvzVLTJISm/LVn9TgBU4qc7OoC63AWGO8qCFPVDDdaqlYdXkDDvvO1METBfTRw==} + knip@6.42.1: + resolution: {integrity: sha512-gKJVsiT4LJQ0lfc8uSHOCzkOY8adAXNFGarIeODZbJOkBnQRVsG3e0UZFnO4LMwjA82A5tBWX/VgoeTYcjdKiQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2889,11 +2893,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libp2p@3.3.11: - resolution: {integrity: sha512-+J3Dw1RnGdcpQaPN1HD+Z6xVS3qY0vnsqE2Tu//pfoiJxabaZVkc2FBNnNQ1Sj+Th2qoloeJ11jvxuNXSa1gtA==} - - lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + libp2p@3.5.1: + resolution: {integrity: sha512-4ToV+b2Am/W5cdjON5PRx3IL5r7pqrVWkUskLYnvwc8homj0A39f9eJulz1o46iUB9WmAqzTy46bGFLItGIvAQ==} lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} @@ -3072,8 +3073,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magic-string@1.4.2: - resolution: {integrity: sha512-vG+rjFRj1PqdIBozIxAGMjPlOhaVe+GXpbttY/iSK7rGcJRMlwNJO7dcUwmUqkymsFLJiNGI06t4D7Fr7yRC9g==} + magic-string@1.4.3: + resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==} magicast@0.5.5: resolution: {integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==} @@ -3081,15 +3082,12 @@ packages: main-event@1.0.5: resolution: {integrity: sha512-4l9z8r7Q446mhhVTwdHmfPksOYBwN2xa7ewEW2yxPVNQapIaAf57ORFLMB91SpMEMa4wXowect7fq3uMLjDnGA==} - marky@1.3.0: - resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdn-data@2.35.0: - resolution: {integrity: sha512-k+1+dEIm2z/BEfdvYzT/fIyAGeDBo/1AJNJI4ilFXJRYoxP/3Ds+GP8shAOIq8jYXY9N5nGB3Ag104NsagmLAA==} + mdn-data@2.37.2: + resolution: {integrity: sha512-rz9YOBGItdSbe7HcSArUbhiAv4SB/4DKRYg96CSFS2CcIYMbUvBtZlzA1NCbk2AdgbmYwMqwNblLpR441lLeiQ==} memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -3260,11 +3258,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - mortice@3.3.1: resolution: {integrity: sha512-t3oESfijIPGsmsdLEKjF+grHfrbnKSXflJtgb1wY14cjxZpS6GnhHRXTxxzCAoCCnq1YYfpEPwY3gjiCPhOufQ==} @@ -3296,8 +3289,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@6.0.1: - resolution: {integrity: sha512-3wVS3i51pE2pi1k5FFL/95BGfVS0kSsvDVuGXHOtxox/TywUmtgq+3qiTOTbs9J7KfHaXPiN171k/A6dBnaXFw==} + nanoid@6.0.2: + resolution: {integrity: sha512-hIvVOb9Qr1p/9CNNLOe0OlWvgx/ziTsVwKN/GDSsuArN2K0wDiafP3s0SWmsm7o2BdnyS8Z9Z64NFBUbn6ziBg==} engines: {node: ^22 || ^24 || >=26} hasBin: true @@ -3328,8 +3321,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.57: - resolution: {integrity: sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==} + node-releases@2.0.60: + resolution: {integrity: sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==} engines: {node: '>=18'} node@runtime:26.12.1: @@ -3471,35 +3464,35 @@ packages: resolution: {integrity: sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} - obug@2.2.1: - resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} engines: {node: '>=12.20.0'} on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + on-finished@2.4.2: + resolution: {integrity: sha512-ATWUv387i+nLD49EiDoOft5scf32Vsdz3ktrQJG9bi7jRFmaXTssvyvj1EmeKVVgvesbqUtvQQvaS2TpTukAZQ==} engines: {node: '>= 0.8'} - open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxc-parser@0.150.0: - resolution: {integrity: sha512-zwajKw1GUa57IOdafIS7/yOObGF2NihwIfZfs5yJTRprMSkiwhWOc/k+n8bwnUPbHr2/XsjfBO8KyTPaW3VpWg==} + oxc-parser@0.154.0: + resolution: {integrity: sha512-Gr/6fkjZwi937c4Tsz8y0iO4U0FLPkZI6JSVucLAIvQyqh379px7RS8ORIc0HOORbFjXZ6zyqWLl53qxhSeofw==} engines: {node: ^20.19.0 || >=22.12.0} oxc-resolver@11.24.2: resolution: {integrity: sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==} - oxc-transform-react@0.152.0: - resolution: {integrity: sha512-CAx+SKDU4uSOmQnyn7daMj/v/h8tF3fnaUMi4yImKAARPnXV0BieHe/qw1LTcK4KlnIuAhpfUJfSfNKIBh8HqQ==} + oxc-transform-react@0.155.0: + resolution: {integrity: sha512-JsZb0yduU1JdSj1RrNov2Ysio68LW9VKa10vkAJehy3NsE6UZrfcjmTLrStBRVF40YKxN30I+Cq8zJxIXzLqHQ==} engines: {node: ^20.19.0 || >=22.12.0} p-defer@4.0.1: @@ -3510,6 +3503,10 @@ packages: resolution: {integrity: sha512-T629EpxCTho6yxIZz2dFZwMkyWUM5jh/0h1+u/Xo4+Fllu0DuKQF6ghqIgSWVTluIvHSXL+XBRScH+E+y9TQ0g==} engines: {node: '>=20'} + p-event@8.0.1: + resolution: {integrity: sha512-JwBMYkI+lY/e5kQYsU1JXPxHtyrVncnsAxUOL1bF5bLCarxKLjc6+NwHrRYPoKMxapFNkRT20Xhf793Df/AIIA==} + engines: {node: '>=22'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -3518,8 +3515,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-queue@9.3.3: - resolution: {integrity: sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==} + p-queue@9.3.5: + resolution: {integrity: sha512-Lki/zhXFVmDhesBUn/yHRLW9Bte7mE7xoFHzTR8sIomV7a2z+LxYAPkGvdfidNiu4fKSfjtawixxSHcZci5QcQ==} engines: {node: '>=20'} p-retry@8.0.1: @@ -3534,8 +3531,8 @@ packages: resolution: {integrity: sha512-2kKzMtjS8TVcpCOU/gr3vZ4K/WIyS1AsEFXFWapM/0lERCdyTbB6ZeuCIp+cL1aeLZfQoMdZFCBTHiK4I9UtOw==} engines: {node: '>=20'} - package-manager-detector@1.8.0: - resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + package-manager-detector@1.9.0: + resolution: {integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==} parse5@8.0.1: resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} @@ -3570,8 +3567,8 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - postcss@8.5.30: - resolution: {integrity: sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==} + postcss@8.5.31: + resolution: {integrity: sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -3643,8 +3640,8 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.9.9: - resolution: {integrity: sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==} + prettier@3.9.10: + resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} engines: {node: '>=14'} hasBin: true @@ -3672,8 +3669,8 @@ packages: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} - publint@0.3.24: - resolution: {integrity: sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw==} + publint@0.3.25: + resolution: {integrity: sha512-WMMbn/d7JqRlfXQL/JUI4n5skC8cJ5WVr8/wT5mmiYWkUdENkZr1I5rgs2+dQPVRgoJd+JRYtB46MTsuDylw9g==} engines: {node: '>=18'} hasBin: true @@ -3720,10 +3717,10 @@ packages: react-devtools-core@6.1.5: resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} - react-dom@19.3.0: - resolution: {integrity: sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==} + react-dom@19.3.1: + resolution: {integrity: sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ==} peerDependencies: - react: ^19.3.0 + react: ^19.3.1 react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -3733,13 +3730,13 @@ packages: peerDependencies: react-native: '>=0.60.0' - react-native@0.87.1: - resolution: {integrity: sha512-DJKG6ANoD7BtrE4z9DewiSD7/RxCX73lK5Pu49aUr85P3333Dm2roTiP0rRjQNDZdVizHSOmstWfwF/o9EjCRA==} + react-native@0.88.0: + resolution: {integrity: sha512-v/wee0nYWcammMYBnSat/e3WY/5iaf9YQOMcBrfKT/wPApPPlHp94hgZovBtwhMuthR01yc/8cGn0FpFTE/C4A==} engines: {node: ^22.13.0 || ^24.3.0 || >= 26.0.0} hasBin: true peerDependencies: '@types/react': ^19.1.1 - react: ^19.2.3 + react: ^19.3.0 peerDependenciesMeta: '@types/react': optional: true @@ -3748,8 +3745,8 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react@19.3.0: - resolution: {integrity: sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==} + react@19.3.1: + resolution: {integrity: sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==} engines: {node: '>=0.10.0'} rechoir@0.8.0: @@ -3774,8 +3771,8 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regjsparser@0.13.3: - resolution: {integrity: sha512-ycwFAS14Jw4mppvmK4GR/J6u3WpWpjkEApehuHtLc/8VpPNpDMbQ4WjqwplXifGeyKOzHSFLmSPqzksDQE2Sfg==} + regjsparser@0.13.4: + resolution: {integrity: sha512-EWV80YgFaVgFrjGCAsV7oybp4GOxbls5RzBg8OB0nKEVXsBJR1JlV8Di1JhCROg3MzTfe1RI8yitIm1eOs68iA==} hasBin: true require-directory@2.1.1: @@ -3793,16 +3790,16 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + resolve@1.22.13: + resolution: {integrity: sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==} engines: {node: '>= 0.4'} hasBin: true retimeable-signal@1.0.1: resolution: {integrity: sha512-Cy26CYfbWnYu8HMoJeDhaMpW/EYFIbne3vMf6G9RSrOyWYXbPehja/BEdzpqmM84uy2bfBD7NPZhoQ4GZEtgvg==} - rolldown@1.2.12: - resolution: {integrity: sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==} + rolldown@1.2.15: + resolution: {integrity: sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -3816,9 +3813,6 @@ packages: sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - scheduler@0.28.0: resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} @@ -3870,8 +3864,8 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - smol-toml@1.9.0: - resolution: {integrity: sha512-hpd+HLON7HdZXqYchMM/+LaTTbdK0AU3NngIJ4KVyWbY9bfQqdL9cD+4yf6dUoU2Ap4VsU0JkQi6FxAI1B2mXQ==} + smol-toml@1.9.1: + resolution: {integrity: sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==} engines: {node: '>= 18'} source-map-js@1.2.2: @@ -3965,8 +3959,8 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - tinybench@6.2.0: - resolution: {integrity: sha512-78U2TlB2CnVenajOFzf3BKSm0J6oz5L0NV7g32LCPccvYc0lbWvys4d3uUUCS2B1N8PAf2+aekR8i1KbC3HO7Q==} + tinybench@6.2.2: + resolution: {integrity: sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==} engines: {node: '>=20.0.0'} tinyexec@1.3.1: @@ -4037,8 +4031,8 @@ packages: resolution: {integrity: sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==} engines: {node: '>=16'} - typescript-eslint@8.71.0: - resolution: {integrity: sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw==} + typescript-eslint@8.72.0: + resolution: {integrity: sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -4068,10 +4062,6 @@ packages: resolution: {integrity: sha512-sSbrZqlr04w4p8KKpHw0ME/R4JzQaadum+BWhMlk2M7LrDyXWTfJOco3d1jNMdQNxgk5DDm88R3IWYH0nR+tzQ==} engines: {node: '>=14.0.0'} - uint8array-tools@0.0.9: - resolution: {integrity: sha512-9vqDWmoSXOoi+K14zNaf6LBV51Q8MayF0/IiQs3GlygIKUYtog603e6virExkjjFosfJUBI4LhbQK1iq8IG11A==} - engines: {node: '>=14.0.0'} - uint8arraylist@2.4.9: resolution: {integrity: sha512-KxWjyEFzchzik3aoQlK66oaoxIReoMo5bQRm1fcjBUZvE8xv/tyR3CTKhjh6K/faV8VaF6hd5pjr45CzbwuwkA==} @@ -4084,8 +4074,8 @@ packages: uint8arrays@6.1.1: resolution: {integrity: sha512-iz7JN0XCSZYA111lhFG2Ui9EhFvTNekqSRHw3lvMHq+dzwWy1OQftxFQREEh4rffU0oSoXdQHsk2TiHKVm4fsA==} - unbash@4.0.12: - resolution: {integrity: sha512-PnKvRX+Fbxl/usVlTr/31tXIOVAH+8OdC9qaxUQcvurwEnoc3Vk/ipi2Ce8IjMxzK9byfSGdsUBjqqJGc1o5lw==} + unbash@6.0.1: + resolution: {integrity: sha512-0db9eS5iqybux41zLkX69nk90KTci7F7eZ+gXzEG/Q7E0tAqEBhRh5fkZvk1N7jT7QkGWqq34i8SFGPFEe1V8A==} engines: {node: '>=14'} uncrypto@0.1.3: @@ -4109,8 +4099,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.3.3: - resolution: {integrity: sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==} + update-browserslist-db@1.3.4: + resolution: {integrity: sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4139,13 +4129,13 @@ packages: varuint-bitcoin@2.0.1: resolution: {integrity: sha512-TTl5qSPJ3FzjuTHo0Ex9WUE3jTxnUsQHR38vIDhHApoVstzJK4gE20WqmTWOT5oo7ilvOSNejXt4CJrfDcqm5A==} - vite@8.3.4: - resolution: {integrity: sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==} + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.7.1 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 esbuild: 0.28.1 jiti: '>=1.21.0' less: ^4.0.0 @@ -4182,20 +4172,20 @@ packages: yaml: optional: true - vitest@5.0.3: - resolution: {integrity: sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==} + vitest@5.0.5: + resolution: {integrity: sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==} engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 5.0.3 - '@vitest/browser-preview': 5.0.3 + '@vitest/browser-playwright': 5.0.5 + '@vitest/browser-preview': 5.0.5 '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 - '@vitest/coverage-istanbul': 5.0.3 - '@vitest/coverage-v8': 5.0.3 - '@vitest/ui': 5.0.3 + '@vitest/coverage-istanbul': 5.0.5 + '@vitest/coverage-v8': 5.0.5 + '@vitest/ui': 5.0.5 happy-dom: '*' jsdom: '*' vite: ^6.4.0 || ^7.0.0 || ^8.0.0 @@ -4347,10 +4337,10 @@ snapshots: '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) - '@babel/helpers': 7.29.7 + '@babel/helpers': 7.29.10 '@babel/parser': 7.29.9 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@10.2.2) + '@babel/traverse': 7.29.10(supports-color@10.2.2) '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 @@ -4373,7 +4363,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.7 '@babel/helper-validator-option': 7.29.7 - browserslist: 4.29.3 + browserslist: 4.29.4 lru-cache: 5.1.1 semver: 6.3.1 @@ -4381,7 +4371,7 @@ snapshots: '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)': dependencies: - '@babel/traverse': 7.29.8(supports-color@10.2.2) + '@babel/traverse': 7.29.10(supports-color@10.2.2) '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -4391,7 +4381,7 @@ snapshots: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2) '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@10.2.2) + '@babel/traverse': 7.29.10(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -4401,7 +4391,7 @@ snapshots: '@babel/helper-validator-option@7.29.7': {} - '@babel/helpers@7.29.7': + '@babel/helpers@7.29.10': dependencies: '@babel/template': 7.29.7 '@babel/types': 7.29.8 @@ -4410,7 +4400,7 @@ snapshots: dependencies: '@babel/types': 7.29.8 - '@babel/runtime@7.29.7': {} + '@babel/runtime@7.29.10': {} '@babel/template@7.29.7': dependencies: @@ -4418,7 +4408,7 @@ snapshots: '@babel/parser': 7.29.9 '@babel/types': 7.29.8 - '@babel/traverse@7.29.8(supports-color@10.2.2)': + '@babel/traverse@7.29.10(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 @@ -4459,10 +4449,10 @@ snapshots: dependencies: '@chainsafe/as-chacha20poly1305': 0.1.0 '@chainsafe/as-sha256': 1.2.5 - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/peer-id': 6.0.15 - '@libp2p/utils': 7.4.1 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/peer-id': 6.0.18 + '@libp2p/utils': 7.4.5 '@noble/ciphers': 2.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 @@ -4473,8 +4463,8 @@ snapshots: '@chainsafe/libp2p-yamux@8.0.1': dependencies: - '@libp2p/interface': 3.3.0 - '@libp2p/utils': 7.4.1 + '@libp2p/interface': 3.4.0 + '@libp2p/utils': 7.4.5 race-signal: 2.0.2 uint8arraylist: 2.4.9 @@ -4502,12 +4492,12 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/connector-react@2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': + '@ckb-ccc/connector-react@2.2.2(@types/react@19.3.0)(debug@4.4.3(supports-color@10.2.2))(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(react@19.3.1)(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': dependencies: - '@ckb-ccc/connector': 2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) + '@ckb-ccc/connector': 2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@lit/react': 1.0.8(@types/react@19.3.0) '@types/react': 19.3.0 - react: 19.3.0 + react: 19.3.1 transitivePeerDependencies: - bufferutil - debug @@ -4518,20 +4508,20 @@ snapshots: - utf-8-validate - zod - '@ckb-ccc/connector@2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': + '@ckb-ccc/connector@2.3.2(debug@4.4.3(supports-color@10.2.2))(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6)': dependencies: '@chainsafe/libp2p-noise': 17.0.0 '@chainsafe/libp2p-yamux': 8.0.1 '@ckb-ccc/ccc': 1.3.6(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(zod@4.6.6) '@ckb-ccc/libp2p': 0.3.2(typescript@6.0.3)(zod@4.6.6) - '@libp2p/circuit-relay-v2': 4.2.13 - '@libp2p/identify': 4.1.14 - '@libp2p/interface': 3.3.0 - '@libp2p/webrtc': 6.0.33(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2) - '@libp2p/websockets': 10.1.21 + '@libp2p/circuit-relay-v2': 4.2.17 + '@libp2p/identify': 4.1.18 + '@libp2p/interface': 3.4.0 + '@libp2p/webrtc': 6.1.0(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(supports-color@10.2.2) + '@libp2p/websockets': 10.1.25 '@multiformats/multiaddr': 13.0.3 - core-js: 3.50.0 - libp2p: 3.3.11 + core-js: 3.51.0 + libp2p: 3.5.1 lit: 3.3.3 qr: 0.7.2 transitivePeerDependencies: @@ -4601,9 +4591,9 @@ snapshots: '@ckb-ccc/libp2p@0.3.2(typescript@6.0.3)(zod@4.6.6)': dependencies: '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) - '@libp2p/interface': 3.3.0 - '@libp2p/interface-internal': 3.1.13 - '@libp2p/utils': 7.4.1 + '@libp2p/interface': 3.4.0 + '@libp2p/interface-internal': 3.2.2 + '@libp2p/utils': 7.4.5 '@multiformats/multiaddr': 13.0.3 it-length-prefixed: 11.0.1 transitivePeerDependencies: @@ -4729,7 +4719,7 @@ snapshots: '@ckb-ccc/xverse@1.2.6(typescript@6.0.3)(zod@4.6.6)': dependencies: '@ckb-ccc/core': 1.23.0(typescript@6.0.3)(zod@4.6.6) - bitcoinjs-lib: 7.0.2(typescript@6.0.3) + bitcoinjs-lib: 7.0.4(typescript@6.0.3) valibot: 1.5.0(typescript@6.0.3) transitivePeerDependencies: - bufferutil @@ -4759,15 +4749,15 @@ snapshots: tslib: 2.8.1 optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.8.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))': + '@eslint-community/eslint-plugin-eslint-comments@4.8.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))': dependencies: escape-string-regexp: 4.0.0 - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) - ignore: 7.0.11 + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) + ignore: 7.0.13 - '@eslint-community/eslint-utils@4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))': dependencies: - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -4788,14 +4778,14 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/css-tree@4.1.1': + '@eslint/css-tree@4.1.2': dependencies: - mdn-data: 2.35.0 + mdn-data: 2.37.2 source-map-js: 1.2.2 - '@eslint/js@10.0.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))': + '@eslint/js@10.0.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))': optionalDependencies: - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) '@eslint/object-schema@3.0.5': {} @@ -4822,7 +4812,7 @@ snapshots: '@ipld/dag-cbor@10.0.2': dependencies: - cborg: 6.1.3 + cborg: 6.1.4 multiformats: 14.0.5 '@isaacs/ttlcache@1.4.1': {} @@ -4893,30 +4883,30 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@libp2p/circuit-relay-v2@4.2.13': + '@libp2p/circuit-relay-v2@4.2.17': dependencies: - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/interface-internal': 3.1.13 - '@libp2p/peer-collections': 7.0.28 - '@libp2p/peer-id': 6.0.15 - '@libp2p/peer-record': 9.0.16 - '@libp2p/utils': 7.4.1 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/interface-internal': 3.2.2 + '@libp2p/peer-collections': 7.0.32 + '@libp2p/peer-id': 6.0.18 + '@libp2p/peer-record': 9.0.19 + '@libp2p/utils': 7.4.5 '@multiformats/multiaddr': 13.0.3 '@multiformats/multiaddr-matcher': 3.0.2 any-signal: 4.2.0 main-event: 1.0.5 multiformats: 14.0.5 - nanoid: 6.0.1 + nanoid: 6.0.2 progress-events: 1.1.0 protons-runtime: 7.1.2 retimeable-signal: 1.0.1 uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/crypto@5.1.23': + '@libp2p/crypto@5.2.0': dependencies: - '@libp2p/interface': 3.3.0 + '@libp2p/interface': 3.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 multiformats: 14.0.5 @@ -4924,14 +4914,14 @@ snapshots: uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/identify@4.1.14': + '@libp2p/identify@4.1.18': dependencies: - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/interface-internal': 3.1.13 - '@libp2p/peer-id': 6.0.15 - '@libp2p/peer-record': 9.0.16 - '@libp2p/utils': 7.4.1 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/interface-internal': 3.2.2 + '@libp2p/peer-id': 6.0.18 + '@libp2p/peer-record': 9.0.19 + '@libp2p/utils': 7.4.5 '@multiformats/multiaddr': 13.0.3 '@multiformats/multiaddr-matcher': 3.0.2 it-drain: 3.0.12 @@ -4941,14 +4931,14 @@ snapshots: uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/interface-internal@3.1.13': + '@libp2p/interface-internal@3.2.2': dependencies: - '@libp2p/interface': 3.3.0 - '@libp2p/peer-collections': 7.0.28 + '@libp2p/interface': 3.4.0 + '@libp2p/peer-collections': 7.0.32 '@multiformats/multiaddr': 13.0.3 progress-events: 1.1.0 - '@libp2p/interface@3.3.0': + '@libp2p/interface@3.4.0': dependencies: '@multiformats/dns': 1.0.15 '@multiformats/multiaddr': 13.0.3 @@ -4957,41 +4947,41 @@ snapshots: progress-events: 1.1.0 uint8arraylist: 3.0.2 - '@libp2p/keychain@6.1.7': + '@libp2p/keychain@6.1.10': dependencies: - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 '@noble/hashes': 2.4.0 - asn1js: 3.0.10 + asn1js: 3.1.0 interface-datastore: 10.0.1 multiformats: 14.0.5 sanitize-filename: 1.6.4 uint8arrays: 6.1.1 - '@libp2p/logger@6.2.13': + '@libp2p/logger@6.2.16': dependencies: - '@libp2p/interface': 3.3.0 + '@libp2p/interface': 3.4.0 '@multiformats/multiaddr': 13.0.3 interface-datastore: 10.0.1 multiformats: 14.0.5 weald: 1.1.3 - '@libp2p/multistream-select@7.0.28': + '@libp2p/multistream-select@7.0.32': dependencies: - '@libp2p/interface': 3.3.0 - '@libp2p/utils': 7.4.1 + '@libp2p/interface': 3.4.0 + '@libp2p/utils': 7.4.5 it-length-prefixed: 11.0.1 uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/noise@17.0.3': + '@libp2p/noise@17.0.7': dependencies: '@chainsafe/as-chacha20poly1305': 0.1.0 '@chainsafe/as-sha256': 1.2.5 - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/peer-id': 6.0.15 - '@libp2p/utils': 7.4.1 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/peer-id': 6.0.18 + '@libp2p/utils': 7.4.5 '@noble/ciphers': 2.4.0 '@noble/curves': 2.4.0 '@noble/hashes': 2.4.0 @@ -5000,25 +4990,25 @@ snapshots: uint8arrays: 6.1.1 wherearewe: 2.0.1 - '@libp2p/peer-collections@7.0.28': + '@libp2p/peer-collections@7.0.32': dependencies: - '@libp2p/interface': 3.3.0 - '@libp2p/peer-id': 6.0.15 - '@libp2p/utils': 7.4.1 + '@libp2p/interface': 3.4.0 + '@libp2p/peer-id': 6.0.18 + '@libp2p/utils': 7.4.5 multiformats: 14.0.5 - '@libp2p/peer-id@6.0.15': + '@libp2p/peer-id@6.0.18': dependencies: - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 multiformats: 14.0.5 uint8arrays: 6.1.1 - '@libp2p/peer-record@9.0.16': + '@libp2p/peer-record@9.0.19': dependencies: - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/peer-id': 6.0.15 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/peer-id': 6.0.18 '@multiformats/multiaddr': 13.0.3 multiformats: 14.0.5 protons-runtime: 7.1.2 @@ -5026,13 +5016,13 @@ snapshots: uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/peer-store@12.0.28': + '@libp2p/peer-store@12.0.32': dependencies: - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/peer-collections': 7.0.28 - '@libp2p/peer-id': 6.0.15 - '@libp2p/peer-record': 9.0.16 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/peer-collections': 7.0.32 + '@libp2p/peer-id': 6.0.18 + '@libp2p/peer-record': 9.0.19 '@multiformats/multiaddr': 13.0.3 interface-datastore: 10.0.1 it-all: 3.0.11 @@ -5043,17 +5033,17 @@ snapshots: uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/utils@7.4.1': + '@libp2p/utils@7.4.5': dependencies: '@chainsafe/is-ip': 2.1.0 '@chainsafe/netmask': 2.0.0 - '@libp2p/interface': 3.3.0 - '@libp2p/logger': 6.2.13 + '@libp2p/interface': 3.4.0 + '@libp2p/logger': 6.2.16 '@multiformats/multiaddr': 13.0.3 '@multiformats/multiaddr-matcher': 3.0.2 '@sindresorhus/fnv1a': 3.1.0 any-signal: 4.2.0 - cborg: 6.1.3 + cborg: 6.1.4 delay: 7.0.0 is-loopback-addr: 2.1.0 it-length-prefixed: 11.0.1 @@ -5063,7 +5053,7 @@ snapshots: main-event: 1.0.5 netmask: 2.1.1 p-defer: 4.0.1 - p-event: 7.1.1 + p-event: 8.0.1 progress-events: 1.1.0 protons-runtime: 7.1.2 race-signal: 2.0.2 @@ -5071,20 +5061,20 @@ snapshots: uint8arraylist: 3.0.2 uint8arrays: 6.1.1 - '@libp2p/webrtc@6.0.33(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2)': + '@libp2p/webrtc@6.1.0(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(supports-color@10.2.2)': dependencies: '@chainsafe/is-ip': 2.1.0 - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/interface-internal': 3.1.13 - '@libp2p/keychain': 6.1.7 - '@libp2p/noise': 17.0.3 - '@libp2p/peer-id': 6.0.15 - '@libp2p/utils': 7.4.1 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/interface-internal': 3.2.2 + '@libp2p/keychain': 6.1.10 + '@libp2p/noise': 17.0.7 + '@libp2p/peer-id': 6.0.18 + '@libp2p/utils': 7.4.5 '@multiformats/multiaddr': 13.0.3 '@multiformats/multiaddr-matcher': 3.0.2 '@peculiar/webcrypto': 1.7.1 - '@peculiar/x509': 2.1.0 + '@peculiar/x509': 2.2.0 get-port: 7.2.0 interface-datastore: 10.0.1 it-length-prefixed: 11.0.1 @@ -5101,7 +5091,7 @@ snapshots: progress-events: 1.1.0 protons-runtime: 7.1.2 race-signal: 2.0.2 - react-native-webrtc: 124.0.8(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2) + react-native-webrtc: 124.0.8(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(supports-color@10.2.2) reflect-metadata: 0.2.2 uint8-varint: 3.0.0 uint8arraylist: 3.0.2 @@ -5110,15 +5100,15 @@ snapshots: - react-native - supports-color - '@libp2p/websockets@10.1.21': + '@libp2p/websockets@10.1.25': dependencies: - '@libp2p/interface': 3.3.0 - '@libp2p/utils': 7.4.1 + '@libp2p/interface': 3.4.0 + '@libp2p/utils': 7.4.5 '@multiformats/multiaddr': 13.0.3 '@multiformats/multiaddr-matcher': 3.0.2 '@multiformats/multiaddr-to-uri': 12.0.0 main-event: 1.0.5 - p-event: 7.1.1 + p-event: 8.0.1 progress-events: 1.1.0 uint8arraylist: 3.0.2 uint8arrays: 6.1.1 @@ -5137,26 +5127,26 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.6.0 - '@microsoft/api-extractor-model@7.33.14(@types/node@26.6.5)': + '@microsoft/api-extractor-model@7.33.15(@types/node@26.6.5)': dependencies: '@microsoft/tsdoc': 0.17.1 '@microsoft/tsdoc-config': 0.18.3 - '@rushstack/node-core-library': 5.25.0(@types/node@26.6.5) + '@rushstack/node-core-library': 5.25.1(@types/node@26.6.5) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.59.3(@types/node@26.6.5)': + '@microsoft/api-extractor@7.59.4(@types/node@26.6.5)': dependencies: - '@microsoft/api-extractor-model': 7.33.14(@types/node@26.6.5) + '@microsoft/api-extractor-model': 7.33.15(@types/node@26.6.5) '@microsoft/tsdoc': 0.17.1 '@microsoft/tsdoc-config': 0.18.3 - '@rushstack/node-core-library': 5.25.0(@types/node@26.6.5) - '@rushstack/rig-package': 0.7.3 - '@rushstack/terminal': 0.24.6(@types/node@26.6.5) - '@rushstack/ts-command-line': 5.3.16(@types/node@26.6.5) + '@rushstack/node-core-library': 5.25.1(@types/node@26.6.5) + '@rushstack/rig-package': 0.7.4 + '@rushstack/terminal': 0.24.7(@types/node@26.6.5) + '@rushstack/ts-command-line': 5.3.17(@types/node@26.6.5) diff: 8.0.4 minimatch: 10.2.3 - resolve: 1.22.12 + resolve: 1.22.13 semver: 7.7.4 source-map: 0.6.1 typescript: 5.9.3 @@ -5168,16 +5158,16 @@ snapshots: '@microsoft/tsdoc': 0.17.1 ajv: 8.18.0 jju: 1.4.0 - resolve: 1.22.12 + resolve: 1.22.13 '@microsoft/tsdoc@0.17.1': {} '@multiformats/dns@1.0.15': dependencies: '@dnsquery/dns-packet': 6.1.1 - '@libp2p/interface': 3.3.0 + '@libp2p/interface': 3.4.0 hashlru: 2.3.0 - p-queue: 9.3.3 + p-queue: 9.3.5 progress-events: 1.1.0 uint8arrays: 6.1.1 @@ -5196,7 +5186,7 @@ snapshots: uint8-varint: 3.0.0 uint8arrays: 6.1.1 - '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + '@napi-rs/wasm-runtime@1.2.5(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 @@ -5256,66 +5246,66 @@ snapshots: '@node-datachannel/win32-x64-msvc@0.33.4': optional: true - '@oxc-parser/binding-android-arm-eabi@0.150.0': + '@oxc-parser/binding-android-arm-eabi@0.154.0': optional: true - '@oxc-parser/binding-android-arm64@0.150.0': + '@oxc-parser/binding-android-arm64@0.154.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.150.0': + '@oxc-parser/binding-darwin-arm64@0.154.0': optional: true - '@oxc-parser/binding-darwin-x64@0.150.0': + '@oxc-parser/binding-darwin-x64@0.154.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.150.0': + '@oxc-parser/binding-freebsd-x64@0.154.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.150.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.154.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.150.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.154.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.150.0': + '@oxc-parser/binding-linux-arm64-gnu@0.154.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.150.0': + '@oxc-parser/binding-linux-arm64-musl@0.154.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.150.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.154.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.150.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.154.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.150.0': + '@oxc-parser/binding-linux-riscv64-musl@0.154.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.150.0': + '@oxc-parser/binding-linux-s390x-gnu@0.154.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.150.0': + '@oxc-parser/binding-linux-x64-gnu@0.154.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.150.0': + '@oxc-parser/binding-linux-x64-musl@0.154.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.150.0': + '@oxc-parser/binding-openharmony-arm64@0.154.0': optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.150.0': + '@oxc-parser/binding-win32-arm64-msvc@0.154.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.150.0': + '@oxc-parser/binding-win32-ia32-msvc@0.154.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.150.0': + '@oxc-parser/binding-win32-x64-msvc@0.154.0': optional: true - '@oxc-project/types@0.150.0': {} + '@oxc-project/types@0.154.0': {} - '@oxc-project/types@0.152.0': {} + '@oxc-project/types@0.155.0': {} '@oxc-resolver/binding-android-arm-eabi@11.24.2': optional: true @@ -5369,7 +5359,7 @@ snapshots: dependencies: '@emnapi/core': 1.11.2 '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) + '@napi-rs/wasm-runtime': 1.2.5(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) optional: true '@oxc-resolver/binding-win32-arm64-msvc@11.24.2': @@ -5378,153 +5368,153 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.24.2': optional: true - '@oxc-transform-react/binding-android-arm-eabi@0.152.0': + '@oxc-transform-react/binding-android-arm-eabi@0.155.0': optional: true - '@oxc-transform-react/binding-android-arm64@0.152.0': + '@oxc-transform-react/binding-android-arm64@0.155.0': optional: true - '@oxc-transform-react/binding-darwin-arm64@0.152.0': + '@oxc-transform-react/binding-darwin-arm64@0.155.0': optional: true - '@oxc-transform-react/binding-darwin-x64@0.152.0': + '@oxc-transform-react/binding-darwin-x64@0.155.0': optional: true - '@oxc-transform-react/binding-freebsd-x64@0.152.0': + '@oxc-transform-react/binding-freebsd-x64@0.155.0': optional: true - '@oxc-transform-react/binding-linux-arm-gnueabihf@0.152.0': + '@oxc-transform-react/binding-linux-arm-gnueabihf@0.155.0': optional: true - '@oxc-transform-react/binding-linux-arm-musleabihf@0.152.0': + '@oxc-transform-react/binding-linux-arm-musleabihf@0.155.0': optional: true - '@oxc-transform-react/binding-linux-arm64-gnu@0.152.0': + '@oxc-transform-react/binding-linux-arm64-gnu@0.155.0': optional: true - '@oxc-transform-react/binding-linux-arm64-musl@0.152.0': + '@oxc-transform-react/binding-linux-arm64-musl@0.155.0': optional: true - '@oxc-transform-react/binding-linux-ppc64-gnu@0.152.0': + '@oxc-transform-react/binding-linux-ppc64-gnu@0.155.0': optional: true - '@oxc-transform-react/binding-linux-riscv64-gnu@0.152.0': + '@oxc-transform-react/binding-linux-riscv64-gnu@0.155.0': optional: true - '@oxc-transform-react/binding-linux-riscv64-musl@0.152.0': + '@oxc-transform-react/binding-linux-riscv64-musl@0.155.0': optional: true - '@oxc-transform-react/binding-linux-s390x-gnu@0.152.0': + '@oxc-transform-react/binding-linux-s390x-gnu@0.155.0': optional: true - '@oxc-transform-react/binding-linux-x64-gnu@0.152.0': + '@oxc-transform-react/binding-linux-x64-gnu@0.155.0': optional: true - '@oxc-transform-react/binding-linux-x64-musl@0.152.0': + '@oxc-transform-react/binding-linux-x64-musl@0.155.0': optional: true - '@oxc-transform-react/binding-openharmony-arm64@0.152.0': + '@oxc-transform-react/binding-openharmony-arm64@0.155.0': optional: true - '@oxc-transform-react/binding-win32-arm64-msvc@0.152.0': + '@oxc-transform-react/binding-win32-arm64-msvc@0.155.0': optional: true - '@oxc-transform-react/binding-win32-ia32-msvc@0.152.0': + '@oxc-transform-react/binding-win32-ia32-msvc@0.155.0': optional: true - '@oxc-transform-react/binding-win32-x64-msvc@0.152.0': + '@oxc-transform-react/binding-win32-x64-msvc@0.155.0': optional: true - '@peculiar/asn1-asym-key@2.10.0': + '@peculiar/asn1-asym-key@2.11.0': dependencies: - '@peculiar/asn1-pkcs8': 2.10.0 - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-pkcs8': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-cms@2.10.0': + '@peculiar/asn1-cms@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - '@peculiar/asn1-x509-attr': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + '@peculiar/asn1-x509-attr': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-csr@2.10.0': + '@peculiar/asn1-csr@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-ecc@2.10.0': + '@peculiar/asn1-ecc@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-pfx@2.10.0': + '@peculiar/asn1-pfx@2.11.0': dependencies: - '@peculiar/asn1-cms': 2.10.0 - '@peculiar/asn1-pkcs8': 2.10.0 - '@peculiar/asn1-rsa': 2.10.0 - '@peculiar/asn1-schema': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-cms': 2.11.0 + '@peculiar/asn1-pkcs8': 2.11.0 + '@peculiar/asn1-rsa': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-pkcs8@2.10.0': + '@peculiar/asn1-pkcs8@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-pkcs9@2.10.0': + '@peculiar/asn1-pkcs9@2.11.0': dependencies: - '@peculiar/asn1-cms': 2.10.0 - '@peculiar/asn1-pfx': 2.10.0 - '@peculiar/asn1-pkcs8': 2.10.0 - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - '@peculiar/asn1-x509-attr': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-cms': 2.11.0 + '@peculiar/asn1-pfx': 2.11.0 + '@peculiar/asn1-pkcs8': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + '@peculiar/asn1-x509-attr': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-rsa@2.10.0': + '@peculiar/asn1-rsa@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-schema@2.10.0': + '@peculiar/asn1-schema@2.11.0': dependencies: '@peculiar/utils': 2.0.3 - asn1js: 3.0.10 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-x509-attr@2.10.0': + '@peculiar/asn1-x509-attr@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-x509-post-quantum@2.10.0': + '@peculiar/asn1-x509-post-quantum@2.11.0': dependencies: - '@peculiar/asn1-asym-key': 2.10.0 - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - asn1js: 3.0.10 + '@peculiar/asn1-asym-key': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + asn1js: 3.1.0 tslib: 2.8.1 - '@peculiar/asn1-x509@2.10.0': + '@peculiar/asn1-x509@2.11.0': dependencies: - '@peculiar/asn1-schema': 2.10.0 + '@peculiar/asn1-schema': 2.11.0 '@peculiar/utils': 2.0.3 - asn1js: 3.0.10 + asn1js: 3.1.0 tslib: 2.8.1 '@peculiar/json-schema@1.1.12': @@ -5537,22 +5527,22 @@ snapshots: '@peculiar/webcrypto@1.7.1': dependencies: - '@peculiar/asn1-schema': 2.10.0 + '@peculiar/asn1-schema': 2.11.0 '@peculiar/json-schema': 1.1.12 '@peculiar/utils': 2.0.3 tslib: 2.8.1 webcrypto-core: 1.9.2 - '@peculiar/x509@2.1.0': + '@peculiar/x509@2.2.0': dependencies: - '@peculiar/asn1-cms': 2.10.0 - '@peculiar/asn1-csr': 2.10.0 - '@peculiar/asn1-ecc': 2.10.0 - '@peculiar/asn1-pkcs9': 2.10.0 - '@peculiar/asn1-rsa': 2.10.0 - '@peculiar/asn1-schema': 2.10.0 - '@peculiar/asn1-x509': 2.10.0 - '@peculiar/asn1-x509-post-quantum': 2.10.0 + '@peculiar/asn1-cms': 2.11.0 + '@peculiar/asn1-csr': 2.11.0 + '@peculiar/asn1-ecc': 2.11.0 + '@peculiar/asn1-pkcs9': 2.11.0 + '@peculiar/asn1-rsa': 2.11.0 + '@peculiar/asn1-schema': 2.11.0 + '@peculiar/asn1-x509': 2.11.0 + '@peculiar/asn1-x509-post-quantum': 2.11.0 pvtsutils: 1.3.6 tslib: 2.8.1 tsyringe: 4.10.0 @@ -5561,22 +5551,23 @@ snapshots: dependencies: tinyexec: 1.3.1 - '@react-native/asset-utils@0.87.1': {} + '@react-native/asset-utils@0.88.0': {} - '@react-native/codegen@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))': + '@react-native/codegen@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))': dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/parser': 7.29.9 - hermes-parser: 0.36.1 + flow-parser: 0.327.0 invariant: 2.2.4 nullthrows: 1.1.1 tinyglobby: 0.2.17 yargs: 17.7.3 - '@react-native/community-cli-plugin@0.87.1(supports-color@10.2.2)': + '@react-native/community-cli-plugin@0.88.0(supports-color@10.2.2)': dependencies: - '@react-native/asset-utils': 0.87.1 - '@react-native/dev-middleware': 0.87.1(supports-color@10.2.2) + '@react-native/asset-utils': 0.88.0 + '@react-native/dev-middleware': 0.88.0(supports-color@10.2.2) + commander: 12.1.0 debug: 4.4.3(supports-color@10.2.2) invariant: 2.2.4 metro: 0.87.1(supports-color@10.2.2) @@ -5586,9 +5577,9 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.87.1': {} + '@react-native/debugger-frontend@0.88.0': {} - '@react-native/debugger-shell@0.87.1(supports-color@10.2.2)': + '@react-native/debugger-shell@0.88.0(supports-color@10.2.2)': dependencies: cross-spawn: 7.0.6 debug: 4.4.3(supports-color@10.2.2) @@ -5596,18 +5587,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/dev-middleware@0.87.1(supports-color@10.2.2)': + '@react-native/dev-middleware@0.88.0(supports-color@10.2.2)': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.87.1 - '@react-native/debugger-shell': 0.87.1(supports-color@10.2.2) - chrome-launcher: 0.15.2(supports-color@10.2.2) - chromium-edge-launcher: 0.3.0(supports-color@10.2.2) + '@react-native/debugger-frontend': 0.88.0 + '@react-native/debugger-shell': 0.88.0(supports-color@10.2.2) connect: 3.7.0(supports-color@10.2.2) debug: 4.4.3(supports-color@10.2.2) invariant: 2.2.4 nullthrows: 1.1.1 - open: 7.4.2 + open: 8.4.2 serve-static: 1.16.3(supports-color@10.2.2) ws: 7.5.13 transitivePeerDependencies: @@ -5615,67 +5604,67 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.87.1': {} + '@react-native/gradle-plugin@0.88.0': {} - '@react-native/normalize-colors@0.87.1': {} + '@react-native/normalize-colors@0.88.0': {} - '@react-native/virtualized-lists@0.87.1(@types/react@19.3.0)(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0)': + '@react-native/virtualized-lists@0.88.0(@types/react@19.3.0)(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(react@19.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react: 19.3.0 - react-native: 0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2) + react: 19.3.1 + react-native: 0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2) optionalDependencies: '@types/react': 19.3.0 - '@rolldown/binding-android-arm-eabi@1.2.12': + '@rolldown/binding-android-arm-eabi@1.2.15': optional: true - '@rolldown/binding-android-arm64@1.2.12': + '@rolldown/binding-android-arm64@1.2.15': optional: true - '@rolldown/binding-darwin-arm64@1.2.12': + '@rolldown/binding-darwin-arm64@1.2.15': optional: true - '@rolldown/binding-darwin-x64@1.2.12': + '@rolldown/binding-darwin-x64@1.2.15': optional: true - '@rolldown/binding-freebsd-x64@1.2.12': + '@rolldown/binding-freebsd-x64@1.2.15': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.12': + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.12': + '@rolldown/binding-linux-arm64-gnu@1.2.15': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.12': + '@rolldown/binding-linux-arm64-musl@1.2.15': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.12': + '@rolldown/binding-linux-ppc64-gnu@1.2.15': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.12': + '@rolldown/binding-linux-s390x-gnu@1.2.15': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.12': + '@rolldown/binding-linux-x64-gnu@1.2.15': optional: true - '@rolldown/binding-linux-x64-musl@1.2.12': + '@rolldown/binding-linux-x64-musl@1.2.15': optional: true - '@rolldown/binding-openharmony-arm64@1.2.12': + '@rolldown/binding-openharmony-arm64@1.2.15': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.12': + '@rolldown/binding-win32-arm64-msvc@1.2.15': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.12': + '@rolldown/binding-win32-x64-msvc@1.2.15': optional: true '@rolldown/pluginutils@1.0.1': {} - '@rushstack/node-core-library@5.25.0(@types/node@26.6.5)': + '@rushstack/node-core-library@5.25.1(@types/node@26.6.5)': dependencies: ajv: 8.20.0 ajv-draft-04: 1.0.0(ajv@8.20.0) @@ -5683,7 +5672,7 @@ snapshots: fs-extra: 11.3.6 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.12 + resolve: 1.22.13 semver: 7.7.4 optionalDependencies: '@types/node': 26.6.5 @@ -5692,22 +5681,22 @@ snapshots: optionalDependencies: '@types/node': 26.6.5 - '@rushstack/rig-package@0.7.3': + '@rushstack/rig-package@0.7.4': dependencies: jju: 1.4.0 - resolve: 1.22.12 + resolve: 1.22.13 - '@rushstack/terminal@0.24.6(@types/node@26.6.5)': + '@rushstack/terminal@0.24.7(@types/node@26.6.5)': dependencies: - '@rushstack/node-core-library': 5.25.0(@types/node@26.6.5) + '@rushstack/node-core-library': 5.25.1(@types/node@26.6.5) '@rushstack/problem-matcher': 0.2.1(@types/node@26.6.5) supports-color: 8.1.1 optionalDependencies: '@types/node': 26.6.5 - '@rushstack/ts-command-line@5.3.16(@types/node@26.6.5)': + '@rushstack/ts-command-line@5.3.17(@types/node@26.6.5)': dependencies: - '@rushstack/terminal': 0.24.6(@types/node@26.6.5) + '@rushstack/terminal': 0.24.7(@types/node@26.6.5) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -5781,19 +5770,21 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 - '@tailwindcss/vite@4.3.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@tailwindcss/vite@4.3.3(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@tailwindcss/node': 4.3.3 '@tailwindcss/oxide': 4.3.3 tailwindcss: 4.3.3 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) - '@tanstack/query-core@5.104.0': {} + '@tanstack/query-core@5.104.5': {} - '@tanstack/react-query@5.104.0(react@19.3.0)': + '@tanstack/react-query@5.104.5(@types/react@19.3.0)(react@19.3.1)': dependencies: - '@tanstack/query-core': 5.104.0 - react: 19.3.0 + '@tanstack/query-core': 5.104.5 + react: 19.3.1 + optionalDependencies: + '@types/react': 19.3.0 '@tybys/wasm-util@0.10.4': dependencies: @@ -5855,30 +5846,30 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.71.0 - '@typescript-eslint/type-utils': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/utils': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.71.0 - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) - ignore: 7.0.11 + '@typescript-eslint/parser': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/type-utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.72.0 + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) + ignore: 7.0.13 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.71.0 - '@typescript-eslint/types': 8.71.0 - '@typescript-eslint/typescript-estree': 8.71.0(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.71.0 + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.72.0 debug: 4.4.3(supports-color@10.2.2) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5892,10 +5883,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.71.0(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/project-service@8.72.0(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.71.0(typescript@6.0.3) - '@typescript-eslint/types': 8.71.0 + '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: @@ -5906,26 +5897,26 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 - '@typescript-eslint/scope-manager@8.71.0': + '@typescript-eslint/scope-manager@8.72.0': dependencies: - '@typescript-eslint/types': 8.71.0 - '@typescript-eslint/visitor-keys': 8.71.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/tsconfig-utils@8.71.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.72.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.71.0 - '@typescript-eslint/typescript-estree': 8.71.0(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/utils': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) debug: 4.4.3(supports-color@10.2.2) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -5933,7 +5924,7 @@ snapshots: '@typescript-eslint/types@8.56.1': {} - '@typescript-eslint/types@8.71.0': {} + '@typescript-eslint/types@8.72.0': {} '@typescript-eslint/typescript-estree@8.56.1(supports-color@10.2.2)(typescript@6.0.3)': dependencies: @@ -5950,12 +5941,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.71.0(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.72.0(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.71.0(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.71.0(typescript@6.0.3) - '@typescript-eslint/types': 8.71.0 - '@typescript-eslint/visitor-keys': 8.71.0 + '@typescript-eslint/project-service': 8.72.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@6.0.3) + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/visitor-keys': 8.72.0 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.6 semver: 7.8.5 @@ -5965,24 +5956,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/utils@8.56.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 '@typescript-eslint/typescript-estree': 8.56.1(supports-color@10.2.2)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/utils@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) - '@typescript-eslint/scope-manager': 8.71.0 - '@typescript-eslint/types': 8.71.0 - '@typescript-eslint/typescript-estree': 8.71.0(supports-color@10.2.2)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5992,9 +5983,9 @@ snapshots: '@typescript-eslint/types': 8.56.1 eslint-visitor-keys: 5.0.1 - '@typescript-eslint/visitor-keys@8.71.0': + '@typescript-eslint/visitor-keys@8.72.0': dependencies: - '@typescript-eslint/types': 8.71.0 + '@typescript-eslint/types': 8.72.0 eslint-visitor-keys: 5.0.1 '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260707.2': @@ -6028,38 +6019,38 @@ snapshots: '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260707.2 '@typescript/native-preview-win32-x64': 7.0.0-dev.20260707.2 - '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) - '@vitejs/plugin-react@6.1.1(oxc-transform-react@0.152.0)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitejs/plugin-react@6.1.2(oxc-transform-react@0.155.0)(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) optionalDependencies: - oxc-transform-react: 0.152.0 + oxc-transform-react: 0.155.0 - '@vitest/coverage-v8@5.0.3(vitest@5.0.3)': + '@vitest/coverage-v8@5.0.5(vitest@5.0.5)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/istanbul-lib-coverage': 1.0.2 '@vitest/istanbul-lib-report': 1.0.2 ast-v8-to-istanbul: 1.0.7 magicast: 0.5.5 - obug: 2.2.1 + obug: 3.0.0 std-env: 4.3.0 tinyrainbow: 3.2.0 - vitest: 5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) - '@vitest/eslint-plugin@1.6.27(@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(vitest@5.0.3)': + '@vitest/eslint-plugin@1.6.28(@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)(vitest@5.0.5)': dependencies: - '@typescript-eslint/scope-manager': 8.71.0 - '@typescript-eslint/utils': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + '@typescript-eslint/scope-manager': 8.72.0 + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) typescript: 6.0.3 - vitest: 5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + vitest: 5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) transitivePeerDependencies: - supports-color @@ -6069,16 +6060,16 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.2 - '@vitest/mocker@5.0.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': + '@vitest/mocker@5.0.5(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1))': dependencies: '@jridgewell/trace-mapping': 0.3.31 - '@vitest/spy': 5.0.3 + '@vitest/spy': 5.0.5 estree-walker: 3.0.3 - magic-string: 1.4.2 + magic-string: 1.4.3 optionalDependencies: - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) - '@vitest/spy@5.0.3': {} + '@vitest/spy@5.0.5': {} abitype@0.8.7(typescript@6.0.3)(zod@4.6.6): dependencies: @@ -6095,19 +6086,19 @@ snapshots: acorn-jsx-walk@2.0.0: {} - acorn-jsx@5.3.2(acorn@8.18.0): + acorn-jsx@5.3.2(acorn@8.19.0): dependencies: - acorn: 8.18.0 + acorn: 8.19.0 acorn-loose@8.5.2: dependencies: - acorn: 8.18.0 + acorn: 8.19.0 acorn-walk@8.3.5: dependencies: - acorn: 8.18.0 + acorn: 8.19.0 - acorn@8.18.0: {} + acorn@8.19.0: {} aes-js@4.0.0-beta.5: {} @@ -6166,7 +6157,7 @@ snapshots: asap@2.0.6: {} - asn1js@3.0.10: + asn1js@3.1.0: dependencies: pvtsutils: 1.3.6 pvutils: 1.2.0 @@ -6192,17 +6183,13 @@ snapshots: - debug - supports-color - babel-plugin-syntax-hermes-parser@0.36.1: - dependencies: - hermes-parser: 0.36.1 - balanced-match@4.0.4: {} base-x@5.0.1: {} base64-js@1.5.1: {} - baseline-browser-mapping@2.11.26: {} + baseline-browser-mapping@2.11.31: {} bech32@2.0.0: {} @@ -6211,13 +6198,13 @@ snapshots: uint8array-tools: 0.0.10 varuint-bitcoin: 2.0.1 - bitcoinjs-lib@7.0.2(typescript@6.0.3): + bitcoinjs-lib@7.0.4(typescript@6.0.3): dependencies: '@noble/hashes': 1.8.0 bech32: 2.0.0 bip174: 3.0.1 bs58check: 4.0.0 - uint8array-tools: 0.0.9 + uint8array-tools: 0.0.10 valibot: 1.5.0(typescript@6.0.3) varuint-bitcoin: 2.0.1 transitivePeerDependencies: @@ -6235,13 +6222,13 @@ snapshots: brorand@1.1.0: {} - browserslist@4.29.3: + browserslist@4.29.4: dependencies: - baseline-browser-mapping: 2.11.26 - caniuse-lite: 1.0.30001814 - electron-to-chromium: 1.5.443 - node-releases: 2.0.57 - update-browserslist-db: 1.3.3(browserslist@4.29.3) + baseline-browser-mapping: 2.11.31 + caniuse-lite: 1.0.30001819 + electron-to-chromium: 1.5.463 + node-releases: 2.0.60 + update-browserslist-db: 1.3.4(browserslist@4.29.4) bs58@6.0.0: dependencies: @@ -6252,7 +6239,7 @@ snapshots: '@noble/hashes': 1.8.0 bs58: 6.0.0 - bser@2.1.1: + bser@2.1.2: dependencies: node-int64: 0.4.0 @@ -6279,9 +6266,9 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001814: {} + caniuse-lite@1.0.30001819: {} - cborg@6.1.3: {} + cborg@6.1.4: {} chai@6.3.0: {} @@ -6294,25 +6281,6 @@ snapshots: character-entities@2.0.2: {} - chrome-launcher@0.15.2(supports-color@10.2.2): - dependencies: - '@types/node': 26.6.5 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - - chromium-edge-launcher@0.3.0(supports-color@10.2.2): - dependencies: - '@types/node': 26.6.5 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2(supports-color@10.2.2) - mkdirp: 1.0.4 - transitivePeerDependencies: - - supports-color - ci-info@3.9.0: {} ci-info@4.4.0: {} @@ -6354,11 +6322,11 @@ snapshots: convert-source-map@2.0.0: {} - core-js-compat@3.50.0: + core-js-compat@3.51.0: dependencies: - browserslist: 4.29.3 + browserslist: 4.29.4 - core-js@3.50.0: {} + core-js@3.51.0: {} cross-fetch@4.0.0: dependencies: @@ -6376,7 +6344,7 @@ snapshots: datastore-core@12.0.1: dependencies: - '@libp2p/logger': 6.2.13 + '@libp2p/logger': 6.2.16 abort-error: 1.0.2 interface-datastore: 10.0.1 interface-store: 8.0.0 @@ -6412,6 +6380,8 @@ snapshots: deep-is@0.1.4: {} + define-lazy-prop@2.0.0: {} + delay@7.0.0: dependencies: random-int: 3.1.0 @@ -6421,16 +6391,16 @@ snapshots: depd@2.0.0: {} - dependency-cruiser@18.5.0: + dependency-cruiser@18.7.0: dependencies: - acorn: 8.18.0 - acorn-jsx: 5.3.2(acorn@8.18.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) acorn-jsx-walk: 2.0.0 acorn-loose: 8.5.2 acorn-walk: 8.3.5 commander: 15.0.0 enhanced-resolve: 5.26.0 - ignore: 7.0.11 + ignore: 7.0.12 interpret: 3.1.1 is-installed-globally: 1.0.1 json5: 2.2.3 @@ -6464,7 +6434,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.443: {} + electron-to-chromium@1.5.463: {} elliptic@6.6.1: dependencies: @@ -6516,33 +6486,33 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-promise@7.3.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)): + eslint-plugin-promise@7.3.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) - eslint-plugin-react-hooks@7.1.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2): + eslint-plugin-react-hooks@7.1.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/parser': 7.29.9 - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) hermes-parser: 0.25.1 zod: 4.6.6 zod-validation-error: 4.0.2(zod@4.6.6) transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.5.7(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)): + eslint-plugin-react-refresh@0.5.7(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) - eslint-plugin-regexp@3.3.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)): + eslint-plugin-regexp@3.3.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.9 - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) - jsdoc-type-pratt-parser: 9.2.2 + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) + jsdoc-type-pratt-parser: 9.4.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 @@ -6551,13 +6521,13 @@ snapshots: dependencies: safe-regex: 2.1.1 - eslint-plugin-sonarjs@4.2.2(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)): + eslint-plugin-sonarjs@4.2.2(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)): dependencies: '@eslint-community/regexpp': 4.12.2 '@sonarsource/analyzer-commons-configurations': 2.31.0-5284 builtin-modules: 3.3.0 bytes: 3.1.2 - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) functional-red-black-tree: 1.0.1 globals: 17.13.0 jsx-ast-utils-x: 0.1.0 @@ -6569,28 +6539,28 @@ snapshots: typescript: 6.0.3 yaml: 2.9.1 - eslint-plugin-tsdoc@0.5.4(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): + eslint-plugin-tsdoc@0.5.4(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): dependencies: '@microsoft/tsdoc': 0.17.1 '@microsoft/tsdoc-config': 0.18.3 - '@typescript-eslint/utils': 8.56.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) optionalDependencies: - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-unicorn@78.0.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): + eslint-plugin-unicorn@78.0.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) - '@eslint/css-tree': 4.1.1 - browserslist: 4.29.3 + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) + '@eslint/css-tree': 4.1.2 + browserslist: 4.29.4 change-case: 5.4.4 ci-info: 4.4.0 - core-js-compat: 3.50.0 + core-js-compat: 3.51.0 detect-indent: 7.0.2 entities: 8.1.0 - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) find-up-simple: 1.0.1 globals: 17.13.0 identifier-regex: 1.1.0 @@ -6600,7 +6570,7 @@ snapshots: parse5: 8.0.1 pluralize: 8.0.0 quote-js-string: 0.1.0 - regjsparser: 0.13.3 + regjsparser: 0.13.4 reserved-identifiers: 1.2.0 semver: 7.8.5 strip-indent: 4.1.1 @@ -6621,9 +6591,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2): + eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5(supports-color@10.2.2) '@eslint/config-helpers': 0.7.0 @@ -6660,8 +6630,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.18.0 - acorn-jsx: 5.3.2(acorn@8.18.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) eslint-visitor-keys: 5.0.1 esquery@1.7.0: @@ -6715,9 +6685,9 @@ snapshots: fb-dotslash@0.5.8: {} - fb-watchman@2.0.2: + fb-watchman@2.0.4: dependencies: - bser: 2.1.1 + bser: 2.1.2 fd-package-json@2.0.0: dependencies: @@ -6764,8 +6734,14 @@ snapshots: flow-enums-runtime@0.0.6: {} + flow-estree@0.327.0: {} + flow-estree@0.331.0: {} + flow-parser@0.327.0: + dependencies: + flow-estree: 0.327.0 + flow-parser@0.331.0: dependencies: flow-estree: 0.331.0 @@ -6782,10 +6758,10 @@ snapshots: hasown: 2.0.4 mime-types: 2.1.35 - formatly@0.7.1: + formatly@0.11.4: dependencies: fd-package-json: 2.0.0 - package-manager-detector: 1.8.0 + package-manager-detector: 1.9.0 fresh@0.5.2: {} @@ -6867,20 +6843,14 @@ snapshots: dependencies: function-bind: 1.1.2 - hermes-compiler@250829098.0.17: {} + hermes-compiler@260318099.0.4: {} hermes-estree@0.25.1: {} - hermes-estree@0.36.1: {} - hermes-parser@0.25.1: dependencies: hermes-estree: 0.25.1 - hermes-parser@0.36.1: - dependencies: - hermes-estree: 0.36.1 - hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 @@ -6919,7 +6889,9 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.11: {} + ignore@7.0.12: {} + + ignore@7.0.13: {} import-lazy@4.0.0: {} @@ -7119,45 +7091,44 @@ snapshots: jsc-safe-url@0.2.4: {} - jscpd-darwin-arm64@5.4.0: + jscpd-darwin-arm64@5.4.2: optional: true - jscpd-darwin-x64@5.4.0: + jscpd-darwin-x64@5.4.2: optional: true - jscpd-linux-arm64-gnu@5.4.0: + jscpd-linux-arm64-gnu@5.4.2: optional: true - jscpd-linux-arm64-musl@5.4.0: + jscpd-linux-arm64-musl@5.4.2: optional: true - jscpd-linux-x64-gnu@5.4.0: + jscpd-linux-x64-gnu@5.4.2: optional: true - jscpd-linux-x64-musl@5.4.0: + jscpd-linux-x64-musl@5.4.2: optional: true - jscpd-windows-arm64-msvc@5.4.0: + jscpd-windows-arm64-msvc@5.4.2: optional: true - jscpd-windows-x64-msvc@5.4.0: + jscpd-windows-x64-msvc@5.4.2: optional: true - jscpd@5.4.0: + jscpd@5.4.2: optionalDependencies: - jscpd-darwin-arm64: 5.4.0 - jscpd-darwin-x64: 5.4.0 - jscpd-linux-arm64-gnu: 5.4.0 - jscpd-linux-arm64-musl: 5.4.0 - jscpd-linux-x64-gnu: 5.4.0 - jscpd-linux-x64-musl: 5.4.0 - jscpd-windows-arm64-msvc: 5.4.0 - jscpd-windows-x64-msvc: 5.4.0 + jscpd-darwin-arm64: 5.4.2 + jscpd-darwin-x64: 5.4.2 + jscpd-linux-arm64-gnu: 5.4.2 + jscpd-linux-arm64-musl: 5.4.2 + jscpd-linux-x64-gnu: 5.4.2 + jscpd-linux-x64-musl: 5.4.2 + jscpd-windows-arm64-msvc: 5.4.2 + jscpd-windows-x64-msvc: 5.4.2 - jsdoc-type-pratt-parser@9.2.2: + jsdoc-type-pratt-parser@9.4.0: dependencies: '@types/estree': 1.0.9 - '@types/node': 26.6.5 jsesc@3.1.0: {} @@ -7183,19 +7154,18 @@ snapshots: kleur@3.0.3: {} - knip@6.39.0: + knip@6.42.1: dependencies: - fdir: 6.5.0(picomatch@4.0.7) - formatly: 0.7.1 + formatly: 0.11.4 get-tsconfig: 4.14.3 jiti: 2.7.0 - oxc-parser: 0.150.0 + oxc-parser: 0.154.0 oxc-resolver: 11.24.2 picomatch: 4.0.7 - smol-toml: 1.9.0 + smol-toml: 1.9.1 strip-json-comments: 5.0.3 tinyglobby: 0.2.17 - unbash: 4.0.12 + unbash: 6.0.1 yaml: 2.9.1 zod: 4.6.6 @@ -7206,19 +7176,19 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libp2p@3.3.11: + libp2p@3.5.1: dependencies: '@chainsafe/is-ip': 2.1.0 '@chainsafe/netmask': 2.0.0 - '@libp2p/crypto': 5.1.23 - '@libp2p/interface': 3.3.0 - '@libp2p/interface-internal': 3.1.13 - '@libp2p/logger': 6.2.13 - '@libp2p/multistream-select': 7.0.28 - '@libp2p/peer-collections': 7.0.28 - '@libp2p/peer-id': 6.0.15 - '@libp2p/peer-store': 12.0.28 - '@libp2p/utils': 7.4.1 + '@libp2p/crypto': 5.2.0 + '@libp2p/interface': 3.4.0 + '@libp2p/interface-internal': 3.2.2 + '@libp2p/logger': 6.2.16 + '@libp2p/multistream-select': 7.0.32 + '@libp2p/peer-collections': 7.0.32 + '@libp2p/peer-id': 6.0.18 + '@libp2p/peer-store': 12.0.32 + '@libp2p/utils': 7.4.5 '@multiformats/dns': 1.0.15 '@multiformats/multiaddr': 13.0.3 '@multiformats/multiaddr-matcher': 3.0.2 @@ -7230,19 +7200,12 @@ snapshots: main-event: 1.0.5 multiformats: 14.0.5 p-defer: 4.0.1 - p-event: 7.1.1 + p-event: 8.0.1 p-retry: 8.0.1 progress-events: 1.1.0 race-signal: 2.0.2 uint8arrays: 6.1.1 - lighthouse-logger@1.4.2(supports-color@10.2.2): - dependencies: - debug: 2.6.9(supports-color@10.2.2) - marky: 1.3.0 - transitivePeerDependencies: - - supports-color - lightningcss-android-arm64@1.32.0: optional: true @@ -7377,7 +7340,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 - magic-string@1.4.2: + magic-string@1.4.3: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 @@ -7389,11 +7352,9 @@ snapshots: main-event@1.0.5: {} - marky@1.3.0: {} - math-intrinsics@1.1.0: {} - mdn-data@2.35.0: {} + mdn-data@2.37.2: {} memoize-one@5.2.1: {} @@ -7445,7 +7406,7 @@ snapshots: metro-file-map@0.87.1(supports-color@10.2.2): dependencies: debug: 4.4.3(supports-color@10.2.2) - fb-watchman: 2.0.2 + fb-watchman: 2.0.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 invariant: 2.2.4 @@ -7466,12 +7427,12 @@ snapshots: metro-runtime@0.87.1: dependencies: - '@babel/runtime': 7.29.7 + '@babel/runtime': 7.29.10 flow-enums-runtime: 0.0.6 metro-source-map@0.87.1(supports-color@10.2.2): dependencies: - '@babel/traverse': 7.29.8(supports-color@10.2.2) + '@babel/traverse': 7.29.10(supports-color@10.2.2) '@babel/types': 7.29.8 flow-enums-runtime: 0.0.6 invariant: 2.2.4 @@ -7497,7 +7458,7 @@ snapshots: '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/generator': 7.29.8 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@10.2.2) + '@babel/traverse': 7.29.10(supports-color@10.2.2) flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -7530,7 +7491,7 @@ snapshots: '@babel/generator': 7.29.8 '@babel/parser': 7.29.9 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.8(supports-color@10.2.2) + '@babel/traverse': 7.29.10(supports-color@10.2.2) '@babel/types': 7.29.8 accepts: 2.0.0 connect: 3.7.0(supports-color@10.2.2) @@ -7732,8 +7693,6 @@ snapshots: minimist@1.2.8: {} - mkdirp@1.0.4: {} - mortice@3.3.1: dependencies: abort-error: 1.0.2 @@ -7756,7 +7715,7 @@ snapshots: nanoid@3.3.20: {} - nanoid@6.0.1: {} + nanoid@6.0.2: {} natural-compare@1.4.0: {} @@ -7786,7 +7745,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.57: {} + node-releases@2.0.60: {} node@runtime:26.12.1: {} @@ -7796,18 +7755,19 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 - obug@2.2.1: {} + obug@3.0.0: {} on-finished@2.3.0: dependencies: ee-first: 1.1.1 - on-finished@2.4.1: + on-finished@2.4.2: dependencies: ee-first: 1.1.1 - open@7.4.2: + open@8.4.2: dependencies: + define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 @@ -7820,29 +7780,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxc-parser@0.150.0: + oxc-parser@0.154.0: dependencies: - '@oxc-project/types': 0.150.0 + '@oxc-project/types': 0.154.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.150.0 - '@oxc-parser/binding-android-arm64': 0.150.0 - '@oxc-parser/binding-darwin-arm64': 0.150.0 - '@oxc-parser/binding-darwin-x64': 0.150.0 - '@oxc-parser/binding-freebsd-x64': 0.150.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.150.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.150.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.150.0 - '@oxc-parser/binding-linux-arm64-musl': 0.150.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.150.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.150.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.150.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.150.0 - '@oxc-parser/binding-linux-x64-gnu': 0.150.0 - '@oxc-parser/binding-linux-x64-musl': 0.150.0 - '@oxc-parser/binding-openharmony-arm64': 0.150.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.150.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.150.0 - '@oxc-parser/binding-win32-x64-msvc': 0.150.0 + '@oxc-parser/binding-android-arm-eabi': 0.154.0 + '@oxc-parser/binding-android-arm64': 0.154.0 + '@oxc-parser/binding-darwin-arm64': 0.154.0 + '@oxc-parser/binding-darwin-x64': 0.154.0 + '@oxc-parser/binding-freebsd-x64': 0.154.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.154.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.154.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.154.0 + '@oxc-parser/binding-linux-arm64-musl': 0.154.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.154.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.154.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.154.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.154.0 + '@oxc-parser/binding-linux-x64-gnu': 0.154.0 + '@oxc-parser/binding-linux-x64-musl': 0.154.0 + '@oxc-parser/binding-openharmony-arm64': 0.154.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.154.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.154.0 + '@oxc-parser/binding-win32-x64-msvc': 0.154.0 oxc-resolver@11.24.2: optionalDependencies: @@ -7866,27 +7826,27 @@ snapshots: '@oxc-resolver/binding-win32-arm64-msvc': 11.24.2 '@oxc-resolver/binding-win32-x64-msvc': 11.24.2 - oxc-transform-react@0.152.0: + oxc-transform-react@0.155.0: optionalDependencies: - '@oxc-transform-react/binding-android-arm-eabi': 0.152.0 - '@oxc-transform-react/binding-android-arm64': 0.152.0 - '@oxc-transform-react/binding-darwin-arm64': 0.152.0 - '@oxc-transform-react/binding-darwin-x64': 0.152.0 - '@oxc-transform-react/binding-freebsd-x64': 0.152.0 - '@oxc-transform-react/binding-linux-arm-gnueabihf': 0.152.0 - '@oxc-transform-react/binding-linux-arm-musleabihf': 0.152.0 - '@oxc-transform-react/binding-linux-arm64-gnu': 0.152.0 - '@oxc-transform-react/binding-linux-arm64-musl': 0.152.0 - '@oxc-transform-react/binding-linux-ppc64-gnu': 0.152.0 - '@oxc-transform-react/binding-linux-riscv64-gnu': 0.152.0 - '@oxc-transform-react/binding-linux-riscv64-musl': 0.152.0 - '@oxc-transform-react/binding-linux-s390x-gnu': 0.152.0 - '@oxc-transform-react/binding-linux-x64-gnu': 0.152.0 - '@oxc-transform-react/binding-linux-x64-musl': 0.152.0 - '@oxc-transform-react/binding-openharmony-arm64': 0.152.0 - '@oxc-transform-react/binding-win32-arm64-msvc': 0.152.0 - '@oxc-transform-react/binding-win32-ia32-msvc': 0.152.0 - '@oxc-transform-react/binding-win32-x64-msvc': 0.152.0 + '@oxc-transform-react/binding-android-arm-eabi': 0.155.0 + '@oxc-transform-react/binding-android-arm64': 0.155.0 + '@oxc-transform-react/binding-darwin-arm64': 0.155.0 + '@oxc-transform-react/binding-darwin-x64': 0.155.0 + '@oxc-transform-react/binding-freebsd-x64': 0.155.0 + '@oxc-transform-react/binding-linux-arm-gnueabihf': 0.155.0 + '@oxc-transform-react/binding-linux-arm-musleabihf': 0.155.0 + '@oxc-transform-react/binding-linux-arm64-gnu': 0.155.0 + '@oxc-transform-react/binding-linux-arm64-musl': 0.155.0 + '@oxc-transform-react/binding-linux-ppc64-gnu': 0.155.0 + '@oxc-transform-react/binding-linux-riscv64-gnu': 0.155.0 + '@oxc-transform-react/binding-linux-riscv64-musl': 0.155.0 + '@oxc-transform-react/binding-linux-s390x-gnu': 0.155.0 + '@oxc-transform-react/binding-linux-x64-gnu': 0.155.0 + '@oxc-transform-react/binding-linux-x64-musl': 0.155.0 + '@oxc-transform-react/binding-openharmony-arm64': 0.155.0 + '@oxc-transform-react/binding-win32-arm64-msvc': 0.155.0 + '@oxc-transform-react/binding-win32-ia32-msvc': 0.155.0 + '@oxc-transform-react/binding-win32-x64-msvc': 0.155.0 p-defer@4.0.1: {} @@ -7894,6 +7854,10 @@ snapshots: dependencies: p-timeout: 7.0.2 + p-event@8.0.1: + dependencies: + p-timeout: 7.0.2 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -7902,7 +7866,7 @@ snapshots: dependencies: p-limit: 3.1.0 - p-queue@9.3.3: + p-queue@9.3.5: dependencies: eventemitter3: 5.0.4 p-timeout: 7.0.2 @@ -7915,7 +7879,7 @@ snapshots: p-wait-for@6.0.0: {} - package-manager-detector@1.8.0: {} + package-manager-detector@1.9.0: {} parse5@8.0.1: dependencies: @@ -7937,7 +7901,7 @@ snapshots: pluralize@8.0.0: {} - postcss@8.5.30: + postcss@8.5.31: dependencies: nanoid: 3.3.20 picocolors: 1.1.1 @@ -7945,18 +7909,18 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-organize-imports@4.3.0(prettier@3.9.9)(typescript@6.0.3): + prettier-plugin-organize-imports@4.3.0(prettier@3.9.10)(typescript@6.0.3): dependencies: - prettier: 3.9.9 + prettier: 3.9.10 typescript: 6.0.3 - prettier-plugin-tailwindcss@0.8.1(prettier-plugin-organize-imports@4.3.0(prettier@3.9.9)(typescript@6.0.3))(prettier@3.9.9): + prettier-plugin-tailwindcss@0.8.1(prettier-plugin-organize-imports@4.3.0(prettier@3.9.10)(typescript@6.0.3))(prettier@3.9.10): dependencies: - prettier: 3.9.9 + prettier: 3.9.10 optionalDependencies: - prettier-plugin-organize-imports: 4.3.0(prettier@3.9.9)(typescript@6.0.3) + prettier-plugin-organize-imports: 4.3.0(prettier@3.9.10)(typescript@6.0.3) - prettier@3.9.9: {} + prettier@3.9.10: {} pretty-format@29.7.0: dependencies: @@ -7989,10 +7953,10 @@ snapshots: proxy-from-env@2.1.0: {} - publint@0.3.24: + publint@0.3.25: dependencies: '@publint/pack': 0.1.7 - package-manager-detector: 1.8.0 + package-manager-detector: 1.9.0 picocolors: 1.1.1 sade: 1.8.1 @@ -8032,36 +7996,35 @@ snapshots: - bufferutil - utf-8-validate - react-dom@19.3.0(react@19.3.0): + react-dom@19.3.1(react@19.3.1): dependencies: - react: 19.3.0 + react: 19.3.1 scheduler: 0.28.0 react-is@18.3.1: {} - react-native-webrtc@124.0.8(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(supports-color@10.2.2): + react-native-webrtc@124.0.8(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: base64-js: 1.5.1 debug: 4.3.4(supports-color@10.2.2) - react-native: 0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2) + react-native: 0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2) transitivePeerDependencies: - supports-color - react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2): + react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2): dependencies: - '@react-native/asset-utils': 0.87.1 - '@react-native/codegen': 0.87.1(@babel/core@7.29.7(supports-color@10.2.2)) - '@react-native/community-cli-plugin': 0.87.1(supports-color@10.2.2) - '@react-native/gradle-plugin': 0.87.1 - '@react-native/normalize-colors': 0.87.1 - '@react-native/virtualized-lists': 0.87.1(@types/react@19.3.0)(react-native@0.87.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.0)(supports-color@10.2.2))(react@19.3.0) + '@react-native/asset-utils': 0.88.0 + '@react-native/codegen': 0.88.0(@babel/core@7.29.7(supports-color@10.2.2)) + '@react-native/community-cli-plugin': 0.88.0(supports-color@10.2.2) + '@react-native/gradle-plugin': 0.88.0 + '@react-native/normalize-colors': 0.88.0 + '@react-native/virtualized-lists': 0.88.0(@types/react@19.3.0)(react-native@0.88.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/react@19.3.0)(react@19.3.1)(supports-color@10.2.2))(react@19.3.1) anser: 1.4.10 ansi-regex: 5.0.1 - babel-plugin-syntax-hermes-parser: 0.36.1 base64-js: 1.5.1 - commander: 12.1.0 flow-enums-runtime: 0.0.6 - hermes-compiler: 250829098.0.17 + flow-parser: 0.327.0 + hermes-compiler: 260318099.0.4 invariant: 2.2.4 memoize-one: 5.2.1 metro-runtime: 0.87.1 @@ -8069,11 +8032,11 @@ snapshots: nullthrows: 1.1.1 pretty-format: 29.7.0 promise: 8.3.0 - react: 19.3.0 + react: 19.3.1 react-devtools-core: 6.1.5 react-refresh: 0.14.2 regenerator-runtime: 0.13.11 - scheduler: 0.27.0 + scheduler: 0.28.0 semver: 7.8.5 stacktrace-parser: 0.1.11 tinyglobby: 0.2.17 @@ -8092,11 +8055,11 @@ snapshots: react-refresh@0.14.2: {} - react@19.3.0: {} + react@19.3.1: {} rechoir@0.8.0: dependencies: - resolve: 1.22.12 + resolve: 1.22.13 refa@0.12.1: dependencies: @@ -8113,7 +8076,7 @@ snapshots: regexp-tree@0.1.27: {} - regjsparser@0.13.3: + regjsparser@0.13.4: dependencies: jsesc: 3.1.0 @@ -8125,7 +8088,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.12: + resolve@1.22.13: dependencies: es-errors: 1.3.0 is-core-module: 2.17.0 @@ -8134,26 +8097,26 @@ snapshots: retimeable-signal@1.0.1: {} - rolldown@1.2.12: + rolldown@1.2.15: dependencies: - '@oxc-project/types': 0.152.0 + '@oxc-project/types': 0.155.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm-eabi': 1.2.12 - '@rolldown/binding-android-arm64': 1.2.12 - '@rolldown/binding-darwin-arm64': 1.2.12 - '@rolldown/binding-darwin-x64': 1.2.12 - '@rolldown/binding-freebsd-x64': 1.2.12 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.12 - '@rolldown/binding-linux-arm64-gnu': 1.2.12 - '@rolldown/binding-linux-arm64-musl': 1.2.12 - '@rolldown/binding-linux-ppc64-gnu': 1.2.12 - '@rolldown/binding-linux-s390x-gnu': 1.2.12 - '@rolldown/binding-linux-x64-gnu': 1.2.12 - '@rolldown/binding-linux-x64-musl': 1.2.12 - '@rolldown/binding-openharmony-arm64': 1.2.12 - '@rolldown/binding-win32-arm64-msvc': 1.2.12 - '@rolldown/binding-win32-x64-msvc': 1.2.12 + '@rolldown/binding-android-arm-eabi': 1.2.15 + '@rolldown/binding-android-arm64': 1.2.15 + '@rolldown/binding-darwin-arm64': 1.2.15 + '@rolldown/binding-darwin-x64': 1.2.15 + '@rolldown/binding-freebsd-x64': 1.2.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.15 + '@rolldown/binding-linux-arm64-gnu': 1.2.15 + '@rolldown/binding-linux-arm64-musl': 1.2.15 + '@rolldown/binding-linux-ppc64-gnu': 1.2.15 + '@rolldown/binding-linux-s390x-gnu': 1.2.15 + '@rolldown/binding-linux-x64-gnu': 1.2.15 + '@rolldown/binding-linux-x64-musl': 1.2.15 + '@rolldown/binding-openharmony-arm64': 1.2.15 + '@rolldown/binding-win32-arm64-msvc': 1.2.15 + '@rolldown/binding-win32-x64-msvc': 1.2.15 sade@1.8.1: dependencies: @@ -8167,8 +8130,6 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - scheduler@0.27.0: {} - scheduler@0.28.0: {} scslre@0.3.0: @@ -8195,7 +8156,7 @@ snapshots: http-errors: 2.0.1 mime: 1.6.0 ms: 2.1.3 - on-finished: 2.4.1 + on-finished: 2.4.2 range-parser: 1.2.1 statuses: 2.0.2 transitivePeerDependencies: @@ -8224,7 +8185,7 @@ snapshots: sisteransi@1.0.5: {} - smol-toml@1.9.0: {} + smol-toml@1.9.1: {} source-map-js@1.2.2: {} @@ -8288,13 +8249,13 @@ snapshots: terser@5.51.2: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.18.0 + acorn: 8.19.0 commander: 2.20.3 source-map-support: 0.5.21 throat@5.0.0: {} - tinybench@6.2.0: {} + tinybench@6.2.2: {} tinyexec@1.3.1: {} @@ -8354,13 +8315,13 @@ snapshots: type-fest@4.6.0: {} - typescript-eslint@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): + typescript-eslint@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.71.0(@typescript-eslint/parser@8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/parser': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.71.0(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/utils': 8.71.0(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - eslint: 10.11.0(jiti@2.7.0)(supports-color@10.2.2) + '@typescript-eslint/eslint-plugin': 8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/parser': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.72.0(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.0(eslint@10.13.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.13.0(jiti@2.7.0)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -8383,8 +8344,6 @@ snapshots: uint8array-tools@0.0.10: {} - uint8array-tools@0.0.9: {} - uint8arraylist@2.4.9: dependencies: uint8arrays: 5.1.1 @@ -8401,7 +8360,7 @@ snapshots: dependencies: multiformats: 14.0.5 - unbash@4.0.12: {} + unbash@6.0.1: {} uncrypto@0.1.3: {} @@ -8415,9 +8374,9 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.3.3(browserslist@4.29.3): + update-browserslist-db@1.3.4(browserslist@4.29.4): dependencies: - browserslist: 4.29.3 + browserslist: 4.29.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -8439,12 +8398,12 @@ snapshots: dependencies: uint8array-tools: 0.0.10 - vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): + vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 - postcss: 8.5.30 - rolldown: 1.2.12 + postcss: 8.5.31 + rolldown: 1.2.15 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 26.6.5 @@ -8453,25 +8412,25 @@ snapshots: terser: 5.51.2 yaml: 2.9.1 - vitest@5.0.3(@types/node@26.6.5)(@vitest/coverage-v8@5.0.3)(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): + vitest@5.0.5(@types/node@26.6.5)(@vitest/coverage-v8@5.0.5)(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.3(vite@8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) + '@vitest/mocker': 5.0.5(vite@8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1)) chai: 6.3.0 es-module-lexer: 2.3.2 expect-type: 1.4.0 - magic-string: 1.4.2 - obug: 2.2.1 + magic-string: 1.4.3 + obug: 3.0.0 picomatch: 4.0.7 std-env: 4.3.0 - tinybench: 6.2.0 + tinybench: 6.2.2 tinyexec: 1.3.1 tinyglobby: 0.2.17 - vite: 8.3.4(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) + vite: 8.3.5(@types/node@26.6.5)(jiti@2.7.0)(terser@5.51.2)(yaml@2.9.1) why-is-node-running: 3.2.1 optionalDependencies: '@types/node': 26.6.5 - '@vitest/coverage-v8': 5.0.3(vitest@5.0.3) + '@vitest/coverage-v8': 5.0.5(vitest@5.0.5) transitivePeerDependencies: - msw @@ -8488,10 +8447,10 @@ snapshots: webcrypto-core@1.9.2: dependencies: - '@peculiar/asn1-schema': 2.10.0 + '@peculiar/asn1-schema': 2.11.0 '@peculiar/json-schema': 1.1.12 '@peculiar/utils': 2.0.3 - asn1js: 3.0.10 + asn1js: 3.1.0 tslib: 2.8.1 webidl-conversions@3.0.1: {} From 04e991cff7142bf434116863e7839a0aa6cc6938 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 23:01:45 +0100 Subject: [PATCH 30/32] docs(release): a rerun is wrong once a later release of the package has run Rerunning an older failed deploy or publish would put a superseded bundle or version back in front (Opus audit of 78f4aef7, B). --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4d3c4d8..c9c93bc9 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ A push to the default branch releases a package only when its version differs fr - A change to `sdk/package.json` publishes `@ickb/sdk` to npm through trusted publishing, with provenance and no registry token in the workflow. - A change to `interface/package.json` builds the interface again and deploys it to GitHub Pages at `ickb.org`. -Both jobs require the gate to pass, then build their package again in a fresh job where none of the gate's tooling runs; the SDK job installs only the SDK's declared dependencies, resolved from the lockfile by `pnpm deploy`. Other merges release nothing. If a release job fails, rerun that run's failed jobs: the next merge compares with its own parent and releases nothing. The ruleset admits only merge commits of pull requests, whose first parent is the previous tip, so comparing with it covers the whole change. Tags, a manual trigger or a second confirmation environment would add another release step for the same maintainer without another reviewer. A mistaken publish still consumes a version number and needs a bump. +Both jobs require the gate to pass, then build their package again in a fresh job where none of the gate's tooling runs; the SDK job installs only the SDK's declared dependencies, resolved from the lockfile by `pnpm deploy`. Other merges release nothing. If a release job fails, rerun that run's failed jobs, unless a later release of the same package has already run: the next merge compares with its own parent and releases nothing. The ruleset admits only merge commits of pull requests, whose first parent is the previous tip, so comparing with it covers the whole change. Tags, a manual trigger or a second confirmation environment would add another release step for the same maintainer without another reviewer. A mistaken publish still consumes a version number and needs a bump. The rewrite's versioned packages start at `9000.0.1`, above the old `@ickb/sdk` line at `1000.0.82` (`9000.0.0` was never published: its release run failed before the settings below existed). The new API is not a patch of the old one, and keeping the package name avoids changing integrators' install lines. The high version preserves increasing version order; it is not a stability claim. A future lower-numbered line would need deliberate dist-tag management and would not satisfy a consumer's `^9000` range. From 3f69d9bfe7be663222f623f67a92a815ce1571f7 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 23:07:02 +0100 Subject: [PATCH 31/32] chore(deps): drop the esbuild override, its build approval and the image-size ignores None matches an installed package: no esbuild or @esbuild/* and no image-size appears in the lockfile, so the override only rewrote vite's optional peer range and the two advisory ignores silenced nothing (Opus review of 748389fa). The braces ignore under the same React Native chain stays while that package is present. --- pnpm-lock.yaml | 3 +-- pnpm-workspace.yaml | 12 ++---------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4cd579d..a0122bcb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -183,7 +183,6 @@ catalogs: overrides: axios@>=1.0.0 <1.20.0: 1.20.0 brace-expansion@>=5.0.0 <5.0.12: 5.0.12 - esbuild@>=0.27.3 <0.28.1: 0.28.1 fast-uri@>=3.0.0 <3.1.9: 3.1.9 follow-redirects@>=1.16.0 <1.16.1: 1.16.1 form-data@>=4.0.0 <4.0.6: 4.0.6 @@ -4136,7 +4135,7 @@ packages: peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 '@vitejs/devtools': ^0.7.1 || ^0.8.0 - esbuild: 0.28.1 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 sass: ^1.70.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e8f0f89b..75ef9094 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,11 +9,6 @@ audit: # Unpatched upstream: @joyid/ckb -> @nervosnetwork/ckb-sdk-utils -> elliptic # (CVE-2025-14505; pnpm 11+ filters by GHSA only). - GHSA-848j-6mx2-7j84 - # No patched version exists. image-size sits under Metro, React Native's build tool, - # pulled in by @ckb-ccc/connector 2.x through @libp2p/webrtc -> react-native-webrtc; it - # never runs in the browser bundle. - - GHSA-w3rx-r6r6-pgpr - - GHSA-5p2g-fcmc-qvqq # No patched version exists. braces sits under the same React Native chain. - GHSA-vfj7-8cjw-p6xm # No patched version exists. sprintf-js sits under @microsoft/api-extractor's argparse, @@ -24,7 +19,6 @@ overrides: # Security pins for vulnerable transitive ranges not yet lifted by upstreams. axios@>=1.0.0 <1.20.0: 1.20.0 brace-expansion@>=5.0.0 <5.0.12: 5.0.12 - esbuild@>=0.27.3 <0.28.1: 0.28.1 fast-uri@>=3.0.0 <3.1.9: 3.1.9 follow-redirects@>=1.16.0 <1.16.1: 1.16.1 form-data@>=4.0.0 <4.0.6: 4.0.6 @@ -74,9 +68,7 @@ patchedDependencies: # pnpm still resolves JoyID's original cross-fetch dependency in the lockfile; # scripts/test/build/native-source-smoke.ts guards the runtime path so it stays dormant. "@joyid/ckb@1.1.4": patches/@joyid__ckb@1.1.4.patch -# pnpm 12 refuses unreviewed build scripts. Neither is needed: esbuild runs from its -# platform package and core-js's postinstall only prints a funding notice; both were -# ignored with a warning under pnpm 10 and the gate was green. +# pnpm 12 refuses unreviewed build scripts. core-js's postinstall only prints a funding +# notice; it was ignored with a warning under pnpm 10 and the gate was green. allowBuilds: core-js: false - esbuild: false From 00e25facad640998acef404709d2ae3c288716a6 Mon Sep 17 00:00:00 2001 From: phroi <90913182+phroi@users.noreply.github.com> Date: Sun, 25 Oct 2026 23:14:01 +0100 Subject: [PATCH 32/32] chore(deps): drop the braces and sprintf-js audit ignores The regenerated lockfile resolves patched versions of both, so the audit without these entries reports only the elliptic advisory that stays ignored (Fable review of 748389fa). --- pnpm-workspace.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 75ef9094..60db45c9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,11 +9,6 @@ audit: # Unpatched upstream: @joyid/ckb -> @nervosnetwork/ckb-sdk-utils -> elliptic # (CVE-2025-14505; pnpm 11+ filters by GHSA only). - GHSA-848j-6mx2-7j84 - # No patched version exists. braces sits under the same React Native chain. - - GHSA-vfj7-8cjw-p6xm - # No patched version exists. sprintf-js sits under @microsoft/api-extractor's argparse, - # a build-time tool that only parses its own command line. - - GHSA-hp3w-g68c-fv3c overrides: # Security pins for vulnerable transitive ranges not yet lifted by upstreams.