diff --git a/.cursor/worktrees.json b/.cursor/worktrees.json new file mode 100644 index 000000000..c81f1214f --- /dev/null +++ b/.cursor/worktrees.json @@ -0,0 +1,3 @@ +{ + "setup-worktree": ["npm install"] +} diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..169e7c4ff --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,29 @@ +## Jira Link + + + +## Description + + + +## How has this been tested? + + + +## Screenshots (if appropriate) + + + +## Types of changes + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) + +## Checklist + +- [ ] My code follows the code style of this project. (run lint) +- [ ] My change requires a change to the documentation. +- [ ] I have updated the documentation accordingly. +- [ ] I have added tests to cover my changes. +- [ ] All new and existing tests passed. \ No newline at end of file diff --git a/.github/workflows/backward.yml b/.github/workflows/backward.yml index 74d2962de..2ae88095b 100644 --- a/.github/workflows/backward.yml +++ b/.github/workflows/backward.yml @@ -19,14 +19,14 @@ jobs: name: Backward Compatibility Tests strategy: matrix: - node: ["22.x"] + node: ["24.x"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: checkout tkey repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: tkey @@ -35,7 +35,7 @@ jobs: cd ./tkey - name: Set up node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: "npm" @@ -65,4 +65,4 @@ jobs: - name: Running comp tests run: | cd ./backward-compatibility-tests - npm test \ No newline at end of file + npm test diff --git a/.github/workflows/browserTests.yml b/.github/workflows/browserTests.yml index 304a5cb74..5b195d8a8 100644 --- a/.github/workflows/browserTests.yml +++ b/.github/workflows/browserTests.yml @@ -1,11 +1,11 @@ name: BrowserTests -on: +on: create: #[push] workflow_dispatch: env: PLAYWRIGHT_BROWSERS_PATH: 0 - NODE_VERSION: 20 + NODE_VERSION: 24 FORCE_COLOR: 3 jobs: @@ -26,10 +26,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: "npm" @@ -62,4 +62,4 @@ jobs: # - name: Browser Test Production webkit (prod) # if: startsWith(matrix.browser, 'webkit') - # run: npm run browser-tests:local-prod-webkit \ No newline at end of file + # run: npm run browser-tests:local-prod-webkit diff --git a/.github/workflows/buildMocks.yml b/.github/workflows/buildMocks.yml index a91be9141..567f7f9da 100644 --- a/.github/workflows/buildMocks.yml +++ b/.github/workflows/buildMocks.yml @@ -14,19 +14,19 @@ jobs: name: Backward Compatibility Tests strategy: matrix: - node: ["22.x"] + node: ["24.x"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: checkout tkey repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: path: ./tkey - name: Set up node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: "npm" @@ -65,4 +65,4 @@ jobs: branch: master cwd: "./backward-compatibility-tests" message: "Building Mocks from tkey workflow" - push: true \ No newline at end of file + push: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f475b9e4..7731bd56e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,17 +6,17 @@ jobs: test: strategy: matrix: - node: ["22.x"] + node: ["24.x"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: Check out Git repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} cache: "npm" @@ -29,6 +29,10 @@ jobs: - name: Test Development run: npm run test + env: + TEST_RPC_TARGET: ${{ secrets.TEST_RPC_TARGET }} - name: Test Production run: npm run test-production + env: + TEST_RPC_TARGET: ${{ secrets.TEST_RPC_TARGET }} diff --git a/.nvmrc b/.nvmrc index 066257abb..218de16fb 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ ->=18.x \ No newline at end of file +>=24.x \ No newline at end of file diff --git a/README.md b/README.md index 32cfc97e2..e28b92bdb 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ tKey is the underlying SDK used to implement [Web3Auth Plug n Play](https://github.com/web3auth/web3auth). This package can also be used to self host Web3Auth in your own system. tKey stands for Threshold Key, which refers to the management keys & shares generated using threshold cryptography. +> **v16 Breaking Change:** All cryptographic primitives have been migrated from `bn.js`/`elliptic`/`Buffer` to native `bigint`/`@noble/curves`/`Uint8Array`. See the [Migration Guide](#migration-guide) below. + ## The `tKey` SDK The `tKey` SDK manages private keys by generating shares of it using Shamir Secret Sharing. For example, for a 2 out of 3 (2/3) setup, we give the @@ -28,6 +30,8 @@ For more information, check out the [technical overview](https://hackmd.io/Tej2t - Typescript compatible. Includes Type definitions - Fully composable API - Module support (Include only those modules which you require) +- Modern cryptography via [`@noble/curves`](https://github.com/paulmillr/noble-curves) (secp256k1, ed25519) +- Zero dependency on `Buffer` — uses native `Uint8Array` - [Audited](https://github.com/tkey/audit) ## Packages @@ -40,7 +44,7 @@ For more information, check out the [technical overview](https://hackmd.io/Tej2t | `@tkey/core` | [![npm version](https://img.shields.io/npm/v/@tkey/core?label=%22%22)](https://www.npmjs.com/package/@tkey/core/v/latest) | [![minzip](https://img.shields.io/bundlephobia/minzip/@tkey/core?label=%22%22)](https://bundlephobia.com/result?p=@tkey/core@latest) | Core functionalities for creating a tkey | | 🐕‍🦺 **Service Provider** | | `@tkey/service-provider-torus` | [![npm version](https://img.shields.io/npm/v/@tkey/service-provider-torus?label=%22%22)](https://www.npmjs.com/package/@tkey/service-provider-torus/v/latest) | [![minzip](https://img.shields.io/bundlephobia/minzip/@tkey/service-provider-torus?label=%22%22)](https://bundlephobia.com/result?p=@tkey/service-provider-torus@latest) | `@service-provider-base` with DirectAuth functionality | -| 🗳 **Storage Layer** | +| 🗳 **Storage Layer** | | `@tkey/storage-layer-torus` | [![npm version](https://img.shields.io/npm/v/@tkey/storage-layer-torus?label=%22%22)](https://www.npmjs.com/package/@tkey/storage-layer-torus/v/latest) | [![minzip](https://img.shields.io/bundlephobia/minzip/@tkey/storage-layer-torus?label=%22%22)](https://bundlephobia.com/result?p=@tkey/storage-layer-torus@latest) | get/set metadata for various shares | | 🔌 **Modules** | | `@tkey/chrome-storage` | [![npm version](https://img.shields.io/npm/v/@tkey/chrome-storage?label=%22%22)](https://www.npmjs.com/package/@tkey/chrome-storage/v/latest) | [![minzip](https://img.shields.io/bundlephobia/minzip/@tkey/chrome-storage?label=%22%22)](https://bundlephobia.com/result?p=@tkey/chrome-storage@latest) | Add/remove a share from chrome extension storage | @@ -53,12 +57,37 @@ For more information, check out the [technical overview](https://hackmd.io/Tej2t | 🐉 **Low-Level** | | `@tkey/common-types` | [![npm version](https://img.shields.io/npm/v/@tkey/common-types?label=%22%22)](https://www.npmjs.com/package/@tkey/common-types/v/latest) | [![minzip](https://img.shields.io/bundlephobia/minzip/@tkey/common-types?label=%22%22)](https://bundlephobia.com/result?p=@tkey/common-types@latest) | Shared [TypeScript](https://www.typescriptlang.org/) Types | +## Migration Guide + +### v16: `bigint` / `@noble/curves` / `Uint8Array` + +v16 removes all legacy cryptography dependencies in favor of modern, audited alternatives: + +| Before | After | +| ------------------------- | ------------------------- | +| `bn.js` (`BN`) | Native `bigint` | +| `elliptic` | `@noble/curves/secp256k1` | +| `@toruslabs/tweetnacl-js` | `@noble/curves/ed25519` | +| `Buffer` | `Uint8Array` | + +**What you need to change:** + +- **Private keys and share values** are now `bigint` instead of `BN`. Replace `new BN(hex, 16)` with `BigInt(\`0x${hex}\`)`. +- **Public keys and encrypted data** are now `Uint8Array` instead of `Buffer`. Use `hexToBytes` / `bytesToHex` from `@toruslabs/metadata-helpers` for conversions. +- **`BNString` type** has been removed. APIs now use `bigint` directly (was `BN | string`). +- **JSON serialization** of objects containing `bigint` requires the `bigIntReplacer` from `@tkey/common-types`: + ```js + import { bigIntReplacer } from "@tkey/common-types"; + JSON.stringify(thresholdKey, bigIntReplacer); + ``` +- **`@tkey/tss`** has been removed from this package and will be migrated separately. + ## Building the SDK Locally ### Requirements - This package requires a peer dependency of `@babel/runtime` -- Node 18+ +- Node 22+ ### Installation diff --git a/eslint.config.mjs b/eslint.config.mjs index 7f653cc10..3083738f9 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -21,4 +21,10 @@ export default [ }, }, }, + { + files: ["test/**/*.test.js", "test/**/*.test.ts"], + rules: { + "import/no-extraneous-dependencies": "off", + }, + }, ]; diff --git a/package-lock.json b/package-lock.json index 1852fb005..af28e30ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,19 +10,18 @@ "packages/*" ], "devDependencies": { - "@babel/register": "^7.25.9", - "@babel/runtime": "^7.26.10", - "@toruslabs/config": "^3.1.0", - "@toruslabs/eslint-config-typescript": "^4.1.0", - "@toruslabs/torus-scripts": "^7.1.2", + "@babel/register": "^7.28.6", + "@babel/runtime": "^7.28.6", + "@toruslabs/config": "^4.0.0", + "@toruslabs/eslint-config-typescript": "^5.0.0", + "@toruslabs/torus-scripts": "^8.0.0", "@types/assert": "^1.5.11", - "@types/bn.js": "^5.1.6", "@types/mocha": "^10.0.10", "@types/node": "^22", "assert": "^2.1.0", "cross-env": "^7.0.3", "dotenv": "^16.4.7", - "eslint": "^9.22.0", + "eslint": "^9.39.2", "husky": "^9.1.7", "jsdom": "^26.0.0", "jsdom-global": "^3.0.2", @@ -48,33 +47,13 @@ "typescript": "^5.8.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x" } }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "license": "MIT" - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@asamuzakjp/css-color": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz", @@ -98,23 +77,24 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { @@ -122,22 +102,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -153,16 +133,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -170,25 +150,27 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -198,17 +180,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -219,14 +202,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -237,57 +220,95 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -297,36 +318,38 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -336,14 +359,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -353,82 +377,86 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -438,14 +466,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -455,13 +483,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -471,13 +499,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -487,15 +515,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -505,14 +533,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -548,13 +576,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -564,13 +592,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -580,12 +608,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -595,12 +624,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -627,13 +657,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -643,15 +673,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -661,15 +691,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -679,13 +709,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -695,13 +725,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -711,14 +741,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -728,14 +758,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -745,18 +775,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -766,14 +796,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -783,13 +813,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -799,14 +830,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -816,13 +847,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -832,14 +863,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -849,13 +880,30 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -865,13 +913,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -881,13 +929,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -897,14 +945,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -914,15 +962,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -932,13 +980,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -948,13 +996,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -964,13 +1012,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -980,13 +1028,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -996,14 +1044,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1013,13 +1061,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1029,16 +1078,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1048,14 +1097,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1065,14 +1114,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1082,13 +1131,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1098,13 +1147,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1114,13 +1163,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1130,15 +1179,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1148,14 +1199,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1165,13 +1216,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1181,14 +1232,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1198,13 +1249,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1214,14 +1265,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1231,15 +1282,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1249,13 +1300,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1265,14 +1316,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1282,14 +1332,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1299,13 +1349,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1315,17 +1365,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz", - "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -1336,13 +1386,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1352,14 +1402,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1369,13 +1419,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1385,13 +1435,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1401,13 +1451,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1417,16 +1467,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz", - "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1436,13 +1487,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1452,14 +1503,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1469,14 +1520,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1486,14 +1537,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1503,80 +1554,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1587,14 +1639,14 @@ } }, "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -1616,16 +1668,17 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1635,10 +1688,11 @@ } }, "node_modules/@babel/register": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", - "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.28.6.tgz", + "integrity": "sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -1654,60 +1708,57 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1839,31 +1890,21 @@ "node": ">=18" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", "dependencies": { - "@emnapi/wasi-threads": "1.0.1", + "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", "dependencies": { @@ -1871,732 +1912,605 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", - "cpu": [ - "arm" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", + "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz", + "integrity": "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.3", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", + "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", - "cpu": [ - "mips64el" - ], + "node_modules/@eslint/js": { + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz", + "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", - "cpu": [ - "ppc64" - ], + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", - "cpu": [ - "riscv64" - ], + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", - "cpu": [ - "s390x" - ], + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", - "cpu": [ - "x64" - ], + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, "engines": { - "node": ">=18" + "node": ">=18.18.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", - "cpu": [ - "arm64" - ], + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=18" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", - "cpu": [ - "x64" - ], + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", - "cpu": [ - "arm64" - ], + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", - "cpu": [ - "x64" - ], + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", - "cpu": [ - "x64" - ], + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", - "cpu": [ - "arm64" - ], + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", - "cpu": [ - "ia32" - ], + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", - "cpu": [ - "x64" - ], + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@inquirer/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "node_modules/@inquirer/core/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">= 12" } }, - "node_modules/@eslint/compat": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.7.tgz", - "integrity": "sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==", + "node_modules/@inquirer/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": "^9.10.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=7.0.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@inquirer/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "MIT" }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@inquirer/core/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", - "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.15" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=8" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "peerDependencies": { + "@types/node": ">=18" }, - "engines": { - "node": "*" + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@eslint/js": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", - "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", - "dev": true, - "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", - "levn": "^0.4.1" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@inquirer/external-editor/node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "dev": true, - "engines": { - "node": ">=18.18.0" - } + "license": "MIT" }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "engines": { - "node": ">=18.18" + "node": ">=0.10.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=18" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": ">=18.18" + "node": ">=18" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": ">=6.9.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true, - "license": "ISC" - }, - "node_modules/@inquirer/checkbox": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.3.tgz", - "integrity": "sha512-KU1MGwf24iABJjGESxhyj+/rlQYSRoCfcuHDEHXfZ1DENmbuSRfyrUb+LLjHoee5TNOFKwaFxDXc5/zRwJUPMQ==", + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -2610,15 +2524,23 @@ } } }, - "node_modules/@inquirer/confirm": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.7.tgz", - "integrity": "sha512-Xrfbrw9eSiHb+GsesO8TQIeHSMTP0xyvTCeeYevgZ4sKW+iz9w/47bgfG9b0niQm+xaLY2EWPBINUPldLwvYiw==", + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5" + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" }, "engines": { "node": ">=18" @@ -2632,21 +2554,16 @@ } } }, - "node_modules/@inquirer/core": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.8.tgz", - "integrity": "sha512-HpAqR8y715zPpM9e/9Q+N88bnGwqqL8ePgZ0SMv/s3673JLMv3bIkoivGmjPqXlEgisUksSXibweQccUwEx4qQ==", + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -2660,277 +2577,17 @@ } } }, - "node_modules/@inquirer/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@inquirer/core/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@inquirer/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@inquirer/core/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.8.tgz", - "integrity": "sha512-UkGKbMFlQw5k4ZLjDwEi5z8NIVlP/3DAlLHta0o0pSsdpPThNmPtUL8mvGCHUaQtR+QrxR9yRYNWgKMsHkfIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "external-editor": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.10.tgz", - "integrity": "sha512-leyBouGJ77ggv51Jb/OJmLGGnU2HYc13MZ2iiPNLwe2VgFgZPVqsrRWSa1RAHKyazjOyvSNKLD1B2K7A/iWi1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", - "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.7.tgz", - "integrity": "sha512-rCQAipJNA14UTH84df/z4jDJ9LZ54H6zzuCAi7WZ0qVqx3CSqLjfXAMd5cpISIxbiHVJCPRB81gZksq6CZsqDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.10.tgz", - "integrity": "sha512-GLsdnxzNefjCJUmWyjaAuNklHgDpCTL4RMllAVhVvAzBwRW9g38eZ5tWgzo1lirtSDTpsh593hqXVhxvdrjfwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.10.tgz", - "integrity": "sha512-JC538ujqeYKkFqLoWZ0ILBteIUO2yajBMVEUZSxjl9x6fiEQtM+I5Rca7M2D8edMDbyHLnXifGH1hJZdh8V5rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.3.tgz", - "integrity": "sha512-QS1AQgJ113iE/nmym03yKZKHvGjVWwkGZT3B1yKrrMG0bJKQg1jUkntFP8aPd2FUQzu/nga7QU2eDpzIP5it0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.1.3", - "@inquirer/confirm": "^5.1.7", - "@inquirer/editor": "^4.2.8", - "@inquirer/expand": "^4.0.10", - "@inquirer/input": "^4.1.7", - "@inquirer/number": "^3.0.10", - "@inquirer/password": "^4.0.10", - "@inquirer/rawlist": "^4.0.10", - "@inquirer/search": "^3.0.10", - "@inquirer/select": "^4.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.10.tgz", - "integrity": "sha512-vOQbQkmhaCsF2bUmjoyRSZJBz77UnIF/F3ZS2LMgwbgyaG2WgwKHh0WKNj0APDB72WDbZijhW5nObQbk+TnbcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.10.tgz", - "integrity": "sha512-EAVKAz6P1LajZOdoL+R+XC3HJYSU261fbJzO4fCkJJ7UPFcm+nP+gzC+DDZWsb2WK9PQvKsnaKiNKsY8B6dBWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -2945,17 +2602,17 @@ } }, "node_modules/@inquirer/select": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.10.tgz", - "integrity": "sha512-Tg8S9nESnCfISu5tCZSuXpXq0wHuDVimj7xyHstABgR34zcJnLdq/VbjB2mdZvNAMAehYBnNzSjxB06UE8LLAA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -2970,9 +2627,9 @@ } }, "node_modules/@inquirer/type": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz", - "integrity": "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", "dev": true, "license": "MIT", "engines": { @@ -3139,9 +2796,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3234,141 +2891,45 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -3382,9 +2943,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -3393,9 +2954,9 @@ } }, "node_modules/@lerna/create": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.2.1.tgz", - "integrity": "sha512-Cz2u/fwc03D1EE6VFZCLMmI8FIUtGmxHQ3ECeNblsxv9i0YSKWe4Xm18sjO1xltG/K5ByiH8/HMeY9dlyAv22A==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.2.4.tgz", + "integrity": "sha512-A8AlzetnS2WIuhijdAzKUyFpR5YbLLfV3luQ4lzBgIBgRfuoBDZeF+RSZPhra+7A6/zTUlrbhKZIOi/MNhqgvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3422,7 +2983,6 @@ "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", - "globby": "11.1.0", "graceful-fs": "4.2.11", "has-unicode": "2.0.1", "ini": "^1.3.8", @@ -3433,7 +2993,6 @@ "js-yaml": "4.1.0", "libnpmpublish": "9.0.9", "load-json-file": "6.2.0", - "lodash": "^4.17.21", "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", @@ -3457,9 +3016,10 @@ "slash": "^3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", - "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", + "through": "2.3.8", + "tinyglobby": "0.2.12", "upath": "2.0.1", "uuid": "^10.0.0", "validate-npm-package-license": "^3.0.4", @@ -3491,9 +3051,9 @@ } }, "node_modules/@lerna/create/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -3538,10 +3098,29 @@ "dev": true, "license": "MIT" }, + "node_modules/@lerna/create/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/@lerna/create/node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -3558,9 +3137,9 @@ } }, "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3568,9 +3147,9 @@ } }, "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.7.tgz", + "integrity": "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==", "dev": true, "license": "ISC", "dependencies": { @@ -3632,6 +3211,19 @@ "node": ">=8" } }, + "node_modules/@lerna/create/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@lerna/create/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -3662,9 +3254,9 @@ } }, "node_modules/@lerna/create/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3687,6 +3279,23 @@ "node": ">=8" } }, + "node_modules/@lerna/create/node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/@lerna/create/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -3707,33 +3316,36 @@ } }, "node_modules/@microsoft/tsdoc": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", - "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", - "dev": true + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", + "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", + "dev": true, + "license": "MIT" }, "node_modules/@microsoft/tsdoc-config": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz", - "integrity": "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.1.tgz", + "integrity": "sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==", "dev": true, + "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "0.15.1", - "ajv": "~8.12.0", + "@microsoft/tsdoc": "0.16.0", + "ajv": "~8.18.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -3744,7 +3356,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.4", @@ -3759,9 +3372,9 @@ } }, "node_modules/@noble/ciphers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz", - "integrity": "sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -3771,78 +3384,40 @@ } }, "node_modules/@noble/curves": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", - "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", + "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.7.1" + "@noble/hashes": "2.0.1" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/hashes": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", - "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@nodeutils/defaults-deep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodeutils/defaults-deep/-/defaults-deep-1.1.0.tgz", + "integrity": "sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" + "lodash": "^4.15.0" } }, "node_modules/@npmcli/agent": { @@ -3927,9 +3502,9 @@ "license": "ISC" }, "node_modules/@npmcli/arborist/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3997,13 +3572,13 @@ } }, "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { @@ -4014,9 +3589,9 @@ "license": "ISC" }, "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4093,9 +3668,10 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -4144,9 +3720,9 @@ } }, "node_modules/@npmcli/metavuln-calculator/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4213,9 +3789,10 @@ } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -4234,9 +3811,9 @@ } }, "node_modules/@npmcli/package-json/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4273,13 +3850,13 @@ } }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { @@ -4340,13 +3917,13 @@ } }, "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/@npmcli/run-script/node_modules/which": { @@ -4365,46 +3942,54 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/@nrwl/devkit": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-18.3.5.tgz", + "integrity": "sha512-DIvChKMe4q8CtIsbrumL/aYgf85H5vlT6eF3jnCCWORj6LTwoHtK8Q9ky1+uM82KIM0gaKd32NVDw+w64scHyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "18.3.5" + } + }, + "node_modules/@nrwl/tao": { + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.8.14.tgz", + "integrity": "sha512-zBeYzzwg43T/Z8ZtLblv0fcKuqJULttqYDekSLILThXp3UOMSerEvruhUgwddCY1jUssfLscz8vacMKISv5X4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "19.8.14", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } + }, "node_modules/@nx/devkit": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.5.0.tgz", - "integrity": "sha512-FLHjNRb6VImdlnDsp3ioIdM600y2xPvN88LFV9zPrG2hDXSaD9Np9YBZvvfCr4x46MrPCTTMoAVwWsCXIBgchg==", + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-18.3.5.tgz", + "integrity": "sha512-9I0L17t0MN87fL4m4MjDiBxJIx7h5RQY/pTYtt5TBjye0ANb165JeE4oh3ibzfjMzXv42Aej2Gm+cOuSPwzT9g==", "dev": true, "license": "MIT", "dependencies": { + "@nrwl/devkit": "18.3.5", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", - "minimatch": "9.0.3", "semver": "^7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 19 <= 21" - } - }, - "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "nx": ">= 16 <= 19" } }, "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4415,9 +4000,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.5.0.tgz", - "integrity": "sha512-HlMMC4d253kk/yrafiepk8bhXMl+v4BIugftwUzRl7AOznyNgaj5WDaIVXZLZzt+WwYw6CTb+zYxfY4LuPFvOg==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.8.14.tgz", + "integrity": "sha512-bZUFf23gAzuwVw71dR8rngye5aCR8Z/ouIo+KayjqB0LWWoi3WzO73s4S69ljftYt4n6z9wvD+Trbb1BKm2fPg==", "cpu": [ "arm64" ], @@ -4432,9 +4017,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.5.0.tgz", - "integrity": "sha512-+LO8YC5Iy1168saPeItNePChToP2TuRCj3MuxEtTTJXoRlab38rNaOjWaV1itvtcgrzkQi/IohINWMI8WC5b7g==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.8.14.tgz", + "integrity": "sha512-UXXVea8icFG/3rFwpbLYsD6O4wlyJ1STQfOdhGK1Hyuga70AUUdrjVm7HzigAQP/Sb2Nzd7155YXHzfpRPDFYA==", "cpu": [ "x64" ], @@ -4449,9 +4034,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.5.0.tgz", - "integrity": "sha512-he3VOuj35XDAAmO3s6LqiWx00CsCMgHceNOHziCELQL0tfQlvvyI0Agmhesw68BAbabt+mKH9g+miENiaMknbg==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.8.14.tgz", + "integrity": "sha512-TK2xuXn+BI6hxGaRK1HRUPWeF/nOtezKSqM+6rbippfCzjES/crmp9l5nbI764MMthtUmykCyWvhEfkDca6kbA==", "cpu": [ "x64" ], @@ -4466,9 +4051,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.5.0.tgz", - "integrity": "sha512-xeysjXvm4xZa/ED7XlbzuS28sCOGZ0AlS7DKWRxEMv60iprxewj0WKPdH7RveiNNauzgHWOW/wxvTWXRu+i36Q==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.8.14.tgz", + "integrity": "sha512-33rptyRraqaeQ2Kq6pcZKQqgnYY/7zcGH8fHXgKK7XzKk+7QuPViq+jMEUZP5E3UzZPkIYhsfmZcZqhNRvepJQ==", "cpu": [ "arm" ], @@ -4483,9 +4068,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.5.0.tgz", - "integrity": "sha512-pj+6OA7d1ltkW/ZYFooi3bDtqVFPxi8YYiZlQx7enEuOxbrTvpjEPvBjVyf+oYpCe9rfKlx9ghzufqsI4uGM0w==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.8.14.tgz", + "integrity": "sha512-2E70qMKOhh7Fp4JGcRbRLvFKq0+ANVdAgSzH47plxOLygIeVAfIXRSuQbCI0EUFa5Sy6hImLaoRSB2GdgKihAw==", "cpu": [ "arm64" ], @@ -4500,9 +4085,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.5.0.tgz", - "integrity": "sha512-gCIJEb/VYv6pxiAcSeizX0jpOmTnPmgYVi2EZLSWus0Pg6FIwMHE4MX5kuqehyvnDt9xInb7Rh8vgz/JBOOsbA==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.8.14.tgz", + "integrity": "sha512-ltty/PDWqkYgu/6Ye65d7v5nh3D6e0n3SacoKRs2Vtfz5oHYRUkSKizKIhEVfRNuHn3d9j8ve1fdcCN4SDPUBQ==", "cpu": [ "arm64" ], @@ -4517,9 +4102,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.5.0.tgz", - "integrity": "sha512-hfCDmfy7TBQJdgBwNvOh55e8Y00Cxcddw2QeKguvy6vsnVa7fesXDWCw2t3m/VPPQDKQGd8cY1lS1JqX3N+wCA==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.8.14.tgz", + "integrity": "sha512-JzE3BuO9RCBVdgai18CCze6KUzG0AozE0TtYFxRokfSC05NU3nUhd/o62UsOl7s6Bqt/9nwrW7JC8pNDiCi9OQ==", "cpu": [ "x64" ], @@ -4534,9 +4119,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.5.0.tgz", - "integrity": "sha512-RTTCPjZNSDFE5mUdavDFimDw/aXNBY0w+iuRM5q17rDHxwa//DghCY0GEkBdfuxD7wpw+sRwE18mWsNDek5lXA==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.8.14.tgz", + "integrity": "sha512-2rPvDOQLb7Wd6YiU88FMBiLtYco0dVXF99IJBRGAWv+WTI7MNr47OyK2ze+JOsbYY1d8aOGUvckUvCCZvZKEfg==", "cpu": [ "x64" ], @@ -4551,9 +4136,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.5.0.tgz", - "integrity": "sha512-nT9WlG0QA8D74UJhEP1feGrV00/bas1nnqS+zkwnpJs0vcPmMuIktdETh3lEnqrGD04R7GtwbKtoGIGiZh5m9w==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.8.14.tgz", + "integrity": "sha512-JxW+YPS+EjhUsLw9C6wtk9pQTG3psyFwxhab8y/dgk2s4AOTLyIm0XxgcCJVvB6i4uv+s1g0QXRwp6+q3IR6hg==", "cpu": [ "arm64" ], @@ -4568,9 +4153,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.5.0.tgz", - "integrity": "sha512-KQVqFSYfc8ToSBgzhVNV8WcFEvLdy1zp58qwewa0xnE7DDncMbA+6YoVizUcQ/6GZRlMJ9sdVn3kwm5B8eD5mg==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.8.14.tgz", + "integrity": "sha512-RxiPlBWPcGSf9TzIIy62iKRdRhokXMDUsPub9DL2VdVyTMXPZQR25aY/PJeasJN1EQU74hg097LK2wSHi+vzOQ==", "cpu": [ "x64" ], @@ -4595,16 +4180,16 @@ } }, "node_modules/@octokit/core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", - "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" @@ -4643,9 +4228,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", - "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, "license": "MIT" }, @@ -4749,13 +4334,27 @@ } }, "node_modules/@octokit/types": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", - "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^23.0.1" + "@octokit/openapi-types": "^24.2.0" + } + }, + "node_modules/@phun-ky/typeof": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@phun-ky/typeof/-/typeof-2.0.3.tgz", + "integrity": "sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.9.0 || >=22.0.0", + "npm": ">=10.8.2" + }, + "funding": { + "url": "https://github.com/phun-ky/typeof?sponsor=1" } }, "node_modules/@pkgjs/parseargs": { @@ -4770,16 +4369,16 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pkgr" } }, "node_modules/@pnpm/config.env-replace": { @@ -4813,9 +4412,9 @@ "license": "ISC" }, "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", "dev": true, "license": "MIT", "dependencies": { @@ -4827,17 +4426,10 @@ "node": ">=12" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@rollup/plugin-babel": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", - "integrity": "sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.1.0.tgz", + "integrity": "sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==", "dev": true, "license": "MIT", "dependencies": { @@ -4862,10 +4454,11 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz", - "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -4886,9 +4479,9 @@ } }, "node_modules/@rollup/plugin-typescript": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", - "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", + "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", "dev": true, "license": "MIT", "dependencies": { @@ -4913,15 +4506,15 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -4935,10 +4528,23 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", - "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -4950,9 +4556,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", - "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -4964,9 +4570,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", - "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -4978,9 +4584,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", - "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -4992,9 +4598,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", - "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -5006,9 +4612,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", - "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -5020,9 +4626,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", - "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -5034,9 +4640,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", - "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -5048,9 +4654,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", - "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -5062,9 +4668,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", - "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -5075,10 +4681,24 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", - "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -5089,10 +4709,24 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", - "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -5104,9 +4738,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", - "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -5118,9 +4766,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", - "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -5132,9 +4780,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", - "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -5145,9 +4793,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", - "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -5158,10 +4806,38 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", - "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -5173,9 +4849,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", - "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -5186,10 +4862,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", - "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -5208,47 +4898,79 @@ "license": "MIT" }, "node_modules/@scure/base": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz", - "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", - "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "license": "MIT", "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.2" + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip39": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", - "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", "license": "MIT", "dependencies": { - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.4" + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true, - "license": "MIT" + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, "node_modules/@sigstore/bundle": { "version": "2.3.2", @@ -5331,25 +5053,12 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, "license": "MIT" }, - "node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", @@ -5452,10 +5161,6 @@ "resolved": "packages/storage-layer-torus", "link": true }, - "node_modules/@tkey/tss": { - "resolved": "packages/tss", - "link": true - }, "node_modules/@tkey/web-storage": { "resolved": "packages/web-storage", "link": true @@ -5468,50 +5173,22 @@ "license": "MIT" }, "node_modules/@toruslabs/broadcast-channel": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-12.0.0.tgz", - "integrity": "sha512-ZdkZWEbxLaoRFPXYrlAnuaXDejsYS7Nl0mL+trBkRcN/agsNoOeS/t7LExGP74Opdcj06bYJeB5KmhN6938kKw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-13.1.0.tgz", + "integrity": "sha512-CdvRhFwt0tzUV4tKBTDkWBWWPn100o+K3coOaE1KZT9q3mGemuXPCtI1MqzfPQdGLJ/cEgsgt3u17p+CG35OjA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.9", - "@toruslabs/constants": "^14.2.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/metadata-helpers": "^7.0.1", - "base64url": "^3.0.1", + "@babel/runtime": "^7.28.6", + "@toruslabs/constants": "^16.0.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "loglevel": "^1.9.2", - "oblivious-set": "1.4.0", - "socket.io-client": "^4.8.1", - "unload": "^2.4.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, - "node_modules/@toruslabs/broadcast-channel/node_modules/@toruslabs/constants": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-14.2.0.tgz", - "integrity": "sha512-Mb5EfYNSPyvvw5s1JXnpZwritCgp4NmLni1imTqrSKGV3yikYhUn1ufyLMAHGnBBgv4AuMIXBIe3EpJJ+SpA0g==", - "license": "MIT", - "engines": { - "node": ">=18.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "7.x" - } - }, - "node_modules/@toruslabs/broadcast-channel/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" + "oblivious-set": "2.0.0", + "socket.io-client": "^4.8.3" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } }, "node_modules/@toruslabs/bs58": { @@ -5528,56 +5205,55 @@ } }, "node_modules/@toruslabs/config": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@toruslabs/config/-/config-3.1.0.tgz", - "integrity": "sha512-qszcoZResn+0Oahgt+WolsnEizoAZMa3JWgsyBFjDtinbiQ6M+iqI9pfeD0URJ6ydTCorPIs6ci4xfswfyIF/A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/config/-/config-4.0.0.tgz", + "integrity": "sha512-EZwUnHNJy5Sagcd0lB0LZohqbmRbyWaXUtidxsviwako23EKEsNo15/t/S8LF+7zNKbywWyqeQj7lg0hwsI7Uw==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.16" } }, "node_modules/@toruslabs/constants": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-15.0.0.tgz", - "integrity": "sha512-0nr6vU3FQT2eRsnPYRwfVIkjwawLTkDTkCusiny9DgAw1M2zbmNqPOAqWuljUcDaK/u4VB0/PrN5SzhVBLnNGg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-16.0.0.tgz", + "integrity": "sha512-Ugl21gfoJ3taV1J2HWo0njDw9Ld06EpQKuZajAcaSJC21DSS5Ah9lEGDcvlOUrUdCZMcp0zLNZPpKzpt44gQQg==", "license": "MIT", "engines": { - "node": ">=18.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, "node_modules/@toruslabs/customauth": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/customauth/-/customauth-21.0.0.tgz", - "integrity": "sha512-omLHjN4DDZH3VCRfAVuIQwhZmZYX11Se66d0tOW9QeIApKCHhBbSjxlQz1CkNCDf3dxeDD8pQVHb9jq2ykfsJw==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/customauth/-/customauth-22.1.0.tgz", + "integrity": "sha512-URVNRzdjItPNpuNBcsLmRosaoDd4FEIPjdc+ucvjSFoW26+ieu1X2fGHyEboptE2rlNsE7OQAlVbP5rtA7W8Ug==", "license": "MIT", "dependencies": { "@chaitanyapotti/register-service-worker": "^1.7.4", - "@toruslabs/broadcast-channel": "^12.0.0", - "@toruslabs/constants": "^15.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/fetch-node-details": "^15.0.0", - "@toruslabs/http-helpers": "^8.1.1", - "@toruslabs/metadata-helpers": "^7.0.2", - "@toruslabs/session-manager": "^4.0.2", - "@toruslabs/torus.js": "^16.0.0", - "base64url": "^3.0.1", - "bowser": "^2.11.0", + "@toruslabs/broadcast-channel": "^13.1.0", + "@toruslabs/constants": "^16.0.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/session-manager": "^5.3.0", + "@toruslabs/torus.js": "^17.0.0", + "bowser": "^2.14.1", "deepmerge": "^4.3.1", "events": "^3.3.0", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", @@ -5589,35 +5265,22 @@ } } }, - "node_modules/@toruslabs/customauth/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, "node_modules/@toruslabs/customauth/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -5626,43 +5289,41 @@ } }, "node_modules/@toruslabs/eccrypto": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-5.0.4.tgz", - "integrity": "sha512-5PrSe2sn5Ed0u/2oRFtKaGOYpXJS+rJQXlYqxzy7Tbe2wLPCJh5/hZ3yStLfZmrYjHlWYwUx3AIpL/pUOOSU4w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-7.0.0.tgz", + "integrity": "sha512-xAGzI1CkTfY9fmv+ELhW4ltGQmZOgx1pDrORRmJ6/BLyXuEkNhsdKDks4U94YFkf6OzoIpvSReNPwE0RYWH7vg==", "license": "CC0-1.0", "dependencies": { - "elliptic": "^6.5.5" + "@noble/curves": "^2.0.1" }, "engines": { - "node": ">=18.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } }, "node_modules/@toruslabs/eslint-config-typescript": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@toruslabs/eslint-config-typescript/-/eslint-config-typescript-4.1.0.tgz", - "integrity": "sha512-hLoC6Vvi3aIteXG1Z2Af1KXWR3WVXm8deQSkwK76T5pWj4gUlXqpXNKJeYLIY5Z3wCC9PVGRW4UPnau+nwBxGA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/eslint-config-typescript/-/eslint-config-typescript-5.0.0.tgz", + "integrity": "sha512-n3Wictn19fGNL5x150GETAMcFJoMBL6dOUazNon+J0zfBLj6lrVaRuhvvfJL6OpiTuBomALe1Jv2FL0TK5RqIg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint/compat": "^1.2.7", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "^9.21.0", - "@typescript-eslint/parser": "^8.25.0", - "@vitest/eslint-plugin": "^1.1.35", - "eslint-config-prettier": "^10.0.2", - "eslint-import-resolver-typescript": "^3.8.3", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-prettier": "^5.2.3", + "@eslint/js": "^9.39.2", + "@typescript-eslint/parser": "^8.53.1", + "@vitest/eslint-plugin": "^1.6.6", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-promise": "^7.2.1", "eslint-plugin-simple-import-sort": "^12.1.1", - "eslint-plugin-tsdoc": "^0.4.0", - "globals": "^16.0.0", - "typescript-eslint": "^8.25.0" + "eslint-plugin-tsdoc": "^0.5.0", + "globals": "^17.0.0", + "typescript-eslint": "^8.53.1" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22", + "npm": ">=10.x" }, "peerDependencies": { "eslint": "^9.x", @@ -5671,9 +5332,9 @@ } }, "node_modules/@toruslabs/eslint-config-typescript/node_modules/globals": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", - "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", + "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", "dev": true, "license": "MIT", "engines": { @@ -5684,40 +5345,40 @@ } }, "node_modules/@toruslabs/fetch-node-details": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-15.0.0.tgz", - "integrity": "sha512-uYTV+mv5U6egTQj94zSyy9NqlfUYdwen6GeyDdCA7g0TN+YnRV4WgkcjloN0llscrND7mzuJNSIVDHCE+kSpcQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-16.0.0.tgz", + "integrity": "sha512-Ba/txNIj+lfKMEvRLZtSbOHrfhtijZF6S+wrSJ2oF95BseKD2mE8Va/+2TgaRli/W6fxmJ9PB3u71gGb+U5meg==", "license": "MIT", "dependencies": { - "@toruslabs/constants": "^15.0.0", - "@toruslabs/fnd-base": "^15.0.0", - "@toruslabs/http-helpers": "^8.1.1", + "@toruslabs/constants": "^16.0.0", + "@toruslabs/fnd-base": "^16.0.0", + "@toruslabs/http-helpers": "^9.0.0", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, "node_modules/@toruslabs/fetch-node-details/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -5726,92 +5387,57 @@ } }, "node_modules/@toruslabs/fnd-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-15.0.0.tgz", - "integrity": "sha512-KygYyPBHADmXKmzClbGcKc0oOI/Ay5FP/fUsFvXXRv4ey+VfIKiHHSAo6IojozvVUSrs0kDwocSpeE3sp/hBPA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-16.0.0.tgz", + "integrity": "sha512-PKuPqoTBCyKdOoq0S9v9a0XtPqC33bFVIKJMygzXqE+QBuiKSpPSn7RozRQpCinyB0EUPlio5H2v3ClkYz3CFA==", "license": "MIT", "dependencies": { - "@toruslabs/constants": "^15.0.0" + "@toruslabs/constants": "^16.0.0" }, "engines": { - "node": ">=18.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, - "node_modules/@toruslabs/http-helpers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-7.0.0.tgz", - "integrity": "sha512-U79uCCA1EAManPmgIn+0YpCrKUxj9C7GYlGt7Ftnd3soYCsAXVqWgck+R5knrNvTSOPmot8QYkTl+ncP44Vg/A==", - "dependencies": { - "deepmerge": "^4.3.1", - "loglevel": "^1.9.1" - }, - "engines": { - "node": ">=18.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "@sentry/types": "^8.x" - }, - "peerDependenciesMeta": { - "@sentry/types": { - "optional": true - } - } - }, "node_modules/@toruslabs/metadata-helpers": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-7.0.2.tgz", - "integrity": "sha512-N8UeKwtTlRlGAuQJQfYwCshsu5g9Fte8Xe6ZEt/WH6blNAoKjz579BPN4FrS478JIj/kMtIkD1guT84Umpdv1w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-8.1.0.tgz", + "integrity": "sha512-41Sc/5vggkW0D+Q2GHde2c6HDShosu2MOB2jt+tlPWVahgbTWY8j7aDbJmGmpYQ/x8Sf6zHd6NlKfZTlVb2wDQ==", "license": "MIT", "dependencies": { - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.0", - "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "@noble/curves": "^2.0.1", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "ethereum-cryptography": "^3.2.0", + "json-stable-stringify": "^1.3.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, - "node_modules/@toruslabs/metadata-helpers/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, "node_modules/@toruslabs/metadata-helpers/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -5819,86 +5445,41 @@ } } }, - "node_modules/@toruslabs/rss-client": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/rss-client/-/rss-client-2.0.2.tgz", - "integrity": "sha512-kmtl7KaxTOdrftxtv/hTzz6k2RJbVFq6oPs5Vg4u4iybdQYdRzyP1HqQ3wMu9ADhiItbZAg80VP4gOCCmjao4w==", - "dependencies": { - "@toruslabs/eccrypto": "^5.0.4", - "@toruslabs/http-helpers": "^7.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.5.7", - "loglevel": "^1.9.2" - }, - "engines": { - "node": ">=18.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "7.x" - } - }, "node_modules/@toruslabs/session-manager": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/session-manager/-/session-manager-4.0.2.tgz", - "integrity": "sha512-26GflDkna9kDF4kd7+XmFAsI69CIz/ZSmsbQH6ehylaNDYcro/xuPQB2SnzyRMi4VMkLXYDwHapm2OBURmuMbQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@toruslabs/session-manager/-/session-manager-5.3.0.tgz", + "integrity": "sha512-skq3VCzTAg3PGh+ZF17R3E2I1kslWlniOhI65JIvA/Fe29l8U2Pgk3+nVJGhhtcaYsaeGdyfZgYRfdPZYI6d5g==", "license": "MIT", "dependencies": { - "@toruslabs/constants": "^14.2.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.0", - "@toruslabs/metadata-helpers": "^7.0.2" + "@toruslabs/constants": "^16.0.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "8.1.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.35.0" - } - }, - "node_modules/@toruslabs/session-manager/node_modules/@toruslabs/constants": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-14.2.0.tgz", - "integrity": "sha512-Mb5EfYNSPyvvw5s1JXnpZwritCgp4NmLni1imTqrSKGV3yikYhUn1ufyLMAHGnBBgv4AuMIXBIe3EpJJ+SpA0g==", - "license": "MIT", - "engines": { - "node": ">=18.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "7.x" - } - }, - "node_modules/@toruslabs/session-manager/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "@rollup/rollup-linux-x64-gnu": "^4.59.0" } }, "node_modules/@toruslabs/session-manager/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -5907,341 +5488,607 @@ } }, "node_modules/@toruslabs/torus-scripts": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@toruslabs/torus-scripts/-/torus-scripts-7.1.2.tgz", - "integrity": "sha512-HKsEvhdmp45hlKFxs04QDmlUZQjSvElQXb1znlivSq7gdHT1OHImXx9GNeXRLK0MRzo52Vaf0zNt24ghD6I/Bw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/torus-scripts/-/torus-scripts-8.0.0.tgz", + "integrity": "sha512-+YplKAPIgKvnHQU4mhxLSP6AEjom/gaYVLH3Fcw7tGngGYS/+EqEucZSBcGa6Sle4vVgOFmBVhXQbwo5zJZpgA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.26.9", + "@babel/core": "^7.28.6", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-runtime": "^7.26.9", - "@babel/preset-env": "^7.26.9", - "@babel/preset-typescript": "^7.26.0", - "@babel/runtime": "^7.26.9", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^16.0.0", - "@rollup/plugin-typescript": "^12.1.2", - "@toruslabs/config": "^3.1.0", - "assert": "^2.1.0", - "babel-loader": "^9.2.1", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", + "@babel/plugin-transform-runtime": "^7.28.5", + "@babel/preset-env": "^7.28.6", + "@babel/preset-typescript": "^7.28.5", + "@babel/runtime": "^7.28.6", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-typescript": "^12.3.0", + "@toruslabs/config": "^4.0.0", "babel-plugin-transform-object-hasown": "^1.1.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "chalk": "^5.4.1", - "cliui": "^8.0.1", - "crypto-browserify": "^3.12.1", + "chalk": "^5.6.2", + "cliui": "^9.0.1", "deepmerge": "^4.3.1", - "dotenv": "^16.4.7", - "eslint-webpack-plugin": "^5.0.0", - "https-browserify": "^1.0.0", - "listr2": "^8.2.5", + "dotenv": "^17.2.3", + "listr2": "^10.0.0", "lodash.mergewith": "^4.6.2", "object.omit": "^3.0.0", - "os-browserify": "^0.3.0", - "process": "^0.11.10", - "release-it": "^18.1.2", - "rimraf": "^6.0.1", - "rollup": "^4.34.8", + "release-it": "^19.2.3", + "rimraf": "^6.1.2", + "rollup": "^4.55.2", + "rollup-plugin-analyzer": "^4.0.0", "rxjs": "^7.8.2", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", "ts-patch": "^3.3.0", - "typescript": "^5.7.3", + "typescript": "^5.9.3", "update-notifier": "^7.3.1", - "url": "^0.11.4", - "webpack": "^5.98.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "bin": { "torus-scripts": "bin/torus-scripts.js" }, "engines": { - "node": ">=20.10", - "npm": ">=9.x" + "node": ">=22", + "npm": ">=10.x" }, "peerDependencies": { "eslint": "^9.x" } }, - "node_modules/@toruslabs/torus-scripts/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "node_modules/@toruslabs/torus-scripts/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@toruslabs/torus.js": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-16.0.0.tgz", - "integrity": "sha512-kTGn0jytD9YyPhunxN1LacVAHCCkZEOMe7hWShM65zvgqaXHccMsytgiZr3Ah1sIqsLVUMKhrHimnQ2eqfihtg==", + "node_modules/@toruslabs/torus-scripts/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", - "dependencies": { - "@toruslabs/bs58": "^1.0.0", - "@toruslabs/constants": "^15.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1", - "loglevel": "^1.9.2" - }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=12" }, - "peerDependencies": { - "@babel/runtime": "7.x" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@toruslabs/torus.js/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, + "node_modules/@toruslabs/torus-scripts/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@toruslabs/torus.js/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "node_modules/@toruslabs/torus-scripts/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, "license": "MIT", - "dependencies": { - "deepmerge": "^4.3.1", - "loglevel": "^1.9.2" - }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, - "peerDependenciesMeta": { - "@sentry/core": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@toruslabs/tweetnacl-js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@toruslabs/tweetnacl-js/-/tweetnacl-js-1.0.4.tgz", - "integrity": "sha512-h8fVemW5pstsKbm/fTx+y61dZkh5Pepy/92lsyKp83KErf96jT+w4LGx4nEgeAVrdYQDTLg2tO7vu/boEb23Iw==", - "license": "Unlicense" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "node_modules/@toruslabs/torus-scripts/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "node_modules/@toruslabs/torus-scripts/node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", "dev": true, "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "node_modules/@toruslabs/torus-scripts/node_modules/cli-truncate/node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/assert": { - "version": "1.5.11", - "resolved": "https://registry.npmjs.org/@types/assert/-/assert-1.5.11.tgz", - "integrity": "sha512-FjS1mxq2dlGr9N4z72/DO+XmyRS3ZZIoVn998MEopAN/OmyN28F4yumRL5pOw2z+hbFLuWGYuF2rrw5p11xM5A==", - "dev": true - }, - "node_modules/@types/bn.js": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", - "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "node_modules/@toruslabs/torus-scripts/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", "dependencies": { - "@types/node": "*" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" } }, - "node_modules/@types/chrome": { - "version": "0.0.309", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.309.tgz", - "integrity": "sha512-ZFADzcp8b+roUrux68U8pti4cmNOLJXWkShk8lfxj9SBcjYqpJt7NypBprSJUJDJVakGZgd2Tt00QePIGh7oPA==", + "node_modules/@toruslabs/torus-scripts/node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/filesystem": "*", - "@types/har-format": "*" + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true + "node_modules/@toruslabs/torus-scripts/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "node_modules/@toruslabs/torus-scripts/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, - "dependencies": { - "@types/node": "*" - } + "license": "MIT" }, - "node_modules/@types/elliptic": { - "version": "6.4.18", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.18.tgz", - "integrity": "sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==", + "node_modules/@toruslabs/torus-scripts/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/bn.js": "*" + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "node_modules/@toruslabs/torus-scripts/node_modules/listr2": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.1.1.tgz", + "integrity": "sha512-4oogpJzRRGtq41B0GKZIldzYCnQTgX2DPM/XvcfNu7g2E7sxaast009150RKFZBnrHAnfMOUaedIqdIOLCCRxQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^7.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.0.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/@toruslabs/torus-scripts/node_modules/listr2/node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/filesystem": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.36.tgz", - "integrity": "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==", + "node_modules/@toruslabs/torus-scripts/node_modules/listr2/node_modules/wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/filewriter": "*" + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@types/filewriter": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", - "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/har-format": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", - "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/@toruslabs/torus-scripts/node_modules/log-update": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-7.1.0.tgz", + "integrity": "sha512-y9pi/ZOQQVvTgfRDEHV1Cj4zQUkJZPipEUNOxhn1R6KgmdMs7LKvXWCd9eMVPGJgvYzFLCenecWr0Ps8ChVv2A==", "dev": true, "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "ansi-escapes": "^7.1.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.2", + "strip-ansi": "^7.1.2", + "wrap-ansi": "^9.0.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/@toruslabs/torus-scripts/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-stable-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.2.0.tgz", - "integrity": "sha512-PEHY3ohqolHqAzDyB1+31tFaAMnoLN7x/JgdcGmNZ2uvtEJ6rlFCUYNQc0Xe754xxCYLNGZbLUGydSE6tS4S9A==", - "deprecated": "This is a stub types definition. json-stable-stringify provides its own type definitions, so you do not need this installed.", + "node_modules/@toruslabs/torus-scripts/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "json-stable-stringify": "*" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@toruslabs/torus-scripts/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/@types/jsrsasign": { - "version": "10.5.15", - "resolved": "https://registry.npmjs.org/@types/jsrsasign/-/jsrsasign-10.5.15.tgz", - "integrity": "sha512-3stUTaSRtN09PPzVWR6aySD9gNnuymz+WviNHoTb85dKu+BjaV4uBbWWGykBBJkfwPtcNZVfTn2lbX00U+yhpQ==", + "node_modules/@toruslabs/torus-scripts/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/@toruslabs/torus-scripts/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@toruslabs/torus-scripts/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@toruslabs/torus-scripts/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@toruslabs/torus-scripts/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/@toruslabs/torus.js": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-17.0.0.tgz", + "integrity": "sha512-tL02mAVKBN+kQRMtX2yPiyHsRZhR602kIVh7AAnwTh/HbTTUkJBX4RY870pTq/y60KrTRcFeaqHrM2CSlZTLaA==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^2.0.1", + "@toruslabs/bs58": "^1.0.0", + "@toruslabs/constants": "^16.0.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "ethereum-cryptography": "^3.2.0", + "json-stable-stringify": "^1.3.0", + "loglevel": "^1.9.2" + }, + "engines": { + "node": ">=22.x", + "npm": ">=10.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/torus.js/node_modules/@toruslabs/http-helpers": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.3.1", + "loglevel": "^1.9.2" + }, + "engines": { + "node": ">=22.x", + "npm": ">=10.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x", + "@sentry/core": "^10.x" + }, + "peerDependenciesMeta": { + "@sentry/core": { + "optional": true + } + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/assert": { + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/@types/assert/-/assert-1.5.11.tgz", + "integrity": "sha512-FjS1mxq2dlGr9N4z72/DO+XmyRS3ZZIoVn998MEopAN/OmyN28F4yumRL5pOw2z+hbFLuWGYuF2rrw5p11xM5A==", + "dev": true + }, + "node_modules/@types/chrome": { + "version": "0.1.37", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.37.tgz", + "integrity": "sha512-IJE4ceuDO7lrEuua7Pow47zwNcI8E6qqkowRP7aFPaZ0lrjxh6y836OPqqkIZeTX64FTogbw+4RNH0+QrweCTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/filesystem": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.36.tgz", + "integrity": "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-stable-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.2.0.tgz", + "integrity": "sha512-PEHY3ohqolHqAzDyB1+31tFaAMnoLN7x/JgdcGmNZ2uvtEJ6rlFCUYNQc0Xe754xxCYLNGZbLUGydSE6tS4S9A==", + "deprecated": "This is a stub types definition. json-stable-stringify provides its own type definitions, so you do not need this installed.", + "dev": true, + "license": "MIT", + "dependencies": { + "json-stable-stringify": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -6266,6 +6113,7 @@ "version": "22.10.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.6.tgz", "integrity": "sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==", + "dev": true, "dependencies": { "undici-types": "~6.20.0" } @@ -6288,48 +6136,31 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/webextension-polyfill": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.3.tgz", - "integrity": "sha512-F58aDVSeN/MjUGazXo/cPsmR76EvqQhQ1v4x23hFjUX0cfAJYE+JBWwiOGW36/VJGGxoH74sVlRIF3z7SJCKyg==", "dev": true, "license": "MIT" }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "node_modules/@types/webextension-polyfill": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.5.tgz", + "integrity": "sha512-uKSAv6LgcVdINmxXMKBuVIcg/2m5JZugoZO8x20g7j2bXJkPIl/lVGQcDlbV+aXAiTyXT2RA5U5mI4IGCDMQeg==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz", - "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.26.0", - "@typescript-eslint/type-utils": "8.26.0", - "@typescript-eslint/utils": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6339,23 +6170,33 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "@typescript-eslint/parser": "^8.56.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz", - "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.26.0", - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/typescript-estree": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6365,39 +6206,129 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz", - "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==", + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0" + "ms": "^2.1.3" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/project-service/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz", - "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.26.0", - "@typescript-eslint/utils": "8.26.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6407,14 +6338,39 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/types": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz", - "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -6426,20 +6382,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz", - "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6449,13 +6406,77 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -6465,71 +6486,370 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz", - "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==", + "node_modules/@typescript-eslint/utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.26.0", - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/typescript-estree": "8.26.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz", - "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==", + "node_modules/@vitest/eslint-plugin": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.6.9.tgz", + "integrity": "sha512-9WfPx1OwJ19QLCSRLkqVO7//1WcWnK3fE/3fJhKMAmDe8+9G4rB47xCNIIeCq3FdEzkIoLTfDlwDlPBaUTMhow==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/scope-manager": "^8.55.0", + "@typescript-eslint/utils": "^8.55.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@vitest/eslint-plugin": { - "version": "1.1.36", - "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.36.tgz", - "integrity": "sha512-IjBV/fcL9NJRxGw221ieaDsqKqj8qUo7rvSupDxMjTXyhsCusHC6M+jFUNqBp4PCkYFcf5bjrKxeZoCEWoPxig==", - "dev": true, - "license": "MIT", "peerDependencies": { - "@typescript-eslint/utils": "^8.24.0", - "eslint": ">= 8.57.0", - "typescript": ">= 5.0.0", + "eslint": ">=8.57.0", + "typescript": ">=5.0.0", "vitest": "*" }, "peerDependenciesMeta": { @@ -6546,6 +6866,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -6555,25 +6876,29 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -6584,13 +6909,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6603,6 +6930,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -6612,6 +6940,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -6620,13 +6949,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6643,6 +6974,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -6656,6 +6988,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -6668,6 +7001,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -6682,66 +7016,25 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", @@ -6751,9 +7044,9 @@ "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6761,7 +7054,7 @@ "tslib": "^2.4.0" }, "engines": { - "node": ">=18.12.0" + "node": ">=14.15.0" } }, "node_modules/@yarnpkg/parsers/node_modules/argparse": { @@ -6775,9 +7068,9 @@ } }, "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -6818,6 +7111,28 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/abitype": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", + "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3.22.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6832,10 +7147,11 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -6843,6 +7159,20 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6853,19 +7183,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -6873,12 +7190,6 @@ "dev": true, "license": "MIT" }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "license": "MIT" - }, "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -6903,9 +7214,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -6925,6 +7236,7 @@ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ajv": "^8.0.0" }, @@ -6938,11 +7250,12 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6959,7 +7272,8 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/ansi-align": { "version": "3.0.1", @@ -7103,18 +7417,20 @@ "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7134,18 +7450,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7224,23 +7541,6 @@ "node": ">=0.10.0" } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -7256,238 +7556,109 @@ } }, "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/async-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atomically": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", - "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", - "dev": true, - "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", - "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "dev": true, - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "tslib": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/babel-loader/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "retry": "0.13.1" } }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "node_modules/async-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "MIT", + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" } }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^6.3.0" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "node_modules/axios": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", "semver": "^6.3.1" }, "peerDependencies": { @@ -7495,27 +7666,27 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.6" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -7568,19 +7739,23 @@ "node": "^4.5.0 || >= 5.9" } }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "license": "MIT", + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, "engines": { "node": ">=6.0.0" } }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", + "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", "dev": true, "license": "MIT", "engines": { @@ -7635,70 +7810,25 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "license": "MIT" - }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -7723,9 +7853,9 @@ "license": "MIT" }, "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", "license": "MIT" }, "node_modules/boxen": { @@ -7752,9 +7882,9 @@ } }, "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -7765,9 +7895,9 @@ } }, "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -7791,9 +7921,9 @@ } }, "node_modules/boxen/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -7804,9 +7934,9 @@ } }, "node_modules/boxen/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, @@ -7829,9 +7959,9 @@ } }, "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -7845,9 +7975,9 @@ } }, "node_modules/boxen/node_modules/type-fest": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", - "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7858,9 +7988,9 @@ } }, "node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { @@ -7876,9 +8006,9 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7898,12 +8028,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -7911,92 +8035,10 @@ "dev": true, "license": "ISC" }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } - }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -8012,11 +8054,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -8036,17 +8080,16 @@ } }, "node_modules/browserstack-local": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.5.5.tgz", - "integrity": "sha512-jKne7yosrMcptj3hqxp36TP9k0ZW2sCqhyurX24rUL4G3eT7OLgv+CSQN8iq5dtkv5IK+g+v8fWvsiC/S9KxMg==", + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.5.11.tgz", + "integrity": "sha512-RNq0yrezPq7BXXxl/cvsbORfswUQi744po6ECkTEC2RkqNbdPyzewdy4VR9k4QHSzPHTkZx8PeH08veRtfFI8A==", "dev": true, "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "https-proxy-agent": "^5.0.1", "is-running": "^2.1.0", - "ps-tree": "=1.2.0", - "temp-fs": "^0.9.9" + "tree-kill": "^1.2.2" } }, "node_modules/browserstack-local/node_modules/agent-base": { @@ -8114,9 +8157,9 @@ } }, "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -8135,7 +8178,7 @@ "license": "MIT", "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "ieee754": "^1.1.13" } }, "node_modules/buffer-from": { @@ -8145,53 +8188,112 @@ "dev": true, "license": "MIT" }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "node_modules/byte-size": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz", + "integrity": "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.8", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/c12/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "dev": true, "license": "MIT", "dependencies": { - "run-applescript": "^7.0.0" + "readdirp": "^5.0.0" }, "engines": { - "node": ">=18" + "node": ">= 20.19.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/byte-size": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", - "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", + "node_modules/c12/node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=12.17" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/c12/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/cacache": { @@ -8236,9 +8338,10 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -8339,9 +8442,10 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -8351,12 +8455,13 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -8404,9 +8509,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001692", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", - "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", + "version": "1.0.30001774", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz", + "integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==", "dev": true, "funding": [ { @@ -8421,7 +8526,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", @@ -8438,13 +8544,6 @@ "node": ">=4" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -8499,6 +8598,7 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.0" } @@ -8519,17 +8619,14 @@ "node": ">=8" } }, - "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" + "consola": "^3.2.3" } }, "node_modules/clean-stack": { @@ -8773,14 +8870,12 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" - } + "peer": true }, "node_modules/common-ancestor-path": { "version": "1.0.1", @@ -8789,12 +8884,6 @@ "dev": true, "license": "ISC" }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -8836,20 +8925,12 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", @@ -8863,9 +8944,9 @@ } }, "node_modules/configstore": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", - "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8878,7 +8959,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/configstore/node_modules/dot-prop": { @@ -8898,9 +8979,9 @@ } }, "node_modules/configstore/node_modules/type-fest": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz", - "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -8943,6 +9024,16 @@ "dev": true, "license": "MIT" }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -9039,9 +9130,9 @@ } }, "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -9091,9 +9182,9 @@ } }, "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -9175,13 +9266,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -9235,49 +9326,6 @@ } } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -9311,32 +9359,6 @@ "node": ">= 8" } }, - "node_modules/crypto-browserify": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.1", - "browserify-sign": "^4.2.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "diffie-hellman": "^5.0.3", - "hash-base": "~3.0.4", - "inherits": "^2.0.4", - "pbkdf2": "^3.1.2", - "public-encrypt": "^4.0.3", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -9478,13 +9500,6 @@ "node": "*" } }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true, - "license": "MIT" - }, "node_modules/debug": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", @@ -9588,9 +9603,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9605,9 +9620,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "dev": true, "license": "MIT", "engines": { @@ -9691,6 +9706,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, + "license": "MIT" + }, "node_modules/degenerator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", @@ -9732,15 +9754,12 @@ "dev": true, "license": "ISC" }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } + "license": "MIT" }, "node_modules/destroy": { "version": "1.2.0", @@ -9771,9 +9790,9 @@ "license": "MIT" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -9790,36 +9809,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -9938,30 +9927,11 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.82", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.82.tgz", - "integrity": "sha512-Zq16uk1hfQhyGx5GpwPAYDwddJuSGhtRhgOA2mCxANYaDT79nAeGnaXogMGng4KqLaJUVnOnuL0+TDop9nLOiA==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "license": "MIT" + "version": "1.5.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -10006,9 +9976,9 @@ } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -10037,39 +10007,41 @@ } }, "node_modules/engine.io-client": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", - "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz", + "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1", + "debug": "~4.4.1", "engine.io-parser": "~5.2.1", - "ws": "~8.17.1", + "ws": "~8.18.3", "xmlhttprequest-ssl": "~2.1.1" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", - "engines": { - "node": ">=10.0.0" + "dependencies": { + "ms": "^2.1.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "supports-color": { "optional": true } } }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -10101,14 +10073,14 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -10196,9 +10168,9 @@ "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10206,9 +10178,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -10216,18 +10188,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -10239,21 +10211,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -10262,7 +10237,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -10289,16 +10264,17 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -10378,47 +10354,6 @@ "es6-promise": "^4.0.3" } }, - "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -10481,33 +10416,32 @@ } }, "node_modules/eslint": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", - "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz", + "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/config-helpers": "^0.1.0", - "@eslint/core": "^0.12.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.22.0", - "@eslint/plugin-kit": "^0.2.7", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.3", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -10542,18 +10476,46 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz", - "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -10577,25 +10539,25 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.8.3.tgz", - "integrity": "sha512-A0bu4Ks2QqDWNpeEgTQMPTngaMhuDu4yv6xpftBMAf+1ziXnpx+eSR1WRfoPTe2BAiAjHFZ7kSNx1fvr5g5pmQ==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", + "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==", "dev": true, "license": "ISC", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^1.0.2", - "stable-hash": "^0.0.4", - "tinyglobby": "^0.2.12" + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^16.17.0 || >=18.6.0" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://opencollective.com/eslint-import-resolver-typescript" }, "peerDependencies": { "eslint": "*", @@ -10612,9 +10574,9 @@ } }, "node_modules/eslint-import-resolver-typescript/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -10637,9 +10599,9 @@ "license": "MIT" }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -10665,30 +10627,30 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -10699,9 +10661,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -10733,9 +10695,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", + "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", "dev": true, "license": "ISC", "dependencies": { @@ -10769,14 +10731,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", - "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -10787,7 +10749,7 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -10828,19 +10790,21 @@ } }, "node_modules/eslint-plugin-tsdoc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.4.0.tgz", - "integrity": "sha512-MT/8b4aKLdDClnS8mP3R/JNjg29i0Oyqd/0ym6NnQf+gfKbJJ4ZcSh2Bs1H0YiUMTBwww5JwXGTWot/RwyJ7aQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.5.1.tgz", + "integrity": "sha512-+EFu9XAFzogfoRspo2slmHZZ10amXqLAhmgCG0nbR6RZHNZK2XmsE7gfZ8gBjaO/p6C2DOGn09UpTGOlYy6OdQ==", "dev": true, + "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "0.15.1", - "@microsoft/tsdoc-config": "0.17.1" + "@microsoft/tsdoc": "0.16.0", + "@microsoft/tsdoc-config": "0.18.1", + "@typescript-eslint/utils": "~8.56.0" } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10867,31 +10831,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-webpack-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-5.0.0.tgz", - "integrity": "sha512-iDhXf2r55KO1UhMfpus8oGp93wdNF+934q5kEkwa7qn3BH9f51QEC11xQidt+8jfqRnEYYZa2/8lhac7U/vqWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "^9.6.1", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "schema-utils": "^4.3.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^8.0.0 || ^9.0.0", - "webpack": "^5.0.0" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -10909,9 +10848,9 @@ } }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -10970,10 +10909,11 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -10992,9 +10932,9 @@ } }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -11018,15 +10958,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11036,9 +10976,9 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -11115,142 +11055,63 @@ "node": ">=0.10.0" } }, + "node_modules/eta": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-4.5.0.tgz", + "integrity": "sha512-qifAYjuW5AM1eEEIsFnOwB+TGqu6ynU3OKj9WbUTOtUBHFPZqL03XUW34kbp3zm19Ald+U8dEyRXaVsUck+Y1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/bgub/eta?sponsor=1" + } + }, "node_modules/ethereum-cryptography": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-3.1.0.tgz", - "integrity": "sha512-ZqHd92eOIH9RExpBUOgzpAgflyFv9/+Ca39G8V+oCjJPGjJUihQcG/Gl67I/Xn2HGS87dgnrCG3kb1jNClLi6g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-3.2.0.tgz", + "integrity": "sha512-Urr5YVsalH+Jo0sYkTkv1MyI9bLYZwW8BENZCeE1QYaTHETEYx0Nv/SVsWkSqpYrzweg6d8KMY1wTjH/1m/BIg==", "license": "MIT", "dependencies": { - "@noble/ciphers": "1.2.1", - "@noble/curves": "1.8.1", - "@noble/hashes": "1.7.1", - "@scure/bip32": "1.6.2", - "@scure/bip39": "1.5.4" + "@noble/ciphers": "1.3.0", + "@noble/curves": "1.9.0", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0" }, "engines": { "node": "^14.21.3 || >=16", "npm": ">=9" } }, - "node_modules/ethers": { - "version": "6.13.5", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.5.tgz", - "integrity": "sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.0.tgz", + "integrity": "sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==", + "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "22.7.5", - "aes-js": "4.0.0-beta.5", - "tslib": "2.7.0", - "ws": "8.17.1" + "@noble/hashes": "1.8.0" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/ethers/node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "node_modules/ethereum-cryptography/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/ethers/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/ethers/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" - }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/event-stream/node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -11267,16 +11128,6 @@ "node": ">=0.8.x" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", @@ -11302,12 +11153,19 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -11315,38 +11173,10 @@ "dev": true, "license": "MIT" }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/fast-content-type-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", - "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", "dev": true, "funding": [ { @@ -11374,36 +11204,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -11425,25 +11225,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -11473,9 +11254,9 @@ } }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11483,9 +11264,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -11620,9 +11401,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -11641,13 +11422,19 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { @@ -11665,26 +11452,22 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true, - "license": "MIT" - }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -11727,9 +11510,9 @@ } }, "node_modules/front-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -11755,9 +11538,9 @@ "license": "MIT" }, "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { @@ -11865,9 +11648,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "dev": true, "license": "MIT", "engines": { @@ -11878,16 +11661,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -12019,9 +11803,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", "dev": true, "license": "MIT", "dependencies": { @@ -12032,9 +11816,9 @@ } }, "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { @@ -12046,6 +11830,24 @@ "node": ">= 14" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/git-raw-commits": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", @@ -12106,9 +11908,9 @@ } }, "node_modules/git-semver-tags/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -12189,12 +11991,13 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "peer": true }, "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -12203,9 +12006,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -12293,13 +12096,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -12319,27 +12125,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -12358,29 +12143,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -12498,29 +12260,6 @@ "dev": true, "license": "ISC" }, - "node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -12570,17 +12309,6 @@ "he": "bin/he" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hosted-git-info": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", @@ -12629,26 +12357,30 @@ "license": "BSD-2-Clause" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "engines": { @@ -12684,13 +12416,6 @@ "node": ">= 14" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true, - "license": "MIT" - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -12928,6 +12653,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -12955,11 +12681,11 @@ "engines": { "node": "^16.14.0 || >=18.0.0" } - }, - "node_modules/init-package-json/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + }, + "node_modules/init-package-json/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -12970,17 +12696,17 @@ } }, "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "dev": true, "license": "MIT", "dependencies": { + "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", - "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", @@ -13102,16 +12828,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -13235,19 +12951,19 @@ } }, "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.6.3" + "semver": "^7.7.1" } }, "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -13532,7 +13248,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", @@ -13551,10 +13268,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", "dev": true, "license": "MIT", "engines": { @@ -13908,6 +13638,22 @@ "node": ">=0.10.0" } }, + "node_modules/isows": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", + "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/issue-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", @@ -14106,288 +13852,83 @@ "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-util": { + "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { + "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -14403,7 +13944,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-util/node_modules/chalk": { + "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -14420,7 +13961,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-util/node_modules/color-convert": { + "node_modules/jest-diff/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -14433,14 +13974,14 @@ "node": ">=7.0.0" } }, - "node_modules/jest-util/node_modules/color-name": { + "node_modules/jest-diff/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, - "node_modules/jest-util/node_modules/has-flag": { + "node_modules/jest-diff/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -14450,7 +13991,7 @@ "node": ">=8" } }, - "node_modules/jest-util/node_modules/supports-color": { + "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -14463,20 +14004,30 @@ "node": ">=8" } }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -14485,6 +14036,7 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -14495,6 +14047,7 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14505,11 +14058,22 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -14592,6 +14156,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -14631,12 +14196,13 @@ "license": "MIT" }, "node_modules/json-stable-stringify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz", - "integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "isarray": "^2.0.5", "jsonify": "^0.0.1", "object-keys": "^1.1.1" @@ -14678,6 +14244,13 @@ "dev": true, "license": "ISC" }, + "node_modules/json-with-bigint": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.3.tgz", + "integrity": "sha512-QObKu6nxy7NsxqR0VK4rkXnsNr5L9ElJaGEg+ucJ6J7/suoKZ0n+p76cu9aCqowytxEbwYNzvrMerfMkXneF5A==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -14699,9 +14272,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -14747,16 +14320,6 @@ "node": "*" } }, - "node_modules/jsrsasign": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.0.tgz", - "integrity": "sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/kjur/jsrsasign#donations" - } - }, "node_modules/just-diff": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", @@ -14964,9 +14527,9 @@ } }, "node_modules/karma/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -14975,9 +14538,9 @@ } }, "node_modules/karma/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -15025,9 +14588,9 @@ } }, "node_modules/ky": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.5.tgz", - "integrity": "sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", + "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", "dev": true, "license": "MIT", "engines": { @@ -15054,13 +14617,13 @@ } }, "node_modules/lerna": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.2.1.tgz", - "integrity": "sha512-Xwjv9/4ixp7fpBWhtvp7dz4NoQT8DEf7hzibHKCgu/8kmZUHeXsTn+TKspHqhI+p4YDmdkDnkg8xmymz73kVOg==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.2.4.tgz", + "integrity": "sha512-0gaVWDIVT7fLfprfwpYcQajb7dBJv3EGavjG7zvJ+TmGx3/wovl5GklnSwM2/WeE0Z2wrIz7ndWhBcDUHVjOcQ==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/create": "8.2.1", + "@lerna/create": "8.2.4", "@npmcli/arborist": "7.5.4", "@npmcli/package-json": "5.2.0", "@npmcli/run-script": "8.1.0", @@ -15087,7 +14650,6 @@ "get-stream": "6.0.0", "git-url-parse": "14.0.0", "glob-parent": "6.0.2", - "globby": "11.1.0", "graceful-fs": "4.2.11", "has-unicode": "2.0.1", "import-local": "3.1.0", @@ -15101,7 +14663,6 @@ "libnpmaccess": "8.0.6", "libnpmpublish": "9.0.9", "load-json-file": "6.2.0", - "lodash": "^4.17.21", "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", @@ -15127,9 +14688,10 @@ "slash": "3.0.0", "ssri": "^10.0.6", "string-width": "^4.2.3", - "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", + "through": "2.3.8", + "tinyglobby": "0.2.12", "typescript": ">=3 < 6", "upath": "2.0.1", "uuid": "^10.0.0", @@ -15165,9 +14727,9 @@ } }, "node_modules/lerna/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -15212,6 +14774,24 @@ "dev": true, "license": "MIT" }, + "node_modules/lerna/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/lerna/node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", @@ -15232,9 +14812,9 @@ } }, "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15242,9 +14822,9 @@ } }, "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.7.tgz", + "integrity": "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==", "dev": true, "license": "ISC", "dependencies": { @@ -15306,6 +14886,19 @@ "node": ">=8" } }, + "node_modules/lerna/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/lerna/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -15361,6 +14954,23 @@ "node": ">=8" } }, + "node_modules/lerna/node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/lerna/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -15429,9 +15039,9 @@ } }, "node_modules/libnpmpublish/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -15445,9 +15055,9 @@ } }, "node_modules/libnpmpublish/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -15832,13 +15442,18 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -15858,9 +15473,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -16204,14 +15819,15 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/macos-release": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.3.0.tgz", - "integrity": "sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", + "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", "dev": true, "license": "MIT", "engines": { @@ -16292,12 +15908,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -16306,17 +15916,6 @@ "node": ">= 0.4" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -16536,9 +16135,9 @@ } }, "node_modules/meow/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -16585,16 +16184,6 @@ "dev": true, "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -16608,25 +16197,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -16696,26 +16266,14 @@ "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "license": "MIT" - }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -16750,11 +16308,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -16937,29 +16495,30 @@ } }, "node_modules/mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", - "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", + "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", + "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", - "workerpool": "^6.5.1", + "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" @@ -17018,6 +16577,22 @@ "node": ">=8" } }, + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/mocha/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -17068,10 +16643,12 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -17087,21 +16664,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -17112,6 +16674,16 @@ "node": ">=8" } }, + "node_modules/mocha/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -17129,18 +16701,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -17148,6 +16708,20 @@ "dev": true, "license": "MIT" }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/mocha/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -17205,16 +16779,6 @@ "node": ">=0.10.0" } }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -17252,9 +16816,9 @@ } }, "node_modules/multimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -17263,9 +16827,9 @@ } }, "node_modules/multimatch/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -17282,6 +16846,22 @@ "dev": true, "license": "ISC" }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -17379,6 +16959,13 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true, + "license": "MIT" + }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -17447,9 +17034,10 @@ } }, "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -17468,19 +17056,19 @@ } }, "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -17540,10 +17128,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" }, "node_modules/nopt": { "version": "7.2.1", @@ -17577,9 +17166,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -17626,9 +17215,9 @@ } }, "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -17707,9 +17296,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -17759,16 +17348,17 @@ "dev": true }, "node_modules/nx": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.5.0.tgz", - "integrity": "sha512-KuAzhTj1NHu3iOVsTBrzu7cboO69UgwzUMoAb8KfszV5FwQD5dARrkR7Ew4NZzFdB+arUr2rvo1ik9f1O19keg==", + "version": "19.8.14", + "resolved": "https://registry.npmjs.org/nx/-/nx-19.8.14.tgz", + "integrity": "sha512-yprBOWV16eQntz5h5SShYHMVeN50fUb6yHfzsqNiFneCJeyVjyJ585m+2TuVbE11vT1amU0xCjHcSGfJBBnm8g==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", + "@nrwl/tao": "19.8.14", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", + "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.7", "axios": "^1.7.4", "chalk": "^4.1.0", @@ -17790,14 +17380,13 @@ "npm-run-path": "^4.0.1", "open": "^8.4.0", "ora": "5.3.0", - "resolve.exports": "2.0.3", "semver": "^7.5.3", "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", - "yaml": "^2.6.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, @@ -17806,16 +17395,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.5.0", - "@nx/nx-darwin-x64": "20.5.0", - "@nx/nx-freebsd-x64": "20.5.0", - "@nx/nx-linux-arm-gnueabihf": "20.5.0", - "@nx/nx-linux-arm64-gnu": "20.5.0", - "@nx/nx-linux-arm64-musl": "20.5.0", - "@nx/nx-linux-x64-gnu": "20.5.0", - "@nx/nx-linux-x64-musl": "20.5.0", - "@nx/nx-win32-arm64-msvc": "20.5.0", - "@nx/nx-win32-x64-msvc": "20.5.0" + "@nx/nx-darwin-arm64": "19.8.14", + "@nx/nx-darwin-x64": "19.8.14", + "@nx/nx-freebsd-x64": "19.8.14", + "@nx/nx-linux-arm-gnueabihf": "19.8.14", + "@nx/nx-linux-arm64-gnu": "19.8.14", + "@nx/nx-linux-arm64-musl": "19.8.14", + "@nx/nx-linux-x64-gnu": "19.8.14", + "@nx/nx-linux-x64-musl": "19.8.14", + "@nx/nx-win32-arm64-msvc": "19.8.14", + "@nx/nx-win32-x64-msvc": "19.8.14" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -17910,6 +17499,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/nx/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -17950,11 +17552,14 @@ } }, "node_modules/nx/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -17975,6 +17580,13 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/nx/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -18320,6 +17932,31 @@ "node": ">=6" } }, + "node_modules/nypm": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", + "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", + "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "dev": true, + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -18330,10 +17967,11 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -18454,14 +18092,21 @@ } }, "node_modules/oblivious-set": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.4.0.tgz", - "integrity": "sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-2.0.0.tgz", + "integrity": "sha512-QOUH5Xrsced9fKXaQTjWoDGKeS/Or7E2jB0FN63N4mkAO4qJdB7WR7e6qWAOHM5nk25FJ8TGjhP7DH4l6vFVLg==", "license": "MIT", "engines": { "node": ">=16" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -18519,16 +18164,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -18664,22 +18299,15 @@ "node": ">=8" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true, - "license": "MIT" - }, "node_modules/os-name": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.0.0.tgz", - "integrity": "sha512-bv608E0UX86atYi2GMGjDe0vF/X1TJjemNS8oEW6z22YW1Rc3QykSYoGfkQbX0zZX9H0ZB6CQP/3GTf1I5hURg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.1.0.tgz", + "integrity": "sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==", "dev": true, "license": "MIT", "dependencies": { - "macos-release": "^3.2.0", - "windows-release": "^6.0.0" + "macos-release": "^3.3.0", + "windows-release": "^6.1.0" }, "engines": { "node": ">=18" @@ -18688,16 +18316,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -18716,6 +18334,80 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ox": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.12.4.tgz", + "integrity": "sha512-+P+C7QzuwPV8lu79dOwjBKfB2CbnbEXe/hfyyrff1drrO1nOOj3Hc87svHfcW1yneRr3WXaKr6nz11nq+/DF9Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ox/node_modules/@adraffy/ens-normalize": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", + "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -18933,16 +18625,16 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/package-json/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -18984,13 +18676,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "license": "(MIT AND Zlib)" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -19004,23 +18689,6 @@ "node": ">=6" } }, - "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", - "dev": true, - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-conflict-json": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", @@ -19069,19 +18737,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parse-path": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.1.tgz", @@ -19195,43 +18850,41 @@ } }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", @@ -19367,14 +19020,26 @@ "node": ">=4" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/playwright": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.0.tgz", - "integrity": "sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.51.0" + "playwright-core": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -19387,9 +19052,9 @@ } }, "node_modules/playwright-core": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.0.tgz", - "integrity": "sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -19465,9 +19130,9 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -19505,22 +19170,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-ms": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", - "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/proc-log": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", @@ -19531,16 +19180,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -19663,54 +19302,18 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.10" + "node": ">=12" } }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "license": "MIT" }, "node_modules/punycode": { "version": "1.4.1", @@ -19720,9 +19323,9 @@ "license": "MIT" }, "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", "dev": true, "license": "MIT", "dependencies": { @@ -19758,12 +19361,13 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -19772,27 +19376,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -19813,16 +19396,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -19834,16 +19407,16 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -19875,6 +19448,17 @@ "node": ">=0.10.0" } }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -20071,19 +19655,6 @@ "node": ">=4" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -20125,28 +19696,20 @@ } }, "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -20160,18 +19723,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -20217,9 +19768,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, "license": "MIT", "dependencies": { @@ -20229,22 +19780,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -20267,31 +19802,31 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" } }, "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", "dev": true, "license": "MIT", "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { "node": ">=14" @@ -20321,35 +19856,22 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/release-it": { - "version": "18.1.2", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-18.1.2.tgz", - "integrity": "sha512-HOVRcicehCgoCsPFOu0iCBlEC8GDOoKS5s6ICkWmqomGEoZtRQ88D3RCsI5MciSU8vAQU+aWZW2z57NQNNb74w==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-19.2.4.tgz", + "integrity": "sha512-BwaJwQYUIIAKuDYvpqQTSoy0U7zIy6cHyEjih/aNaFICphGahia4cjDANuFXb7gVZ51hIK9W0io6fjNQWXqICg==", "dev": true, "funding": [ { @@ -20363,28 +19885,26 @@ ], "license": "MIT", "dependencies": { - "@iarna/toml": "2.2.5", - "@octokit/rest": "21.0.2", + "@nodeutils/defaults-deep": "1.1.0", + "@octokit/rest": "22.0.1", + "@phun-ky/typeof": "2.0.3", "async-retry": "1.3.3", - "chalk": "5.4.1", - "ci-info": "^4.1.0", - "cosmiconfig": "9.0.0", - "execa": "9.5.2", - "git-url-parse": "16.0.0", - "globby": "14.0.2", - "inquirer": "12.3.0", + "c12": "3.3.3", + "ci-info": "^4.3.1", + "eta": "4.5.0", + "git-url-parse": "16.1.0", + "inquirer": "12.11.1", "issue-parser": "7.0.1", - "lodash": "4.17.21", - "mime-types": "2.1.35", + "lodash.merge": "4.6.2", + "mime-types": "3.0.2", "new-github-release-url": "2.0.0", - "open": "10.1.0", - "ora": "8.1.1", - "os-name": "6.0.0", + "open": "10.2.0", + "ora": "9.0.0", + "os-name": "6.1.0", "proxy-agent": "6.5.0", - "semver": "7.6.3", - "shelljs": "0.8.5", - "undici": "6.21.1", - "update-notifier": "7.3.1", + "semver": "7.7.3", + "tinyglobby": "0.2.15", + "undici": "6.23.0", "url-join": "5.0.0", "wildcard-match": "5.1.4", "yargs-parser": "21.1.1" @@ -20393,162 +19913,180 @@ "release-it": "bin/release-it.js" }, "engines": { - "node": "^20.9.0 || >=22.0.0" + "node": "^20.12.0 || >=22.0.0" } }, "node_modules/release-it/node_modules/@octokit/auth-token": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz", - "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/release-it/node_modules/@octokit/core": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz", - "integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^5.0.0", - "@octokit/graphql": "^8.1.2", - "@octokit/request": "^9.2.1", - "@octokit/request-error": "^6.1.7", - "@octokit/types": "^13.6.2", - "before-after-hook": "^3.0.2", + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/release-it/node_modules/@octokit/endpoint": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz", - "integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", + "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.6.2", + "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/release-it/node_modules/@octokit/graphql": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.1.tgz", - "integrity": "sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^9.2.2", - "@octokit/types": "^13.8.0", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, + "node_modules/release-it/node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "dev": true, + "license": "MIT" + }, "node_modules/release-it/node_modules/@octokit/plugin-paginate-rest": { - "version": "11.4.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.3.tgz", - "integrity": "sha512-tBXaAbXkqVJlRoA/zQVe9mUdb8rScmivqtpv3ovsC5xhje/a+NOCivs7eUhWBwCApJVsR4G5HMeaLbq7PxqZGA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.7.0" + "@octokit/types": "^16.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/release-it/node_modules/@octokit/plugin-request-log": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", - "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/release-it/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.1.tgz", - "integrity": "sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", + "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.8.0" + "@octokit/types": "^16.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/release-it/node_modules/@octokit/request": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz", - "integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", + "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^10.1.3", - "@octokit/request-error": "^6.1.7", - "@octokit/types": "^13.6.2", - "fast-content-type-parse": "^2.0.0", + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/release-it/node_modules/@octokit/request-error": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz", - "integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.6.2" + "@octokit/types": "^16.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/release-it/node_modules/@octokit/rest": { - "version": "21.0.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.0.2.tgz", - "integrity": "sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==", + "version": "22.0.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.1.tgz", + "integrity": "sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/core": "^6.1.2", - "@octokit/plugin-paginate-rest": "^11.0.0", - "@octokit/plugin-request-log": "^5.3.1", - "@octokit/plugin-rest-endpoint-methods": "^13.0.0" + "@octokit/core": "^7.0.6", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^17.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" + } + }, + "node_modules/release-it/node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^27.0.0" } }, "node_modules/release-it/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -20559,16 +20097,16 @@ } }, "node_modules/release-it/node_modules/before-after-hook": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", - "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/release-it/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -20579,9 +20117,9 @@ } }, "node_modules/release-it/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -20611,13 +20149,13 @@ } }, "node_modules/release-it/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -20636,77 +20174,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/release-it/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/release-it/node_modules/execa": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", - "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.3", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.0", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.0.0" - }, - "engines": { - "node": "^18.19.0 || >=20.5.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/release-it/node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/release-it/node_modules/git-up": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.0.1.tgz", - "integrity": "sha512-2XFu1uNZMSjkyetaF+8rqn6P0XqpMq/C+2ycjI6YwrIKcszZ5/WR4UubxjN0lILOKqLkLaHDaCr2B6fP1cke6g==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", "dev": true, "license": "MIT", "dependencies": { @@ -20715,115 +20186,50 @@ } }, "node_modules/release-it/node_modules/git-url-parse": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.0.0.tgz", - "integrity": "sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "git-up": "^8.0.0" - } - }, - "node_modules/release-it/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/globby/node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/human-signals": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", - "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/release-it/node_modules/inquirer": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.3.0.tgz", - "integrity": "sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/prompts": "^7.2.1", - "@inquirer/type": "^3.0.2", - "ansi-escapes": "^4.3.2", - "mute-stream": "^2.0.0", - "run-async": "^3.0.0", - "rxjs": "^7.8.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/release-it/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "git-up": "^8.1.0" } }, - "node_modules/release-it/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "node_modules/release-it/node_modules/inquirer": { + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.11.1.tgz", + "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/prompts": "^7.10.1", + "@inquirer/type": "^3.0.10", + "mute-stream": "^2.0.0", + "run-async": "^4.0.6", + "rxjs": "^7.8.2" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/release-it/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "node_modules/release-it/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -20842,50 +20248,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/release-it/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "node_modules/release-it/node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", "dev": true, "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/release-it/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "node_modules/release-it/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/release-it/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/release-it/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/release-it/node_modules/mute-stream": { @@ -20898,36 +20302,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/release-it/node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/npm-run-path/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/release-it/node_modules/onetime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", @@ -20945,16 +20319,16 @@ } }, "node_modules/release-it/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -20964,24 +20338,24 @@ } }, "node_modules/release-it/node_modules/ora": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.1.1.tgz", - "integrity": "sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", + "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.3.0", + "chalk": "^5.6.2", "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", + "cli-spinners": "^3.2.0", "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" + "string-width": "^8.1.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -21001,32 +20375,6 @@ "node": ">=14.13.0" } }, - "node_modules/release-it/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/release-it/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/release-it/node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -21045,9 +20393,9 @@ } }, "node_modules/release-it/node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", "dev": true, "license": "MIT", "engines": { @@ -21055,9 +20403,9 @@ } }, "node_modules/release-it/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -21080,41 +20428,27 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/release-it/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/release-it/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/release-it/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -21127,23 +20461,10 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/release-it/node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/release-it/node_modules/universal-user-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", - "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", "dev": true, "license": "ISC" }, @@ -21195,19 +20516,22 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -21255,16 +20579,6 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -21289,17 +20603,6 @@ "node": ">= 4" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -21308,14 +20611,14 @@ "license": "MIT" }, "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" @@ -21327,96 +20630,77 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "node_modules/rimraf/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "18 || 20 || >=22" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "balanced-match": "^4.0.2" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "18 || 20 || >=22" } }, - "node_modules/rimraf/node_modules/jackspeak": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", - "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", + "node_modules/rimraf/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/rimraf/node_modules/lru-cache": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -21424,43 +20708,20 @@ "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "node_modules/rollup": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", - "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -21470,28 +20731,44 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.35.0", - "@rollup/rollup-android-arm64": "4.35.0", - "@rollup/rollup-darwin-arm64": "4.35.0", - "@rollup/rollup-darwin-x64": "4.35.0", - "@rollup/rollup-freebsd-arm64": "4.35.0", - "@rollup/rollup-freebsd-x64": "4.35.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", - "@rollup/rollup-linux-arm-musleabihf": "4.35.0", - "@rollup/rollup-linux-arm64-gnu": "4.35.0", - "@rollup/rollup-linux-arm64-musl": "4.35.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", - "@rollup/rollup-linux-riscv64-gnu": "4.35.0", - "@rollup/rollup-linux-s390x-gnu": "4.35.0", - "@rollup/rollup-linux-x64-gnu": "4.35.0", - "@rollup/rollup-linux-x64-musl": "4.35.0", - "@rollup/rollup-win32-arm64-msvc": "4.35.0", - "@rollup/rollup-win32-ia32-msvc": "4.35.0", - "@rollup/rollup-win32-x64-msvc": "4.35.0", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-analyzer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-analyzer/-/rollup-plugin-analyzer-4.0.0.tgz", + "integrity": "sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -21499,9 +20776,9 @@ "dev": true }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, "license": "MIT", "engines": { @@ -21521,30 +20798,6 @@ "node": ">=0.12.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -21666,11 +20919,12 @@ } }, "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -21686,11 +20940,12 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -21708,6 +20963,7 @@ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -21720,7 +20976,8 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/semver": { "version": "6.3.1", @@ -21804,19 +21061,6 @@ "dev": true, "license": "ISC" }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -21853,24 +21097,6 @@ "node": ">=8" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -21969,13 +21195,14 @@ } }, "node_modules/sinon": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", - "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz", + "integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/fake-timers": "^13.0.5", "@sinonjs/samsam": "^8.0.1", "diff": "^7.0.0", "nise": "^6.1.1", @@ -21986,15 +21213,6 @@ "url": "https://opencollective.com/sinon" } }, - "node_modules/sinon/node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -22018,21 +21236,6 @@ "node": ">=8" } }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -22136,13 +21339,13 @@ } }, "node_modules/socket.io-client": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", - "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", + "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.2", + "debug": "~4.4.1", "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" }, @@ -22150,6 +21353,29 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", @@ -22307,9 +21533,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, @@ -22336,21 +21562,6 @@ "readable-stream": "^3.0.0" } }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -22371,12 +21582,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } }, "node_modules/statuses": { "version": "1.5.0", @@ -22401,68 +21615,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, "node_modules/streamroller": { @@ -22516,22 +21680,15 @@ } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", @@ -22744,10 +21901,21 @@ } }, "node_modules/stubborn-fs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", - "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", @@ -22783,30 +21951,33 @@ "license": "MIT" }, "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar": { @@ -22844,21 +22015,6 @@ "node": ">=6" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -22925,42 +22081,16 @@ "node": ">=4" } }, - "node_modules/temp-fs": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/temp-fs/-/temp-fs-0.9.9.tgz", - "integrity": "sha512-WfecDCR1xC9b0nsrzSaxPf3ZuWeWLUWblW4vlDQAa1biQaKHiImHnJfeQocQe/hXKMcolRzgkcVX/7kK4zoWbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "~2.5.2" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/temp-fs/node_modules/rimraf": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha512-Lw7SHMjssciQb/rRz7JyPIy9+bbUshEucPoLRvWqy09vC5zQixl8Uet+Zl+SROBB/JMWHJRdCk1qdxNWHNMvlQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.0.5" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -22972,11 +22102,12 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -23006,54 +22137,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -23070,9 +22153,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -23081,9 +22164,9 @@ } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -23110,26 +22193,69 @@ "dev": true, "license": "MIT" }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" } }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -23139,11 +22265,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -23154,9 +22283,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -23185,9 +22314,9 @@ "dev": true }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -23217,16 +22346,6 @@ "node": ">=0.6" } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/tough-cookie": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz", @@ -23262,6 +22381,16 @@ "node": ">=6" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/treeverse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", @@ -23283,9 +22412,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -23534,26 +22663,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, - "node_modules/tsx": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", - "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.25.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, "node_modules/tuf-js": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", @@ -23714,9 +22823,9 @@ } }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -23728,15 +22837,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.0.tgz", - "integrity": "sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.1.tgz", + "integrity": "sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.26.0", - "@typescript-eslint/parser": "8.26.0", - "@typescript-eslint/utils": "8.26.0" + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -23746,8 +22856,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/ua-parser-js": { @@ -23808,9 +22918,9 @@ } }, "node_modules/undici": { - "version": "6.21.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", + "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", "dev": true, "license": "MIT", "engines": { @@ -23820,7 +22930,8 @@ "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -23847,9 +22958,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { @@ -23857,28 +22968,15 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", @@ -23922,15 +23020,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unload": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/unload/-/unload-2.4.1.tgz", - "integrity": "sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==", - "license": "Apache-2.0", - "funding": { - "url": "https://github.com/sponsors/pubkey" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -23941,6 +23030,41 @@ "node": ">= 0.8" } }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -23953,9 +23077,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -23971,6 +23095,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -24008,9 +23133,9 @@ } }, "node_modules/update-notifier/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -24021,9 +23146,9 @@ } }, "node_modules/update-notifier/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -24053,20 +23178,6 @@ "node": ">=6" } }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/url-join": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", @@ -24152,6 +23263,66 @@ "node": ">= 0.8" } }, + "node_modules/viem": { + "version": "2.46.3", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.46.3.tgz", + "integrity": "sha512-2LJS+Hyh2sYjHXQtzfv1kU9pZx9dxFzvoU/ZKIcn0FNtOU0HQuIICuYdWtUDFHaGXbAdVo8J1eCvmjkL9JVGwg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.12.4", + "ws": "8.18.3" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -24183,11 +23354,12 @@ "license": "ISC" }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -24212,231 +23384,64 @@ "integrity": "sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==", "license": "MPL-2.0" }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^6.0.1" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.82.0" - }, - "peerDependenciesMeta": { - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=14.17.0" + "node": ">=12" } }, - "node_modules/webpack-cli/node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "node_modules/webpack": { + "version": "5.105.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.3.tgz", + "integrity": "sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg==", "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" + }, "bin": { - "envinfo": "dist/cli.js" + "webpack": "bin/webpack.js" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, "engines": { "node": ">=10.13.0" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-cli/node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">=18.0.0" + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, "node_modules/webpack-merge": { @@ -24449,22 +23454,13 @@ "lodash": "^4.17.15" } }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10.13.0" } @@ -24475,6 +23471,7 @@ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -24489,6 +23486,7 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -24498,7 +23496,8 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/whatwg-encoding": { "version": "3.1.1", @@ -24550,9 +23549,9 @@ } }, "node_modules/when-exit": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", - "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", "dev": true, "license": "MIT" }, @@ -24654,15 +23653,17 @@ "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, @@ -24700,9 +23701,9 @@ } }, "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -24713,9 +23714,9 @@ } }, "node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, @@ -24738,9 +23739,9 @@ } }, "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -24753,12 +23754,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, "node_modules/wildcard-match": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.4.tgz", @@ -24767,9 +23762,9 @@ "license": "ISC" }, "node_modules/windows-release": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.0.1.tgz", - "integrity": "sha512-MS3BzG8QK33dAyqwxfYJCJ03arkwKaddUOvvnnlFdXLudflsQF6I8yAxrLBeQk4yO8wjdH/+ax0YzxJEDrOftg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.1.0.tgz", + "integrity": "sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==", "dev": true, "license": "MIT", "dependencies": { @@ -24944,9 +23939,9 @@ "license": "MIT" }, "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, "license": "Apache-2.0" }, @@ -25159,10 +24154,9 @@ } }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -25180,6 +24174,38 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", @@ -25242,7 +24268,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { "version": "2.7.0", @@ -25374,9 +24401,9 @@ } }, "node_modules/yoctocolors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", - "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", "dev": true, "license": "MIT", "engines": { @@ -25387,9 +24414,9 @@ } }, "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "dev": true, "license": "MIT", "engines": { @@ -25408,12 +24435,12 @@ "webextension-polyfill": "^0.12.0" }, "devDependencies": { - "@types/chrome": "^0.0.309", - "@types/webextension-polyfill": "^0.12.3" + "@types/chrome": "^0.1.37", + "@types/webextension-polyfill": "^0.12.5" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25424,100 +24451,41 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@toruslabs/customauth": "^21.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", + "@noble/curves": "^2.0.1", + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0", "ts-custom-error": "^3.3.1" }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" - }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, - "packages/common-types/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, "packages/core": { "name": "@tkey/core", "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0", + "json-stable-stringify": "^1.3.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, - "packages/core/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, - "packages/core/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.3.1", - "loglevel": "^1.9.2" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" - }, - "peerDependenciesMeta": { - "@sentry/core": { - "optional": true - } - } - }, "packages/default": { "name": "@tkey/default", "version": "16.0.0", @@ -25525,46 +24493,33 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@tkey/core": "^16.0.0", - "@tkey/security-questions": "^16.0.0", "@tkey/service-provider-base": "^16.0.0", "@tkey/service-provider-torus": "^16.0.0", "@tkey/share-serialization": "^16.0.0", "@tkey/share-transfer": "^16.0.0", "@tkey/storage-layer-torus": "^16.0.0", - "bn.js": "^5.2.1" + "@toruslabs/metadata-helpers": "^8.1.0" }, "devDependencies": { "@tkey/private-keys": "^16.0.0", + "@tkey/security-questions": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1" + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "viem": "^2.46.3" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, - "packages/default/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, "packages/default/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "dev": true, "license": "MIT", "dependencies": { @@ -25572,12 +24527,12 @@ "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -25590,16 +24545,13 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@tkey/common-types": "^16.0.0", - "@toruslabs/tweetnacl-js": "^1.0.4", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@noble/curves": "^2.0.1", + "@tkey/common-types": "^16.0.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25610,16 +24562,15 @@ "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "ethereum-cryptography": "^3.1.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25630,16 +24581,15 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "ethers": "^6.13.5" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@noble/curves": "^2.0.1", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "@tkey/common-types": "^16.0.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25651,16 +24601,12 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/metadata-helpers": "^8.1.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25672,16 +24618,14 @@ "license": "MIT", "dependencies": { "@tkey/service-provider-base": "^16.0.0", - "@toruslabs/fetch-node-details": "^15.0.0", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25694,18 +24638,13 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@tkey/service-provider-base": "^16.0.0", - "@toruslabs/customauth": "^21.0.0", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25717,12 +24656,12 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "ethereum-cryptography": "^3.1.0" + "@toruslabs/metadata-helpers": "^8.1.0", + "ethereum-cryptography": "^3.2.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25733,51 +24672,37 @@ "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0" }, + "devDependencies": {}, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, - "packages/share-transfer/node_modules/@toruslabs/eccrypto": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", - "integrity": "sha512-C2MOqtg3UrmAqRSUiOFXzGRaKkQzTN2fIHxxSnaj86no//ziVDPIJLTiPPAqyny/QMPZbCODQAofwPXF0G0juA==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.6.1" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - } - }, "packages/share-transfer/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -25791,40 +24716,38 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/http-helpers": "^8.1.1", - "base64url": "3.0.1", - "bn.js": "^5.2.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0", + "json-stable-stringify": "^1.3.0" }, "devDependencies": { - "@types/bn.js": "^5.1.6", "@types/json-stable-stringify": "^1.2.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" } }, "packages/storage-layer-torus/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", + "integrity": "sha512-7DKhuajJp5jOrhH9Ixdk0hSVGIZ8jAWA/aS+4rctfScxVRGQwBQXFQNL8msTK3zITTJf3EfJA9S1UQx4gR2qOw==", "license": "MIT", "dependencies": { "deepmerge": "^4.3.1", "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "@sentry/core": "^10.x" }, "peerDependenciesMeta": { "@sentry/core": { @@ -25835,49 +24758,32 @@ "packages/tss": { "name": "@tkey/tss", "version": "16.0.0", + "extraneous": true, "license": "ISC", "dependencies": { "@tkey/common-types": "^16.0.0", "@tkey/core": "^16.0.0", "@tkey/service-provider-torus": "^16.0.0", - "@toruslabs/customauth": "^21.0.0", - "@toruslabs/http-helpers": "^8.1.1", + "@tkey/storage-layer-torus": "^16.0.0", + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/rss-client": "^2.0.2", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/torus.js": "^17.0.0", "@types/bn.js": "^5.1.6", "bn.js": "^5.2.1", "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0" + "ethereum-cryptography": "^3.1.0", + "jsrsasign": "^11.1.0" }, "devDependencies": { - "@tkey/storage-layer-torus": "^16.0.0", "@types/jsrsasign": "^10.5.15", - "jsrsasign": "^11.1.0", "tsx": "^4.19.3", "typescript": "^5.8.2" - } - }, - "packages/tss/node_modules/@toruslabs/http-helpers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-8.1.1.tgz", - "integrity": "sha512-bcymgOEAHjWJtqWvbCw+jCLk8vch5V53E/17moM0kAQO+tY0omhsMpZYDtFcbF3xl8/fLyW7G0HGUfThPykQ7A==", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.3.1", - "loglevel": "^1.9.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" - }, - "peerDependenciesMeta": { - "@sentry/core": { - "optional": true - } + "node": ">=22.x", + "npm": ">=10.x" } }, "packages/web-storage": { @@ -25885,9 +24791,7 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@tkey/common-types": "^16.0.0", - "@types/bn.js": "^5.1.6", - "bn.js": "^5.2.1" + "@tkey/common-types": "^16.0.0" }, "devDependencies": { "@tkey/core": "^16.0.0", @@ -25896,8 +24800,8 @@ "@types/filesystem": "^0.0.36" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" diff --git a/package.json b/package.json index 3fd265300..c907ac07b 100644 --- a/package.json +++ b/package.json @@ -32,19 +32,18 @@ "pre-commit": "lerna run pre-commit" }, "devDependencies": { - "@babel/register": "^7.25.9", - "@babel/runtime": "^7.26.10", - "@toruslabs/config": "^3.1.0", - "@toruslabs/eslint-config-typescript": "^4.1.0", - "@toruslabs/torus-scripts": "^7.1.2", + "@babel/register": "^7.28.6", + "@babel/runtime": "^7.28.6", + "@toruslabs/config": "^4.0.0", + "@toruslabs/eslint-config-typescript": "^5.0.0", + "@toruslabs/torus-scripts": "^8.0.0", "@types/assert": "^1.5.11", - "@types/bn.js": "^5.1.6", "@types/mocha": "^10.0.10", "@types/node": "^22", "assert": "^2.1.0", "cross-env": "^7.0.3", "dotenv": "^16.4.7", - "eslint": "^9.22.0", + "eslint": "^9.39.2", "husky": "^9.1.7", "jsdom": "^26.0.0", "jsdom-global": "^3.0.2", @@ -80,7 +79,7 @@ } }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } } diff --git a/packages/chrome-storage/package.json b/packages/chrome-storage/package.json index 8a67a174b..5aa5c0d6e 100644 --- a/packages/chrome-storage/package.json +++ b/packages/chrome-storage/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/chromeStorage.umd.min.js", - "jsdelivr": "dist/chromeStorage.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -45,8 +45,8 @@ "webextension-polyfill": "^0.12.0" }, "devDependencies": { - "@types/chrome": "^0.0.309", - "@types/webextension-polyfill": "^0.12.3" + "@types/chrome": "^0.1.37", + "@types/webextension-polyfill": "^0.12.5" }, "lint-staged": { "!(*d).ts": [ @@ -55,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/chrome-storage/src/ChromeExtensionStorageModule.ts b/packages/chrome-storage/src/ChromeExtensionStorageModule.ts index e778df4c9..5c1ce0983 100644 --- a/packages/chrome-storage/src/ChromeExtensionStorageModule.ts +++ b/packages/chrome-storage/src/ChromeExtensionStorageModule.ts @@ -29,18 +29,18 @@ export default class ChromeExtensionStorageModule implements IModule { if (customDeviceInfo) { shareDescription.customDeviceInfo = JSON.stringify(customDeviceInfo); } - await this.tbSDK.addShareDescription(deviceShareStore.share.shareIndex.toString("hex"), JSON.stringify(shareDescription), true); + await this.tbSDK.addShareDescription(deviceShareStore.share.shareIndex.toString(16), JSON.stringify(shareDescription), true); } async storeShareOnChromeExtensionStorage(share: ShareStore): Promise { const metadata = this.tbSDK.getMetadata(); - const key = metadata.pubKey.x.toString("hex"); // tbkey public + const key = metadata.pubKey.x.toString(16); // tbkey public return storage.sync.set({ [key]: JSON.stringify(share) }); } async getStoreFromChromeExtensionStorage(): Promise { const metadata = this.tbSDK.getMetadata(); - const key = metadata.pubKey.x.toString("hex"); // tbkey public + const key = metadata.pubKey.x.toString(16); // tbkey public const result = await storage.sync.get(key); const verifierIdObj: ShareStore = JSON.parse(result[key] as string); await this.tbSDK.inputShareStoreSafe(verifierIdObj); diff --git a/packages/common-types/package.json b/packages/common-types/package.json index 4ced7dba0..3bb983c81 100644 --- a/packages/common-types/package.json +++ b/packages/common-types/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/commonTypes.umd.min.js", - "jsdelivr": "dist/commonTypes.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -43,17 +43,14 @@ "@babel/runtime": "7.x" }, "dependencies": { - "@toruslabs/customauth": "^21.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", + "@noble/curves": "^2.0.1", + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0", "ts-custom-error": "^3.3.1" }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" - }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, @@ -64,8 +61,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/common-types/src/base/BNUtils.ts b/packages/common-types/src/base/BNUtils.ts deleted file mode 100644 index 188ef06c0..000000000 --- a/packages/common-types/src/base/BNUtils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { getPublic } from "@toruslabs/eccrypto"; -import BN from "bn.js"; -import type { curve, ec } from "elliptic"; - -import { BNString } from "../baseTypes/commonTypes"; -import { secp256k1 } from "../utils"; -import Point from "./Point"; - -// These functions are here because BN can't be extended -export const toPrivKeyEC = (bn: BN): ec.KeyPair => secp256k1.keyFromPrivate(bn.toString("hex", 64)); - -export const toPrivKeyECC = (bn: BNString): Buffer => { - const tmp = new BN(bn, "hex"); - return Buffer.from(tmp.toString("hex", 64), "hex"); -}; - -export const getPubKeyEC = (bn: BN): curve.base.BasePoint => secp256k1.keyFromPrivate(bn.toString("hex", 64)).getPublic(); - -export const getPubKeyECC = (bn: BN): Buffer => getPublic(toPrivKeyECC(bn)); - -export const getPubKeyPoint = (bn: BN): Point => { - const pubKeyEc = getPubKeyEC(bn); - return new Point(pubKeyEc.getX().toString("hex"), pubKeyEc.getY().toString("hex")); -}; diff --git a/packages/common-types/src/base/Error.ts b/packages/common-types/src/base/Error.ts index f4c6768d3..82126b17e 100644 --- a/packages/common-types/src/base/Error.ts +++ b/packages/common-types/src/base/Error.ts @@ -1,6 +1,5 @@ import { CustomError } from "ts-custom-error"; -// @flow export interface ITkeyError extends CustomError { name: string; code: number; diff --git a/packages/common-types/src/base/Point.ts b/packages/common-types/src/base/Point.ts index 7c3fb8148..3ab543b32 100644 --- a/packages/common-types/src/base/Point.ts +++ b/packages/common-types/src/base/Point.ts @@ -1,126 +1,89 @@ -import BN from "bn.js"; +import { concatBytes, numberToBytesBE } from "@noble/curves/utils.js"; -import { BNString, EllipticCurve, EllipticPoint, IPoint, StringifiedType } from "../baseTypes/commonTypes"; +import { IPoint, StringifiedType } from "../baseTypes/commonTypes"; import { secp256k1 } from "../utils"; +export function hexToBigInt(s: string): bigint { + if (s.length === 0) throw new Error("hexToBigInt: empty string is invalid"); + return BigInt(`0x${s}`); +} + class Point implements IPoint { - x: BN | null; + x: bigint; - y: BN | null; + y: bigint; - constructor(x: BNString, y: BNString) { - this.x = new BN(x, "hex"); - this.y = new BN(y, "hex"); + constructor(x: bigint, y: bigint) { + this.x = x; + this.y = y; } - static fromScalar(s: BN, ec: EllipticCurve): Point { - const p = (ec.g as EllipticPoint).mul(s); - return Point.fromElliptic(p); + static fromScalar(s: bigint): Point { + const p = secp256k1.Point.BASE.multiply(s).toAffine(); + return new Point(p.x, p.y); } /** * @deprecated Use `fromSEC1` instead. */ static fromCompressedPub(value: string): Point { - const key = secp256k1.keyFromPublic(value, "hex"); - const pt = key.getPublic(); - return new Point(pt.getX(), pt.getY()); + return Point.fromSEC1(value); } static fromJSON(value: StringifiedType): Point { const { x, y } = value; - return new Point(x, y); + return new Point(hexToBigInt(x), hexToBigInt(y)); } - static fromElliptic(p: EllipticPoint): Point { - if (p.isInfinity()) { - return new Point(null, null); - } - return new Point(p.getX(), p.getY()); + static fromAffine(p: { x: bigint; y: bigint }): Point { + return new Point(p.x, p.y); } - /** - * Construct a point from SEC1 format. - */ - static fromSEC1(ec: EllipticCurve, encodedPoint: string): Point { - // "elliptic"@6.5.4 can't decode identity. - if (encodedPoint.length === 2 && encodedPoint === "00") { - const identity = (ec.g as EllipticPoint).mul(new BN(0)); - return Point.fromElliptic(identity); - } - - const key = ec.keyFromPublic(encodedPoint, "hex"); - const pt = key.getPublic(); - return Point.fromElliptic(pt); + static fromSEC1(encodedPoint: string): Point { + const p = secp256k1.Point.fromHex(encodedPoint).toAffine(); + return new Point(p.x, p.y); } /** * @deprecated Use `toSEC1` instead. - * - * complies with EC and elliptic pub key types */ - encode(enc: string): Buffer { + encode(enc: string): Uint8Array { switch (enc) { - case "arr": - return Buffer.concat([Buffer.from("0x04", "hex"), Buffer.from(this.x.toString("hex"), "hex"), Buffer.from(this.y.toString("hex"), "hex")]); - case "elliptic-compressed": { - const ec = secp256k1; - const key = ec.keyFromPublic({ x: this.x.toString("hex"), y: this.y.toString("hex") }, "hex"); - return Buffer.from(key.getPublic(true, "hex")); + case "arr": { + const prefix = new Uint8Array([0x04]); + const xBytes = numberToBytesBE(this.x, 32); + const yBytes = numberToBytesBE(this.y, 32); + return concatBytes(prefix, xBytes, yBytes); } default: throw new Error("encoding doesnt exist in Point"); } } - toEllipticPoint(ec: EllipticCurve): EllipticPoint { - if (this.isIdentity()) { - return (ec.g as EllipticPoint).mul(new BN(0)); - } - - const keyPair = ec.keyFromPublic({ x: this.x.toString("hex"), y: this.y.toString("hex") }, "hex"); - return keyPair.getPublic(); + toProjectivePoint() { + return secp256k1.Point.fromAffine({ x: this.x, y: this.y }); } - /** - * Returns this point encoded in SEC1 format. - * @param ec - Curve which point is on. - * @param compressed - Whether to use compressed format. - * @returns The SEC1-encoded point. - */ - toSEC1(ec: EllipticCurve, compressed = false): Buffer { - // "elliptic"@6.5.4 can't encode identity. - if (this.isIdentity()) { - return Buffer.from("00", "hex"); - } - - const p = this.toEllipticPoint(ec); - return Buffer.from(p.encode("hex", compressed), "hex"); + toSEC1(compressed = false): Uint8Array { + return this.toProjectivePoint().toBytes(compressed); } toJSON(): StringifiedType { return { - x: this.x.toString("hex"), - y: this.y.toString("hex"), + x: this.x.toString(16), + y: this.y.toString(16), }; } toPointHex() { return { - x: this.x.toString("hex").padStart(64, "0"), - y: this.y.toString("hex").padStart(64, "0"), + x: this.x.toString(16).padStart(64, "0"), + y: this.y.toString(16).padStart(64, "0"), }; } - isIdentity(): boolean { - return this.x === null && this.y === null; - } - equals(p: Point): boolean { - if (this.isIdentity()) { - return p.isIdentity(); - } - return this.x.eq(p.x) && this.y.eq(p.y); + return this.x === p.x && this.y === p.y; } } diff --git a/packages/common-types/src/base/Polynomial.ts b/packages/common-types/src/base/Polynomial.ts index 0b83b69ea..f38ae7c0a 100644 --- a/packages/common-types/src/base/Polynomial.ts +++ b/packages/common-types/src/base/Polynomial.ts @@ -1,67 +1,52 @@ -import BN from "bn.js"; +import { mod } from "@noble/curves/abstract/modular.js"; -import { BNString, ISerializable, PolynomialID, StringifiedType } from "../baseTypes/commonTypes"; +import { ISerializable, PolynomialID, StringifiedType } from "../baseTypes/commonTypes"; import { secp256k1 } from "../utils"; -import { getPubKeyPoint } from "./BNUtils"; -import Point from "./Point"; +import { getPubKeyPoint } from "./keyUtils"; +import Point, { hexToBigInt } from "./Point"; import PublicPolynomial from "./PublicPolynomial"; import Share from "./Share"; -// @flow export type ShareMap = { [x: string]: Share; }; +const N = secp256k1.Point.CURVE().n; + class Polynomial implements ISerializable { - polynomial: BN[]; + polynomial: bigint[]; publicPolynomial: PublicPolynomial; - constructor(polynomial: BN[]) { + constructor(polynomial: bigint[]) { this.polynomial = polynomial; } static fromJSON(value: StringifiedType): Polynomial { const { polynomial } = value; - return new Polynomial(polynomial.map((x: string) => new BN(x, "hex"))); + return new Polynomial(polynomial.map((x: string) => hexToBigInt(x))); } getThreshold(): number { return this.polynomial.length; } - polyEval(x: BNString): BN { - const tmpX = new BN(x, "hex"); - let xi = new BN(tmpX); - let sum = new BN(0); - sum = sum.add(this.polynomial[0]); + polyEval(x: bigint): bigint { + let xi = x; + let sum = this.polynomial[0]; for (let i = 1; i < this.polynomial.length; i += 1) { - const tmp = xi.mul(this.polynomial[i]); - sum = sum.add(tmp); - sum = sum.umod(secp256k1.curve.n); - xi = xi.mul(new BN(tmpX)); - xi = xi.umod(secp256k1.curve.n); + const tmp = xi * this.polynomial[i]; + sum = mod(sum + tmp, N); + xi = mod(xi * x, N); } return sum; } - generateShares(shareIndexes: BNString[]): ShareMap { - const newShareIndexes = shareIndexes.map((index) => { - if (typeof index === "number") { - return new BN(index); - } - if (index instanceof BN) { - return index; - } - if (typeof index === "string") { - return new BN(index, "hex"); - } - return index; - }); - + generateShares(shareIndexes: bigint[]): ShareMap { const shares: ShareMap = {}; - for (let x = 0; x < newShareIndexes.length; x += 1) { - shares[newShareIndexes[x].toString("hex")] = new Share(newShareIndexes[x], this.polyEval(newShareIndexes[x])); + for (let x = 0; x < shareIndexes.length; x += 1) { + const idx = shareIndexes[x]; + shares[idx.toString(16)] = new Share(idx, this.polyEval(idx)); } return shares; } @@ -81,7 +66,7 @@ class Polynomial implements ISerializable { toJSON(): StringifiedType { return { - polynomial: this.polynomial.map((x) => x.toString("hex")), + polynomial: this.polynomial.map((x) => x.toString(16)), }; } } diff --git a/packages/common-types/src/base/PublicPolynomial.ts b/packages/common-types/src/base/PublicPolynomial.ts index 009c0c222..4306bc50b 100644 --- a/packages/common-types/src/base/PublicPolynomial.ts +++ b/packages/common-types/src/base/PublicPolynomial.ts @@ -1,3 +1,5 @@ +import { bytesToHex } from "@noble/curves/utils.js"; + import { ISerializable, PolynomialID, StringifiedType } from "../baseTypes/commonTypes"; import Point from "./Point"; @@ -22,7 +24,7 @@ class PublicPolynomial implements ISerializable { getPolynomialID(): PolynomialID { let idSeed = ""; for (let i = 0; i < this.polynomialCommitments.length; i += 1) { - let nextChunk = this.polynomialCommitments[i].encode("elliptic-compressed").toString(); + let nextChunk = bytesToHex(this.polynomialCommitments[i].toSEC1(true)); if (i !== 0) { nextChunk = `|${nextChunk}`; } @@ -39,7 +41,6 @@ class PublicPolynomial implements ISerializable { } } -// @flow export type PublicPolynomialMap = { [polynomialID: string]: PublicPolynomial; }; diff --git a/packages/common-types/src/base/PublicShare.ts b/packages/common-types/src/base/PublicShare.ts index 0e547545a..e493abb34 100644 --- a/packages/common-types/src/base/PublicShare.ts +++ b/packages/common-types/src/base/PublicShare.ts @@ -1,27 +1,25 @@ -import BN from "bn.js"; - -import { BNString, ISerializable, StringifiedType } from "../baseTypes/commonTypes"; -import Point from "./Point"; +import { ISerializable, StringifiedType } from "../baseTypes/commonTypes"; +import Point, { hexToBigInt } from "./Point"; class PublicShare implements ISerializable { shareCommitment: Point; - shareIndex: BN; + shareIndex: bigint; - constructor(shareIndex: BNString, shareCommitment: Point) { + constructor(shareIndex: bigint, shareCommitment: Point) { this.shareCommitment = new Point(shareCommitment.x, shareCommitment.y); - this.shareIndex = new BN(shareIndex, "hex"); + this.shareIndex = shareIndex; } static fromJSON(value: StringifiedType): PublicShare { const { shareCommitment, shareIndex } = value; - return new PublicShare(shareIndex, Point.fromJSON(shareCommitment)); + return new PublicShare(hexToBigInt(shareIndex), Point.fromJSON(shareCommitment)); } toJSON(): StringifiedType { return { shareCommitment: this.shareCommitment, - shareIndex: this.shareIndex.toString("hex"), + shareIndex: this.shareIndex.toString(16), }; } } @@ -32,7 +30,6 @@ type PublicShareShareIndexMap = { [shareIndex: string]: PublicShare; }; -// @flow export type PublicSharePolyIDShareIndexMap = { [polynomialID: string]: PublicShareShareIndexMap; }; diff --git a/packages/common-types/src/base/Share.ts b/packages/common-types/src/base/Share.ts index 4e4e38fec..2ec28c315 100644 --- a/packages/common-types/src/base/Share.ts +++ b/packages/common-types/src/base/Share.ts @@ -1,22 +1,21 @@ -import BN from "bn.js"; - -import { BNString, ISerializable, StringifiedType } from "../baseTypes/commonTypes"; -import { getPubKeyPoint } from "./BNUtils"; +import { ISerializable, StringifiedType } from "../baseTypes/commonTypes"; +import { getPubKeyPoint } from "./keyUtils"; +import { hexToBigInt } from "./Point"; import PublicShare from "./PublicShare"; class Share implements ISerializable { - share: BN; + share: bigint; - shareIndex: BN; + shareIndex: bigint; - constructor(shareIndex: BNString, share: BNString) { - this.share = new BN(share, "hex"); - this.shareIndex = new BN(shareIndex, "hex"); + constructor(shareIndex: bigint, share: bigint) { + this.share = share; + this.shareIndex = shareIndex; } static fromJSON(value: StringifiedType): Share { const { share, shareIndex } = value; - return new Share(shareIndex, share); + return new Share(hexToBigInt(shareIndex), hexToBigInt(share)); } getPublicShare(): PublicShare { @@ -25,8 +24,8 @@ class Share implements ISerializable { toJSON(): StringifiedType { return { - share: this.share.toString("hex"), - shareIndex: this.shareIndex.toString("hex"), + share: this.share.toString(16), + shareIndex: this.shareIndex.toString(16), }; } } diff --git a/packages/common-types/src/base/ShareStore.ts b/packages/common-types/src/base/ShareStore.ts index f3148d357..7bfaa09b8 100644 --- a/packages/common-types/src/base/ShareStore.ts +++ b/packages/common-types/src/base/ShareStore.ts @@ -28,7 +28,6 @@ export type EncryptedShareStore = { [shareCommitment: string]: ShareStore; }; -// @flow export type ShareStoreMap = { [shareIndex: string]: ShareStore; }; diff --git a/packages/common-types/src/base/index.ts b/packages/common-types/src/base/index.ts index 861103b0d..e0d61563b 100644 --- a/packages/common-types/src/base/index.ts +++ b/packages/common-types/src/base/index.ts @@ -1,7 +1,7 @@ -export * from "./BNUtils"; export * from "./Error"; +export * from "./keyUtils"; export * from "./OneKey"; -export { default as Point } from "./Point"; +export { hexToBigInt, default as Point } from "./Point"; export { default as Polynomial } from "./Polynomial"; export * from "./Polynomial"; export { default as PublicPolynomial } from "./PublicPolynomial"; diff --git a/packages/common-types/src/base/keyUtils.ts b/packages/common-types/src/base/keyUtils.ts new file mode 100644 index 000000000..596606755 --- /dev/null +++ b/packages/common-types/src/base/keyUtils.ts @@ -0,0 +1,16 @@ +import { numberToBytesBE } from "@noble/curves/utils.js"; +import { getPublic } from "@toruslabs/eccrypto"; + +import { secp256k1 } from "../utils"; +import Point from "./Point"; + +export const toPrivKeyECC = (s: bigint): Uint8Array => { + return numberToBytesBE(s, 32); +}; + +export const getPubKeyECC = (s: bigint): Uint8Array => getPublic(toPrivKeyECC(s)); + +export const getPubKeyPoint = (s: bigint): Point => { + const p = secp256k1.Point.BASE.multiply(s).toAffine(); + return new Point(p.x, p.y); +}; diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index f59903c43..48ee638e0 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -1,5 +1,4 @@ import type { CustomAuthArgs } from "@toruslabs/customauth"; -import BN from "bn.js"; import { Point, @@ -14,16 +13,7 @@ import { ShareStoreMap, ShareStorePolyIDShareIndexMap, } from "../base"; -import { - BNString, - EncryptedMessage, - ISerializable, - IServiceProvider, - IStorageLayer, - PolyIDAndShares, - PolynomialID, - ShareDescriptionMap, -} from "./commonTypes"; +import { EncryptedMessage, ISerializable, IServiceProvider, IStorageLayer, PolyIDAndShares, PolynomialID, ShareDescriptionMap } from "./commonTypes"; export interface IModule { moduleName: string; @@ -34,8 +24,6 @@ export interface IModule { initialize(): Promise; } -// @flow - export type ModuleMap = { [moduleName: string]: IModule; }; @@ -45,12 +33,12 @@ export type RefreshMiddlewareMap = { }; export type ReconstructKeyMiddlewareMap = { - [moduleName: string]: () => Promise; + [moduleName: string]: () => Promise; }; export type ShareSerializationMiddleware = { - serialize: (share: BN, type: string) => Promise; - deserialize: (serializedShare: unknown, type: string) => Promise; + serialize: (share: bigint, type: string) => Promise; + deserialize: (serializedShare: unknown, type: string) => Promise; }; export type FactorEncType = "direct" | "hierarchical"; @@ -97,7 +85,7 @@ export interface IMetadata extends ISerializable { setScopedStore(domain: string, data: unknown): void; getEncryptedShare(shareStore: ShareStore): Promise; getShareDescription(): ShareDescriptionMap; - shareToShareStore(share: BN): ShareStore; + shareToShareStore(share: bigint): ShareStore; addShareDescription(shareIndex: string, description: string): void; deleteShareDescription(shareIndex: string, description: string): void; updateShareDescription(shareIndex: string, oldDescription: string, newDescription: string): void; @@ -115,17 +103,17 @@ export interface IMetadata extends ISerializable { } export type InitializeNewKeyResult = { - secp256k1Key: BN; - ed25519Seed?: Buffer; + secp256k1Key: bigint; + ed25519Seed?: Uint8Array; deviceShare?: ShareStore; userShare?: ShareStore; }; export type ReconstructedKeyResult = { - secp256k1Key: BN; - ed25519Seed?: Buffer; - seedPhrase?: BN[]; - allKeys?: BN[]; + secp256k1Key: bigint; + ed25519Seed?: Uint8Array; + seedPhrase?: bigint[]; + allKeys?: bigint[]; }; export type MiddlewareExtraKeys = Omit; @@ -136,7 +124,7 @@ export type CatchupToLatestShareResult = { export type GenerateNewShareResult = { newShareStores: ShareStoreMap; - newShareIndex: BN; + newShareIndex: bigint; }; export type DeleteShareResult = { @@ -167,9 +155,9 @@ export type TKeyArgs = { }; export interface SecurityQuestionStoreArgs { - nonce: BNString; + nonce: bigint | string; - shareIndex: BNString; + shareIndex: bigint | string; sqPublicShare: PublicShare; @@ -187,9 +175,10 @@ export interface TkeyStoreArgs { } export interface ShareTransferStorePointerArgs { - pointer: BNString; + pointer: bigint | string; } +/** Legacy shape for Buffer when serialized (e.g. JSON). Used for migration-period compat when deserializing encPubKey. */ export type BufferObj = { type: string; data: number[]; @@ -222,7 +211,7 @@ export type ISQAnswerStore = TkeyStoreItemType & { }; export type ISeedPhraseStoreWithKeys = ISeedPhraseStore & { - keys: BN[]; + keys: bigint[]; }; export type MetamaskSeedPhraseStore = ISeedPhraseStore & { @@ -230,27 +219,27 @@ export type MetamaskSeedPhraseStore = ISeedPhraseStore & { }; export type IPrivateKeyStore = TkeyStoreItemType & { - privateKey: BN; + privateKey: bigint; type: string; }; export interface ISeedPhraseFormat { type: string; validateSeedPhrase(seedPhrase: string): boolean; - deriveKeysFromSeedPhrase(seedPhraseStore: ISeedPhraseStore): Promise; + deriveKeysFromSeedPhrase(seedPhraseStore: ISeedPhraseStore): Promise; createSeedPhraseStore(seedPhrase?: string): Promise; } export interface IPrivateKeyFormat { - privateKey: BN; + privateKey: bigint; type: string; - validatePrivateKey(privateKey: BN): boolean; - createPrivateKeyStore(privateKey: BN): IPrivateKeyStore; + validatePrivateKey(privateKey: bigint): boolean; + createPrivateKeyStore(privateKey: bigint): IPrivateKeyStore; } export interface IAuthMetadata { metadata: IMetadata; - privKey?: BN; + privKey?: bigint; } export interface IMessageMetadata { @@ -261,14 +250,14 @@ export interface IMessageMetadata { export type IAuthMetadatas = IAuthMetadata[]; export type ShareStores = ShareStore[]; export type IMessageMetadatas = IMessageMetadata[]; -export type LocalTransitionShares = BN[]; +export type LocalTransitionShares = bigint[]; export type LocalTransitionData = (IAuthMetadata | IMessageMetadata | ShareStore)[]; export type LocalMetadataTransitions = [LocalTransitionShares, LocalTransitionData]; export interface ITKeyApi { getMetadata(): IMetadata; getStorageLayer(): IStorageLayer; - initialize(params: { input?: ShareStore; importKey?: BN; neverInitializeNewKey?: boolean }): Promise; + initialize(params: { input?: ShareStore; importKey?: bigint; neverInitializeNewKey?: boolean }): Promise; catchupToLatestShare(params: { shareStore: ShareStore; polyID?: string; @@ -282,19 +271,19 @@ export interface ITKeyApi { moduleName: string, middleware: (generalStore: unknown, oldShareStores: ShareStoreMap, newShareStores: ShareStoreMap) => unknown ): void; - _addReconstructKeyMiddleware(moduleName: string, middleware: () => Promise>): void; + _addReconstructKeyMiddleware(moduleName: string, middleware: () => Promise>): void; _addShareSerializationMiddleware( - serialize: (share: BN, type: string) => Promise, - deserialize: (serializedShare: unknown, type: string) => Promise + serialize: (share: bigint, type: string) => Promise, + deserialize: (serializedShare: unknown, type: string) => Promise ): void; generateNewShare(): Promise; - outputShareStore(shareIndex: BNString, polyID?: string): ShareStore; + outputShareStore(shareIndex: bigint, polyID?: string): ShareStore; inputShare(share: unknown, type?: string): Promise; - outputShare(shareIndex: BNString, type?: string): Promise; + outputShare(shareIndex: bigint, type?: string): Promise; inputShareStore(shareStore: ShareStore): void; - deleteShare(shareIndex: BNString): Promise; - encrypt(data: Buffer): Promise; - decrypt(encryptedMesage: EncryptedMessage): Promise; + deleteShare(shareIndex: bigint): Promise; + encrypt(data: Uint8Array): Promise; + decrypt(encryptedMesage: EncryptedMessage): Promise; getTKeyStoreItem(moduleName: string, id: string): Promise; getTKeyStore(moduleName: string): Promise; @@ -311,9 +300,9 @@ export interface ITKey extends ITKeyApi, ISerializable { shares: ShareStorePolyIDShareIndexMap; - secp256k1Key: BN; + secp256k1Key: bigint; - ed25519Key: Buffer; + ed25519Key: Uint8Array; manualSync: boolean; @@ -325,7 +314,7 @@ export interface ITKey extends ITKeyApi, ISerializable { _shareSerializationMiddleware: ShareSerializationMiddleware; - initialize(params: { input?: ShareStore; importKey?: BN; neverInitializeNewKey?: boolean }): Promise; + initialize(params: { input?: ShareStore; importKey?: bigint; neverInitializeNewKey?: boolean }): Promise; reconstructKey(): Promise; @@ -336,8 +325,8 @@ export interface ITKey extends ITKeyApi, ISerializable { export type TKeyInitArgs = { withShare?: ShareStore; - importKey?: BN; - importEd25519Seed?: Buffer; + importKey?: bigint; + importEd25519Seed?: Uint8Array; neverInitializeNewKey?: boolean; transitionMetadata?: IMetadata; previouslyFetchedCloudMetadata?: IMetadata; diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index e392ca7bd..46c2cd12b 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -1,19 +1,11 @@ import type { CustomAuthArgs } from "@toruslabs/customauth"; -import BN from "bn.js"; -import { curve, ec as EC } from "elliptic"; - -export type EllipticPoint = curve.base.BasePoint; -export type EllipticCurve = EC; export type PubKeyType = "ecc"; -// @flow export type PolynomialID = string; export type PolyIDAndShares = [PolynomialID, string[]]; -export type BNString = string | BN; - export interface EncryptedMessage { ciphertext: string; ephemPublicKey: string; @@ -38,25 +30,25 @@ export interface ISerializable { } export interface IPoint extends ISerializable { - x: BN | null; - y: BN | null; - encode(enc: string, params?: unknown): Buffer; + x: bigint; + y: bigint; + encode(enc: string, params?: unknown): Uint8Array; } export interface IServiceProvider extends ISerializable { enableLogging: boolean; - postboxKey: BN; + postboxKey: bigint; serviceProviderName: string; - migratableKey?: BN | null; + migratableKey?: bigint | null; - encrypt(msg: Buffer): Promise; - decrypt(msg: EncryptedMessage): Promise; - retrievePubKey(type: PubKeyType): Buffer; - retrievePubKeyPoint(): EllipticPoint; - sign(msg: BNString): string; + encrypt(msg: Uint8Array): Promise; + decrypt(msg: EncryptedMessage): Promise; + retrievePubKey(type: PubKeyType): Uint8Array; + retrievePubKeyPoint(): { x: bigint; y: bigint }; + sign(msg: Uint8Array): string; } export type TorusStorageLayerAPIParams = { pub_key_X: string; @@ -69,15 +61,15 @@ export type TorusStorageLayerAPIParams = { export interface IStorageLayer extends ISerializable { storageLayerName: string; - getMetadata(params: { serviceProvider?: IServiceProvider; privKey?: BN }): Promise; + getMetadata(params: { serviceProvider?: IServiceProvider; privKey?: bigint }): Promise; - setMetadata(params: { input: T; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ message: string }>; + setMetadata(params: { input: T; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ message: string }>; - setMetadataStream(params: { input: T[]; serviceProvider?: IServiceProvider; privKey?: BN[] }): Promise<{ message: string }>; + setMetadataStream(params: { input: T[]; serviceProvider?: IServiceProvider; privKey?: bigint[] }): Promise<{ message: string }>; - acquireWriteLock(params: { serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ status: number; id?: string }>; + acquireWriteLock(params: { serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ status: number; id?: string }>; - releaseWriteLock(params: { id: string; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ status: number }>; + releaseWriteLock(params: { id: string; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ status: number }>; } export type TorusStorageLayerArgs = { diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 205bbdabd..2b0536dec 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -1,35 +1,37 @@ +import { secp256k1 } from "@noble/curves/secp256k1.js"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { serializeError } from "@toruslabs/customauth"; -import { decrypt as ecDecrypt, encrypt as ecEncrypt, generatePrivate } from "@toruslabs/eccrypto"; +import { decrypt as ecDecrypt, encrypt as ecEncrypt } from "@toruslabs/eccrypto"; +import { bytesToHex, hexToBytes } from "@toruslabs/metadata-helpers"; import { keccak256, toChecksumAddress } from "@toruslabs/torus.js"; -import BN from "bn.js"; -import { ec as EC } from "elliptic"; import { EncryptedMessage } from "./baseTypes/commonTypes"; -export const secp256k1 = new EC("secp256k1"); +export { secp256k1 }; -// Wrappers around ECC encrypt/decrypt to use the hex serialization -// TODO: refactor to take BN -export async function encrypt(publicKey: Buffer, msg: Buffer): Promise { +/** Returns 32 random bytes suitable for use as a secp256k1 private key. */ +export function generatePrivate(): Uint8Array { + return secp256k1.utils.randomSecretKey(); +} + +export async function encrypt(publicKey: Uint8Array, msg: Uint8Array): Promise { const encryptedDetails = await ecEncrypt(publicKey, msg); return { - ciphertext: encryptedDetails.ciphertext.toString("hex"), - ephemPublicKey: encryptedDetails.ephemPublicKey.toString("hex"), - iv: encryptedDetails.iv.toString("hex"), - mac: encryptedDetails.mac.toString("hex"), + ciphertext: bytesToHex(encryptedDetails.ciphertext), + ephemPublicKey: bytesToHex(encryptedDetails.ephemPublicKey), + iv: bytesToHex(encryptedDetails.iv), + mac: bytesToHex(encryptedDetails.mac), }; } -export async function decrypt(privKey: Buffer, msg: EncryptedMessage): Promise { - const bufferEncDetails = { - ciphertext: Buffer.from(msg.ciphertext, "hex"), - ephemPublicKey: Buffer.from(msg.ephemPublicKey, "hex"), - iv: Buffer.from(msg.iv, "hex"), - mac: Buffer.from(msg.mac, "hex"), - }; - - return ecDecrypt(privKey, bufferEncDetails); +export async function decrypt(privKey: Uint8Array, msg: EncryptedMessage): Promise { + return ecDecrypt(privKey, { + ciphertext: hexToBytes(msg.ciphertext), + ephemPublicKey: hexToBytes(msg.ephemPublicKey), + iv: hexToBytes(msg.iv), + mac: hexToBytes(msg.mac), + }); } export function isEmptyObject(obj: unknown): boolean { @@ -45,34 +47,18 @@ export async function prettyPrintError(error: unknown): Promise { return serializeError(error); } -export function generateAddressFromPublicKey(publicKey: Buffer): string { - const ethAddressLower = `0x${keccak256(publicKey).slice(64 - 38)}`; - return toChecksumAddress(ethAddressLower); +export function bigIntReplacer(this: unknown, _key: string | number, value: unknown): unknown { + return typeof value === "bigint" ? value.toString(16) : value; } -export function normalize(input: number | string): string { - if (!input) { - return undefined; - } - let hexString; - - if (typeof input === "number") { - hexString = input.toString(16); - if (hexString.length % 2) { - hexString = `0${hexString}`; - } - } - - if (typeof input === "string") { - hexString = input.toLowerCase(); - } - - return `0x${hexString}`; +export function generateAddressFromPublicKey(publicKey: Uint8Array): string { + const ethAddressLower = `0x${keccak256(publicKey).slice(-40)}`; + return toChecksumAddress(ethAddressLower); } -export function generatePrivateExcludingIndexes(shareIndexes: Array): BN { - const key = new BN(generatePrivate()); - if (shareIndexes.find((el) => el.eq(key))) { +export function generatePrivateExcludingIndexes(shareIndexes: bigint[]): bigint { + const key = bytesToNumberBE(generatePrivate()); + if (shareIndexes.find((el) => el === key)) { return generatePrivateExcludingIndexes(shareIndexes); } return key; diff --git a/packages/common-types/test/test.js b/packages/common-types/test/test.js index 003ce2bbb..565c5e482 100644 --- a/packages/common-types/test/test.js +++ b/packages/common-types/test/test.js @@ -1,16 +1,17 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generatePrivate } from "@toruslabs/eccrypto"; +import { bytesToHex } from "@toruslabs/metadata-helpers"; import { fail } from "assert"; -import BN from "bn.js"; import { getPubKeyPoint, Point, Polynomial } from "../src/base"; import { secp256k1 } from "../src/utils"; describe("polynomial", function () { it("#should polyEval indexes correctly", async function () { - const polyArr = [new BN(5), new BN(2)]; + const polyArr = [5n, 2n]; const poly = new Polynomial(polyArr); - const result = poly.polyEval(new BN(1)); - if (result.cmp(new BN(7)) !== 0) { + const result = poly.polyEval(1n); + if (result !== 7n) { fail("poly result should equal 7"); } }); @@ -18,43 +19,43 @@ describe("polynomial", function () { describe("Point", function () { it("#should encode into elliptic format on encode", async function () { - const secret = new BN(generatePrivate()); + const secret = bytesToNumberBE(generatePrivate()); const point = getPubKeyPoint(secret); - const result = point.toSEC1(secp256k1, true); - if (result.toString("hex").slice(2) !== point.x.toString("hex", 64)) { - fail(`elliptic format x should be equal ${secret} ${result.toString("hex")} ${point.x.toString("hex")} ${secret.umod(secp256k1.n)}`); + const result = point.toSEC1(true); + if (bytesToHex(result).slice(2) !== point.x.toString(16).padStart(64, "0")) { + fail(`elliptic format x should be equal ${secret} ${bytesToHex(result)} ${point.x.toString(16)} ${secret % secp256k1.CURVE.n}`); } }); it("#should decode into point for elliptic format compressed", async function () { - const secret = new BN(generatePrivate()); + const secret = bytesToNumberBE(generatePrivate()); const point = getPubKeyPoint(secret); - const result = point.toSEC1(secp256k1, true); - if (result.toString("hex").slice(2) !== point.x.toString("hex", 64)) { + const result = point.toSEC1(true); + if (bytesToHex(result).slice(2) !== point.x.toString(16).padStart(64, "0")) { fail("elliptic format x should be equal"); } - const key = secp256k1.keyFromPublic(result.toString("hex"), "hex"); - if (point.x.cmp(key.pub.x) !== 0) { + const key = secp256k1.Point.fromHex(bytesToHex(result)).toAffine(); + if (point.x !== key.x) { fail(" x should be equal"); } - if (point.y.cmp(key.pub.y) !== 0) { + if (point.y !== key.y) { fail(" x should be equal"); } }); it("#should decode into point for fromSEC1", async function () { - const secret = new BN(generatePrivate()); + const secret = bytesToNumberBE(generatePrivate()); const point = getPubKeyPoint(secret); - const result = point.toSEC1(secp256k1, true); - if (result.toString("hex").slice(2) !== point.x.toString("hex", 64)) { + const result = point.toSEC1(true); + if (bytesToHex(result).slice(2) !== point.x.toString(16).padStart(64, "0")) { fail("elliptic format x should be equal"); } - const key = Point.fromSEC1(secp256k1, result.toString("hex")); - if (point.x.cmp(key.x) !== 0) { + const key = Point.fromSEC1(bytesToHex(result)); + if (point.x !== key.x) { fail(" x should be equal"); } - if (point.y.cmp(key.y) !== 0) { + if (point.y !== key.y) { fail(" x should be equal"); } }); diff --git a/packages/core/package.json b/packages/core/package.json index 66f01ca61..97b7b61c1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -4,8 +4,8 @@ "description": "TKey Core library", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/core.umd.min.js", - "jsdelivr": "dist/core.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "scripts": { @@ -34,18 +34,11 @@ "dist" ], "dependencies": { + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0", + "json-stable-stringify": "^1.3.0" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -72,8 +65,8 @@ "tkey" ], "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index 7f8a4c0f7..7e896a99f 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -1,6 +1,6 @@ -import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyEC } from "@tkey/common-types"; +import { bigIntReplacer, IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyECC } from "@tkey/common-types"; +import { bytesToHex, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { keccak256 } from "@toruslabs/torus.js"; -import BN from "bn.js"; import stringify from "json-stable-stringify"; import CoreError from "./errors"; @@ -9,9 +9,9 @@ import Metadata from "./metadata"; class AuthMetadata implements IAuthMetadata { metadata: Metadata; - privKey: BN; + privKey: bigint; - constructor(metadata: Metadata, privKey?: BN) { + constructor(metadata: Metadata, privKey?: bigint) { this.metadata = metadata; this.privKey = privKey; } @@ -23,8 +23,8 @@ class AuthMetadata implements IAuthMetadata { const m = Metadata.fromJSON(data); if (!m.pubKey) throw CoreError.metadataPubKeyUnavailable(); - const keyPair = secp256k1.keyFromPublic(m.pubKey.toSEC1(secp256k1)); - if (!keyPair.verify(stripHexPrefix(keccak256(Buffer.from(stringify(data), "utf8"))), sig)) { + const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); + if (!secp256k1.verify(hexToBytes(sig), msgHash, m.pubKey.toSEC1(true), { prehash: false, format: "der", lowS: false })) { throw CoreError.default("Signature not valid for returning metadata"); } return new AuthMetadata(m); @@ -34,12 +34,12 @@ class AuthMetadata implements IAuthMetadata { const data = this.metadata; if (!this.privKey) throw CoreError.privKeyUnavailable(); - const k = toPrivKeyEC(this.privKey); - const sig = k.sign(stripHexPrefix(keccak256(Buffer.from(stringify(data), "utf8")))); + const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); + const sig = secp256k1.sign(msgHash, toPrivKeyECC(this.privKey), { prehash: false, format: "der" }); return { data, - sig: sig.toDER("hex"), + sig: bytesToHex(sig), }; } } diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index e5aadfe08..ef472782d 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -1,5 +1,6 @@ +import { randomBytes } from "@noble/curves/utils.js"; import { - BNString, + bigIntReplacer, CatchupToLatestShareResult, decrypt, DeleteShareResult, @@ -10,6 +11,7 @@ import { generatePrivateExcludingIndexes, getPubKeyECC, getPubKeyPoint, + hexToBigInt, IMessageMetadata, IMetadata, InitializeNewKeyResult, @@ -45,14 +47,18 @@ import { TkeyStoreItemType, toPrivKeyECC, } from "@tkey/common-types"; -import { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; -import BN from "bn.js"; -import { getRandomBytes } from "ethereum-cryptography/random"; +import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; +import { encodeEd25519Point, getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; import stringify from "json-stable-stringify"; import AuthMetadata from "./authMetadata"; import CoreError from "./errors"; -import { generatePrivateBN, generateRandomPolynomial, lagrangeInterpolatePolynomial, lagrangeInterpolation } from "./lagrangeInterpolatePolynomial"; +import { + generatePrivateBigInt, + generateRandomPolynomial, + lagrangeInterpolatePolynomial, + lagrangeInterpolation, +} from "./lagrangeInterpolatePolynomial"; import Metadata from "./metadata"; const ed25519SeedConst = "ed25519Seed"; @@ -91,9 +97,9 @@ class ThresholdKey implements ITKey { serverTimeOffset?: number = 0; // secp256k1 key - private privKey: BN; + private privKey: bigint; - private _ed25519Seed?: Buffer; + private _ed25519Seed?: Uint8Array; constructor(args?: TKeyArgs) { const { enableLogging = false, modules = {}, serviceProvider, storageLayer, manualSync = false, serverTimeOffset } = args || {}; @@ -114,7 +120,7 @@ class ThresholdKey implements ITKey { this.serverTimeOffset = serverTimeOffset; } - get secp256k1Key(): BN | null { + get secp256k1Key(): bigint | null { if (typeof this.privKey !== "undefined") { return this.privKey; } @@ -122,18 +128,18 @@ class ThresholdKey implements ITKey { return null; } - get ed25519Key(): Buffer | null { + get ed25519Key(): Uint8Array | null { if (typeof this._ed25519Seed !== "undefined") { return this._ed25519Seed; } return null; } - protected set secp256k1Key(privKey: BN) { + protected set secp256k1Key(privKey: bigint) { this.privKey = privKey; } - protected set ed25519Key(seed: Buffer) { + protected set ed25519Key(seed: Uint8Array) { this._ed25519Seed = seed; } @@ -161,14 +167,22 @@ class ThresholdKey implements ITKey { }); // this will computed during reconstructKey should we restore here? - if (privKey) tb.privKey = new BN(privKey, "hex"); - if (ed25519Key) tb.ed25519Key = Buffer.from(ed25519Key, "hex"); - - tb.shares = shares; + if (privKey) tb.privKey = hexToBigInt(privKey); + if (ed25519Key) tb.ed25519Key = hexToBytes(ed25519Key); + + const deserializedShares: ShareStorePolyIDShareIndexMap = {}; + for (const polyID of Object.keys(shares)) { + deserializedShares[polyID] = {}; + for (const shareIndex of Object.keys(shares[polyID])) { + deserializedShares[polyID][shareIndex] = ShareStore.fromJSON(shares[polyID][shareIndex]); + } + } + tb.shares = deserializedShares; // switch to deserialize local metadata transition based on Object.keys() of authMetadata, ShareStore's and, IMessageMetadata - const AuthMetadataKeys = Object.keys(JSON.parse(stringify(new AuthMetadata(new Metadata(new Point("0", "0")), new BN("0", "hex"))))); - const ShareStoreKeys = Object.keys(JSON.parse(stringify(new ShareStore(new Share("0", "0"), "")))); + const dummyPoint = getPubKeyPoint(1n); + const AuthMetadataKeys = Object.keys(JSON.parse(stringify(new AuthMetadata(new Metadata(dummyPoint), 1n), { replacer: bigIntReplacer }))); + const ShareStoreKeys = Object.keys(JSON.parse(stringify(new ShareStore(new Share(1n, 1n), ""), { replacer: bigIntReplacer }))); const sampleMessageMetadata: IMessageMetadata = { message: "Sample message", dateAdded: Date.now() }; const MessageMetadataKeys = Object.keys(sampleMessageMetadata); @@ -177,7 +191,7 @@ class ThresholdKey implements ITKey { _localMetadataTransitions[0].forEach((x: string, index: number) => { if (x) { - localTransitionShares.push(new BN(x, "hex")); + localTransitionShares.push(hexToBigInt(x)); } else { localTransitionShares.push(undefined); } @@ -185,7 +199,7 @@ class ThresholdKey implements ITKey { const keys = Object.keys(_localMetadataTransitions[1][index]); if (keys.length === AuthMetadataKeys.length && keys.every((val) => AuthMetadataKeys.includes(val))) { const tempAuth = AuthMetadata.fromJSON(_localMetadataTransitions[1][index]); - tempAuth.privKey = privKey; + tempAuth.privKey = tb.privKey; localTransitionData.push(tempAuth); } else if (keys.length === ShareStoreKeys.length && keys.every((val) => ShareStoreKeys.includes(val))) { localTransitionData.push(ShareStore.fromJSON(_localMetadataTransitions[1][index])); @@ -213,15 +227,15 @@ class ThresholdKey implements ITKey { // if service provider key is missing, we should initialize with one of the existing shares // TODO: fix for deleted share const latestPolyIDOnCloud = tempCloud.getLatestPublicPolynomial().getPolynomialID(); - if (tb.serviceProvider.postboxKey.toString("hex") === "0") { - const shareIndexesExistInSDK = Object.keys(shares[latestPolyIDOnCloud]); + if (tb.serviceProvider.postboxKey.toString(16) === "0") { + const shareIndexesExistInSDK = Object.keys(tb.shares[latestPolyIDOnCloud]); const randomIndex = shareIndexesExistInSDK[Math.floor(Math.random() * (shareIndexesExistInSDK.length - 1))]; if (shareIndexesExistInSDK.length >= 1) { - shareToUseForSerialization = shares[latestPolyIDOnCloud][randomIndex]; + shareToUseForSerialization = tb.shares[latestPolyIDOnCloud][randomIndex]; } } else { // social share index is always1 - shareToUseForSerialization = shares[latestPolyIDOnCloud]["1"]; + shareToUseForSerialization = tb.shares[latestPolyIDOnCloud]["1"]; } // if tempCloud exist, share must able to catchup to latest share @@ -330,7 +344,7 @@ class ThresholdKey implements ITKey { return this.getKeyDetails(); } // else we continue with catching up share and metadata - shareStore = ShareStore.fromJSON(rawServiceProviderShare); + shareStore = rawServiceProviderShare instanceof ShareStore ? rawServiceProviderShare : ShareStore.fromJSON(rawServiceProviderShare); } else { throw CoreError.default("Input is not supported"); } @@ -498,7 +512,7 @@ class ThresholdKey implements ITKey { const privKey = lagrangeInterpolation(shareArr, shareIndexArr); // check that priv key regenerated is correct const reconstructedPubKey = getPubKeyPoint(privKey); - if (this.metadata.pubKey.x.cmp(reconstructedPubKey.x) !== 0) { + if (this.metadata.pubKey.x !== reconstructedPubKey.x) { throw CoreError.incorrectReconstruction(); } this.secp256k1Key = privKey; @@ -514,7 +528,7 @@ class ThresholdKey implements ITKey { if (Object.prototype.hasOwnProperty.call(this._reconstructKeyMiddleware, x)) { const extraKeys = await this._reconstructKeyMiddleware[x](); returnObject[x as keyof MiddlewareExtraKeys] = extraKeys; - (returnObject.allKeys as BN[]).push(...extraKeys); + (returnObject.allKeys as bigint[]).push(...extraKeys); } }) ); @@ -548,21 +562,20 @@ class ThresholdKey implements ITKey { throw CoreError.default("share indexes should be unique"); } for (let i = 0; i < threshold; i += 1) { - pointsArr.push(new Point(new BN(sharesForExistingPoly[i], "hex"), this.shares[pubPolyID][sharesForExistingPoly[i]].share.share)); + pointsArr.push(new Point(hexToBigInt(sharesForExistingPoly[i]), this.shares[pubPolyID][sharesForExistingPoly[i]].share.share)); } return lagrangeInterpolatePolynomial(pointsArr); } - async deleteShare(shareIndex: BNString): Promise { + async deleteShare(shareIndex: bigint): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); } if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } - const shareIndexToDelete = new BN(shareIndex, "hex"); - const shareToDelete = this.outputShareStore(shareIndexToDelete); - if (shareIndexToDelete.cmp(new BN("1", "hex")) === 0) { + const shareToDelete = this.outputShareStore(shareIndex); + if (shareIndex === 1n) { throw new CoreError(1001, "Unable to delete service provider share"); } @@ -572,9 +585,8 @@ class ThresholdKey implements ITKey { const existingShareIndexes = this.metadata.getShareIndexesForPolynomial(previousPolyID); const newShareIndexes: string[] = []; existingShareIndexes.forEach((el) => { - const bn = new BN(el, "hex"); - if (bn.cmp(shareIndexToDelete) !== 0) { - newShareIndexes.push(bn.toString("hex")); + if (hexToBigInt(el) !== shareIndex) { + newShareIndexes.push(el); } }); @@ -600,10 +612,10 @@ class ThresholdKey implements ITKey { const pubPoly = this.metadata.getLatestPublicPolynomial(); const previousPolyID = pubPoly.getPolynomialID(); const existingShareIndexes = this.metadata.getShareIndexesForPolynomial(previousPolyID); - const existingShareIndexesBN = existingShareIndexes.map((el) => new BN(el, "hex")); - const newShareIndex = new BN(generatePrivateExcludingIndexes(existingShareIndexesBN)); + const existingShareIndexesBigInt = existingShareIndexes.map((el) => hexToBigInt(el)); + const newShareIndex = generatePrivateExcludingIndexes(existingShareIndexesBigInt); - const results = await this._refreshShares(pubPoly.getThreshold(), [...existingShareIndexes, newShareIndex.toString("hex")], previousPolyID); + const results = await this._refreshShares(pubPoly.getThreshold(), [...existingShareIndexes, newShareIndex.toString(16)], previousPolyID); const newShareStores = results.shareStores; return { newShareStores, newShareIndex }; @@ -617,7 +629,7 @@ class ThresholdKey implements ITKey { return result?.publicKey; } - async retrieveEd25519Seed(): Promise { + async retrieveEd25519Seed(): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); } @@ -634,7 +646,7 @@ class ThresholdKey implements ITKey { async addLocalMetadataTransitions(params: { input: LocalTransitionData; serviceProvider?: IServiceProvider; - privKey?: BN[]; + privKey?: bigint[]; acquireLock?: boolean; }): Promise { const { privKey, input } = params; @@ -672,7 +684,7 @@ class ThresholdKey implements ITKey { } } - async readMetadata(privKey: BN): Promise { + async readMetadata(privKey: bigint): Promise { return this.storageLayer.getMetadata({ privKey }); } @@ -708,7 +720,7 @@ class ThresholdKey implements ITKey { // TODO: fix edge cases where shares are deleted in the newer polynomials // TODO: maybe assign this.shares directly rather than output and inputsharestore. const shareStoresForLastValidPolyID = Object.keys(this.shares[lastValidPolyID]).map((x) => - tb.inputShareStoreSafe(this.outputShareStore(x, lastValidPolyID)) + tb.inputShareStoreSafe(this.outputShareStore(hexToBigInt(x), lastValidPolyID)) ); await Promise.all(shareStoresForLastValidPolyID); return tb; @@ -727,7 +739,7 @@ class ThresholdKey implements ITKey { if (!(ss.polynomialID in this.shares)) { this.shares[ss.polynomialID] = {}; } - this.shares[ss.polynomialID][ss.share.shareIndex.toString("hex")] = ss; + this.shares[ss.polynomialID][ss.share.shareIndex.toString(16)] = ss; } // inputs a share ensuring that the share is the latest share AND metadata is updated to its latest state @@ -756,49 +768,42 @@ class ThresholdKey implements ITKey { if (!autoUpdateMetadata) throw CoreError.default( `TKey SDK metadata seems to be outdated because shareIndex: ` + - `${latestShareRes.latestShare.share.shareIndex.toString("hex")} has a more recent metadata. Please call updateSDK first` + `${latestShareRes.latestShare.share.shareIndex.toString(16)} has a more recent metadata. Please call updateSDK first` ); else this.metadata = latestShareRes.shareMetadata; } if (!(latestShareRes.latestShare.polynomialID in this.shares)) { this.shares[latestShareRes.latestShare.polynomialID] = {}; } - this.shares[latestShareRes.latestShare.polynomialID][latestShareRes.latestShare.share.shareIndex.toString("hex")] = latestShareRes.latestShare; + this.shares[latestShareRes.latestShare.polynomialID][latestShareRes.latestShare.share.shareIndex.toString(16)] = latestShareRes.latestShare; } else { if (!(ss.polynomialID in this.shares)) { this.shares[ss.polynomialID] = {}; } - this.shares[ss.polynomialID][ss.share.shareIndex.toString("hex")] = ss; + this.shares[ss.polynomialID][ss.share.shareIndex.toString(16)] = ss; } } - outputShareStore(shareIndex: BNString, polyID?: string): ShareStore { + outputShareStore(shareIndex: bigint, polyID?: string): ShareStore { if (!this.metadata) { throw CoreError.metadataUndefined(); } - let shareIndexParsed: BN; - if (typeof shareIndex === "number") { - shareIndexParsed = new BN(shareIndex); - } else if (BN.isBN(shareIndex)) { - shareIndexParsed = shareIndex; - } else if (typeof shareIndex === "string") { - shareIndexParsed = new BN(shareIndex, "hex"); - } + const shareIndexHex = shareIndex.toString(16); let polyIDToSearch: string; if (polyID) { polyIDToSearch = polyID; } else { polyIDToSearch = this.metadata.getLatestPublicPolynomial().getPolynomialID(); } - if (!this.metadata.getShareIndexesForPolynomial(polyIDToSearch).includes(shareIndexParsed.toString("hex"))) { + if (!this.metadata.getShareIndexesForPolynomial(polyIDToSearch).includes(shareIndexHex)) { throw new CoreError(1002, "no such share index created"); } - const shareFromStore = this.shares[polyIDToSearch][shareIndexParsed.toString("hex")]; + const shareFromStore = this.shares[polyIDToSearch][shareIndexHex]; if (shareFromStore) return shareFromStore; const poly = this.reconstructLatestPoly(); - const shareMap = poly.generateShares([shareIndexParsed]); + const shareMap = poly.generateShares([shareIndex]); - return new ShareStore(shareMap[shareIndexParsed.toString("hex")], polyIDToSearch); + return new ShareStore(shareMap[shareIndexHex], polyIDToSearch); } getCurrentShareIndexes(): string[] { @@ -849,7 +854,7 @@ class ThresholdKey implements ITKey { return authMetadatas; } - setAuthMetadata(params: { input: Metadata; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ + setAuthMetadata(params: { input: Metadata; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ message: string; }> { const { input, serviceProvider, privKey } = params; @@ -857,7 +862,7 @@ class ThresholdKey implements ITKey { return this.storageLayer.setMetadata({ input: authMetadata, serviceProvider, privKey }); } - async setAuthMetadataBulk(params: { input: Metadata[]; serviceProvider?: IServiceProvider; privKey?: BN[] }): Promise { + async setAuthMetadataBulk(params: { input: Metadata[]; serviceProvider?: IServiceProvider; privKey?: bigint[] }): Promise { if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } @@ -869,7 +874,11 @@ class ThresholdKey implements ITKey { await this.addLocalMetadataTransitions({ input: authMetadatas, serviceProvider, privKey }); } - async getAuthMetadata(params: { serviceProvider?: IServiceProvider; privKey?: BN; includeLocalMetadataTransitions?: boolean }): Promise { + async getAuthMetadata(params: { + serviceProvider?: IServiceProvider; + privKey?: bigint; + includeLocalMetadataTransitions?: boolean; + }): Promise { const raw = await this.getGenericMetadataWithTransitionStates({ ...params, fromJSONConstructor: AuthMetadata }); const authMetadata = raw as AuthMetadata; return authMetadata.metadata; @@ -879,11 +888,11 @@ class ThresholdKey implements ITKey { async getGenericMetadataWithTransitionStates(params: { fromJSONConstructor: FromJSONConstructor; serviceProvider?: IServiceProvider; - privKey?: BN; + privKey?: bigint; includeLocalMetadataTransitions?: boolean; _localMetadataTransitions?: LocalMetadataTransitions; }): Promise { - if (!((params.serviceProvider && params.serviceProvider.postboxKey.toString("hex") !== "0") || params.privKey)) { + if (!((params.serviceProvider && params.serviceProvider.postboxKey.toString(16) !== "0") || params.privKey)) { throw CoreError.default("require either serviceProvider or priv key in getGenericMetadataWithTransitionStates"); } if (params.includeLocalMetadataTransitions) { @@ -893,7 +902,7 @@ class ThresholdKey implements ITKey { let index = null; for (let i = transitions[0].length - 1; i >= 0; i -= 1) { const x = transitions[0][i]; - if (params.privKey && x && x.cmp(params.privKey) === 0) index = i; + if (params.privKey && x && x === params.privKey) index = i; else if (params.serviceProvider && !x) index = i; if (index !== null) break; } @@ -930,7 +939,7 @@ class ThresholdKey implements ITKey { if (shareIndexesExistInSDK.length >= 1) { randomShareStore = this.shares[latestPolyIDOnCloud][randomIndex]; } else { - randomShareStore = this.outputShareStore(randomIndex, latestPolyIDOnCloud); + randomShareStore = this.outputShareStore(hexToBigInt(randomIndex), latestPolyIDOnCloud); } const latestRes = await this.catchupToLatestShare({ shareStore: randomShareStore }); const latestMetadata = latestRes.shareMetadata; @@ -974,7 +983,7 @@ class ThresholdKey implements ITKey { await this.syncMultipleShareMetadata(shareArray, adjustScopedStore); } - async syncMultipleShareMetadata(shares: BN[], adjustScopedStore?: (ss: unknown) => unknown): Promise { + async syncMultipleShareMetadata(shares: bigint[], adjustScopedStore?: (ss: unknown) => unknown): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); } @@ -1010,13 +1019,13 @@ class ThresholdKey implements ITKey { this._refreshMiddleware[moduleName] = middleware; } - _addReconstructKeyMiddleware(moduleName: string, middleware: () => Promise): void { + _addReconstructKeyMiddleware(moduleName: string, middleware: () => Promise): void { this._reconstructKeyMiddleware[moduleName] = middleware; } _addShareSerializationMiddleware( - serialize: (share: BN, type: string) => Promise, - deserialize: (serializedShare: unknown, type: string) => Promise + serialize: (share: bigint, type: string) => Promise, + deserialize: (serializedShare: unknown, type: string) => Promise ): void { this._shareSerializationMiddleware = { serialize, @@ -1061,12 +1070,12 @@ class ThresholdKey implements ITKey { } } - async encrypt(data: Buffer): Promise { + async encrypt(data: Uint8Array): Promise { if (!this.privKey) throw CoreError.privateKeyUnavailable(); return encrypt(getPubKeyECC(this.privKey), data); } - async decrypt(encryptedMessage: EncryptedMessage): Promise { + async decrypt(encryptedMessage: EncryptedMessage): Promise { if (!this.privKey) throw CoreError.privateKeyUnavailable(); return decrypt(toPrivKeyECC(this.privKey), encryptedMessage); } @@ -1079,10 +1088,10 @@ class ThresholdKey implements ITKey { const decryptedItems = await Promise.all( rawTkeyStoreItems.map(async (x) => { const decryptedItem = await this.decrypt(x); - return JSON.parse(decryptedItem.toString()) as TkeyStoreItemType; + return JSON.parse(bytesToUtf8(decryptedItem)) as TkeyStoreItemType; }) ); - const encryptedData = await this.encrypt(Buffer.from(stringify(data))); + const encryptedData = await this.encrypt(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))); const duplicateItemIndex = decryptedItems.findIndex((x) => x.id === data.id); if (duplicateItemIndex > -1) { rawTkeyStoreItems[duplicateItemIndex] = encryptedData; @@ -1103,7 +1112,7 @@ class ThresholdKey implements ITKey { const decryptedItems = await Promise.all( rawTkeyStoreItems.map(async (x) => { const decryptedItem = await this.decrypt(x); - return JSON.parse(decryptedItem.toString()) as TkeyStoreItemType; + return JSON.parse(bytesToUtf8(decryptedItem)) as TkeyStoreItemType; }) ); const finalItems = decryptedItems.filter((x) => x.id !== id); @@ -1120,7 +1129,7 @@ class ThresholdKey implements ITKey { const decryptedItems = await Promise.all( rawTkeyStoreItems.map(async (x) => { const decryptedItem = await this.decrypt(x); - return JSON.parse(decryptedItem.toString()) as TkeyStoreItemType; + return JSON.parse(bytesToUtf8(decryptedItem)) as TkeyStoreItemType; }) ); return decryptedItems; @@ -1135,7 +1144,7 @@ class ThresholdKey implements ITKey { const decryptedItems = await Promise.all( rawTkeyStoreItems.map(async (x) => { const decryptedItem = await this.decrypt(x); - return JSON.parse(decryptedItem.toString()) as TkeyStoreItemType; + return JSON.parse(bytesToUtf8(decryptedItem)) as TkeyStoreItemType; }) ); const item = decryptedItems.find((x) => x.id === id); @@ -1143,7 +1152,7 @@ class ThresholdKey implements ITKey { } // Import export shares - async outputShare(shareIndex: BNString, type?: string): Promise { + async outputShare(shareIndex: bigint, type?: string): Promise { const { share } = this.outputShareStore(shareIndex).share; if (!type) return share; @@ -1155,7 +1164,7 @@ class ThresholdKey implements ITKey { throw CoreError.metadataUndefined(); } let shareStore: ShareStore; - if (!type) shareStore = this.metadata.shareToShareStore(share as BN); + if (!type) shareStore = this.metadata.shareToShareStore(share as bigint); else { const deserialized = await this._shareSerializationMiddleware.deserialize(share, type); shareStore = this.metadata.shareToShareStore(deserialized); @@ -1163,7 +1172,7 @@ class ThresholdKey implements ITKey { const pubPoly = this.metadata.getLatestPublicPolynomial(); const pubPolyID = pubPoly.getPolynomialID(); const fullShareIndexesList = this.metadata.getShareIndexesForPolynomial(pubPolyID); - if (!fullShareIndexesList.includes(shareStore.share.shareIndex.toString("hex"))) { + if (!fullShareIndexesList.includes(shareStore.share.shareIndex.toString(16))) { throw CoreError.default("Latest poly doesn't include this share"); } await this.inputShareStoreSafe(shareStore); @@ -1173,11 +1182,14 @@ class ThresholdKey implements ITKey { return { shares: this.shares, enableLogging: this.enableLogging, - privKey: this.privKey ? this.privKey.toString("hex") : undefined, - ed25519Key: this.ed25519Key ? this.ed25519Key.toString("hex") : undefined, + privKey: this.privKey ? this.privKey.toString(16) : undefined, + ed25519Key: this.ed25519Key ? bytesToHex(this.ed25519Key) : undefined, metadata: this.metadata, lastFetchedCloudMetadata: this.lastFetchedCloudMetadata, - _localMetadataTransitions: this._localMetadataTransitions, + _localMetadataTransitions: [ + this._localMetadataTransitions[0].map((x: bigint | undefined) => (x !== undefined ? x.toString(16) : null)), + this._localMetadataTransitions[1], + ], manualSync: this.manualSync, serviceProvider: this.serviceProvider, storageLayer: this.storageLayer, @@ -1196,10 +1208,10 @@ class ThresholdKey implements ITKey { throw CoreError.unableToReconstruct("not enough shares for polynomial reconstruction"); } for (let i = 0; i < threshold; i += 1) { - pointsArr.push(new Point(new BN(sharesForExistingPoly[i], "hex"), this.shares[pubPolyID][sharesForExistingPoly[i]].share.share)); + pointsArr.push(new Point(hexToBigInt(sharesForExistingPoly[i]), this.shares[pubPolyID][sharesForExistingPoly[i]].share.share)); } const currentPoly = lagrangeInterpolatePolynomial(pointsArr); - const allExistingShares = currentPoly.generateShares(existingShareIndexes); + const allExistingShares = currentPoly.generateShares(existingShareIndexes.map((s) => hexToBigInt(s))); const shareArray = existingShareIndexes.map((shareIndex) => { return this.metadata.shareToShareStore(allExistingShares[shareIndex].share); }); @@ -1283,7 +1295,7 @@ class ThresholdKey implements ITKey { this.metadata.nonce += 1; const poly = generateRandomPolynomial(threshold - 1, this.privKey); - const shares = poly.generateShares(newShareIndexes); + const shares = poly.generateShares(newShareIndexes.map((s) => hexToBigInt(s))); const existingShareIndexes = this.metadata.getShareIndexesForPolynomial(previousPolyID); const pointsArr = []; @@ -1292,7 +1304,7 @@ class ThresholdKey implements ITKey { throw CoreError.unableToReconstruct("not enough shares for polynomial reconstruction"); } for (let i = 0; i < threshold; i += 1) { - pointsArr.push(new Point(new BN(sharesForExistingPoly[i], "hex"), this.shares[previousPolyID][sharesForExistingPoly[i]].share.share)); + pointsArr.push(new Point(hexToBigInt(sharesForExistingPoly[i]), this.shares[previousPolyID][sharesForExistingPoly[i]].share.share)); } const oldPoly = lagrangeInterpolatePolynomial(pointsArr); @@ -1322,10 +1334,10 @@ class ThresholdKey implements ITKey { const newScopedStore: Record = {}; const sharesToPush = await Promise.all( shareIndexesNeedingEncryption.map(async (shareIndex) => { - const oldShare = oldPoly.polyEval(new BN(shareIndex, "hex")); - const encryptedShare = await encrypt(getPubKeyECC(oldShare), Buffer.from(JSON.stringify(newShareStores[shareIndex]))); - newScopedStore[getPubKeyPoint(oldShare).x.toString("hex")] = encryptedShare; - oldShareStores[shareIndex] = new ShareStore(new Share(shareIndex, oldShare), previousPolyID); + const oldShare = oldPoly.polyEval(hexToBigInt(shareIndex)); + const encryptedShare = await encrypt(getPubKeyECC(oldShare), utf8ToBytes(JSON.stringify(newShareStores[shareIndex], bigIntReplacer))); + newScopedStore[getPubKeyPoint(oldShare).x.toString(16)] = encryptedShare; + oldShareStores[shareIndex] = new ShareStore(new Share(hexToBigInt(shareIndex), oldShare), previousPolyID); return oldShare; }) ); @@ -1377,16 +1389,16 @@ class ThresholdKey implements ITKey { importEd25519Seed, delete1OutOf1, }: { - determinedShare?: BN; + determinedShare?: bigint; initializeModules?: boolean; - importedKey?: BN; - importEd25519Seed?: Buffer; + importedKey?: bigint; + importEd25519Seed?: Uint8Array; delete1OutOf1?: boolean; } = {}): Promise { this.lastFetchedCloudMetadata = undefined; if (!importedKey) { - const tmpPriv = generatePrivateBN(); + const tmpPriv = generatePrivateBigInt(); this.secp256k1Key = tmpPriv; } else { this.secp256k1Key = importedKey; @@ -1395,12 +1407,12 @@ class ThresholdKey implements ITKey { // create a random poly and respective shares // 1 is defined as the serviceProvider share // 0 is for tKey - const shareIndexForDeviceStorage = generatePrivateExcludingIndexes([new BN(1), new BN(0)]); + const shareIndexForDeviceStorage = generatePrivateExcludingIndexes([1n, 0n]); - const shareIndexes = [new BN(1), shareIndexForDeviceStorage]; + const shareIndexes = [1n, shareIndexForDeviceStorage]; let poly: Polynomial; if (determinedShare) { - const shareIndexForDeterminedShare = generatePrivateExcludingIndexes([new BN(1), new BN(0)]); + const shareIndexForDeterminedShare = generatePrivateExcludingIndexes([1n, 0n]); poly = generateRandomPolynomial(1, this.privKey, [new Share(shareIndexForDeterminedShare, determinedShare)]); shareIndexes.push(shareIndexForDeterminedShare); } else { @@ -1411,7 +1423,7 @@ class ThresholdKey implements ITKey { // create metadata to be stored const metadata = new Metadata(getPubKeyPoint(this.privKey)); metadata.addFromPolynomialAndShares(poly, shares); - const serviceProviderShare = shares[shareIndexes[0].toString("hex")]; + const serviceProviderShare = shares[shareIndexes[0].toString(16)]; const shareStore = new ShareStore(serviceProviderShare, poly.getPolynomialID()); this.metadata = metadata; @@ -1427,7 +1439,7 @@ class ThresholdKey implements ITKey { const metadataToPush: Metadata[] = []; const sharesToPush = shareIndexes.map((shareIndex) => { metadataToPush.push(this.metadata); - return shares[shareIndex.toString("hex")].share; + return shares[shareIndex.toString(16)].share; }); const authMetadatas = this.generateAuthMetadata({ input: metadataToPush }); @@ -1443,25 +1455,25 @@ class ThresholdKey implements ITKey { for (let index = 0; index < shareIndexes.length; index += 1) { const shareIndex = shareIndexes[index]; // also add into our share store - this.inputShareStore(new ShareStore(shares[shareIndex.toString("hex")], poly.getPolynomialID())); + this.inputShareStore(new ShareStore(shares[shareIndex.toString(16)], poly.getPolynomialID())); } if (this.storeDeviceShare) { - await this.storeDeviceShare(new ShareStore(shares[shareIndexes[1].toString("hex")], poly.getPolynomialID())); + await this.storeDeviceShare(new ShareStore(shares[shareIndexes[1].toString(16)], poly.getPolynomialID())); } const result: InitializeNewKeyResult = { secp256k1Key: this.privKey, - deviceShare: new ShareStore(shares[shareIndexes[1].toString("hex")], poly.getPolynomialID()), + deviceShare: new ShareStore(shares[shareIndexes[1].toString(16)], poly.getPolynomialID()), userShare: undefined, }; if (determinedShare) { - result.userShare = new ShareStore(shares[shareIndexes[2].toString("hex")], poly.getPolynomialID()); + result.userShare = new ShareStore(shares[shareIndexes[2].toString(16)], poly.getPolynomialID()); } return result; } - private async importEd25519Seed(seed: Buffer): Promise { + private async importEd25519Seed(seed: Uint8Array): Promise { if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } @@ -1472,18 +1484,20 @@ class ThresholdKey implements ITKey { // derive key pair (scalar, public key point) from seed const keyPair = getEd25519KeyPairFromSeed(seed); - this.metadata.setGeneralStoreDomain(ed25519SeedConst, { message: await this.encrypt(seed), publicKey: keyPair.point.encode("hex", false) }); + this.metadata.setGeneralStoreDomain(ed25519SeedConst, { + message: await this.encrypt(seed), + publicKey: bytesToHex(encodeEd25519Point(keyPair.point)), + }); this._ed25519Seed = seed; } - private async setupEd25519Seed(seed?: Buffer): Promise { + private async setupEd25519Seed(seed?: Uint8Array): Promise { if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } let seedToUse = seed; if (!seed) { - const newEd25519Seed = await getRandomBytes(32); - seedToUse = Buffer.from(newEd25519Seed); + seedToUse = randomBytes(32); } await this.importEd25519Seed(seedToUse); } diff --git a/packages/core/src/lagrangeInterpolatePolynomial.ts b/packages/core/src/lagrangeInterpolatePolynomial.ts index 9b868d3ce..dad288fb6 100644 --- a/packages/core/src/lagrangeInterpolatePolynomial.ts +++ b/packages/core/src/lagrangeInterpolatePolynomial.ts @@ -1,38 +1,38 @@ -import { EllipticPoint, generatePrivateExcludingIndexes, Point, Polynomial, secp256k1, Share } from "@tkey/common-types"; -import BN from "bn.js"; +import { invert, mod } from "@noble/curves/abstract/modular.js"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; +import { generatePrivateExcludingIndexes, Point, Polynomial, secp256k1, Share } from "@tkey/common-types"; import CoreError from "./errors"; -export function generatePrivateBN(): BN { - return secp256k1.genKeyPair().getPrivate(); +const N = secp256k1.Point.CURVE().n; + +export function generatePrivateBigInt(): bigint { + return bytesToNumberBE(secp256k1.utils.randomSecretKey()); } -const generateEmptyBNArray = (length: number): BN[] => Array.from({ length }, () => new BN(0)); +const generateEmptyBigIntArray = (length: number): bigint[] => Array.from({ length }, () => 0n); -const denominator = (i: number, innerPoints: Array) => { - let result = new BN(1); +const denominator = (i: number, innerPoints: Point[]) => { + let result = 1n; const xi = innerPoints[i].x; for (let j = innerPoints.length - 1; j >= 0; j -= 1) { if (i !== j) { - let tmp = new BN(xi); - tmp = tmp.sub(innerPoints[j].x); - tmp = tmp.umod(secp256k1.curve.n); - result = result.mul(tmp); - result = result.umod(secp256k1.curve.n); + const tmp = mod(xi - innerPoints[j].x, N); + result = mod(result * tmp, N); } } return result; }; -const interpolationPoly = (i: number, innerPoints: Array): BN[] => { - let coefficients = generateEmptyBNArray(innerPoints.length); +const interpolationPoly = (i: number, innerPoints: Point[]): bigint[] => { + let coefficients = generateEmptyBigIntArray(innerPoints.length); const d = denominator(i, innerPoints); - if (d.cmp(new BN(0)) === 0) { + if (d === 0n) { throw CoreError.default("Denominator for interpolationPoly is 0"); } - coefficients[0] = d.invm(secp256k1.curve.n); + coefficients[0] = invert(d, N); for (let k = 0; k < innerPoints.length; k += 1) { - const newCoefficients = generateEmptyBNArray(innerPoints.length); + const newCoefficients = generateEmptyBigIntArray(innerPoints.length); if (k !== i) { let j: number; if (k < i) { @@ -42,13 +42,9 @@ const interpolationPoly = (i: number, innerPoints: Array): BN[] => { } j -= 1; for (; j >= 0; j -= 1) { - newCoefficients[j + 1] = newCoefficients[j + 1].add(coefficients[j]); - newCoefficients[j + 1] = newCoefficients[j + 1].umod(secp256k1.curve.n); - let tmp = new BN(innerPoints[k].x); - tmp = tmp.mul(coefficients[j]); - tmp = tmp.umod(secp256k1.curve.n); - newCoefficients[j] = newCoefficients[j].sub(tmp); - newCoefficients[j] = newCoefficients[j].umod(secp256k1.curve.n); + newCoefficients[j + 1] = mod(newCoefficients[j + 1] + coefficients[j], N); + const tmp = mod(innerPoints[k].x * coefficients[j], N); + newCoefficients[j] = mod(newCoefficients[j] - tmp, N); } coefficients = newCoefficients; } @@ -58,61 +54,53 @@ const interpolationPoly = (i: number, innerPoints: Array): BN[] => { const pointSort = (innerPoints: Point[]): Point[] => { const pointArrClone = [...innerPoints]; - pointArrClone.sort((a, b) => a.x.cmp(b.x)); + pointArrClone.sort((a, b) => (a.x < b.x ? -1 : a.x > b.x ? 1 : 0)); return pointArrClone; }; const lagrange = (unsortedPoints: Point[]) => { const sortedPoints = pointSort(unsortedPoints); - const polynomial = generateEmptyBNArray(sortedPoints.length); + const polynomial = generateEmptyBigIntArray(sortedPoints.length); for (let i = 0; i < sortedPoints.length; i += 1) { const coefficients = interpolationPoly(i, sortedPoints); for (let k = 0; k < sortedPoints.length; k += 1) { - let tmp = new BN(sortedPoints[i].y); - tmp = tmp.mul(coefficients[k]); - polynomial[k] = polynomial[k].add(tmp); - polynomial[k] = polynomial[k].umod(secp256k1.curve.n); + const tmp = sortedPoints[i].y * coefficients[k]; + polynomial[k] = mod(polynomial[k] + tmp, N); } } return new Polynomial(polynomial); }; -export function lagrangeInterpolatePolynomial(points: Array): Polynomial { +export function lagrangeInterpolatePolynomial(points: Point[]): Polynomial { return lagrange(points); } -export function lagrangeInterpolation(shares: BN[], nodeIndex: BN[]): BN { +export function lagrangeInterpolation(shares: bigint[], nodeIndex: bigint[]): bigint { if (shares.length !== nodeIndex.length) { throw CoreError.default("shares not equal to nodeIndex length in lagrangeInterpolation"); } - let secret = new BN(0); + let secret = 0n; for (let i = 0; i < shares.length; i += 1) { - let upper = new BN(1); - let lower = new BN(1); + let upper = 1n; + let lower = 1n; for (let j = 0; j < shares.length; j += 1) { if (i !== j) { - upper = upper.mul(nodeIndex[j].neg()); - upper = upper.umod(secp256k1.curve.n); - let temp = nodeIndex[i].sub(nodeIndex[j]); - temp = temp.umod(secp256k1.curve.n); - lower = lower.mul(temp).umod(secp256k1.curve.n); + upper = mod(upper * -nodeIndex[j], N); + const temp = mod(nodeIndex[i] - nodeIndex[j], N); + lower = mod(lower * temp, N); } } - let delta = upper.mul(lower.invm(secp256k1.curve.n)).umod(secp256k1.curve.n); - delta = delta.mul(shares[i]).umod(secp256k1.curve.n); - secret = secret.add(delta); + let delta = mod(upper * invert(lower, N), N); + delta = mod(delta * shares[i], N); + secret = secret + delta; } - return secret.umod(secp256k1.curve.n); + return mod(secret, N); } -// generateRandomPolynomial - determinisiticShares are assumed random -export function generateRandomPolynomial(degree: number, secret?: BN, deterministicShares?: Array): Polynomial { - let actualS = secret; - if (!secret) { - actualS = generatePrivateExcludingIndexes([new BN(0)]); - } +export function generateRandomPolynomial(degree: number, secret?: bigint, deterministicShares?: Share[]): Polynomial { + const actualS = secret !== undefined ? secret : generatePrivateExcludingIndexes([0n]); if (!deterministicShares) { - const poly = [actualS]; + const poly: bigint[] = [actualS]; for (let i = 0; i < degree; i += 1) { const share = generatePrivateExcludingIndexes(poly); poly.push(share); @@ -128,32 +116,27 @@ export function generateRandomPolynomial(degree: number, secret?: BN, determinis } const points: Record = {}; deterministicShares.forEach((share) => { - points[share.shareIndex.toString("hex") as string] = new Point(share.shareIndex, share.share); + points[share.shareIndex.toString(16)] = new Point(share.shareIndex, share.share); }); for (let i = 0; i < degree - deterministicShares.length; i += 1) { - let shareIndex = generatePrivateExcludingIndexes([new BN(0)]); - while (points[shareIndex.toString("hex")] !== undefined) { - shareIndex = generatePrivateExcludingIndexes([new BN(0)]); + let shareIndex = generatePrivateExcludingIndexes([0n]); + while (points[shareIndex.toString(16)] !== undefined) { + shareIndex = generatePrivateExcludingIndexes([0n]); } - points[shareIndex.toString("hex")] = new Point(shareIndex, generatePrivateBN()); + points[shareIndex.toString(16)] = new Point(shareIndex, generatePrivateBigInt()); } - points["0"] = new Point(new BN(0), actualS); + points["0"] = new Point(0n, actualS); return lagrangeInterpolatePolynomial(Object.values(points)); } // 2 + 3x = y | secret for index 1 is 5 >>> g^5 is the commitment | now we have g^2, g^3 and 1, | -export function polyCommitmentEval(polyCommitments: Array, index: BN): Point { - // convert to base points, this is badly written, its the only way to access the point rn zzz TODO: refactor - const basePtPolyCommitments: Array = []; - for (let i = 0; i < polyCommitments.length; i += 1) { - const key = secp256k1.keyFromPublic({ x: polyCommitments[i].x.toString("hex"), y: polyCommitments[i].y.toString("hex") }, ""); - basePtPolyCommitments.push(key.getPublic()); - } - let shareCommitment = basePtPolyCommitments[0]; - for (let i = 1; i < basePtPolyCommitments.length; i += 1) { - const factor = index.pow(new BN(i)).umod(secp256k1.n); - const e = basePtPolyCommitments[i].mul(factor); +export function polyCommitmentEval(polyCommitments: Point[], index: bigint): Point { + let shareCommitment = polyCommitments[0].toProjectivePoint(); + for (let i = 1; i < polyCommitments.length; i += 1) { + const factor = mod(index ** BigInt(i), N); + const e = polyCommitments[i].toProjectivePoint().multiply(factor); shareCommitment = shareCommitment.add(e); } - return new Point(shareCommitment.getX(), shareCommitment.getY()); + const affine = shareCommitment.toAffine(); + return new Point(affine.x, affine.y); } diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index bb4df5723..e7461a3d4 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -1,4 +1,5 @@ import { + bigIntReplacer, decrypt, EncryptedMessage, FactorEnc, @@ -13,7 +14,6 @@ import { PublicPolynomialMap, PublicShare, PublicSharePolyIDShareIndexMap, - secp256k1, Share, ShareDescriptionMap, ShareMap, @@ -21,7 +21,7 @@ import { StringifiedType, toPrivKeyECC, } from "@tkey/common-types"; -import BN from "bn.js"; +import { bytesToHex, bytesToUtf8 } from "@toruslabs/metadata-helpers"; import stringify from "json-stable-stringify"; import CoreError from "./errors"; @@ -91,7 +91,7 @@ class Metadata implements IMetadata { static fromJSON(value: StringifiedType): Metadata { const { pubKey, polyIDList, generalStore, tkeyStore, scopedStore, nonce, tssKeyTypes, tssPolyCommits, tssNonces, factorPubs, factorEncs } = value; - const point = Point.fromSEC1(secp256k1, pubKey); + const point = Point.fromSEC1(pubKey); const metadata = new Metadata(point); const unserializedPolyIDList: PolyIDAndShares[] = []; @@ -109,7 +109,7 @@ class Metadata implements IMetadata { if (tssPolyCommits) { metadata.tssPolyCommits = {}; for (const key in tssPolyCommits) { - metadata.tssPolyCommits[key] = (tssPolyCommits as Record)[key].map((obj) => new Point(obj.x, obj.y)); + metadata.tssPolyCommits[key] = (tssPolyCommits as Record)[key].map((obj) => Point.fromJSON(obj)); } } if (tssNonces) { @@ -121,7 +121,7 @@ class Metadata implements IMetadata { if (factorPubs) { metadata.factorPubs = {}; for (const key in factorPubs) { - metadata.factorPubs[key] = (factorPubs as Record)[key].map((obj) => new Point(obj.x, obj.y)); + metadata.factorPubs[key] = (factorPubs as Record)[key].map((obj) => Point.fromJSON(obj)); } } if (factorEncs) metadata.factorEncs = factorEncs; @@ -167,7 +167,7 @@ class Metadata implements IMetadata { if (!(polynomialID in this.publicShares)) { this.publicShares[polynomialID] = {}; } - this.publicShares[polynomialID][publicShare.shareIndex.toString("hex")] = publicShare; + this.publicShares[polynomialID][publicShare.shareIndex.toString(16)] = publicShare; } setGeneralStoreDomain(key: string, obj: unknown): void { @@ -201,13 +201,13 @@ class Metadata implements IMetadata { if (Array.isArray(shares)) { for (let i = 0; i < shares.length; i += 1) { this.addPublicShare(publicPolynomial.getPolynomialID(), shares[i].getPublicShare()); - shareIndexArr.push(shares[i].shareIndex.toString("hex")); + shareIndexArr.push(shares[i].shareIndex.toString(16)); } } else { for (const k in shares) { if (Object.prototype.hasOwnProperty.call(shares, k)) { this.addPublicShare(publicPolynomial.getPolynomialID(), shares[k].getPublicShare()); - shareIndexArr.push(shares[k].shareIndex.toString("hex")); + shareIndexArr.push(shares[k].shareIndex.toString(16)); } } } @@ -224,12 +224,12 @@ class Metadata implements IMetadata { if (!encryptedShareStore) { throw CoreError.encryptedShareStoreUnavailable(`${shareStore}`); } - const encryptedShare = encryptedShareStore[pubShare.shareCommitment.x.toString("hex")]; + const encryptedShare = encryptedShareStore[pubShare.shareCommitment.x.toString(16)]; if (!encryptedShare) { throw CoreError.encryptedShareStoreUnavailable(`${shareStore}`); } const rawDecrypted = await decrypt(toPrivKeyECC(shareStore.share.share), encryptedShare as EncryptedMessage); - return ShareStore.fromJSON(JSON.parse(rawDecrypted.toString())); + return ShareStore.fromJSON(JSON.parse(bytesToUtf8(rawDecrypted))); } getShareDescription(): ShareDescriptionMap { @@ -268,9 +268,8 @@ class Metadata implements IMetadata { } } - shareToShareStore(share: BN): ShareStore { + shareToShareStore(share: bigint): ShareStore { const pubkey = getPubKeyPoint(share); - let returnShare: ShareStore; for (let i = this.polyIDList.length - 1; i >= 0; i -= 1) { const el = this.polyIDList[i][0]; @@ -287,22 +286,22 @@ class Metadata implements IMetadata { // if not reconstruct if (!pubShare) { - pubShare = new PublicShare(shareIndex, polyCommitmentEval(this.publicPolynomials[el].polynomialCommitments, new BN(shareIndex, "hex"))); + pubShare = new PublicShare( + BigInt(`0x${shareIndex}`), + polyCommitmentEval(this.publicPolynomials[el].polynomialCommitments, BigInt(`0x${shareIndex}`)) + ); } - if (pubShare.shareCommitment.x.eq(pubkey.x) && pubShare.shareCommitment.y.eq(pubkey.y)) { + if (pubShare.shareCommitment.x === pubkey.x && pubShare.shareCommitment.y === pubkey.y) { const tempShare = new Share(pubShare.shareIndex, share); return new ShareStore(tempShare, el); } } } - if (!returnShare) { - throw CoreError.fromCode(1307); - } - return returnShare; + throw CoreError.fromCode(1307); } clone(): Metadata { - return Metadata.fromJSON(JSON.parse(stringify(this))); + return Metadata.fromJSON(JSON.parse(stringify(this, { replacer: bigIntReplacer }))); } toJSON(): StringifiedType { @@ -311,7 +310,11 @@ class Metadata implements IMetadata { for (let i = 0; i < this.polyIDList.length; i += 1) { const polyID = this.polyIDList[i][0]; const shareIndexes = this.polyIDList[i][1]; - const sortedShareIndexes = shareIndexes.sort((a: string, b: string) => new BN(a, "hex").cmp(new BN(b, "hex"))); + const sortedShareIndexes = shareIndexes.sort((a: string, b: string) => { + const aBig = BigInt(`0x${a}`); + const bBig = BigInt(`0x${b}`); + return aBig < bBig ? -1 : aBig > bBig ? 1 : 0; + }); const serializedPolyID = polyID .split(`|`) .concat("0x0") @@ -321,7 +324,7 @@ class Metadata implements IMetadata { } return { - pubKey: this.pubKey.toSEC1(secp256k1, true).toString("hex"), + pubKey: bytesToHex(this.pubKey.toSEC1(true)), polyIDList: serializedPolyIDList, scopedStore: this.scopedStore, generalStore: this.generalStore, diff --git a/packages/core/test/.eslintrc.json b/packages/core/test/.eslintrc.json index 955546bd7..aef95fc40 100644 --- a/packages/core/test/.eslintrc.json +++ b/packages/core/test/.eslintrc.json @@ -3,5 +3,4 @@ "prefer-arrow-callback": "off", "func-names": "off" } - } diff --git a/packages/core/test/authMetadata.test.js b/packages/core/test/authMetadata.test.js index c8a8e1446..d28667d6a 100644 --- a/packages/core/test/authMetadata.test.js +++ b/packages/core/test/authMetadata.test.js @@ -1,28 +1,216 @@ -import { generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; -import { generatePrivate } from "@toruslabs/eccrypto"; -import { deepStrictEqual } from "assert"; -import BN from "bn.js"; +import { bytesToHex } from "@noble/curves/utils.js"; +import { bigIntReplacer, generatePrivate, generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; +import { deepStrictEqual, throws } from "assert"; import stringify from "json-stable-stringify"; import { AuthMetadata, generateRandomPolynomial, Metadata } from "../src/index"; -const PRIVATE_KEY = generatePrivate().toString("hex"); +// Fixtures generated by published @tkey/core@16.0.0 (old version) +// Signatures were produced by elliptic (high-S possible), verified by @noble/curves with lowS:false. +const OLD_FORMAT_FIXTURES = [ + { + data: { + pubKey: "03e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde2250d5f271f3563606", + polyIDList: [ + "03e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde2250d5f271f3563606|028e329439afba92391a51912d961d54ae18c98a017072aab86c8b429da7b677a3|0x0|1|2|4f26421bbcd236f511c90fb406171b52a5d355caacc2dfdf7911a1e901ed7c40", + ], + scopedStore: {}, + generalStore: { something: { test: "oh this is an object" } }, + tkeyStore: {}, + nonce: 0, + tssKeyTypes: {}, + tssNonces: {}, + tssPolyCommits: {}, + factorPubs: {}, + factorEncs: {}, + }, + sig: "3046022100bdb2a0b5fcce0cce21495dcfb3ab32873e64247911e8bf197dc9c6f1fa99b813022100e3b393e4ff9df798eeb3f27912ff1b5fdaf464617203a7b6c26b9816bb2649a1", + }, + { + data: { + pubKey: "03e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde2250d5f271f3563606", + polyIDList: [ + "03e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde2250d5f271f3563606|02ca9b526436f1fa5f28c77c372a8c4185a849e702e938e578098a03039bed4f60|0x0|1|2|7925a32576b1678d09159a24419f54dd441b0468bea80f5d5b75ee7ea8aa82ea", + ], + scopedStore: {}, + generalStore: { other: { count: 42 } }, + tkeyStore: {}, + nonce: 1, + tssKeyTypes: {}, + tssNonces: {}, + tssPolyCommits: {}, + factorPubs: {}, + factorEncs: {}, + }, + sig: "3046022100e031d241cc13d8a899035af6bbc14b07f1aac46d455a61d38893261c9684b8d5022100d95539a0e819a485e03e172cd5cf4e9b375fe8fbdd4483db40027697eedd0e9c", + }, + { + data: { + pubKey: "03e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde2250d5f271f3563606", + polyIDList: [ + "03e68acfc0253a10620dff706b0a1b1f1f5833ea3beb3bde2250d5f271f3563606|02245f5d5404f949a8be4478c98cc7e8555b8d8b6f1f5c38b7203d85d80acf77f4|0x0|1|2|d70f9646f686b2e380258fbb0f36b41c84094362a20519cbae19f6cbed2bd17e", + ], + scopedStore: {}, + generalStore: {}, + tkeyStore: {}, + nonce: 0, + tssKeyTypes: {}, + tssNonces: {}, + tssPolyCommits: {}, + factorPubs: {}, + factorEncs: {}, + }, + sig: "304502210085ab53ec34b1b39d169de83ef2e47a83beade928702a4292d4c6f7f5b656e39b02202d0b3ac8ab18257c64dae1eaffc1f45daab67544537aa61b093458fb6910c7a5", + }, +]; + +const PRIVATE_KEY = bytesToHex(generatePrivate()); + +function createTestMetadata(privKeyBN) { + const shareIndexes = [1n, 2n]; + shareIndexes.push(generatePrivateExcludingIndexes(shareIndexes)); + const poly = generateRandomPolynomial(1, privKeyBN); + const shares = poly.generateShares(shareIndexes); + const metadata = new Metadata(getPubKeyPoint(privKeyBN)); + metadata.addFromPolynomialAndShares(poly, shares); + metadata.setGeneralStoreDomain("something", { test: "oh this is an object" }); + return metadata; +} describe("AuthMetadata", function () { - it("#should authenticate and serialize and deserialize into JSON seamlessly", async function () { - const privKeyBN = new BN(PRIVATE_KEY, 16); - // create a random poly and respective shares - const shareIndexes = [new BN(1), new BN(2)]; - shareIndexes.push(generatePrivateExcludingIndexes(shareIndexes)); - const poly = generateRandomPolynomial(1, privKeyBN); - const shares = poly.generateShares(shareIndexes); - const metadata = new Metadata(getPubKeyPoint(privKeyBN)); - metadata.addFromPolynomialAndShares(poly, shares); - metadata.setGeneralStoreDomain("something", { test: "oh this is an object" }); + it("#should authenticate and serialize and deserialize into JSON seamlessly", async function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); const a = new AuthMetadata(metadata, privKeyBN); const stringified = stringify(a); const metadataSerialized = Metadata.fromJSON(JSON.parse(stringify(metadata))); const final = AuthMetadata.fromJSON(JSON.parse(stringified)); deepStrictEqual(final.metadata, metadataSerialized, "Must be equal"); }); + + it("#should round-trip: stringify -> parse -> fromJSON preserves metadata fields", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); + const auth = new AuthMetadata(metadata, privKeyBN); + const parsed = JSON.parse(stringify(auth, { replacer: bigIntReplacer })); + const restored = AuthMetadata.fromJSON(parsed); + deepStrictEqual(restored.metadata.pubKey.x, metadata.pubKey.x, "pubKey.x must match"); + deepStrictEqual(restored.metadata.pubKey.y, metadata.pubKey.y, "pubKey.y must match"); + deepStrictEqual(restored.metadata.nonce, metadata.nonce, "nonce must match"); + deepStrictEqual(restored.metadata.generalStore, metadata.generalStore, "generalStore must match"); + }); + + it("#should round-trip multiple times without corruption", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); + + const auth1 = new AuthMetadata(metadata, privKeyBN); + const parsed1 = JSON.parse(stringify(auth1, { replacer: bigIntReplacer })); + const restored1 = AuthMetadata.fromJSON(parsed1); + + const auth2 = new AuthMetadata(restored1.metadata, privKeyBN); + const parsed2 = JSON.parse(stringify(auth2, { replacer: bigIntReplacer })); + const restored2 = AuthMetadata.fromJSON(parsed2); + + deepStrictEqual( + stringify(restored1.metadata, { replacer: bigIntReplacer }), + stringify(restored2.metadata, { replacer: bigIntReplacer }), + "double round-trip must be stable" + ); + }); + + it("#should reject tampered signature", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); + const auth = new AuthMetadata(metadata, privKeyBN); + const parsed = JSON.parse(stringify(auth, { replacer: bigIntReplacer })); + parsed.sig = parsed.sig.slice(0, -2) + "00"; + throws(() => AuthMetadata.fromJSON(parsed), /not valid|invalid/i, "tampered sig must be rejected"); + }); + + it("#should reject signature from wrong key", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const otherKey = BigInt(`0x${bytesToHex(generatePrivate())}`); + const metadata = createTestMetadata(privKeyBN); + const auth = new AuthMetadata(metadata, otherKey); + const parsed = JSON.parse(stringify(auth, { replacer: bigIntReplacer })); + throws(() => AuthMetadata.fromJSON(parsed), /not valid|invalid/i, "wrong key sig must be rejected"); + }); + + it("#should throw when toJSON called without privKey", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); + const auth = new AuthMetadata(metadata); + throws(() => auth.toJSON(), /privkey unavailable/i, "toJSON without privKey must throw"); + }); + + it("#should throw when fromJSON called with missing data", function () { + throws(() => AuthMetadata.fromJSON({}), /metadata/i, "missing data must throw"); + throws(() => AuthMetadata.fromJSON({ data: null }), /metadata/i, "null data must throw"); + }); + + it("#should preserve polyIDList through round-trip", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); + const auth = new AuthMetadata(metadata, privKeyBN); + const parsed = JSON.parse(stringify(auth, { replacer: bigIntReplacer })); + const restored = AuthMetadata.fromJSON(parsed); + deepStrictEqual(restored.metadata.polyIDList.length, metadata.polyIDList.length, "polyIDList length must match"); + for (let i = 0; i < metadata.polyIDList.length; i++) { + deepStrictEqual(restored.metadata.polyIDList[i][0], metadata.polyIDList[i][0], `polyID[${i}] must match`); + deepStrictEqual(restored.metadata.polyIDList[i][1].sort(), metadata.polyIDList[i][1].sort(), `shareIndexes[${i}] must match`); + } + }); + + it("#should be JSON.parse compatible with bigIntReplacer output", function () { + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); + const metadata = createTestMetadata(privKeyBN); + const auth = new AuthMetadata(metadata, privKeyBN); + const jsonStr = stringify(auth, { replacer: bigIntReplacer }); + const parsed = JSON.parse(jsonStr); + const restored = AuthMetadata.fromJSON(parsed); + deepStrictEqual(restored.metadata.pubKey.x, metadata.pubKey.x, "pubKey.x must survive bigIntReplacer"); + }); + + it("#should load old-format toJSON snapshots via fromJSON (backward compat)", function () { + for (const fixture of OLD_FORMAT_FIXTURES) { + const restored = AuthMetadata.fromJSON(fixture); + const restoredPubKeyHex = bytesToHex(restored.metadata.pubKey.toSEC1(true)); + deepStrictEqual(restoredPubKeyHex, fixture.data.pubKey, "pubKey must match"); + deepStrictEqual(restored.metadata.generalStore, fixture.data.generalStore ?? {}, "generalStore must match"); + deepStrictEqual(restored.metadata.nonce, fixture.data.nonce ?? 0, "nonce must match"); + if (restored.metadata.polyIDList.length < 1) throw new Error("polyIDList must not be empty"); + } + }); + + it("#should load multiple freshly-generated toJSON outputs via fromJSON", function () { + const keys = []; + for (let i = 0; i < 5; i++) { + keys.push(BigInt(`0x${bytesToHex(generatePrivate())}`)); + } + + const snapshots = keys.map((privKeyBN, i) => { + const shareIndexes = [1n, 2n]; + shareIndexes.push(generatePrivateExcludingIndexes(shareIndexes)); + const poly = generateRandomPolynomial(1, privKeyBN); + const shares = poly.generateShares(shareIndexes); + const metadata = new Metadata(getPubKeyPoint(privKeyBN)); + metadata.addFromPolynomialAndShares(poly, shares); + metadata.setGeneralStoreDomain("counter", { n: i }); + if (i % 2 === 0) metadata.setGeneralStoreDomain("even", { flag: true }); + const auth = new AuthMetadata(metadata, privKeyBN); + return { + serialized: JSON.parse(stringify(auth, { replacer: bigIntReplacer })), + originalPubX: metadata.pubKey.x, + originalStore: JSON.parse(JSON.stringify(metadata.generalStore)), + }; + }); + + for (let i = 0; i < snapshots.length; i++) { + const { serialized, originalPubX, originalStore } = snapshots[i]; + const restored = AuthMetadata.fromJSON(serialized); + deepStrictEqual(restored.metadata.pubKey.x, originalPubX, `snapshot[${i}] pubKey.x must match`); + deepStrictEqual(restored.metadata.generalStore, originalStore, `snapshot[${i}] generalStore must match`); + } + }); }); diff --git a/packages/core/test/lagrange.test.js b/packages/core/test/lagrange.test.js index cca6c523d..39be6ab65 100644 --- a/packages/core/test/lagrange.test.js +++ b/packages/core/test/lagrange.test.js @@ -1,33 +1,33 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; import { generateRandomPolynomial, lagrangeInterpolation } from "../src/index"; describe("lagrange interpolate", function () { it("#should interpolate secret correctly", async function () { - const polyArr = [new BN(5), new BN(2)]; + const polyArr = [5n, 2n]; const poly = new Polynomial(polyArr); - const share1 = poly.polyEval(new BN(1)); - const share2 = poly.polyEval(new BN(2)); - const key = lagrangeInterpolation([share1, share2], [new BN(1), new BN(2)]); - if (key.cmp(new BN(5)) !== 0) { + const share1 = poly.polyEval(1n); + const share2 = poly.polyEval(2n); + const key = lagrangeInterpolation([share1, share2], [1n, 2n]); + if (key !== 5n) { fail("poly result should equal 7"); } }); it("#should interpolate random secrets correctly", async function () { const degree = Math.ceil(Math.random() * 10); - const secret = new BN(generatePrivate()); + const secret = bytesToNumberBE(generatePrivate()); const poly = generateRandomPolynomial(degree, secret); const shares = []; const indexes = []; for (let i = 1; i <= degree + 1; i += 1) { - indexes.push(new BN(i)); - shares.push(poly.polyEval(new BN(i))); + indexes.push(BigInt(i)); + shares.push(poly.polyEval(BigInt(i))); } const key = lagrangeInterpolation(shares, indexes); - if (key.cmp(secret) !== 0) { + if (key !== secret) { fail("lagranged scalar should equal secret"); } }); diff --git a/packages/core/test/lagrangePoly.test.js b/packages/core/test/lagrangePoly.test.js index 1f762c213..69d06b478 100644 --- a/packages/core/test/lagrangePoly.test.js +++ b/packages/core/test/lagrangePoly.test.js @@ -1,21 +1,21 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { Point, Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; import { generateRandomPolynomial, lagrangeInterpolatePolynomial } from "../src/index"; describe("lagrangeInterpolatePolynomial", function () { it("#should interpolate basic poly correctly", async function () { - const polyArr = [new BN(5), new BN(2)]; + const polyArr = [5n, 2n]; const poly = new Polynomial(polyArr); - const share1 = poly.polyEval(new BN(1)); - const share2 = poly.polyEval(new BN(2)); - const resultPoly = lagrangeInterpolatePolynomial([new Point(new BN(1), share1), new Point(new BN(2), share2)]); - if (polyArr[0].cmp(resultPoly.polynomial[0]) !== 0) { + const share1 = poly.polyEval(1n); + const share2 = poly.polyEval(2n); + const resultPoly = lagrangeInterpolatePolynomial([new Point(1n, share1), new Point(2n, share2)]); + if (polyArr[0] !== resultPoly.polynomial[0]) { fail("poly result should equal hardcoded poly"); } - if (polyArr[1].cmp(resultPoly.polynomial[1]) !== 0) { + if (polyArr[1] !== resultPoly.polynomial[1]) { fail("poly result should equal hardcoded poly"); } }); @@ -24,12 +24,12 @@ describe("lagrangeInterpolatePolynomial", function () { const poly = generateRandomPolynomial(degree); const pointArr = []; for (let i = 0; i < degree + 1; i += 1) { - const shareIndex = new BN(generatePrivate()); + const shareIndex = bytesToNumberBE(generatePrivate()); pointArr.push(new Point(shareIndex, poly.polyEval(shareIndex))); } const resultPoly = lagrangeInterpolatePolynomial(pointArr); resultPoly.polynomial.forEach(function (coeff, i) { - if (poly.polynomial[i].cmp(coeff) !== 0) { + if (poly.polynomial[i] !== coeff) { fail("poly result should equal hardcoded poly"); } }); diff --git a/packages/core/test/metadata.test.js b/packages/core/test/metadata.test.js index f0fac7796..fb93bff91 100644 --- a/packages/core/test/metadata.test.js +++ b/packages/core/test/metadata.test.js @@ -1,26 +1,26 @@ +import { bytesToHex, bytesToNumberBE } from "@noble/curves/utils.js"; import { getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import BN from "bn.js"; import stringify from "json-stable-stringify"; import { generateRandomPolynomial, Metadata } from "../src/index"; -const PRIVATE_KEY = generatePrivate().toString("hex"); +const PRIVATE_KEY = bytesToHex(generatePrivate()); describe("Metadata", function () { it("#should serialize and deserialize into JSON seamlessly", async function () { const privKey = PRIVATE_KEY; - const privKeyBN = new BN(privKey, 16); + const privKeyBN = BigInt(`0x${privKey}`); // create a random poly and respective shares - const shareIndexes = [new BN(1), new BN(2)]; + const shareIndexes = [1n, 2n]; for (let i = 1; i <= 2; i += 1) { let ran = generatePrivate(); while (ran < 2) { ran = generatePrivate(); } - shareIndexes.push(new BN(ran)); + shareIndexes.push(bytesToNumberBE(ran)); } const poly = generateRandomPolynomial(1, privKeyBN); const shares = poly.generateShares(shareIndexes); @@ -36,15 +36,15 @@ describe("Metadata", function () { }); it("#should serialize and deserialize into JSON with tkey store seamlessly", async function () { const privKey = PRIVATE_KEY; - const privKeyBN = new BN(privKey, 16); + const privKeyBN = BigInt(`0x${privKey}`); // create a random poly and respective shares - const shareIndexes = [new BN(1), new BN(2)]; + const shareIndexes = [1n, 2n]; for (let i = 1; i <= 2; i += 1) { let ran = generatePrivate(); while (ran < 2) { ran = generatePrivate(); } - shareIndexes.push(new BN(ran)); + shareIndexes.push(bytesToNumberBE(ran)); } const poly = generateRandomPolynomial(1, privKeyBN); const shares = poly.generateShares(shareIndexes); @@ -60,15 +60,15 @@ describe("Metadata", function () { }); it("#should serialize and deserialize into JSON with tkey store seamlessly 2", async function () { const privKey = PRIVATE_KEY; - const privKeyBN = new BN(privKey, 16); + const privKeyBN = BigInt(`0x${privKey}`); // create a random poly and respective shares - const shareIndexes = [new BN(1), new BN(2)]; + const shareIndexes = [1n, 2n]; for (let i = 1; i <= 2; i += 1) { let ran = generatePrivate(); while (ran < 2) { ran = generatePrivate(); } - shareIndexes.push(new BN(ran)); + shareIndexes.push(bytesToNumberBE(ran)); } const poly = generateRandomPolynomial(1, privKeyBN); const shares = poly.generateShares(shareIndexes); diff --git a/packages/core/test/polyEval.test.js b/packages/core/test/polyEval.test.js index d27dbae2e..c3cb832c1 100644 --- a/packages/core/test/polyEval.test.js +++ b/packages/core/test/polyEval.test.js @@ -1,25 +1,25 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { getPubKeyPoint, Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; import { generateRandomPolynomial, polyCommitmentEval } from "../src/index"; describe("polyCommitmentEval", function () { it("#should polyCommitmentEval basic poly correctly", async function () { - const polyArr = [new BN(5), new BN(2)]; + const polyArr = [5n, 2n]; const poly = new Polynomial(polyArr); const publicPoly = poly.getPublicPolynomial(); - const share1 = poly.polyEval(new BN(1)); - const share2 = poly.polyEval(new BN(2)); + const share1 = poly.polyEval(1n); + const share2 = poly.polyEval(2n); const expectedShareCommit1 = getPubKeyPoint(share1); const expectedShareCommit2 = getPubKeyPoint(share2); - const shareCommit1 = polyCommitmentEval(publicPoly.polynomialCommitments, new BN(1)); - const shareCommit2 = polyCommitmentEval(publicPoly.polynomialCommitments, new BN(2)); - if (expectedShareCommit1.x.cmp(shareCommit1.x) !== 0) { + const shareCommit1 = polyCommitmentEval(publicPoly.polynomialCommitments, 1n); + const shareCommit2 = polyCommitmentEval(publicPoly.polynomialCommitments, 2n); + if (expectedShareCommit1.x !== shareCommit1.x) { fail("expected share commitment1 should equal share commitment"); } - if (expectedShareCommit2.x.cmp(shareCommit2.x) !== 0) { + if (expectedShareCommit2.x !== shareCommit2.x) { fail("expected share commitment2 should equal share commitment"); } }); @@ -30,12 +30,12 @@ describe("polyCommitmentEval", function () { const expectedShareCommitment = []; const shareCommitment = []; for (let i = 0; i < 10; i += 1) { - const shareIndex = new BN(generatePrivate()); + const shareIndex = bytesToNumberBE(generatePrivate()); expectedShareCommitment.push(getPubKeyPoint(poly.polyEval(shareIndex))); shareCommitment.push(polyCommitmentEval(publicPoly.polynomialCommitments, shareIndex)); } expectedShareCommitment.forEach(function (expected, i) { - if (shareCommitment[i].x.cmp(expected.x) !== 0) { + if (shareCommitment[i].x !== expected.x) { fail("poly result should equal hardcoded poly"); } }); diff --git a/packages/default/package.json b/packages/default/package.json index 199b57791..3a9f0c641 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -4,8 +4,8 @@ "description": "TKey default library", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/default.umd.min.js", - "jsdelivr": "dist/default.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "scripts": { @@ -36,19 +36,20 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@tkey/core": "^16.0.0", - "@tkey/security-questions": "^16.0.0", "@tkey/service-provider-base": "^16.0.0", "@tkey/service-provider-torus": "^16.0.0", "@tkey/share-serialization": "^16.0.0", "@tkey/share-transfer": "^16.0.0", "@tkey/storage-layer-torus": "^16.0.0", - "bn.js": "^5.2.1" + "@toruslabs/metadata-helpers": "^8.1.0" }, "devDependencies": { "@tkey/private-keys": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1" + "@tkey/security-questions": "^16.0.0", + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "viem": "^2.46.3" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -78,8 +79,8 @@ "tkey" ], "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/default/test/.eslintrc.json b/packages/default/test/.eslintrc.json index 2bfd6928c..8f06fe99d 100644 --- a/packages/default/test/.eslintrc.json +++ b/packages/default/test/.eslintrc.json @@ -4,5 +4,4 @@ "func-names": "off", "@typescript-eslint/explicit-module-boundary-types": "off" } - } diff --git a/packages/default/test/baseSPAutoSync.test.js b/packages/default/test/baseSPAutoSync.test.js index 5ea3c77d6..6d02575e8 100644 --- a/packages/default/test/baseSPAutoSync.test.js +++ b/packages/default/test/baseSPAutoSync.test.js @@ -1,4 +1,5 @@ import { ServiceProviderBase } from "@tkey/service-provider-base"; +import { bytesToHex } from "@noble/curves/utils.js"; import { generatePrivate } from "@toruslabs/eccrypto"; import { getMetadataUrl, initStorageLayer } from "./helpers"; @@ -6,7 +7,7 @@ import { sharedTestCases } from "./shared"; const MANUAL_SYNC = false; const metadataURL = getMetadataUrl(); -const PRIVATE_KEY = generatePrivate().toString("hex"); +const PRIVATE_KEY = bytesToHex(generatePrivate()); const defaultSP = new ServiceProviderBase({ postboxKey: PRIVATE_KEY }); const defaultSL = initStorageLayer({ hostUrl: metadataURL }); diff --git a/packages/default/test/baseSPManualSync.test.js b/packages/default/test/baseSPManualSync.test.js index f3942ccf6..7283f0f02 100644 --- a/packages/default/test/baseSPManualSync.test.js +++ b/packages/default/test/baseSPManualSync.test.js @@ -1,4 +1,5 @@ import { ServiceProviderBase } from "@tkey/service-provider-base"; +import { bytesToHex } from "@noble/curves/utils.js"; import { generatePrivate } from "@toruslabs/eccrypto"; import { getMetadataUrl, initStorageLayer } from "./helpers"; @@ -7,7 +8,7 @@ import { sharedTestCases } from "./shared"; const MANUAL_SYNC = true; const metadataURL = getMetadataUrl(); -const PRIVATE_KEY = generatePrivate().toString("hex"); +const PRIVATE_KEY = bytesToHex(generatePrivate()); const defaultSP = new ServiceProviderBase({ postboxKey: PRIVATE_KEY }); const defaultSL = initStorageLayer({ hostUrl: metadataURL }); diff --git a/packages/default/test/ed25519/ed25519.ts b/packages/default/test/ed25519/ed25519.ts index 0cfcd32df..c4151ea04 100644 --- a/packages/default/test/ed25519/ed25519.ts +++ b/packages/default/test/ed25519/ed25519.ts @@ -1,6 +1,7 @@ -import { generatePrivateBN } from "@tkey/core"; +import { generatePrivateBigInt } from "@tkey/core"; import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { TorusStorageLayer } from "@tkey/storage-layer-torus"; +import { bytesToHex } from "@toruslabs/metadata-helpers"; import assert from "assert"; import { randomBytes } from "crypto"; @@ -17,7 +18,7 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic beforeEach("Setup ThresholdKey", async function () { customSP = new TorusServiceProvider({ enableLogging: false, - postboxKey: generatePrivateBN().toString("hex"), + postboxKey: generatePrivateBigInt().toString(16), customAuthArgs: { baseUrl: "http://localhost:3000", web3AuthClientId: "test", network: "mainnet" }, }); tb = new TKeyDefault({ @@ -40,16 +41,16 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic const newInstance = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); await newInstance.initialize(); - newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString("hex")]); + newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString(16)]); await newInstance.reconstructKey(); - assert.strictEqual(secp.toString("hex"), newInstance.secp256k1Key.toString("hex")); - assert.strictEqual(ed.toString("hex"), newInstance.ed25519Key.toString("hex")); + assert.strictEqual(secp.toString(16), newInstance.secp256k1Key.toString(16)); + assert.strictEqual(bytesToHex(ed), bytesToHex(newInstance.ed25519Key)); // should not able to reinitialize with import key const instance3 = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); try { - await instance3.initialize({ importKey: generatePrivateBN(), importEd25519Seed: randomBytes(32) }); + await instance3.initialize({ importKey: generatePrivateBigInt(), importEd25519Seed: new Uint8Array(randomBytes(32)) }); assert.fail("should not be able to reinitialize with import key"); } catch (error) {} }); @@ -57,7 +58,7 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic it("should import key for ed25519", async function () { // Test with migratable key. // eslint-disable-next-line @typescript-eslint/no-explicit-any - (customSP as any).migratableKey = generatePrivateBN(); + (customSP as any).migratableKey = generatePrivateBigInt(); const tb2 = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); const ed = randomBytes(32); @@ -72,7 +73,7 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic { await tb2.reconstructKey(); const edExported = tb2.ed25519Key; - assert.strictEqual(ed.toString("hex"), edExported.toString("hex")); + assert.strictEqual(bytesToHex(ed), bytesToHex(edExported)); } const newInstance = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); @@ -84,22 +85,22 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic assert.fail("should not be able to get ed25519 key"); } catch (error) {} - newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString("hex")]); + newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString(16)]); await newInstance.reconstructKey(); - assert.strictEqual(ed.toString("hex"), newInstance.ed25519Key.toString("hex")); + assert.strictEqual(bytesToHex(ed), bytesToHex(newInstance.ed25519Key)); assert.strictEqual(edPub, newInstance.getEd25519PublicKey()); // should not able to reinitialize with import key const instance3 = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); try { - await instance3.initialize({ importKey: generatePrivateBN(), importEd25519Seed: randomBytes(32) }); + await instance3.initialize({ importKey: generatePrivateBigInt(), importEd25519Seed: new Uint8Array(randomBytes(32)) }); assert.fail("should not be able to reinitialize with import key"); } catch (error) {} }); it("should import key for ed25519 and secp256k1", async function () { const tb2 = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); - const secp = generatePrivateBN(); + const secp = generatePrivateBigInt(); const ed = randomBytes(32); await tb2.initialize({ importKey: secp, importEd25519Seed: ed }); @@ -117,16 +118,16 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic assert.fail("should not be able to get ed25519 key"); } catch (error) {} - newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString("hex")]); + newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString(16)]); await newInstance.reconstructKey(); - assert.strictEqual(secp.toString("hex"), newInstance.secp256k1Key.toString("hex")); - assert.strictEqual(ed.toString("hex"), newInstance.ed25519Key.toString("hex")); + assert.strictEqual(secp.toString(16), newInstance.secp256k1Key.toString(16)); + assert.strictEqual(bytesToHex(ed), bytesToHex(newInstance.ed25519Key)); assert.strictEqual(edPub, newInstance.getEd25519PublicKey()); // should not able to reinitialize with import key const instance3 = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); try { - await instance3.initialize({ importKey: generatePrivateBN(), importEd25519Seed: randomBytes(32) }); + await instance3.initialize({ importKey: generatePrivateBigInt(), importEd25519Seed: new Uint8Array(randomBytes(32)) }); assert.fail("should not be able to reinitialize with import key"); } catch (error) {} }); diff --git a/packages/default/test/helpers.js b/packages/default/test/helpers.js index 54642512a..8d68da6d0 100644 --- a/packages/default/test/helpers.js +++ b/packages/default/test/helpers.js @@ -2,6 +2,7 @@ import { ServiceProviderBase } from "@tkey/service-provider-base"; import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { MockStorageLayer, TorusStorageLayer } from "@tkey/storage-layer-torus"; import { generatePrivate } from "@toruslabs/eccrypto"; +import { bytesToHex } from "@toruslabs/metadata-helpers"; let mocked; const isNode = process.release; @@ -29,7 +30,7 @@ export function initStorageLayer(extraParams) { export function getServiceProvider(params) { const { type, privKeyBN, isEmptyProvider } = params; - const PRIVATE_KEY = privKeyBN ? privKeyBN.toString("hex") : generatePrivate().toString("hex"); + const PRIVATE_KEY = privKeyBN ? privKeyBN.toString(16) : bytesToHex(generatePrivate()); if (type === "TorusServiceProvider") { return new TorusServiceProvider({ postboxKey: isEmptyProvider ? null : PRIVATE_KEY, diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index ea0f965a5..b74f77164 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -2,7 +2,7 @@ /* eslint-disable mocha/no-exports */ /* eslint-disable import/no-extraneous-dependencies */ -import { getPubKeyPoint, KEY_NOT_FOUND, secp256k1, SHARE_DELETED, ShareStore } from "@tkey/common-types"; +import { bigIntReplacer, getPubKeyPoint, KEY_NOT_FOUND, secp256k1, SHARE_DELETED, ShareStore } from "@tkey/common-types"; import { Metadata } from "@tkey/core"; import { ED25519Format, PrivateKeyModule, SECP256K1Format } from "@tkey/private-keys"; import { SecurityQuestionsModule } from "@tkey/security-questions"; @@ -12,12 +12,19 @@ import { ShareTransferModule } from "@tkey/share-transfer"; import { TorusStorageLayer } from "@tkey/storage-layer-torus"; import { generatePrivate } from "@toruslabs/eccrypto"; import { post } from "@toruslabs/http-helpers"; +import { bytesToHex, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { getOrSetNonce, keccak256 } from "@toruslabs/torus.js"; import { deepEqual, deepStrictEqual, equal, fail, notEqual, notStrictEqual, strict, strictEqual, throws } from "assert"; -import BN from "bn.js"; -import { JsonRpcProvider } from "ethers"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; +import { createPublicClient, http } from "viem"; +import { mainnet } from "viem/chains"; import { createSandbox } from "sinon"; +function createEthProvider(rpcUrl) { + const client = createPublicClient({ chain: mainnet, transport: http(rpcUrl) }); + return { getBalance: (address) => client.getBalance({ address }) }; +} + import { TKeyDefault as ThresholdKey } from "../src/index"; import { ed25519Tests } from "./ed25519/ed25519"; import { getMetadataUrl, getServiceProvider, initStorageLayer, isMocked } from "./helpers"; @@ -38,28 +45,27 @@ const rejects = async (fn, error, msg) => { const metadataURL = getMetadataUrl(); function getTempKey() { - return generatePrivate().toString("hex"); + return bytesToHex(generatePrivate()); } -function compareBNArray(a, b, message) { +function compareBigintArray(a, b, message) { if (a.length !== b.length) throw new Error(message); return a.map((el) => { - // console.log(el, b[index], el.cmp(b[index])); - const found = b.find((pl) => pl.cmp(el) === 0); - if (!found) throw new Error(message); + const found = b.find((pl) => pl === el); + if (found === undefined) throw new Error(message); return 0; }); } function compareReconstructedKeys(a, b, message) { - if (a.secp256k1Key.cmp(b.secp256k1Key) !== 0) throw new Error(message); + if (a.secp256k1Key !== b.secp256k1Key) throw new Error(message); if (a.seedPhraseModule && b.seedPhraseModule) { - compareBNArray(a.seedPhraseModule, b.seedPhraseModule, message); + compareBigintArray(a.seedPhraseModule, b.seedPhraseModule, message); } if (a.privateKeyModule && b.privateKeyModule) { - compareBNArray(a.privateKeyModule, b.privateKeyModule, message); + compareBigintArray(a.privateKeyModule, b.privateKeyModule, message); } if (a.allKeys && b.allKeys) { - compareBNArray(a.allKeys, b.allKeys, message); + compareBigintArray(a.allKeys, b.allKeys, message); } } @@ -76,13 +82,13 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it("#should be able to initializeNewKey using initialize and reconstruct it", async function () { const sp = customSP; - sp.postboxKey = new BN(getTempKey(), "hex"); + sp.postboxKey = BigInt(`0x${getTempKey()}`); const storageLayer = initStorageLayer({ hostUrl: metadataURL }); const tb2 = new ThresholdKey({ serviceProvider: sp, storageLayer, manualSync: mode }); await tb2.initialize(); const reconstructedKey = await tb2.reconstructKey(); await tb2.syncLocalMetadataTransitions(); - if (tb2.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (tb2.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -95,14 +101,14 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize({ neverInitializeNewKey: true }); await tb2.inputShareStoreSafe(resp1.deviceShare); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should be able to reconstruct key when initializing with user input, manualSync=${mode}`, async function () { - let determinedShare = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - determinedShare = determinedShare.umod(secp256k1.curve.n); + let determinedShare = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + determinedShare = determinedShare % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ determinedShare, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -111,13 +117,13 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.inputShareStoreSafe(resp1.userShare); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should be able to reconstruct key when initializing with service provider, manualSync=${mode}`, async function () { - const importedKey = new BN(generatePrivate()); + const importedKey = bytesToNumberBE(generatePrivate()); const resp1 = await tb._initializeNewKey({ importedKey, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -125,14 +131,14 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize(); await tb2.inputShareStoreSafe(resp1.deviceShare); const reconstructedKey = await tb2.reconstructKey(); - if (importedKey.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (importedKey !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should be able to reconstruct key when initializing a with a share, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -140,40 +146,40 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize({ withShare: resp1.userShare }); await tb2.inputShareStoreSafe(resp1.deviceShare); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should be able to reconstruct key after refresh and initializing with a share, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); const newShares = await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb2.initialize({ withShare: resp1.userShare }); - await tb2.inputShareStoreSafe(newShares.newShareStores[newShares.newShareIndex.toString("hex")]); + await tb2.inputShareStoreSafe(newShares.newShareStores[newShares.newShareIndex.toString(16)]); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should be able to reconstruct key after refresh and initializing with service provider, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); const newShares = await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb2.initialize(); - await tb2.inputShareStoreSafe(newShares.newShareStores[newShares.newShareIndex.toString("hex")]); + await tb2.inputShareStoreSafe(newShares.newShareStores[newShares.newShareIndex.toString(16)]); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -190,7 +196,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.inputShareStoreSafe(resp1.deviceShare, true); const reconstructedKey = await tb2.reconstructKey(); // reconstruct key with old metadata should work to poly - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -213,9 +219,9 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.inputShareStoreSafe(resp1.deviceShare); const reconstructedKey = await tb2.reconstructKey(); const shareStore = tb2.outputShareStore(newShareIndex); - strictEqual(newShareStores[newShareIndex.toString("hex")].share.share.toString("hex"), shareStore.share.share.toString("hex")); + strictEqual(newShareStores[newShareIndex.toString(16)].share.share.toString(16), shareStore.share.share.toString(16)); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -235,11 +241,11 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { } const reconstructedKey = await tb3.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } const shareStore = tb3.outputShareStore(tbShareIndex); - strictEqual(tbShareStore[tbShareIndex.toString("hex")].share.share.toString("hex"), shareStore.share.share.toString("hex")); + strictEqual(tbShareStore[tbShareIndex.toString(16)].share.share.toString(16), shareStore.share.share.toString(16)); }); it(`#should be able to insert shares from existing tkey using new TKey Instance, manualSync=${mode}`, async function () { @@ -252,7 +258,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb3.initialize({ neverInitializeNewKey: true }); await tb3.inputShareStoreSafe(resp2.deviceShare, true); const reconstructedKey = await tb3.reconstructKey(); - if (resp2.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp2.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -275,7 +281,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // throws since share doesn't await rejects( async () => { - await tb3.inputShareStoreSafe(tbShareStore[tbShareIndex.toString("hex")], true); + await tb3.inputShareStoreSafe(tbShareStore[tbShareIndex.toString(16)], true); }, (err) => { strictEqual(err.code, 1307, "CoreError: Share doesn't exist"); @@ -298,9 +304,9 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb3.syncLocalMetadataTransitions(); await tb3.reconstructKey(); - await tb2.inputShareStoreSafe(tb3ShareStore[tb3ShareIndex.toString("hex")], true); + await tb2.inputShareStoreSafe(tb3ShareStore[tb3ShareIndex.toString(16)], true); const reconstructedKey2 = await tb2.reconstructKey(); - if (resp2.secp256k1Key.cmp(reconstructedKey2.secp256k1Key) !== 0) { + if (resp2.secp256k1Key !== reconstructedKey2.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -354,7 +360,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should be not be able to lookup delete share, manualSync=${mode}`, async function () { const newKeys = Object.keys(shareStoreAfterDelete); - if (newKeys.find((el) => el === deletedShareIndex.toString("hex"))) { + if (newKeys.find((el) => el === deletedShareIndex.toString(16))) { fail("Unable to delete share index"); } }); @@ -371,7 +377,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should not be able to initialize with a deleted share, manualSync=${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await rejects(async function () { - await tb2.initialize({ withShare: deletedShareStores[deletedShareIndex.toString("hex")] }); + await tb2.initialize({ withShare: deletedShareStores[deletedShareIndex.toString(16)] }); }); }); @@ -379,7 +385,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb2.initialize(); await rejects(async () => { - await tb2.inputShare(deletedShareStores[deletedShareIndex.toString("hex")].share.share); + await tb2.inputShare(deletedShareStores[deletedShareIndex.toString(16)].share.share); }, Error); }); @@ -431,7 +437,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { deepStrictEqual(tb2.metadata.nonce, 1); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) === 0) { + if (resp1.secp256k1Key === reconstructedKey.secp256k1Key) { fail("key should be different"); } }); @@ -445,34 +451,34 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); it(`#should serialize and deserialize correctly without tkeyArgs, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); - const stringified = JSON.stringify(tb); + const stringified = JSON.stringify(tb, bigIntReplacer); const tb3 = await ThresholdKey.fromJSON(JSON.parse(stringified)); const finalKey = await tb3.reconstructKey(); - strictEqual(finalKey.secp256k1Key.toString("hex"), resp1.secp256k1Key.toString("hex"), "Incorrect serialization"); + strictEqual(finalKey.secp256k1Key.toString(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); }); it(`#should serialize and deserialize correctly with tkeyArgs, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); - const stringified = JSON.stringify(tb); + const stringified = JSON.stringify(tb, bigIntReplacer); const tb3 = await ThresholdKey.fromJSON(JSON.parse(stringified), { serviceProvider: customSP, storageLayer: customSL }); const finalKey = await tb3.reconstructKey(); - strictEqual(finalKey.secp256k1Key.toString("hex"), resp1.secp256k1Key.toString("hex"), "Incorrect serialization"); + strictEqual(finalKey.secp256k1Key.toString(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); }); it(`#should serialize and deserialize correctly, keeping localTransitions consistent before syncing NewKeyAssign, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); // generate and delete @@ -481,41 +487,41 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const { newShareStores: shareStores, newShareIndex: shareIndex } = await tb.generateNewShare(); - const stringified = JSON.stringify(tb); + const stringified = JSON.stringify(tb, bigIntReplacer); const tb2 = await ThresholdKey.fromJSON(JSON.parse(stringified), { serviceProvider: customSP, storageLayer: customSL }); if (tb2.manualSync !== mode) { fail(`manualSync should be ${mode}`); } const finalKey = await tb2.reconstructKey(); const shareToVerify = tb2.outputShareStore(shareIndex); - strictEqual(shareStores[shareIndex.toString("hex")].share.share.toString("hex"), shareToVerify.share.share.toString("hex")); + strictEqual(shareStores[shareIndex.toString(16)].share.share.toString(16), shareToVerify.share.share.toString(16)); await tb2.syncLocalMetadataTransitions(); - strictEqual(finalKey.secp256k1Key.toString("hex"), resp1.secp256k1Key.toString("hex"), "Incorrect serialization"); + strictEqual(finalKey.secp256k1Key.toString(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); const reconstructedKey2 = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey2.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey2.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should serialize and deserialize correctly keeping localTransitions afterNewKeyAssign, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); const reconstructedKey = await tb.reconstructKey(); const { newShareStores: shareStores, newShareIndex: shareIndex } = await tb.generateNewShare(); - const stringified = JSON.stringify(tb); + const stringified = JSON.stringify(tb, bigIntReplacer); const tb2 = await ThresholdKey.fromJSON(JSON.parse(stringified), { serviceProvider: customSP, storageLayer: customSL }); const finalKey = await tb2.reconstructKey(); const shareToVerify = tb2.outputShareStore(shareIndex); - strictEqual(shareStores[shareIndex.toString("hex")].share.share.toString("hex"), shareToVerify.share.share.toString("hex")); + strictEqual(shareStores[shareIndex.toString(16)].share.share.toString(16), shareToVerify.share.share.toString(16)); await tb2.syncLocalMetadataTransitions(); - strictEqual(finalKey.secp256k1Key.toString("hex"), reconstructedKey.secp256k1Key.toString("hex"), "Incorrect serialization"); + strictEqual(finalKey.secp256k1Key.toString(16), reconstructedKey.secp256k1Key.toString(16), "Incorrect serialization"); const reconstructedKey2 = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey2.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey2.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -526,12 +532,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.syncLocalMetadataTransitions(); const tb3 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb3.initialize(); - await tb3.inputShareStoreSafe(newShareStores[newShareIndex.toString("hex")]); + await tb3.inputShareStoreSafe(newShareStores[newShareIndex.toString(16)]); - const stringified = JSON.stringify(tb3); + const stringified = JSON.stringify(tb3, bigIntReplacer); const tb4 = await ThresholdKey.fromJSON(JSON.parse(stringified), { serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); const finalKeyPostSerialization = await tb4.reconstructKey(); - strictEqual(finalKeyPostSerialization.secp256k1Key.toString("hex"), resp1.secp256k1Key.toString("hex"), "Incorrect serialization"); + strictEqual(finalKeyPostSerialization.secp256k1Key.toString(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); }); it(`#should be able to serialize and deserialize without service provider share or the postbox key, manualSync=${mode}`, async function () { @@ -546,18 +552,18 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { customSL2.serviceProvider = customSP3; const tb2 = new ThresholdKey({ serviceProvider: customSP3, storageLayer: customSL2, manualSync: mode }); await tb2.initialize({ withShare: resp1.deviceShare }); - await tb2.inputShareStoreSafe(newShareStores1[newShareIndex1.toString("hex")]); + await tb2.inputShareStoreSafe(newShareStores1[newShareIndex1.toString(16)]); await tb2.reconstructKey(); - const stringified = JSON.stringify(tb2); + const stringified = JSON.stringify(tb2, bigIntReplacer); const tb3 = await ThresholdKey.fromJSON(JSON.parse(stringified)); const tb3Key = await tb3.reconstructKey(); - strictEqual(tb3Key.secp256k1Key.toString("hex"), resp1.secp256k1Key.toString("hex"), "Incorrect serialization"); + strictEqual(tb3Key.secp256k1Key.toString(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); }); it(`#should not be able to updateSDK with newKeyAssign transitions unsynced, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); - const stringified = JSON.stringify(tb); + const stringified = JSON.stringify(tb, bigIntReplacer); const tb2 = await ThresholdKey.fromJSON(JSON.parse(stringified), {}); if (mode) { @@ -586,8 +592,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); it(`#should get or set with specified private key correctly, manualSync=${mode}`, async function () { - const privKey = generatePrivate().toString("hex"); - const privKeyBN = new BN(privKey, 16); + const privKey = bytesToHex(generatePrivate()); + const privKeyBN = BigInt(`0x${privKey}`); const storageLayer = initStorageLayer({ hostUrl: metadataURL }); const message = { test: Math.random().toString(36).substring(7) }; await storageLayer.setMetadata({ input: message, privKey: privKeyBN }); @@ -599,7 +605,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const privkeys = []; const messages = []; for (let i = 0; i < 10; i += 1) { - privkeys.push(new BN(generatePrivate())); + privkeys.push(bytesToNumberBE(generatePrivate())); messages.push({ test: Math.random().toString(36).substring(7) }); } const storageLayer = initStorageLayer({ hostUrl: metadataURL }); @@ -648,7 +654,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.securityQuestions.inputShareFromSecurityQuestions("blublu"); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -676,7 +682,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.securityQuestions.inputShareFromSecurityQuestions("blubluss"); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -697,7 +703,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.securityQuestions.inputShareFromSecurityQuestions("blublu"); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -724,7 +730,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.securityQuestions.inputShareFromSecurityQuestions("dodo"); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -745,14 +751,14 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.securityQuestions.inputShareFromSecurityQuestions("dodo"); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } - const stringified = JSON.stringify(tb2); + const stringified = JSON.stringify(tb2, bigIntReplacer); const tb3 = await ThresholdKey.fromJSON(JSON.parse(stringified), { serviceProvider: customSP, storageLayer: customSL }); const finalKeyPostSerialization = await tb3.reconstructKey(); - strictEqual(finalKeyPostSerialization.toString("hex"), reconstructedKey.toString("hex"), "Incorrect serialization"); + strictEqual(finalKeyPostSerialization.toString(16), reconstructedKey.toString(16), "Incorrect serialization"); }); it(`#should be able to get answers, even when they change, manualSync=${mode}`, async function () { @@ -783,7 +789,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.securityQuestions.inputShareFromSecurityQuestions("dodo"); const reconstructedKey = await tb2.reconstructKey(); // compareBNArray(resp1.secp256k1Key, reconstructedKey, "key should be able to be reconstructed"); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } @@ -822,28 +828,28 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // usually should be called in callback, but mocha does not allow const pubkey = await tb2.modules.shareTransfer.requestNewShare(); - await tb.modules.shareTransfer.approveRequest(pubkey, result.newShareStores[result.newShareIndex.toString("hex")]); + await tb.modules.shareTransfer.approveRequest(pubkey, result.newShareStores[result.newShareIndex.toString(16)]); await tb.syncLocalMetadataTransitions(); await tb2.modules.shareTransfer.startRequestStatusCheck(pubkey); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); it(`#should be able to change share transfer pointer after share deletion, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); - const firstShareTransferPointer = tb.metadata.generalStore.shareTransfer.pointer.toString("hex"); + const firstShareTransferPointer = tb.metadata.generalStore.shareTransfer.pointer.toString(16); const { newShareIndex: newShareIndex1 } = await tb.generateNewShare(); - const secondShareTransferPointer = tb.metadata.generalStore.shareTransfer.pointer.toString("hex"); + const secondShareTransferPointer = tb.metadata.generalStore.shareTransfer.pointer.toString(16); strictEqual(firstShareTransferPointer, secondShareTransferPointer); await tb.syncLocalMetadataTransitions(); await tb.deleteShare(newShareIndex1); - const thirdShareTransferPointer = tb.metadata.generalStore.shareTransfer.pointer.toString("hex"); + const thirdShareTransferPointer = tb.metadata.generalStore.shareTransfer.pointer.toString(16); notStrictEqual(secondShareTransferPointer, thirdShareTransferPointer); await tb.syncLocalMetadataTransitions(); @@ -875,7 +881,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // }); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -939,13 +945,13 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // should throw await rejects(async function () { - await tb2.inputShare(exportedSeedShare.toString("hex"), "mnemonic-49"); + await tb2.inputShare(exportedSeedShare.toString(16), "mnemonic-49"); }); - await tb2.inputShare(exportedSeedShare.toString("hex"), "mnemonic"); + await tb2.inputShare(exportedSeedShare.toString(16), "mnemonic"); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } }); @@ -958,7 +964,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let ed25519privateKeyFormat; beforeEach("Setup ThresholdKey", async function () { - metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider("https://mainnet.infura.io/v3/bca735fdbba0408bb09471e86463ae68")); + metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(createEthProvider(process.env.TEST_RPC_TARGET)); secp256k1Format = new SECP256K1Format(); ed25519privateKeyFormat = new ED25519Format(); tb = new ThresholdKey({ @@ -992,13 +998,13 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // should throw await rejects(async () => { - const actualPrivateKeys = [new BN("4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390", "hex")]; - await tb2.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0].toString("hex")); + const actualPrivateKeys = [BigInt("0x4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390")]; + await tb2.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0].toString(16)); }, Error); await rejects(async () => { - const actualPrivateKeys = [new BN("4bd0041a9b16a7268a5de7982f2422b15635c4fd170c140dc48976wqerwer0", "hex")]; - await tb2.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0].toString("hex")); + const actualPrivateKeys = [BigInt("0x4bd0041a9b16a7268a5de7982f2422b15635c4fd170c140dc48976wqerwer0")]; + await tb2.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0].toString(16)); }, Error); }); @@ -1014,7 +1020,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(returnedSeed[1].seedPhrase, seedPhraseToSet2); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider("https://mainnet.infura.io/v3/bca735fdbba0408bb09471e86463ae68") + createEthProvider(process.env.TEST_RPC_TARGET) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, @@ -1030,13 +1036,13 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { compareReconstructedKeys(reconstuctedKey, { secp256k1Key: resp1.secp256k1Key, seedPhraseModule: [ - new BN("70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46", "hex"), - new BN("bfdb025a1d404212c3f9ace6c5fb4185087281dcb9c1e89087d1a3a423f80d22", "hex"), + BigInt("0x70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46"), + BigInt("0xbfdb025a1d404212c3f9ace6c5fb4185087281dcb9c1e89087d1a3a423f80d22"), ], allKeys: [ resp1.secp256k1Key, - new BN("70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46", "hex"), - new BN("bfdb025a1d404212c3f9ace6c5fb4185087281dcb9c1e89087d1a3a423f80d22", "hex"), + BigInt("0x70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46"), + BigInt("0xbfdb025a1d404212c3f9ace6c5fb4185087281dcb9c1e89087d1a3a423f80d22"), ], }); }); @@ -1047,9 +1053,9 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.modules.seedPhrase.setSeedPhrase("HD Key Tree", seedPhraseToSet); await tb.syncLocalMetadataTransitions(); - const actualPrivateKeys = [new BN("70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46", "hex")]; + const actualPrivateKeys = [BigInt("0x70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46")]; const derivedKeys = await tb.modules.seedPhrase.getAccounts(); - compareBNArray(actualPrivateKeys, derivedKeys, "key should be same"); + compareBigintArray(actualPrivateKeys, derivedKeys, "key should be same"); }); it(`#should be able to generate seed phrase if not given, manualSync=${mode}`, async function () { @@ -1100,11 +1106,10 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb._initializeNewKey({ initializeModules: true }); const actualPrivateKeys = [ - new BN("4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390", "hex"), - new BN("1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0", "hex"), - new BN( - "7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98", - "hex" + BigInt("0x4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390"), + BigInt("0x1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0"), + BigInt( + "0x7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98" ), ]; await tb.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0]); @@ -1115,8 +1120,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const getAccounts = await tb.modules.privateKeyModule.getAccounts(); deepStrictEqual( - actualPrivateKeys.map((x) => x.toString("hex")), - getAccounts.map((x) => x.toString("hex")) + actualPrivateKeys.map((x) => x.toString(16)), + getAccounts.map((x) => x.toString(16)) ); }); @@ -1124,11 +1129,10 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb._initializeNewKey({ initializeModules: true }); const actualPrivateKeys = [ - new BN("4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390", "hex"), - new BN("1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0", "hex"), - new BN( - "99da9559e15e913ee9ab2e53e3dfad575da33b49be1125bb922e33494f4988281b2f49096e3e5dbd0fcfa9c0c0cd92d9ab3b21544b34d5dd4a65d98b878b9922", - "hex" + BigInt("0x4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390"), + BigInt("0x1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0"), + BigInt( + "0x99da9559e15e913ee9ab2e53e3dfad575da33b49be1125bb922e33494f4988281b2f49096e3e5dbd0fcfa9c0c0cd92d9ab3b21544b34d5dd4a65d98b878b9922" ), ]; @@ -1140,8 +1144,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const getAccounts = await tb.modules.privateKeyModule.getAccounts(); deepStrictEqual( - actualPrivateKeys.map((x) => x.toString("hex")), - getAccounts.map((x) => x.toString("hex")) + actualPrivateKeys.map((x) => x.toString(16)), + getAccounts.map((x) => x.toString(16)) ); }); @@ -1164,15 +1168,15 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.modules.seedPhrase.setSeedPhrase("HD Key Tree", "chapter gas cost saddle annual mouse chef unknown edit pen stairs claw"); const actualPrivateKeys = [ - new BN("4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390", "hex"), - new BN("1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0", "hex"), + BigInt("0x4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390"), + BigInt("0x1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0"), ]; await tb.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0]); await tb.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[1]); await tb.syncLocalMetadataTransitions(); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider("https://mainnet.infura.io/v3/bca735fdbba0408bb09471e86463ae68") + createEthProvider(process.env.TEST_RPC_TARGET) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, @@ -1187,19 +1191,19 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { compareReconstructedKeys(reconstructedKey, { secp256k1Key: resp1.secp256k1Key, seedPhraseModule: [ - new BN("70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46", "hex"), - new BN("4d62a55af3496a7b290a12dd5fd5ef3e051d787dbc005fb74536136949602f9e", "hex"), + BigInt("0x70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46"), + BigInt("0x4d62a55af3496a7b290a12dd5fd5ef3e051d787dbc005fb74536136949602f9e"), ], privateKeyModule: [ - new BN("4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390", "hex"), - new BN("1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0", "hex"), + BigInt("0x4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390"), + BigInt("0x1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0"), ], allKeys: [ resp1.secp256k1Key, - new BN("70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46", "hex"), - new BN("4d62a55af3496a7b290a12dd5fd5ef3e051d787dbc005fb74536136949602f9e", "hex"), - new BN("4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390", "hex"), - new BN("1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0", "hex"), + BigInt("0x70dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46"), + BigInt("0x4d62a55af3496a7b290a12dd5fd5ef3e051d787dbc005fb74536136949602f9e"), + BigInt("0x4bd0041b7654a9b16a7268a5de7982f2422b15635c4fd170c140dc4897624390"), + BigInt("0x1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0"), ], }); @@ -1240,7 +1244,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // 3/4 shares is required to reconstruct tkey const reconstructPostThreshold = await tb3.reconstructKey(); - if (reconstructPreThreshold.secp256k1Key.cmp(reconstructPostThreshold.secp256k1Key) !== 0) { + if (reconstructPreThreshold.secp256k1Key !== reconstructPostThreshold.secp256k1Key) { fail("key should be able to be reconstructed"); } // console.log("newThreshold", tb3.metadata.getLatestPublicPolynomial().getThreshold()); @@ -1269,7 +1273,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { _localMetadataTransitions: tb._localMetadataTransitions, }); - const latestSPShareStore = tb.outputShareStore(new BN(1)); + const latestSPShareStore = tb.outputShareStore(1n); strictEqual(JSON.stringify(latestSPShareStore.toJSON()), JSON.stringify(expectLatestSPShare.toJSON())); }); @@ -1282,7 +1286,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); await tb._initializeNewKey(); - const spShareStore = tb.outputShareStore(new BN(1)); + const spShareStore = tb.outputShareStore(1n); await tb.reconstructKey(); @@ -1293,7 +1297,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { includeLocalMetadataTransitions: true, }); - const latestSPShareStore = tb.outputShareStore(new BN(1)); + const latestSPShareStore = tb.outputShareStore(1n); strictEqual(JSON.stringify(latestSPShareStore.toJSON()), JSON.stringify(expectLatestResult.latestShare.toJSON())); strictEqual(JSON.stringify(tb.metadata.toJSON()), JSON.stringify(expectLatestResult.shareMetadata.toJSON())); @@ -1311,7 +1315,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.reconstructKey(true); const newShareMap = await tb.generateNewShare(); - const newShare = newShareMap.newShareStores[newShareMap.newShareIndex.toString("hex")]; + const newShare = newShareMap.newShareStores[newShareMap.newShareIndex.toString(16)]; const localMetadataTransistionShare = tb._localMetadataTransitions[0]; const localMetadataTransistionData = tb._localMetadataTransitions[1]; @@ -1334,7 +1338,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.inputShareStoreSafe(newShare); await tb2.reconstructKey(); - strictEqual(tb.secp256k1Key.toString("hex"), tb2.secp256k1Key.toString("hex")); + strictEqual(tb.secp256k1Key.toString(16), tb2.secp256k1Key.toString(16)); }); }); @@ -1348,7 +1352,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize(); tb2.inputShareStore(resp1.deviceShare); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } await tb2.generateNewShare(); @@ -1375,7 +1379,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize(); await tb2.inputShareStoreSafe(resp1.deviceShare); const reconstructedKey = await tb2.reconstructKey(); - if (resp1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { + if (resp1.secp256k1Key !== reconstructedKey.secp256k1Key) { fail("key should be able to be reconstructed"); } const alltbs = []; @@ -1493,7 +1497,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { ); await rejects( async () => { - await tb2.encrypt(Buffer.from("test data")); + await tb2.encrypt(utf8ToBytes("test data")); }, (err) => { strictEqual(err.code, 1301, "Expected 1301 error is not thrown"); @@ -1540,7 +1544,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { if (mode) { await rejects( async () => { - await tb2.addShareDescription(resp1.deviceShare.share.shareIndex.toString("hex"), JSON.stringify({ test: "unit test" }), true); + await tb2.addShareDescription(resp1.deviceShare.share.shareIndex.toString(16), JSON.stringify({ test: "unit test" }), true); await tb2.syncLocalMetadataTransitions(); }, (err) => { @@ -1551,7 +1555,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { } else { await rejects( async () => { - await tb2.addShareDescription(resp1.deviceShare.share.shareIndex.toString("hex"), JSON.stringify({ test: "unit test" }), true); + await tb2.addShareDescription(resp1.deviceShare.share.shareIndex.toString(16), JSON.stringify({ test: "unit test" }), true); }, (err) => { strictEqual(err.code, 1103, "Expected 1103 error is not thrown"); @@ -1566,12 +1570,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { if (!mode || isMocked) return; it("should be able to init tkey with 1 out of 1", async function () { - const postboxKeyBN = new BN(generatePrivate(), "hex"); + const postboxKeyBN = bytesToNumberBE(generatePrivate()); const pubKeyPoint = getPubKeyPoint(postboxKeyBN); - const metadataNonce = new BN(generatePrivate(), "hex"); + const metadataNonce = bytesToNumberBE(generatePrivate()); const serviceProvider = new TorusServiceProvider({ - postboxKey: postboxKeyBN.toString("hex"), + postboxKey: postboxKeyBN.toString(16), customAuthArgs: { enableOneKey: true, metadataUrl: getMetadataUrl(), @@ -1587,8 +1591,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { getMetadataUrl(), serviceProvider.customAuthInstance.torus.ec, 0, - pubKeyPoint.x.toString("hex"), - pubKeyPoint.y.toString("hex"), + pubKeyPoint.x.toString(16), + pubKeyPoint.y.toString(16), postboxKeyBN, false, false, @@ -1599,16 +1603,16 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { notEqual(pubNonce, undefined); equal(isUpgraded, false); - const nonceBN = new BN(nonce, "hex"); - const importKey = postboxKeyBN.add(nonceBN).umod(serviceProvider.customAuthInstance.torus.ec.curve.n).toString("hex"); + const nonceBN = BigInt(`0x${nonce}`); + const importKey = ((postboxKeyBN + nonceBN) % secp256k1.Point.CURVE().n).toString(16); const tKey = new ThresholdKey({ serviceProvider, storageLayer: storageLayer2, manualSync: mode }); await tKey.initialize({ - importKey: new BN(importKey, "hex"), + importKey: BigInt(`0x${importKey}`), delete1OutOf1: true, }); await tKey.syncLocalMetadataTransitions(); - equal(tKey.secp256k1Key.toString("hex"), importKey); + equal(tKey.secp256k1Key.toString(16), importKey); const { nonce: newNonce, @@ -1618,8 +1622,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { getMetadataUrl(), serviceProvider.customAuthInstance.torus.ec, 0, - pubKeyPoint.x.toString("hex"), - pubKeyPoint.y.toString("hex"), + pubKeyPoint.x.toString(16), + pubKeyPoint.y.toString(16), postboxKeyBN, true, // passing nonce again should not have any effect as getOnly param is true false, @@ -1632,7 +1636,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it("should not change v1 address without a custom nonce when getOrSetNonce is called", async function () { // Create an existing v1 account - const postboxKeyBN = new BN(generatePrivate(), "hex"); + const postboxKeyBN = bytesToNumberBE(generatePrivate()); const pubKeyPoint = getPubKeyPoint(postboxKeyBN); // This test require development API, only work with local/beta env @@ -1642,8 +1646,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await post( `${metadataUrl}/set_nonce`, { - pub_key_X: pubKeyPoint.x.toString("hex"), - pub_key_Y: pubKeyPoint.y.toString("hex"), + pub_key_X: pubKeyPoint.x.toString(16), + pub_key_Y: pubKeyPoint.y.toString(16), }, undefined, { useAPIKey: true } @@ -1651,7 +1655,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // Call get or set nonce const serviceProvider = new TorusServiceProvider({ - postboxKey: postboxKeyBN.toString("hex"), + postboxKey: postboxKeyBN.toString(16), customAuthArgs: { enableOneKey: true, metadataUrl, @@ -1666,8 +1670,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { metadataUrl, serviceProvider.customAuthInstance.torus.ec, 0, - pubKeyPoint.x.toString("hex"), - pubKeyPoint.y.toString("hex"), + pubKeyPoint.x.toString(16), + pubKeyPoint.y.toString(16), postboxKeyBN ); equal(res.typeOfUser, "v1"); @@ -1676,8 +1680,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { metadataUrl, serviceProvider.customAuthInstance.torus.ec, 0, - pubKeyPoint.x.toString("hex"), - pubKeyPoint.y.toString("hex"), + pubKeyPoint.x.toString(16), + pubKeyPoint.y.toString(16), postboxKeyBN ); deepEqual(res, anotherRes); @@ -1687,10 +1691,10 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // // Create an existing v1 account with custom key // const postboxKeyBN = new BN(generatePrivate(), "hex"); // const pubKeyPoint = getPubKeyPoint(postboxKeyBN); - // const customKey = generatePrivate().toString("hex"); + // const customKey = generatePrivate().toString(16); // const serviceProvider = new TorusServiceProvider({ - // postboxKey: postboxKeyBN.toString("hex"), + // postboxKey: postboxKeyBN.toString(16), // customAuthArgs: { // enableOneKey: true, // metadataUrl: getMetadataUrl(), @@ -1701,20 +1705,20 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // }, // }); // // TODO: this is deprecated - // await serviceProvider.customAuthInstance.torus.setCustomKey({ torusKeyHex: postboxKeyBN.toString("hex"), customKeyHex: customKey.toString("hex") }); + // await serviceProvider.customAuthInstance.torus.setCustomKey({ torusKeyHex: postboxKeyBN.toString(16), customKeyHex: customKey.toString(16) }); // // Compare nonce returned from v1 API and v2 API // const getMetadataNonce = await serviceProvider.customAuthInstance.torus.getMetadata({ - // pub_key_X: pubKeyPoint.x.toString("hex"), - // pub_key_Y: pubKeyPoint.y.toString("hex"), + // pub_key_X: pubKeyPoint.x.toString(16), + // pub_key_Y: pubKeyPoint.y.toString(16), // }); // const getOrSetNonce = await serviceProvider.customAuthInstance.torus.getOrSetNonce( - // pubKeyPoint.x.toString("hex"), - // pubKeyPoint.y.toString("hex"), + // pubKeyPoint.x.toString(16), + // pubKeyPoint.y.toString(16), // postboxKeyBN // ); // equal(getOrSetNonce.typeOfUser, "v1"); - // equal(getOrSetNonce.nonce, getMetadataNonce.toString("hex")); + // equal(getOrSetNonce.nonce, getMetadataNonce.toString(16)); // }); }); diff --git a/packages/default/test/torusSPAutoSync.test.js b/packages/default/test/torusSPAutoSync.test.js index 31bd56333..655768566 100644 --- a/packages/default/test/torusSPAutoSync.test.js +++ b/packages/default/test/torusSPAutoSync.test.js @@ -1,3 +1,4 @@ +import { bytesToHex } from "@noble/curves/utils.js"; import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { generatePrivate } from "@toruslabs/eccrypto"; @@ -6,7 +7,7 @@ import { sharedTestCases } from "./shared"; const metadataURL = getMetadataUrl(); -const PRIVATE_KEY = generatePrivate().toString("hex"); +const PRIVATE_KEY = bytesToHex(generatePrivate()); const torusSP = new TorusServiceProvider({ postboxKey: PRIVATE_KEY, customAuthArgs: { diff --git a/packages/default/test/torusSPManualSync.test.js b/packages/default/test/torusSPManualSync.test.js index d2deeefa1..bc38a99c5 100644 --- a/packages/default/test/torusSPManualSync.test.js +++ b/packages/default/test/torusSPManualSync.test.js @@ -1,10 +1,11 @@ +import { bytesToHex } from "@noble/curves/utils.js"; import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { generatePrivate } from "@toruslabs/eccrypto"; import { getMetadataUrl, initStorageLayer } from "./helpers"; import { sharedTestCases } from "./shared"; -const PRIVATE_KEY = generatePrivate().toString("hex"); +const PRIVATE_KEY = bytesToHex(generatePrivate()); const torusSp = new TorusServiceProvider({ postboxKey: PRIVATE_KEY, customAuthArgs: { diff --git a/packages/private-keys/package.json b/packages/private-keys/package.json index d4ca21362..01a3e474c 100644 --- a/packages/private-keys/package.json +++ b/packages/private-keys/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/privateKeys.umd.min.js", - "jsdelivr": "dist/privateKeys.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -37,13 +37,10 @@ "peerDependencies": { "@babel/runtime": "7.x" }, - "devDependencies": { - "@types/bn.js": "^5.1.6" - }, + "devDependencies": {}, "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/tweetnacl-js": "^1.0.4", - "bn.js": "^5.2.1" + "@noble/curves": "^2.0.1" }, "bugs": { "url": "https://github.com/tkey/tkey/issues" @@ -55,8 +52,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/private-keys/src/ED25519Format.ts b/packages/private-keys/src/ED25519Format.ts index ea4d33088..32ad3b70c 100644 --- a/packages/private-keys/src/ED25519Format.ts +++ b/packages/private-keys/src/ED25519Format.ts @@ -1,39 +1,35 @@ +import { ed25519 } from "@noble/curves/ed25519.js"; +import { bytesToNumberBE, concatBytes, equalBytes, numberToBytesBE } from "@noble/curves/utils.js"; import { generateID, IPrivateKeyFormat, IPrivateKeyStore } from "@tkey/common-types"; -import nacl from "@toruslabs/tweetnacl-js"; -import BN from "bn.js"; export class ED25519Format implements IPrivateKeyFormat { - privateKey: BN; + privateKey: bigint; type: string; - constructor(privateKey: BN) { + constructor(privateKey: bigint) { this.privateKey = privateKey; this.type = "ed25519"; } - validatePrivateKey(privateKey: BN): boolean { - // Validation as per - // https://github.com/solana-labs/solana-web3.js/blob/e1567ab/src/keypair.ts#L65 + validatePrivateKey(privateKey: bigint): boolean { try { - const secretKey = Buffer.from(privateKey.toString("hex"), "hex").toString("base64"); - const keypair = nacl.sign.keyPair.fromSecretKey(Buffer.from(secretKey, "base64")); - const encoder = new TextEncoder(); - const signData = encoder.encode("@solana/web3.js-validation-v1"); - const signature = nacl.sign.detached(signData, keypair.secretKey); - if (nacl.sign.detached.verify(signData, signature, keypair.publicKey)) { - return true; - } + const keyBytes = numberToBytesBE(privateKey, 64); + const seed = keyBytes.slice(0, 32); + const storedPubKey = keyBytes.slice(32); + const derivedPubKey = ed25519.getPublicKey(seed); + return equalBytes(derivedPubKey, storedPubKey); } catch { return false; } - return false; } - createPrivateKeyStore(privateKey?: BN): IPrivateKeyStore { - let privKey: BN; + createPrivateKeyStore(privateKey?: bigint): IPrivateKeyStore { + let privKey: bigint; if (!privateKey) { - privKey = new BN(nacl.sign.keyPair().secretKey); + const seed = ed25519.utils.randomSecretKey(); + const pubKey = ed25519.getPublicKey(seed); + privKey = bytesToNumberBE(concatBytes(seed, pubKey)); } else { if (!this.validatePrivateKey(privateKey)) { throw Error("Invalid Private Key"); diff --git a/packages/private-keys/src/PrivateKeys.ts b/packages/private-keys/src/PrivateKeys.ts index 1d3759ff4..f6667d251 100644 --- a/packages/private-keys/src/PrivateKeys.ts +++ b/packages/private-keys/src/PrivateKeys.ts @@ -1,5 +1,4 @@ import { IModule, IPrivateKeyFormat, IPrivateKeyStore, ITKeyApi } from "@tkey/common-types"; -import BN from "bn.js"; import PrivateKeysError from "./errors"; @@ -24,7 +23,7 @@ class PrivateKeyModule implements IModule { async initialize(): Promise {} - async setPrivateKey(privateKeyType: string, privateKey?: BN): Promise { + async setPrivateKey(privateKeyType: string, privateKey?: bigint): Promise { const format = this.privateKeyFormats.find((el) => el.type === privateKeyType); if (!format) { throw PrivateKeysError.notSupported(); @@ -40,12 +39,11 @@ class PrivateKeyModule implements IModule { return this.tbSDK.getTKeyStore(this.moduleName) as Promise; } - async getAccounts(): Promise { + async getAccounts(): Promise { try { - // Get all private keys const privateKeys = await this.getPrivateKeys(); - return privateKeys.reduce((acc: BN[], x) => { - acc.push(BN.isBN(x.privateKey) ? x.privateKey : new BN(x.privateKey, "hex")); + return privateKeys.reduce((acc: bigint[], x) => { + acc.push(typeof x.privateKey === "bigint" ? x.privateKey : BigInt(`0x${x.privateKey}`)); return acc; }, []); } catch { diff --git a/packages/private-keys/src/SECP256K1Format.ts b/packages/private-keys/src/SECP256K1Format.ts index 0f81f3878..e13f27a1f 100644 --- a/packages/private-keys/src/SECP256K1Format.ts +++ b/packages/private-keys/src/SECP256K1Format.ts @@ -1,40 +1,28 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generateID, IPrivateKeyFormat, IPrivateKeyStore, secp256k1 } from "@tkey/common-types"; -import BN from "bn.js"; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const browserCrypto = global.crypto || (global as any).msCrypto || {}; - -function randomBytes(size: number): Buffer { - if (typeof browserCrypto.getRandomValues === "undefined") { - return Buffer.from(browserCrypto.randomBytes(size)); - } - const arr = new Uint8Array(size); - browserCrypto.getRandomValues(arr); - return Buffer.from(arr); -} export class SECP256K1Format implements IPrivateKeyFormat { - privateKey: BN; + privateKey: bigint; // eslint-disable-next-line @typescript-eslint/no-explicit-any ecParams: any; type: string; - constructor(privateKey: BN) { + constructor(privateKey: bigint) { this.privateKey = privateKey; - this.ecParams = secp256k1.curve; + this.ecParams = secp256k1.Point.CURVE(); this.type = "secp256k1n"; } - validatePrivateKey(privateKey: BN): boolean { - return privateKey.cmp(this.ecParams.n) < 0 && !privateKey.isZero(); + validatePrivateKey(privateKey: bigint): boolean { + return privateKey < this.ecParams.n && privateKey !== 0n; } - createPrivateKeyStore(privateKey?: BN): IPrivateKeyStore { - let privKey: BN; + createPrivateKeyStore(privateKey?: bigint): IPrivateKeyStore { + let privKey: bigint; if (!privateKey) { - privKey = new BN(randomBytes(64)); + privKey = bytesToNumberBE(secp256k1.utils.randomSecretKey()); } else { if (!this.validatePrivateKey(privateKey)) { throw Error("Invalid Private Key"); diff --git a/packages/private-keys/test/test.js b/packages/private-keys/test/test.js index f2a9ef64a..15225f0a9 100644 --- a/packages/private-keys/test/test.js +++ b/packages/private-keys/test/test.js @@ -1,5 +1,4 @@ import { deepStrictEqual, fail } from "assert"; -import { BN } from "bn.js"; import { ED25519Format } from "../src/ED25519Format"; import { SECP256K1Format } from "../src/SECP256K1Format"; @@ -15,16 +14,13 @@ describe("ed25519", function () { it("#should use the same ed25519 private key if supplied", async function () { const keyFormat = new ED25519Format(); const privateKeyStore = keyFormat.createPrivateKeyStore( - new BN( - "7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98", - "hex" - ) + BigInt("0x7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98") ); if (!privateKeyStore) { fail("unable to create ed25519 key"); } deepStrictEqual( - privateKeyStore.privateKey.toString("hex"), + privateKeyStore.privateKey.toString(16), "7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98" ); }); @@ -32,7 +28,7 @@ describe("ed25519", function () { const keyFormat = new ED25519Format(); let errorMessage = ""; try { - keyFormat.createPrivateKeyStore(new BN("00000000000000000000000a000aef0708ada6c5b211dc5d5303cb11dc03eb95", "hex")); + keyFormat.createPrivateKeyStore(BigInt("0x00000000000000000000000a000aef0708ada6c5b211dc5d5303cb11dc03eb95")); } catch (error) { errorMessage = error.message; } @@ -42,7 +38,7 @@ describe("ed25519", function () { }); it("#should not be able to validate an invalid ed25519 private key", async function () { // invalid private key - const key = new BN("00000000000000000000000a000aef0708ada6c5b211dc5d5303cb11dc03eb95", "hex"); + const key = BigInt("0x00000000000000000000000a000aef0708ada6c5b211dc5d5303cb11dc03eb95"); const keyFormat = new ED25519Format(); if (keyFormat.validatePrivateKey(key)) { fail("validated an invalid ed25519 key"); @@ -50,9 +46,8 @@ describe("ed25519", function () { }); it("#should be able to validate a valid ed25519 private key", async function () { const keyFormat = new ED25519Format(); - const privateKey = new BN( - "99da9559e15e913ee9ab2e53e3dfad575da33b49be1125bb922e33494f4988281b2f49096e3e5dbd0fcfa9c0c0cd92d9ab3b21544b34d5dd4a65d98b878b9922", - "hex" + const privateKey = BigInt( + "0x99da9559e15e913ee9ab2e53e3dfad575da33b49be1125bb922e33494f4988281b2f49096e3e5dbd0fcfa9c0c0cd92d9ab3b21544b34d5dd4a65d98b878b9922" ); if (!keyFormat.validatePrivateKey(privateKey)) { fail("not able to validate ed25519 key"); @@ -71,17 +66,17 @@ describe("secp256", function () { }); it("#should use the same secp256k1 private key if supplied", async function () { const keyFormat = new SECP256K1Format(); - const privateKeyStore = keyFormat.createPrivateKeyStore(new BN("c2e198c3e6fb83d36d162f5a000aef0708ada6c5b201dc5d5303cb11dc03eb95", "hex")); + const privateKeyStore = keyFormat.createPrivateKeyStore(BigInt("0xc2e198c3e6fb83d36d162f5a000aef0708ada6c5b201dc5d5303cb11dc03eb95")); if (!privateKeyStore) { fail("unable to create secp256k1 key"); } - deepStrictEqual(privateKeyStore.privateKey.toString("hex"), "c2e198c3e6fb83d36d162f5a000aef0708ada6c5b201dc5d5303cb11dc03eb95"); + deepStrictEqual(privateKeyStore.privateKey.toString(16), "c2e198c3e6fb83d36d162f5a000aef0708ada6c5b201dc5d5303cb11dc03eb95"); }); it("#should not create keystore if invalid secp256k1 private key is supplied", async function () { const keyFormat = new SECP256K1Format(); let errorMessage = ""; try { - keyFormat.createPrivateKeyStore(new BN("fffffffffffffffffffffffffffffffffaaedce6af48a03bbfd25e8cd0364141", "hex")); + keyFormat.createPrivateKeyStore(BigInt("0xfffffffffffffffffffffffffffffffffaaedce6af48a03bbfd25e8cd0364141")); } catch (error) { errorMessage = error.message; } @@ -91,7 +86,7 @@ describe("secp256", function () { }); it("#should not be able to validate an invalid secp256k1 private key", async function () { // invalid private key - const key = new BN("ffffffffffffffffffffffffffffffffbaaedce6af48a03bbfd25e8cd0364141", "hex"); + const key = BigInt("0xffffffffffffffffffffffffffffffffbaaedce6af48a03bbfd25e8cd0364141"); const keyFormat = new SECP256K1Format(); if (keyFormat.validatePrivateKey(key)) { fail("validated an invalid secp256k1 key"); @@ -99,7 +94,7 @@ describe("secp256", function () { }); it("#should be able to validate a valid secp256k1 private key", async function () { const keyFormat = new SECP256K1Format(); - if (!keyFormat.validatePrivateKey(new BN("1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0", "hex"))) { + if (!keyFormat.validatePrivateKey(BigInt("0x1ea6edde61c750ec02896e9ac7fe9ac0b48a3630594fdf52ad5305470a2635c0"))) { fail("not able to validate secp256k1 key"); } }); diff --git a/packages/security-questions/package.json b/packages/security-questions/package.json index 46a1fe9a0..6dc2db759 100644 --- a/packages/security-questions/package.json +++ b/packages/security-questions/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/securityQuestions.umd.min.js", - "jsdelivr": "dist/securityQuestions.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -42,12 +42,11 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "ethereum-cryptography": "^3.1.0" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@noble/curves": "^2.0.1", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "lint-staged": { "!(*d).ts": [ "npm run lint --", @@ -55,8 +54,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/security-questions/src/SecurityQuestionStore.ts b/packages/security-questions/src/SecurityQuestionStore.ts index 995bcdb4c..042eade6d 100644 --- a/packages/security-questions/src/SecurityQuestionStore.ts +++ b/packages/security-questions/src/SecurityQuestionStore.ts @@ -1,10 +1,9 @@ import { ISerializable, PolynomialID, PublicShare, SecurityQuestionStoreArgs, StringifiedType } from "@tkey/common-types"; -import BN from "bn.js"; class SecurityQuestionStore implements ISerializable { - nonce: BN; + nonce: bigint; - shareIndex: BN; + shareIndex: bigint; sqPublicShare: PublicShare; @@ -13,9 +12,9 @@ class SecurityQuestionStore implements ISerializable { questions: string; constructor({ nonce, shareIndex, sqPublicShare, polynomialID, questions }: SecurityQuestionStoreArgs) { - this.nonce = new BN(nonce, "hex"); - this.shareIndex = new BN(shareIndex, "hex"); - this.sqPublicShare = new PublicShare(sqPublicShare.shareIndex, sqPublicShare.shareCommitment); + this.nonce = typeof nonce === "bigint" ? nonce : BigInt(`0x${nonce}`); + this.shareIndex = typeof shareIndex === "bigint" ? shareIndex : BigInt(`0x${shareIndex}`); + this.sqPublicShare = sqPublicShare instanceof PublicShare ? sqPublicShare : PublicShare.fromJSON(sqPublicShare); this.polynomialID = polynomialID; this.questions = questions; } @@ -23,8 +22,8 @@ class SecurityQuestionStore implements ISerializable { static fromJSON(value: StringifiedType): SecurityQuestionStore { const { nonce, shareIndex, sqPublicShare, polynomialID, questions } = value; return new SecurityQuestionStore({ - nonce: new BN(nonce, "hex"), - shareIndex: new BN(shareIndex, "hex"), + nonce, + shareIndex, sqPublicShare: PublicShare.fromJSON(sqPublicShare), polynomialID, questions, @@ -33,8 +32,8 @@ class SecurityQuestionStore implements ISerializable { toJSON(): StringifiedType { return { - nonce: this.nonce.toString("hex"), - shareIndex: this.shareIndex.toString("hex"), + nonce: this.nonce.toString(16), + shareIndex: this.shareIndex.toString(16), sqPublicShare: this.sqPublicShare, polynomialID: this.polynomialID, questions: this.questions, diff --git a/packages/security-questions/src/SecurityQuestionsModule.ts b/packages/security-questions/src/SecurityQuestionsModule.ts index b48b1806b..34021744e 100644 --- a/packages/security-questions/src/SecurityQuestionsModule.ts +++ b/packages/security-questions/src/SecurityQuestionsModule.ts @@ -1,3 +1,5 @@ +import { mod } from "@noble/curves/abstract/modular.js"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { GenerateNewShareResult, IModule, @@ -9,15 +11,16 @@ import { Share, ShareStore, ShareStoreMap, + stripHexPrefix, } from "@tkey/common-types"; -import BN from "bn.js"; -import { keccak256 } from "ethereum-cryptography/keccak"; +import { hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; +import { keccak256 } from "@toruslabs/torus.js"; import SecurityQuestionsError from "./errors"; import SecurityQuestionStore from "./SecurityQuestionStore"; -function answerToUserInputHashBN(answerString: string): BN { - return new BN(keccak256(Buffer.from(answerString, "utf8"))); +function answerToUserInputHashBigInt(answerString: string): bigint { + return bytesToNumberBE(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(answerString))))); } export const SECURITY_QUESTIONS_MODULE_NAME = "securityQuestions"; @@ -40,13 +43,12 @@ class SecurityQuestionsModule implements IModule { return generalStore; } const sqStore = new SecurityQuestionStore(generalStore as SecurityQuestionStoreArgs); - const sqIndex = sqStore.shareIndex.toString("hex"); + const sqIndex = sqStore.shareIndex.toString(16); // Assumption: If sqIndex doesn't exist, it must have been explicitly deleted. if (oldShareStores[sqIndex] && newShareStores[sqIndex]) { - const sqAnswer = oldShareStores[sqIndex].share.share.sub(sqStore.nonce); - let newNonce = newShareStores[sqIndex].share.share.sub(sqAnswer); - newNonce = newNonce.umod(secp256k1.curve.n); + const sqAnswer = oldShareStores[sqIndex].share.share - sqStore.nonce; + const newNonce = mod(newShareStores[sqIndex].share.share - sqAnswer, secp256k1.Point.CURVE().n); return new SecurityQuestionStore({ nonce: newNonce, @@ -71,10 +73,9 @@ class SecurityQuestionsModule implements IModule { const rawSqStore = metadata.getGeneralStoreDomain(this.moduleName); if (rawSqStore) throw SecurityQuestionsError.unableToReplace(); const newSharesDetails = await this.tbSDK.generateNewShare(); - const newShareStore = newSharesDetails.newShareStores[newSharesDetails.newShareIndex.toString("hex")]; - const userInputHash = answerToUserInputHashBN(answerString); - let nonce = newShareStore.share.share.sub(userInputHash); - nonce = nonce.umod(secp256k1.curve.n); + const newShareStore = newSharesDetails.newShareStores[newSharesDetails.newShareIndex.toString(16)]; + const userInputHash = answerToUserInputHashBigInt(answerString); + const nonce = mod(newShareStore.share.share - userInputHash, secp256k1.Point.CURVE().n); const sqStore = new SecurityQuestionStore({ nonce, questions, @@ -85,7 +86,7 @@ class SecurityQuestionsModule implements IModule { metadata.setGeneralStoreDomain(this.moduleName, sqStore); await this.tbSDK.addShareDescription( - newSharesDetails.newShareIndex.toString("hex"), + newSharesDetails.newShareIndex.toString(16), JSON.stringify({ module: this.moduleName, questions, dateAdded: Date.now() }), false // READ TODO1 (don't sync metadata) ); @@ -107,13 +108,12 @@ class SecurityQuestionsModule implements IModule { if (!rawSqStore) throw SecurityQuestionsError.unavailable(); const sqStore = new SecurityQuestionStore(rawSqStore as SecurityQuestionStoreArgs); - const userInputHash = answerToUserInputHashBN(answerString); - let share = sqStore.nonce.add(userInputHash); - share = share.umod(secp256k1.curve.n); + const userInputHash = answerToUserInputHashBigInt(answerString); + const share = mod(sqStore.nonce + userInputHash, secp256k1.Point.CURVE().n); const shareStore = new ShareStore(new Share(sqStore.shareIndex, share), sqStore.polynomialID); // validate if share is correct const derivedPublicShare = shareStore.share.getPublicShare(); - if (derivedPublicShare.shareCommitment.x.cmp(sqStore.sqPublicShare.shareCommitment.x) !== 0) { + if (derivedPublicShare.shareCommitment.x !== sqStore.sqPublicShare.shareCommitment.x) { throw SecurityQuestionsError.incorrectAnswer(); } @@ -130,10 +130,9 @@ class SecurityQuestionsModule implements IModule { const sqStore = new SecurityQuestionStore(rawSqStore as SecurityQuestionStoreArgs); - const userInputHash = answerToUserInputHashBN(newAnswerString); + const userInputHash = answerToUserInputHashBigInt(newAnswerString); const sqShare = this.tbSDK.outputShareStore(sqStore.shareIndex); - let nonce = sqShare.share.share.sub(userInputHash); - nonce = nonce.umod(secp256k1.curve.n); + const nonce = mod(sqShare.share.share - userInputHash, secp256k1.Point.CURVE().n); const newSqStore = new SecurityQuestionStore({ nonce, diff --git a/packages/seed-phrase/package.json b/packages/seed-phrase/package.json index a134de9d3..84f48b901 100644 --- a/packages/seed-phrase/package.json +++ b/packages/seed-phrase/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/seedPhrase.umd.min.js", - "jsdelivr": "dist/seedPhrase.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -41,13 +41,12 @@ "@babel/runtime": "7.x" }, "dependencies": { - "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "ethers": "^6.13.5" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@noble/curves": "^2.0.1", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "@tkey/common-types": "^16.0.0" }, + "devDependencies": {}, "lint-staged": { "!(*d).ts": [ "npm run lint --", @@ -55,8 +54,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts b/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts index 4c7778447..7f1c397e8 100644 --- a/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts +++ b/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts @@ -1,15 +1,28 @@ -import { generateID, ISeedPhraseFormat, ISeedPhraseStore, MetamaskSeedPhraseStore } from "@tkey/common-types"; -import BN from "bn.js"; -import { HDNodeWallet, Mnemonic, Provider, randomBytes } from "ethers"; +import { bytesToHex, randomBytes } from "@noble/curves/utils.js"; +import { HDKey } from "@scure/bip32"; +import { entropyToMnemonic, mnemonicToSeedSync, validateMnemonic } from "@scure/bip39"; +import { wordlist } from "@scure/bip39/wordlists/english"; +import { + generateAddressFromPublicKey, + generateID, + getPubKeyECC, + ISeedPhraseFormat, + ISeedPhraseStore, + MetamaskSeedPhraseStore, +} from "@tkey/common-types"; + +export interface EthProvider { + getBalance(address: string): Promise; +} class MetamaskSeedPhraseFormat implements ISeedPhraseFormat { type: string; - provider: Provider; + provider: EthProvider; hdPathString: string; - constructor(ethProvider: Provider) { + constructor(ethProvider: EthProvider) { this.type = "HD Key Tree"; this.hdPathString = "m/44'/60'/0'/0"; this.provider = ethProvider; @@ -21,19 +34,20 @@ class MetamaskSeedPhraseFormat implements ISeedPhraseFormat { if (wordCount % 3 !== 0 || wordCount > 24 || wordCount < 12) { return false; } - return Mnemonic.isValidMnemonic(parsedSeedPhrase); + return validateMnemonic(parsedSeedPhrase, wordlist); } - async deriveKeysFromSeedPhrase(seedPhraseStore: ISeedPhraseStore): Promise { + async deriveKeysFromSeedPhrase(seedPhraseStore: ISeedPhraseStore): Promise { const mmStore = seedPhraseStore as MetamaskSeedPhraseStore; const { seedPhrase } = mmStore; - const hdkey = HDNodeWallet.fromSeed(Mnemonic.fromPhrase(seedPhrase).computeSeed()); + const seed = mnemonicToSeedSync(seedPhrase); + const hdkey = HDKey.fromMasterSeed(seed); const numOfWallets = mmStore.numberOfWallets; - const wallets: BN[] = []; - const root = hdkey.derivePath(this.hdPathString); + const wallets: bigint[] = []; + const root = hdkey.derive(this.hdPathString); for (let i = 0; i < numOfWallets; i += 1) { const child = root.deriveChild(i); - const wallet = new BN(child.privateKey.slice(2), "hex"); + const wallet = BigInt(`0x${bytesToHex(child.privateKey)}`); wallets.push(wallet); } return wallets; @@ -42,20 +56,29 @@ class MetamaskSeedPhraseFormat implements ISeedPhraseFormat { async createSeedPhraseStore(seedPhrase?: string): Promise { let numberOfWallets = 0; let lastBalance: bigint; - const mnemonic = seedPhrase ? Mnemonic.fromPhrase(seedPhrase) : Mnemonic.fromEntropy(randomBytes(32)); - const hdkey = HDNodeWallet.fromSeed(mnemonic.computeSeed()); - const root = hdkey.derivePath(this.hdPathString); + let phrase: string; + if (seedPhrase) { + phrase = seedPhrase; + } else { + phrase = entropyToMnemonic(randomBytes(32), wordlist); + } + const seed = mnemonicToSeedSync(phrase); + const hdkey = HDKey.fromMasterSeed(seed); + const root = hdkey.derive(this.hdPathString); // seek out the first zero balance while (lastBalance !== BigInt(0)) { - const wallet = root.deriveChild(numberOfWallets); - lastBalance = await this.provider.getBalance(wallet.address); + const child = root.deriveChild(numberOfWallets); + const privKeyBigInt = BigInt(`0x${bytesToHex(child.privateKey)}`); + const uncompressedPubKey = getPubKeyECC(privKeyBigInt).slice(1); + const address = generateAddressFromPublicKey(uncompressedPubKey); + lastBalance = await this.provider.getBalance(address); numberOfWallets += 1; } const obj = { id: generateID(), type: this.type, - seedPhrase: mnemonic.phrase, + seedPhrase: phrase, numberOfWallets, }; return obj; diff --git a/packages/seed-phrase/src/SeedPhrase.ts b/packages/seed-phrase/src/SeedPhrase.ts index 921efd546..93fbc0d54 100644 --- a/packages/seed-phrase/src/SeedPhrase.ts +++ b/packages/seed-phrase/src/SeedPhrase.ts @@ -1,5 +1,4 @@ import { IModule, ISeedPhraseFormat, ISeedPhraseStore, ISeedPhraseStoreWithKeys, ITKeyApi } from "@tkey/common-types"; -import BN from "bn.js"; import SeedPhraseError from "./errors"; @@ -57,7 +56,6 @@ class SeedPhraseModule implements IModule { async getSeedPhrasesWithAccounts(): Promise { try { - // Get seed phrases for all available formats from TKeyStore const seedPhrases = await this.getSeedPhrases(); return await Promise.all( seedPhrases.map(async (x) => { @@ -71,9 +69,8 @@ class SeedPhraseModule implements IModule { } } - async getAccounts(): Promise { + async getAccounts(): Promise { try { - // Get seed phrases for all available formats from TKeyStore const seedPhrases = await this.getSeedPhrases(); const responses = await Promise.all( seedPhrases.map(async (x) => { diff --git a/packages/seed-phrase/src/index.ts b/packages/seed-phrase/src/index.ts index 23a5a3317..19e9a113d 100644 --- a/packages/seed-phrase/src/index.ts +++ b/packages/seed-phrase/src/index.ts @@ -1,3 +1,4 @@ export { default as SeedPhraseError } from "./errors"; +export type { EthProvider } from "./MetamaskSeedPhraseFormat"; export { default as MetamaskSeedPhraseFormat } from "./MetamaskSeedPhraseFormat"; export { SEED_PHRASE_MODULE_NAME, default as SeedPhraseModule } from "./SeedPhrase"; diff --git a/packages/service-provider-base/package.json b/packages/service-provider-base/package.json index 6db455f01..f19d70e4b 100644 --- a/packages/service-provider-base/package.json +++ b/packages/service-provider-base/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/serviceProviderBase.umd.min.js", - "jsdelivr": "dist/serviceProviderBase.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -44,13 +44,9 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/metadata-helpers": "^8.1.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, @@ -61,8 +57,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 36dc93209..cbf563a3f 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -1,32 +1,31 @@ import { - BNString, decrypt as decryptUtils, encrypt as encryptUtils, EncryptedMessage, getPubKeyECC, + getPubKeyPoint, IServiceProvider, PubKeyType, + secp256k1, ServiceProviderArgs, StringifiedType, - toPrivKeyEC, toPrivKeyECC, } from "@tkey/common-types"; -import BN from "bn.js"; -import { curve } from "elliptic"; +import { bytesToBase64 } from "@toruslabs/metadata-helpers"; class ServiceProviderBase implements IServiceProvider { enableLogging: boolean; // For easy serialization - postboxKey: BN; + postboxKey: bigint; serviceProviderName: string; - migratableKey: BN | null = null; + migratableKey: bigint | null = null; constructor({ enableLogging = false, postboxKey }: ServiceProviderArgs) { this.enableLogging = enableLogging; - this.postboxKey = new BN(postboxKey, "hex"); + this.postboxKey = postboxKey != null ? BigInt(`0x${postboxKey}`) : 0n; this.serviceProviderName = "ServiceProviderBase"; } @@ -37,36 +36,39 @@ class ServiceProviderBase implements IServiceProvider { return new ServiceProviderBase({ enableLogging, postboxKey }); } - async encrypt(msg: Buffer): Promise { + async encrypt(msg: Uint8Array): Promise { const publicKey = this.retrievePubKey("ecc"); return encryptUtils(publicKey, msg); } - async decrypt(msg: EncryptedMessage): Promise { + async decrypt(msg: EncryptedMessage): Promise { return decryptUtils(toPrivKeyECC(this.postboxKey), msg); } - retrievePubKeyPoint(): curve.base.BasePoint { - return toPrivKeyEC(this.postboxKey).getPublic(); + retrievePubKeyPoint(): { x: bigint; y: bigint } { + const pt = getPubKeyPoint(this.postboxKey); + return { x: pt.x, y: pt.y }; } - retrievePubKey(type: PubKeyType): Buffer { + retrievePubKey(type: PubKeyType): Uint8Array { if (type === "ecc") { return getPubKeyECC(this.postboxKey); } throw new Error("Unsupported pub key type"); } - sign(msg: BNString): string { - const tmp = new BN(msg, "hex"); - const sig = toPrivKeyEC(this.postboxKey).sign(tmp.toString("hex")); - return Buffer.from(sig.r.toString(16, 64) + sig.s.toString(16, 64) + new BN(0).toString(16, 2), "hex").toString("base64"); + sign(msg: Uint8Array): string { + const recoveredSig = secp256k1.sign(msg, toPrivKeyECC(this.postboxKey), { prehash: false, format: "recovered" }); + const sigWithV = new Uint8Array(65); + sigWithV.set(recoveredSig.slice(1, 65), 0); // r + s + sigWithV[64] = recoveredSig[0]; // v + return bytesToBase64(sigWithV); } toJSON(): StringifiedType { return { enableLogging: this.enableLogging, - postboxKey: this.postboxKey.toString("hex"), + postboxKey: this.postboxKey.toString(16), serviceProviderName: this.serviceProviderName, }; } diff --git a/packages/service-provider-base/test/test.js b/packages/service-provider-base/test/test.js index d048101e3..fff5bb1f4 100644 --- a/packages/service-provider-base/test/test.js +++ b/packages/service-provider-base/test/test.js @@ -1,5 +1,5 @@ +import { hexToBytes } from "@toruslabs/metadata-helpers"; import { deepStrictEqual } from "assert"; -import BN from "bn.js"; import ServiceProviderBase from "../src/ServiceProviderBase"; @@ -8,8 +8,8 @@ const PRIVATE_KEY = "e70fb5f5970b363879bc36f54d4fc0ad77863bfd059881159251f50f488 describe("ServiceProvider", function () { it("#should encrypt and decrypt correctly", async function () { const privKey = PRIVATE_KEY; - const tmp = new BN(123); - const message = Buffer.from(tmp.toString("hex", 15)); + const tmp = 123n; + const message = hexToBytes(tmp.toString(16).padStart(16, "0")); const tsp = new ServiceProviderBase({ postboxKey: privKey }); const encDeets = await tsp.encrypt(message); const result = await tsp.decrypt(encDeets); @@ -18,8 +18,8 @@ describe("ServiceProvider", function () { it("#should encrypt and decrypt correctly messages > 15", async function () { const privKey = PRIVATE_KEY; - const tmp = new BN(123); - const message = Buffer.from(tmp.toString("hex", 16)); + const tmp = 123n; + const message = hexToBytes(tmp.toString(16).padStart(16, "0")); const tsp = new ServiceProviderBase({ postboxKey: privKey }); const encDeets = await tsp.encrypt(message); const result = await tsp.decrypt(encDeets); diff --git a/packages/service-provider-sfa/package.json b/packages/service-provider-sfa/package.json index 415f1b313..791a17a1d 100644 --- a/packages/service-provider-sfa/package.json +++ b/packages/service-provider-sfa/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/serviceProviderSfa.umd.min.js", - "jsdelivr": "dist/serviceProviderSfa.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "files": [ "dist" @@ -38,13 +38,11 @@ }, "dependencies": { "@tkey/service-provider-base": "^16.0.0", - "@toruslabs/fetch-node-details": "^15.0.0", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, @@ -55,8 +53,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "9967ce9f795f495f28ef0da1fc50acde31dcc258" } diff --git a/packages/service-provider-sfa/src/SfaServiceProvider.ts b/packages/service-provider-sfa/src/SfaServiceProvider.ts index 593bc3a4e..093e8661a 100644 --- a/packages/service-provider-sfa/src/SfaServiceProvider.ts +++ b/packages/service-provider-sfa/src/SfaServiceProvider.ts @@ -1,8 +1,8 @@ import { type StringifiedType } from "@tkey/common-types"; import { ServiceProviderBase } from "@tkey/service-provider-base"; import { NodeDetailManager } from "@toruslabs/fetch-node-details"; +import { utf8ToBytes } from "@toruslabs/metadata-helpers"; import { keccak256, Torus, TorusKey } from "@toruslabs/torus.js"; -import BN from "bn.js"; import { LoginParams, SfaServiceProviderArgs, VerifierParams, Web3AuthOptions } from "./interfaces"; @@ -13,7 +13,7 @@ class SfaServiceProvider extends ServiceProviderBase { public torusKey: TorusKey; - public migratableKey: BN | null = null; // Migration of key from SFA to tKey + public migratableKey: bigint | null = null; private nodeDetailManagerInstance: NodeDetailManager; @@ -45,7 +45,7 @@ class SfaServiceProvider extends ServiceProviderBase { return sfaSP; } - async connect(params: LoginParams): Promise { + async connect(params: LoginParams): Promise { const { authConnectionId, userId, idToken, groupedAuthConnectionId } = params; const verifier = groupedAuthConnectionId || authConnectionId; const verifierId = userId; @@ -56,7 +56,7 @@ class SfaServiceProvider extends ServiceProviderBase { if (groupedAuthConnectionId) { verifierParams["verify_params"] = [{ verifier_id: userId, idtoken: finalIdToken }]; verifierParams["sub_verifier_ids"] = [authConnectionId]; - aggregateIdToken = keccak256(Buffer.from(finalIdToken, "utf8")).slice(2); + aggregateIdToken = keccak256(utf8ToBytes(finalIdToken)).slice(2); } // fetch node details. const { torusNodeEndpoints, torusIndexes, torusNodePub } = await this.nodeDetailManagerInstance.getNodeDetails({ verifier, verifierId }); @@ -79,10 +79,10 @@ class SfaServiceProvider extends ServiceProviderBase { if (!torusKey.metadata.upgraded) { const { finalKeyData, oAuthKeyData } = torusKey; const privKey = finalKeyData.privKey || oAuthKeyData.privKey; - this.migratableKey = new BN(privKey, "hex"); + this.migratableKey = BigInt(`0x${privKey}`); } const postboxKey = Torus.getPostboxKey(torusKey); - this.postboxKey = new BN(postboxKey, 16); + this.postboxKey = BigInt(`0x${postboxKey}`); return this.postboxKey; } diff --git a/packages/service-provider-torus/package.json b/packages/service-provider-torus/package.json index 2dbd46a5e..b71a91a11 100644 --- a/packages/service-provider-torus/package.json +++ b/packages/service-provider-torus/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/serviceProviderTorus.umd.min.js", - "jsdelivr": "dist/serviceProviderTorus.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -40,15 +40,10 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@tkey/service-provider-base": "^16.0.0", - "@toruslabs/customauth": "^21.0.0", - "@toruslabs/torus.js": "^16.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, @@ -59,8 +54,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/service-provider-torus/src/TorusServiceProvider.ts b/packages/service-provider-torus/src/TorusServiceProvider.ts index c8efeaabd..2f27f904d 100644 --- a/packages/service-provider-torus/src/TorusServiceProvider.ts +++ b/packages/service-provider-torus/src/TorusServiceProvider.ts @@ -2,16 +2,15 @@ import { StringifiedType, TorusServiceProviderArgs } from "@tkey/common-types"; import { ServiceProviderBase } from "@tkey/service-provider-base"; import { CustomAuth, CustomAuthArgs, CustomAuthLoginParams, InitParams, TorusLoginResponse } from "@toruslabs/customauth"; import { Torus, TorusKey } from "@toruslabs/torus.js"; -import BN from "bn.js"; class TorusServiceProvider extends ServiceProviderBase { customAuthInstance: CustomAuth; - singleLoginKey: BN; + singleLoginKey: bigint; public torusKey: TorusKey; - public migratableKey: BN | null = null; // Migration of key from SFA to tKey + public migratableKey: bigint | null = null; customAuthArgs: CustomAuthArgs; @@ -51,10 +50,10 @@ class TorusServiceProvider extends ServiceProviderBase { if (!obj.metadata.upgraded) { const { finalKeyData, oAuthKeyData } = obj; const privKey = finalKeyData.privKey || oAuthKeyData.privKey; - this.migratableKey = new BN(privKey, "hex"); + this.migratableKey = BigInt(`0x${privKey}`); } - this.postboxKey = new BN(localPrivKey, "hex"); + this.postboxKey = BigInt(`0x${localPrivKey}`); } return obj; diff --git a/packages/share-serialization/package.json b/packages/share-serialization/package.json index a32eb7dc9..066a43d46 100644 --- a/packages/share-serialization/package.json +++ b/packages/share-serialization/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/shareSerialization.umd.min.js", - "jsdelivr": "dist/shareSerialization.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -44,8 +44,8 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", - "ethereum-cryptography": "^3.1.0" + "@toruslabs/metadata-helpers": "^8.1.0", + "ethereum-cryptography": "^3.2.0" }, "bugs": { "url": "https://github.com/tkey/tkey/issues" @@ -57,8 +57,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/share-serialization/src/ShareSerializationModule.ts b/packages/share-serialization/src/ShareSerializationModule.ts index 8bf75af43..9539b36c1 100644 --- a/packages/share-serialization/src/ShareSerializationModule.ts +++ b/packages/share-serialization/src/ShareSerializationModule.ts @@ -1,5 +1,4 @@ import { IModule, ITKeyApi } from "@tkey/common-types"; -import BN from "bn.js"; import { english } from "./english"; import ShareSerializationError from "./errors"; @@ -16,12 +15,12 @@ class ShareSerializationModule implements IModule { this.moduleName = SHARE_SERIALIZATION_MODULE_NAME; } - static serializeMnemonic(share: BN): string { - return entropyToMnemonic(share.toString("hex").padStart(64, "0"), english); + static serializeMnemonic(share: bigint): string { + return entropyToMnemonic(share.toString(16).padStart(64, "0"), english); } - static deserializeMnemonic(share: string): BN { - return new BN(mnemonicToEntropy(share, english), "hex"); + static deserializeMnemonic(share: string): bigint { + return BigInt(`0x${mnemonicToEntropy(share, english)}`); } setModuleReferences(tbSDK: ITKeyApi): void { @@ -31,14 +30,14 @@ class ShareSerializationModule implements IModule { async initialize(): Promise {} - async serialize(share: BN, type: string): Promise { + async serialize(share: bigint, type: string): Promise { if (type === "mnemonic") { return ShareSerializationModule.serializeMnemonic(share); } throw ShareSerializationError.typeNotSupported(); } - async deserialize(serializedShare: unknown, type: string): Promise { + async deserialize(serializedShare: unknown, type: string): Promise { if (type === "mnemonic") return ShareSerializationModule.deserializeMnemonic(serializedShare as string); throw ShareSerializationError.typeNotSupported(); } diff --git a/packages/share-serialization/src/utils.ts b/packages/share-serialization/src/utils.ts index d0989a0dc..f08d44ba6 100644 --- a/packages/share-serialization/src/utils.ts +++ b/packages/share-serialization/src/utils.ts @@ -1,3 +1,4 @@ +import { bytesToHex, hexToBytes } from "@toruslabs/metadata-helpers"; import { sha256 } from "ethereum-cryptography/sha256"; import ShareSerializationError from "./errors"; @@ -22,18 +23,20 @@ export function bytesToBinary(bytes: number[]): string { return bytes.map((x) => lpad(x.toString(2), "0", 8)).join(""); } -export function deriveChecksumBits(entropyBuffer: Buffer): string { - const ENT = entropyBuffer.length * 8; +export function deriveChecksumBits(entropy: Uint8Array): string { + const ENT = entropy.length * 8; const CS = ENT / 32; - const hash = sha256(entropyBuffer); + const hash = sha256(entropy); return bytesToBinary(Array.from(hash)).slice(0, CS); } -export function entropyToMnemonic(entropy: Buffer | string, english: string[]): string { - let newEntropy: Buffer; - if (!Buffer.isBuffer(entropy)) { - newEntropy = Buffer.from(entropy, "hex"); +export function entropyToMnemonic(entropy: Uint8Array | string, english: string[]): string { + let newEntropy: Uint8Array; + if (typeof entropy === "string") { + newEntropy = hexToBytes(entropy); + } else { + newEntropy = entropy; } // 128 <= ENT <= 256 @@ -97,11 +100,11 @@ export function mnemonicToEntropy(mnemonic: string, english: string[]): string { throw ShareSerializationError.invalidEntropy(); } - const entropy = Buffer.from(entropyBytes); + const entropy = new Uint8Array(entropyBytes); const newChecksum = deriveChecksumBits(entropy); if (newChecksum !== checksumBits) { throw ShareSerializationError.invalidChecksum(); } - return entropy.toString("hex"); + return bytesToHex(entropy); } diff --git a/packages/share-serialization/test/test.js b/packages/share-serialization/test/test.js index decb4b0e5..8185d2c1c 100644 --- a/packages/share-serialization/test/test.js +++ b/packages/share-serialization/test/test.js @@ -1,12 +1,11 @@ import { deepStrictEqual } from "assert"; -import BN from "bn.js"; import { ShareSerializationModule } from "../src/index"; describe("Share serialization", function () { it("#should export share", async function () { const instance = new ShareSerializationModule(); - const key = new BN("6bd39a72bc7aa54f9a19e1cc9873de54a7903cc1a3e9fc792d463f06ca2806b9", "hex"); + const key = BigInt("0x6bd39a72bc7aa54f9a19e1cc9873de54a7903cc1a3e9fc792d463f06ca2806b9"); const seed = await instance.serialize(key, "mnemonic"); const share = await instance.deserialize(seed, "mnemonic"); deepStrictEqual(key, share); diff --git a/packages/share-transfer/package.json b/packages/share-transfer/package.json index 5828d0db3..680e5faab 100644 --- a/packages/share-transfer/package.json +++ b/packages/share-transfer/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/shareTransfer.umd.min.js", - "jsdelivr": "dist/shareTransfer.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -39,13 +39,12 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/eccrypto": "^7.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "@noble/curves": "^2.0.1", + "@toruslabs/metadata-helpers": "^8.1.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, @@ -56,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/share-transfer/src/ShareRequest.ts b/packages/share-transfer/src/ShareRequest.ts index ad9329f15..7177b2db1 100644 --- a/packages/share-transfer/src/ShareRequest.ts +++ b/packages/share-transfer/src/ShareRequest.ts @@ -1,7 +1,7 @@ import { BufferObj, EncryptedMessage, ShareRequestArgs } from "@tkey/common-types"; class ShareRequest { - encPubKey: Buffer; + encPubKey: Uint8Array; encShareInTransit: EncryptedMessage; @@ -16,11 +16,12 @@ class ShareRequest { timestamp: number; constructor({ encPubKey, encShareInTransit, availableShareIndexes, userAgent, userIp, timestamp }: ShareRequestArgs) { - const testEncPubKey = encPubKey as BufferObj; - if (testEncPubKey.type === "Buffer") { - this.encPubKey = Buffer.from(testEncPubKey.data); + if (encPubKey instanceof Uint8Array) { + this.encPubKey = encPubKey; + } else if ((encPubKey as BufferObj).type === "Buffer") { + this.encPubKey = new Uint8Array((encPubKey as BufferObj).data); } else { - this.encPubKey = encPubKey as unknown as Buffer; + this.encPubKey = Uint8Array.from(Object.values(encPubKey as ArrayLike)); } this.availableShareIndexes = availableShareIndexes; this.encShareInTransit = encShareInTransit; diff --git a/packages/share-transfer/src/ShareTransferModule.ts b/packages/share-transfer/src/ShareTransferModule.ts index eeb6e108e..f412b8707 100644 --- a/packages/share-transfer/src/ShareTransferModule.ts +++ b/packages/share-transfer/src/ShareTransferModule.ts @@ -1,8 +1,11 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { decrypt, encrypt, + generatePrivate, getPubKeyECC, getPubKeyPoint, + hexToBigInt, IModule, ITKeyApi, ITkeyError, @@ -11,8 +14,7 @@ import { ShareTransferStorePointerArgs, toPrivKeyECC, } from "@tkey/common-types"; -import { generatePrivate } from "@toruslabs/eccrypto"; -import BN from "bn.js"; +import { bytesToUtf8, utf8ToBytes } from "@toruslabs/metadata-helpers"; import ShareTransferError from "./errors"; import ShareRequest from "./ShareRequest"; @@ -30,7 +32,7 @@ class ShareTransferModule implements IModule { tbSDK: ITKeyApi; - currentEncKey: BN; + currentEncKey: bigint; requestStatusCheckId: number; @@ -51,7 +53,7 @@ class ShareTransferModule implements IModule { // This is needed to avoid MIM during share deletion. if (numberOfNewShares <= numberOfOldShares) { - const shareTransferStorePointer: ShareTransferStorePointer = { pointer: new BN(generatePrivate()) }; + const shareTransferStorePointer: ShareTransferStorePointer = { pointer: bytesToNumberBE(generatePrivate()) }; return shareTransferStorePointer; } @@ -72,7 +74,7 @@ class ShareTransferModule implements IModule { const rawShareTransferStorePointer = metadata.getGeneralStoreDomain(this.moduleName) as ShareTransferStorePointerArgs; let shareTransferStorePointer: ShareTransferStorePointer; if (!rawShareTransferStorePointer) { - shareTransferStorePointer = { pointer: new BN(generatePrivate()) }; + shareTransferStorePointer = { pointer: bytesToNumberBE(generatePrivate()) }; metadata.setGeneralStoreDomain(this.moduleName, shareTransferStorePointer); // await this.tbSDK.syncShareMetadata(); // Requires threshold shares // OPTIMIZATION TO NOT SYNC METADATA TWICE ON INIT, WILL FAIL IF TKEY DOES NOT HAVE MODULE AS DEFAULT @@ -86,10 +88,10 @@ class ShareTransferModule implements IModule { availableShareIndexes: Array, callback?: (err?: ITkeyError, shareStore?: ShareStore) => void ): Promise { - if (this.currentEncKey) throw ShareTransferError.requestExists(`${this.currentEncKey.toString("hex")}`); - this.currentEncKey = new BN(generatePrivate()); + if (this.currentEncKey) throw ShareTransferError.requestExists(`${this.currentEncKey.toString(16)}`); + this.currentEncKey = bytesToNumberBE(generatePrivate()); const [newShareTransferStore, userIp] = await Promise.all([this.getShareTransferStore(), getClientIp()]); - const encPubKeyX = getPubKeyPoint(this.currentEncKey).x.toString("hex"); + const encPubKeyX = getPubKeyPoint(this.currentEncKey).x.toString(16); newShareTransferStore[encPubKeyX] = new ShareRequest({ encPubKey: getPubKeyECC(this.currentEncKey), encShareInTransit: undefined, @@ -108,7 +110,7 @@ class ShareTransferModule implements IModule { if (!this.currentEncKey) throw ShareTransferError.missingEncryptionKey(); if (latestShareTransferStore[encPubKeyX].encShareInTransit) { const shareStoreBuf = await decrypt(toPrivKeyECC(this.currentEncKey), latestShareTransferStore[encPubKeyX].encShareInTransit); - const receivedShare = ShareStore.fromJSON(JSON.parse(shareStoreBuf.toString())); + const receivedShare = ShareStore.fromJSON(JSON.parse(bytesToUtf8(shareStoreBuf))); await this.tbSDK.inputShareStoreSafe(receivedShare, true); this._cleanUpCurrentRequest(); callback(null, receivedShare); @@ -143,9 +145,9 @@ class ShareTransferModule implements IModule { const shareTransferStore = await this.getShareTransferStore(); if (!shareTransferStore[encPubKeyX]) throw ShareTransferError.missingEncryptionKey(); - let bufferedShare: Buffer; + let shareBytes: Uint8Array; if (shareStore) { - bufferedShare = Buffer.from(JSON.stringify(shareStore)); + shareBytes = utf8ToBytes(JSON.stringify(shareStore)); } else { const store = new ShareRequest(shareTransferStore[encPubKeyX]); const { availableShareIndexes } = store; @@ -154,16 +156,17 @@ class ShareTransferModule implements IModule { const latestPolynomialId = latestPolynomial.getPolynomialID(); const indexes = metadata.getShareIndexesForPolynomial(latestPolynomialId); const filtered = indexes.filter((el) => !availableShareIndexes.includes(el)); - const share = this.tbSDK.outputShareStore(filtered[0]); - bufferedShare = Buffer.from(JSON.stringify(share)); + if (filtered.length === 0) throw ShareTransferError.default("no share index available to approve request"); + const share = this.tbSDK.outputShareStore(hexToBigInt(filtered[0])); + shareBytes = utf8ToBytes(JSON.stringify(share)); } const shareRequest = new ShareRequest(shareTransferStore[encPubKeyX]); - shareTransferStore[encPubKeyX].encShareInTransit = await encrypt(shareRequest.encPubKey, bufferedShare); + shareTransferStore[encPubKeyX].encShareInTransit = await encrypt(shareRequest.encPubKey, shareBytes); await this.setShareTransferStore(shareTransferStore); this.currentEncKey = undefined; } - async approveRequestWithShareIndex(encPubKeyX: string, shareIndex: string): Promise { + async approveRequestWithShareIndex(encPubKeyX: string, shareIndex: bigint): Promise { const deviceShare = this.tbSDK.outputShareStore(shareIndex); return this.approveRequest(encPubKeyX, deviceShare); } @@ -195,7 +198,7 @@ class ShareTransferModule implements IModule { reject(ShareTransferError.userCancelledRequest()); } else if (latestShareTransferStore[encPubKeyX].encShareInTransit) { const shareStoreBuf = await decrypt(toPrivKeyECC(this.currentEncKey), latestShareTransferStore[encPubKeyX].encShareInTransit); - const receivedShare = ShareStore.fromJSON(JSON.parse(shareStoreBuf.toString())); + const receivedShare = ShareStore.fromJSON(JSON.parse(bytesToUtf8(shareStoreBuf))); await this.tbSDK.inputShareStoreSafe(receivedShare, true); if (deleteRequestAfterCompletion) { await this.deleteShareTransferStore(encPubKeyX); @@ -224,7 +227,7 @@ class ShareTransferModule implements IModule { async resetShareTransferStore(): Promise { const metadata = this.tbSDK.getMetadata(); - const shareTransferStorePointer = { pointer: new BN(generatePrivate()) }; + const shareTransferStorePointer = { pointer: bytesToNumberBE(generatePrivate()) }; metadata.setGeneralStoreDomain(this.moduleName, shareTransferStorePointer); await this.tbSDK._syncShareMetadata(); } diff --git a/packages/share-transfer/src/ShareTransferStorePointer.ts b/packages/share-transfer/src/ShareTransferStorePointer.ts index 72aa78009..f55cfbfea 100644 --- a/packages/share-transfer/src/ShareTransferStorePointer.ts +++ b/packages/share-transfer/src/ShareTransferStorePointer.ts @@ -1,11 +1,10 @@ import { ShareTransferStorePointerArgs } from "@tkey/common-types"; -import BN from "bn.js"; class ShareTransferStorePointer { - pointer: BN; + pointer: bigint; constructor({ pointer }: ShareTransferStorePointerArgs) { - this.pointer = new BN(pointer, "hex"); + this.pointer = typeof pointer === "bigint" ? pointer : BigInt(`0x${pointer}`); } } export default ShareTransferStorePointer; diff --git a/packages/storage-layer-torus/package.json b/packages/storage-layer-torus/package.json index 39c17a52d..fa5b6a8b4 100644 --- a/packages/storage-layer-torus/package.json +++ b/packages/storage-layer-torus/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/storageLayerTorus.umd.min.js", - "jsdelivr": "dist/storageLayerTorus.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -39,14 +39,12 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/http-helpers": "^8.1.1", - "base64url": "3.0.1", - "bn.js": "^5.2.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", + "@toruslabs/torus.js": "^17.0.0", + "json-stable-stringify": "^1.3.0" }, "devDependencies": { - "@types/bn.js": "^5.1.6", "@types/json-stable-stringify": "^1.2.0" }, "bugs": { @@ -59,8 +57,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/storage-layer-torus/src/MockStorageLayer.ts b/packages/storage-layer-torus/src/MockStorageLayer.ts index dbb48f2be..704ed9409 100644 --- a/packages/storage-layer-torus/src/MockStorageLayer.ts +++ b/packages/storage-layer-torus/src/MockStorageLayer.ts @@ -1,4 +1,5 @@ import { + bigIntReplacer, generateID, getPubKeyPoint, IServiceProvider, @@ -7,7 +8,6 @@ import { MockStorageLayerArgs, StringifiedType, } from "@tkey/common-types"; -import BN from "bn.js"; import stringify from "json-stable-stringify"; class MockStorageLayer implements IStorageLayer { @@ -39,17 +39,17 @@ class MockStorageLayer implements IStorageLayer { * Get metadata for a key * @param privKey - If not provided, it will use service provider's share for decryption */ - async getMetadata(params: { serviceProvider?: IServiceProvider; privKey?: BN }): Promise { + async getMetadata(params: { serviceProvider?: IServiceProvider; privKey?: bigint }): Promise { const { serviceProvider, privKey } = params; - let usedKey: BN; - if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().getX(); + let usedKey: bigint; + if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey).x; - const fromMap = this.dataMap[usedKey.toString("hex")]; + const fromMap = this.dataMap[usedKey.toString(16)]; if (!fromMap) { return { message: KEY_NOT_FOUND } as T; } - return JSON.parse(this.dataMap[usedKey.toString("hex")] as string) as T; + return JSON.parse(this.dataMap[usedKey.toString(16)] as string) as T; } /** @@ -57,46 +57,46 @@ class MockStorageLayer implements IStorageLayer { * @param input - data to post * @param privKey - If not provided, it will use service provider's share for encryption */ - async setMetadata(params: { input: T; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ message: string }> { + async setMetadata(params: { input: T; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ message: string }> { const { serviceProvider, privKey, input } = params; - let usedKey: BN; - if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().getX(); + let usedKey: bigint; + if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey).x; - this.dataMap[usedKey.toString("hex")] = stringify(input); + this.dataMap[usedKey.toString(16)] = stringify(input, { replacer: bigIntReplacer }); return { message: "success" }; } - async setMetadataStream(params: { input: Array; serviceProvider?: IServiceProvider; privKey?: Array }): Promise<{ message: string }> { + async setMetadataStream(params: { input: Array; serviceProvider?: IServiceProvider; privKey?: Array }): Promise<{ message: string }> { const { serviceProvider, privKey, input } = params; input.forEach((el, index) => { - let usedKey: BN; - if (!privKey || !privKey[index]) usedKey = serviceProvider.retrievePubKeyPoint().getX(); + let usedKey: bigint; + if (!privKey || !privKey[index]) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey[index]).x; - this.dataMap[usedKey.toString("hex")] = stringify(el); + this.dataMap[usedKey.toString(16)] = stringify(el, { replacer: bigIntReplacer }); }); return { message: "success" }; } - async acquireWriteLock(params: { serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ status: number; id?: string }> { + async acquireWriteLock(params: { serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ status: number; id?: string }> { const { serviceProvider, privKey } = params; - let usedKey: BN; - if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().getX(); + let usedKey: bigint; + if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey).x; - if (this.lockMap[usedKey.toString("hex")]) return { status: 0 }; + if (this.lockMap[usedKey.toString(16)]) return { status: 0 }; const id = generateID(); - this.lockMap[usedKey.toString("hex")] = id; + this.lockMap[usedKey.toString(16)] = id; return { status: 1, id }; } - async releaseWriteLock(params: { id: string; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ status: number }> { + async releaseWriteLock(params: { id: string; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ status: number }> { const { serviceProvider, privKey, id } = params; - let usedKey: BN; - if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().getX(); + let usedKey: bigint; + if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey).x; - if (!this.lockMap[usedKey.toString("hex")]) return { status: 0 }; - if (id !== this.lockMap[usedKey.toString("hex")]) return { status: 2 }; - this.lockMap[usedKey.toString("hex")] = null; + if (!this.lockMap[usedKey.toString(16)]) return { status: 0 }; + if (id !== this.lockMap[usedKey.toString(16)]) return { status: 2 }; + this.lockMap[usedKey.toString(16)] = null; return { status: 1 }; } diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index 5e1406834..4db163a5a 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -1,4 +1,5 @@ import { + bigIntReplacer, decrypt, encrypt, EncryptedMessage, @@ -12,20 +13,20 @@ import { prettyPrintError, secp256k1, StringifiedType, - toPrivKeyEC, + stripHexPrefix, toPrivKeyECC, TorusStorageLayerAPIParams, TorusStorageLayerArgs, } from "@tkey/common-types"; import { post } from "@toruslabs/http-helpers"; -import base64url from "base64url"; -import BN from "bn.js"; -import { keccak256 } from "ethereum-cryptography/keccak"; +import { bytesToBase64, bytesToHex, bytesToUtf8, decodeBase64Url, encodeBase64Url, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; +import { keccak256 } from "@toruslabs/torus.js"; import stringify from "json-stable-stringify"; -function signDataWithPrivKey(data: { timestamp: number }, privKey: BN): string { - const sig = secp256k1.sign(keccak256(Buffer.from(stringify(data), "utf8")), toPrivKeyECC(privKey), "utf-8"); - return sig.toDER("hex"); +function signDataWithPrivKey(data: { timestamp: number }, privKey: bigint): string { + const hash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); + const sig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false, format: "der" }); + return bytesToHex(sig); } class TorusStorageLayer implements IStorageLayer { @@ -44,7 +45,7 @@ class TorusStorageLayer implements IStorageLayer { this.serverTimeOffset = serverTimeOffset; } - static async serializeMetadataParamsInput(el: unknown, serviceProvider: IServiceProvider, privKey: BN): Promise { + static async serializeMetadataParamsInput(el: unknown, serviceProvider: IServiceProvider, privKey: bigint): Promise { if (typeof el === "object") { // Allow using of special message as command, in which case, do not encrypt const obj = el as Record; @@ -53,14 +54,14 @@ class TorusStorageLayer implements IStorageLayer { } // General case, encrypt message - const bufferMetadata = Buffer.from(stringify(el)); + const msgBytes = utf8ToBytes(stringify(el, { replacer: bigIntReplacer })); let encryptedDetails: EncryptedMessage; if (privKey) { - encryptedDetails = await encrypt(getPubKeyECC(privKey), bufferMetadata); + encryptedDetails = await encrypt(getPubKeyECC(privKey), msgBytes); } else { - encryptedDetails = await serviceProvider.encrypt(bufferMetadata); + encryptedDetails = await serviceProvider.encrypt(msgBytes); } - const serializedEncryptedDetails = base64url.encode(stringify(encryptedDetails)); + const serializedEncryptedDetails = encodeBase64Url(stringify(encryptedDetails)); return serializedEncryptedDetails; } @@ -74,7 +75,7 @@ class TorusStorageLayer implements IStorageLayer { * Get metadata for a key * @param privKey - If not provided, it will use service provider's share for decryption */ - async getMetadata(params: { serviceProvider?: IServiceProvider; privKey?: BN }): Promise { + async getMetadata(params: { serviceProvider?: IServiceProvider; privKey?: bigint }): Promise { const { serviceProvider, privKey } = params; const keyDetails = this.generateMetadataParams({}, serviceProvider, privKey); const metadataResponse = await post<{ message: string }>(`${this.hostUrl}/get`, keyDetails); @@ -82,16 +83,16 @@ class TorusStorageLayer implements IStorageLayer { if (metadataResponse.message === "") { return { message: KEY_NOT_FOUND } as T; } - const encryptedMessage = JSON.parse(base64url.decode(metadataResponse.message)); + const encryptedMessage = JSON.parse(decodeBase64Url(metadataResponse.message)); - let decrypted: Buffer; + let decrypted: Uint8Array; if (privKey) { decrypted = await decrypt(toPrivKeyECC(privKey), encryptedMessage); } else { decrypted = await serviceProvider.decrypt(encryptedMessage); } - return JSON.parse(decrypted.toString()) as T; + return JSON.parse(bytesToUtf8(decrypted)) as T; } /** @@ -99,7 +100,7 @@ class TorusStorageLayer implements IStorageLayer { * @param input - data to post * @param privKey - If not provided, it will use service provider's share for encryption */ - async setMetadata(params: { input: T; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ message: string }> { + async setMetadata(params: { input: T; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ message: string }> { try { const { serviceProvider, privKey, input } = params; const metadataParams = this.generateMetadataParams( @@ -114,7 +115,7 @@ class TorusStorageLayer implements IStorageLayer { } } - async setMetadataStream(params: { input: Array; serviceProvider?: IServiceProvider; privKey?: Array }): Promise<{ message: string }> { + async setMetadataStream(params: { input: Array; serviceProvider?: IServiceProvider; privKey?: Array }): Promise<{ message: string }> { try { const { serviceProvider, privKey, input } = params; const newInput = input; @@ -130,7 +131,7 @@ class TorusStorageLayer implements IStorageLayer { const FD = new FormData(); finalMetadataParams.forEach((el, index) => { - FD.append(index.toString(), JSON.stringify(el)); + FD.append(index.toString(), JSON.stringify(el, bigIntReplacer)); }); const options: RequestInit = { mode: "cors", @@ -151,14 +152,14 @@ class TorusStorageLayer implements IStorageLayer { } } - generateMetadataParams(message: unknown, serviceProvider?: IServiceProvider, privKey?: BN): TorusStorageLayerAPIParams { + generateMetadataParams(message: unknown, serviceProvider?: IServiceProvider, privKey?: bigint): TorusStorageLayerAPIParams { let sig: string; let pubX: string; let pubY: string; let namespace = "tkey"; const setTKeyStore = { data: message, - timestamp: new BN(~~(this.serverTimeOffset + Date.now() / 1000)).toString(16), + timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000).toString(16), }; // Overwrite bulk_set to allow deleting nonce v2 together with creating tKey. @@ -168,18 +169,21 @@ class TorusStorageLayer implements IStorageLayer { setTKeyStore.data = ""; } - const hash = keccak256(Buffer.from(stringify(setTKeyStore), "utf8")); + const hash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(setTKeyStore))))); if (privKey) { - const unparsedSig = toPrivKeyEC(privKey).sign(hash); - sig = Buffer.from(unparsedSig.r.toString(16, 64) + unparsedSig.s.toString(16, 64) + new BN(0).toString(16, 2), "hex").toString("base64"); + const recoveredSig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false, format: "recovered" }); + const sigWithV = new Uint8Array(65); + sigWithV.set(recoveredSig.slice(1, 65), 0); // r + s + sigWithV[64] = recoveredSig[0]; // v + sig = bytesToBase64(sigWithV); const pubK = getPubKeyPoint(privKey); - pubX = pubK.x.toString("hex"); - pubY = pubK.y.toString("hex"); + pubX = pubK.x.toString(16); + pubY = pubK.y.toString(16); } else { const point = serviceProvider.retrievePubKeyPoint(); - sig = serviceProvider.sign(new BN(hash)); - pubX = point.getX().toString("hex"); - pubY = point.getY().toString("hex"); + sig = serviceProvider.sign(hash); + pubX = point.x.toString(16); + pubY = point.y.toString(16); } return { pub_key_X: pubX, @@ -190,40 +194,48 @@ class TorusStorageLayer implements IStorageLayer { }; } - async acquireWriteLock(params: { serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ status: number; id?: string }> { + async acquireWriteLock(params: { serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ status: number; id?: string }> { const { serviceProvider, privKey } = params; + if (!serviceProvider && !privKey) throw new Error("acquireWriteLock: either privKey or serviceProvider must be provided"); const data = { timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000), }; let signature: string; + let key: string; if (privKey) { signature = signDataWithPrivKey(data, privKey); + key = bytesToHex(getPubKeyECC(privKey)); } else { - signature = serviceProvider.sign(new BN(keccak256(Buffer.from(stringify(data), "utf8")))); + signature = serviceProvider.sign(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))))); + key = bytesToHex(serviceProvider.retrievePubKey("ecc")); } const metadataParams = { - key: toPrivKeyEC(privKey).getPublic("hex"), + key, data, signature, }; return post<{ status: number; id?: string }>(`${this.hostUrl}/acquireLock`, metadataParams); } - async releaseWriteLock(params: { id: string; serviceProvider?: IServiceProvider; privKey?: BN }): Promise<{ status: number }> { + async releaseWriteLock(params: { id: string; serviceProvider?: IServiceProvider; privKey?: bigint }): Promise<{ status: number }> { const { serviceProvider, privKey, id } = params; + if (!serviceProvider && !privKey) throw new Error("releaseWriteLock: either privKey or serviceProvider must be provided"); const data = { timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000), }; let signature: string; + let key: string; if (privKey) { signature = signDataWithPrivKey(data, privKey); + key = bytesToHex(getPubKeyECC(privKey)); } else { - signature = serviceProvider.sign(new BN(keccak256(Buffer.from(stringify(data), "utf8")))); + signature = serviceProvider.sign(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))))); + key = bytesToHex(serviceProvider.retrievePubKey("ecc")); } const metadataParams = { - key: toPrivKeyEC(privKey).getPublic("hex"), + key, data, signature, id, diff --git a/packages/tss/.mocharc.json b/packages/tss/.mocharc.json deleted file mode 100644 index 62e530da3..000000000 --- a/packages/tss/.mocharc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "require": ["tsx"], - "spec": ["./test/tss.ts"], - "extension": ["js", "ts"], - "timeout": 0, - "exit": true -} diff --git a/packages/tss/README.md b/packages/tss/README.md deleted file mode 100644 index 48ad2ff9e..000000000 --- a/packages/tss/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @tkey/tss - -Threshold signing support for tkey. diff --git a/packages/tss/package.json b/packages/tss/package.json deleted file mode 100644 index 7c70e193e..000000000 --- a/packages/tss/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@tkey/tss", - "version": "16.0.0", - "description": "Threshold signing for Tkey", - "main": "dist/lib.cjs/index.js", - "module": "dist/lib.esm/index.js", - "unpkg": "dist/tss.umd.min.js", - "jsdelivr": "dist/tss.umd.min.js", - "types": "dist/lib.cjs/types/index.d.ts", - "sideEffects": false, - "files": [ - "dist" - ], - "scripts": { - "test": "METADATA=mocked TS_NODE_PROJECT=./test/tsconfig.json mocha", - "dev": "rimraf dist/ && cross-env NODE_ENV=development torus-scripts build", - "build": "rimraf dist/ && cross-env NODE_ENV=production torus-scripts build", - "lint": "eslint --fix 'src/**/*.ts'", - "prepack": "npm run build" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@tkey/common-types": "^16.0.0", - "@tkey/core": "^16.0.0", - "@tkey/service-provider-torus": "^16.0.0", - "@toruslabs/customauth": "^21.0.0", - "@toruslabs/http-helpers": "^8.1.1", - "@toruslabs/rss-client": "^2.0.2", - "@toruslabs/torus.js": "^16.0.0", - "@types/bn.js": "^5.1.6", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0" - }, - "devDependencies": { - "@tkey/storage-layer-torus": "^16.0.0", - "@types/jsrsasign": "^10.5.15", - "jsrsasign": "^11.1.0", - "tsx": "^4.19.3", - "typescript": "^5.8.2" - } -} diff --git a/packages/tss/src/common.ts b/packages/tss/src/common.ts deleted file mode 100644 index 1e13006c0..000000000 --- a/packages/tss/src/common.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Point, TkeyStoreItemType } from "@tkey/common-types"; -import { EncryptedMessage, PointHex } from "@toruslabs/rss-client"; -import { KeyType } from "@toruslabs/torus.js"; -import BN from "bn.js"; - -export type FactorEncType = "direct" | "hierarchical"; - -export type FactorEnc = { - tssIndex: number; - type: FactorEncType; - userEnc: EncryptedMessage; - serverEncs: EncryptedMessage[]; -}; - -export type InitializeNewTSSKeyResult = { - tss2: BN; - tssPolyCommits: Point[]; - factorPubs: Point[]; - factorEncs: { - [factorPubID: string]: FactorEnc; - }; -}; - -export type IAccountSaltStore = TkeyStoreItemType & { - value: string; -}; - -export interface IRemoteClientState { - remoteFactorPub: string; - remoteClientUrl: string; - remoteClientToken: string; - metadataShare: string; - tssShareIndex: number; - // Signatures for authentication against RSS servers - signatures: string[]; -} - -export interface RefreshRemoteTssParams { - // from client - factorEnc: FactorEnc; - - factorPubs: PointHex[]; - targetIndexes: number[]; - verifierNameVerifierId: string; - - tssTag: string; - tssCommits: PointHex[]; - tssNonce: number; - newTSSServerPub: PointHex; - // nodeIndexes : number[], - - serverOpts: { - serverEndpoints: string[]; - serverPubKeys: PointHex[]; - serverThreshold: number; - selectedServers: number[]; - authSignatures: string[]; - }; - - curve: KeyType; -} - -export interface RefreshRemoteTssReturnType { - tssTag: string; - tssNonce: number; - tssPolyCommits: PointHex[]; - factorPubs: PointHex[]; - factorEncs: { - [factorPubID: string]: FactorEnc; - }; -} - -export interface CopyRemoteTssParams { - tssCommits: PointHex[]; - factorPub: PointHex; - factorEnc: FactorEnc; - curve: KeyType; -} diff --git a/packages/tss/src/index.ts b/packages/tss/src/index.ts deleted file mode 100644 index 880028a4f..000000000 --- a/packages/tss/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./common"; -export { TSSTorusServiceProvider } from "./provider"; -export * from "./tss"; -export * from "./util"; -export { randomSelection } from "@toruslabs/rss-client"; diff --git a/packages/tss/src/provider.ts b/packages/tss/src/provider.ts deleted file mode 100644 index 014f18ba4..000000000 --- a/packages/tss/src/provider.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Point, StringifiedType } from "@tkey/common-types"; -import { TorusServiceProvider } from "@tkey/service-provider-torus"; -import { CustomAuthLoginParams, TorusLoginResponse } from "@toruslabs/customauth"; -import { PointHex } from "@toruslabs/rss-client"; - -import { getExtendedVerifierId } from "./util"; - -export class TSSTorusServiceProvider extends TorusServiceProvider { - authConnectionId?: string; - - userId?: string; - - static fromJSON(value: StringifiedType): TSSTorusServiceProvider { - const { enableLogging, postboxKey, customAuthArgs, authConnectionId, userId } = value; - const serviceProvider = new TSSTorusServiceProvider({ - enableLogging, - postboxKey, - customAuthArgs, - }); - - serviceProvider.userId = userId; - serviceProvider.authConnectionId = authConnectionId; - - return serviceProvider; - } - - toJSON(): StringifiedType { - return { - enableLogging: this.enableLogging, - postboxKey: this.postboxKey, - customAuthArgs: this.customAuthArgs, - authConnectionId: this.authConnectionId, - userId: this.userId, - }; - } - - async getRSSNodeDetails(): Promise<{ serverEndpoints: string[]; serverPubKeys: PointHex[]; serverThreshold: number }> { - if (!this.userId) throw new Error("no userId, not logged in"); - if (!this.authConnectionId) throw new Error("no authConnectionId, not logged in"); - - const { torusNodeRSSEndpoints: tssNodeEndpoints, torusNodePub: torusPubKeys } = await this.customAuthInstance.nodeDetailManager.getNodeDetails({ - verifier: this.authConnectionId, - verifierId: this.userId, - }); - - return { - serverEndpoints: tssNodeEndpoints, - serverPubKeys: torusPubKeys.map((key) => { - return { - x: key.X, - y: key.Y, - }; - }), - serverThreshold: Math.ceil(tssNodeEndpoints.length / 2), - }; - } - - async getTSSPubKey( - tssTag: string, - tssNonce: number - ): Promise<{ - pubKey: Point; - nodeIndexes?: number[]; - }> { - if (!this.authConnectionId || !this.userId) throw new Error("verifier userinfo not found, not logged in yet"); - - const nodeDetails = await this.customAuthInstance.nodeDetailManager.getNodeDetails({ verifier: this.authConnectionId, verifierId: this.userId }); - const tssServerPub = await this.customAuthInstance.torus.getPublicAddress(nodeDetails.torusNodeSSSEndpoints, nodeDetails.torusNodePub, { - verifier: this.authConnectionId, - verifierId: this.userId, - extendedVerifierId: getExtendedVerifierId(this.userId, tssTag, tssNonce), - }); - - return { - pubKey: new Point(tssServerPub.finalKeyData.X, tssServerPub.finalKeyData.Y), - nodeIndexes: tssServerPub.nodesData.nodeIndexes || [], - }; - } - - getVerifierNameVerifierId(): string { - return `${this.authConnectionId}\u001c${this.userId}`; - } - - async triggerLogin(params: CustomAuthLoginParams): Promise { - const obj = await super.triggerLogin(params); - - if (obj) { - const { authConnectionId, userId } = obj.userInfo; - this.authConnectionId = authConnectionId; - this.userId = userId; - } - - return obj; - } -} diff --git a/packages/tss/src/tss.ts b/packages/tss/src/tss.ts deleted file mode 100644 index d4d78c88f..000000000 --- a/packages/tss/src/tss.ts +++ /dev/null @@ -1,1019 +0,0 @@ -import { - decrypt, - EllipticCurve, - EllipticPoint, - encrypt, - EncryptedMessage, - KeyDetails, - KeyType, - Point, - ReconstructedKeyResult, - secp256k1, - StringifiedType, - TKeyArgs, - TKeyInitArgs, -} from "@tkey/common-types"; -import { CoreError, TKey } from "@tkey/core"; -import { post } from "@toruslabs/http-helpers"; -import { dotProduct, ecPoint, hexPoint, PointHex, randomSelection, RSSClient } from "@toruslabs/rss-client"; -import { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed, getSecpKeyFromEd25519 } from "@toruslabs/torus.js"; -import BN from "bn.js"; -import { ec as EC } from "elliptic"; -import { keccak256 } from "ethereum-cryptography/keccak"; - -import { TSSTorusServiceProvider } from "."; -import { - CopyRemoteTssParams, - FactorEnc, - IAccountSaltStore, - InitializeNewTSSKeyResult, - IRemoteClientState, - RefreshRemoteTssParams, - RefreshRemoteTssReturnType, -} from "./common"; -import { - generateSalt, - getEd25519SeedStoreDomainKey, - getLagrangeCoeffs, - getPubKeyPoint, - kCombinations, - lagrangeInterpolation, - pointToHex, -} from "./util"; - -export const TSS_MODULE = "tssModule"; -export const TSS_TAG_DEFAULT = "default"; - -export const FACTOR_KEY_TYPE = "secp256k1"; -export const factorKeyCurve = new EC(FACTOR_KEY_TYPE); - -export const LEGACY_KEY_TYPE = "secp256k1"; - -export interface TSSTKeyArgs extends TKeyArgs { - serviceProvider: TSSTorusServiceProvider; - tssKeyType: KeyType; - tssTag?: string; -} - -export interface TKeyTSSInitArgs extends TKeyInitArgs { - deviceTSSShare?: BN; - deviceTSSIndex?: number; - factorPub?: Point; - skipTssInit?: boolean; -} - -export class TKeyTSS extends TKey { - serviceProvider: TSSTorusServiceProvider = null; - - private _tssKeyType: KeyType; - - private _tssCurve: EC; - - private _tssTag: string; - - private _accountSalt: string; - - /** - * Constructs a new TKeyTSS instance using the given parameters. - */ - constructor(args: TSSTKeyArgs) { - super(args); - const { serviceProvider, storageLayer, tssTag = "default", tssKeyType } = args; - - if (serviceProvider.customAuthArgs.keyType !== tssKeyType) { - throw CoreError.default(`service provider keyType mismatch: ${serviceProvider.customAuthArgs.keyType} !== ${tssKeyType}`); - } - - this.serviceProvider = serviceProvider; - this.storageLayer = storageLayer; - this._tssTag = tssTag; - this._tssKeyType = tssKeyType; - this._tssCurve = new EC(tssKeyType); - } - - public get tssTag(): string { - return this._tssTag; - } - - public get tssKeyType(): KeyType { - return this._tssKeyType; - } - - public get tssCurve(): EllipticCurve { - return this._tssCurve; - } - - public set tssTag(tag: string) { - if ((this.metadata.tssKeyTypes[this.tssTag] || LEGACY_KEY_TYPE) !== this.tssKeyType) { - throw CoreError.default(`tssKeyType mismatch: ${this.metadata.tssKeyTypes[this.tssTag]} !== ${this.tssKeyType}`); - } - this._tssTag = tag; - } - - static async fromJSON(value: StringifiedType, args: TSSTKeyArgs): Promise { - const tbTss = new TKeyTSS(args); - const tb = await super.fromJSON(value, args); - - const { tssTag, tssKeyType, accountSalt } = value; - - if (tssTag !== tbTss.tssTag) { - throw CoreError.default(`tssTag mismatch: ${tssTag} !== ${tbTss.tssTag}`); - } - - if (tssKeyType !== tbTss.tssKeyType) { - throw CoreError.default(`tssKeyType mismatch: ${tssKeyType} !== ${tbTss.tssKeyType}`); - } - - // copy over tkey to tkeyTss - tbTss.shares = tb.shares; - tbTss.metadata = tb.metadata; - tbTss.lastFetchedCloudMetadata = tb.lastFetchedCloudMetadata; - tbTss._localMetadataTransitions = tb._localMetadataTransitions; - - // this will be computed during reconstruct tkey - // should we restore here? - tbTss._accountSalt = accountSalt; - tbTss.secp256k1Key = tb.secp256k1Key; - tbTss.ed25519Key = tb.ed25519Key; - - return tbTss; - } - - toJSON(): StringifiedType { - const tbJson = super.toJSON(); - tbJson.tssTag = this.tssTag; - tbJson.tssKeyType = this.tssKeyType; - tbJson.accountSalt = this._accountSalt; - return tbJson; - } - - /** - * Initializes this instance. If a TSS account does not exist, creates one - * under the given factor key. `skipTssInit` skips TSS account creation and - * can be used with `importTssKey` to just import an existing account instead. - * @returns The key details of TKey core. - */ - async initialize(params?: TKeyTSSInitArgs): Promise { - const keyDetails = await super.initialize(params); - - if (!this.metadata.tssPolyCommits[this.tssTag] && !(params?.skipTssInit || params?.neverInitializeNewKey)) { - // if tss shares have not been created for this tssTag, create new tss sharing - const { factorEncs, factorPubs, tssPolyCommits } = await this._initializeNewTSSKey( - this.tssTag, - params.deviceTSSShare, - params.factorPub, - params.deviceTSSIndex - ); - this.metadata.updateTSSData({ tssKeyType: this._tssKeyType, tssTag: this.tssTag, tssNonce: 0, tssPolyCommits, factorPubs, factorEncs }); - const accountSalt = generateSalt(this._tssCurve); - await this._setTKeyStoreItem(TSS_MODULE, { - id: "accountSalt", - value: accountSalt, - } as IAccountSaltStore); - this._accountSalt = accountSalt; - } - - if (this.metadata.tssPolyCommits[this.tssTag] && (this.metadata.tssKeyTypes[this.tssTag] || LEGACY_KEY_TYPE) !== this.tssKeyType) { - throw CoreError.default(`tssKeyType mismatch: ${this.metadata.tssKeyTypes[this.tssTag]} !== ${this.tssKeyType}`); - } - - return keyDetails; - } - - /** - * Returns the encrypted data associated with the given factor public key. - */ - getFactorEncs(factorPub: Point): FactorEnc { - if (!this.metadata) throw CoreError.metadataUndefined(); - if (!this.metadata.factorEncs) throw CoreError.default("no factor encs mapping"); - if (!this.metadata.factorPubs) throw CoreError.default("no factor pubs mapping"); - const factorPubs = this.metadata.factorPubs[this.tssTag]; - if (!factorPubs) throw CoreError.default(`no factor pubs for this tssTag ${this.tssTag}`); - if (factorPubs.filter((f) => f.x.cmp(factorPub.x) === 0 && f.y.cmp(factorPub.y) === 0).length === 0) - throw CoreError.default(`factor pub ${factorPub} not found for tssTag ${this.tssTag}`); - if (!this.metadata.factorEncs[this.tssTag]) throw CoreError.default(`no factor encs for tssTag ${this.tssTag}`); - const factorPubID = factorPub.x.toString(16, 64); - return this.metadata.factorEncs[this.tssTag][factorPubID]; - } - - /** - * Returns the TSS share associated with the given factor private key. - */ - async getTSSShare( - factorKey: BN, - opts?: { - threshold?: number; - accountIndex?: number; - coefficient?: BN; - } - ): Promise<{ - tssIndex: number; - tssShare: BN; - }> { - const factorPub = getPubKeyPoint(factorKey, factorKeyCurve); - const factorEncs = this.getFactorEncs(factorPub); - const { userEnc, serverEncs, tssIndex, type } = factorEncs; - const userDecryption = await decrypt(Buffer.from(factorKey.toString(16, 64), "hex"), userEnc); - const serverDecryptions = await Promise.all( - serverEncs.map((factorEnc) => { - if (factorEnc === null) return null; - return decrypt(Buffer.from(factorKey.toString(16, 64), "hex"), factorEnc); - }) - ); - const tssShareBufs = [userDecryption].concat(serverDecryptions); - - const tssShareBNs = tssShareBufs.map((buf) => { - if (buf === null) return null; - return new BN(buf); - }); - - const ec = this._tssCurve; - const tssCommits = this.getTSSCommits().map((p) => { - return ec.keyFromPublic({ x: p.x.toString(16, 64), y: p.y.toString(16, 64) }).getPublic(); - }); - - const userDec = tssShareBNs[0]; - - const accountIndex = opts?.accountIndex || 0; - const coefficient = opts?.coefficient || new BN(1); - if (type === "direct") { - const tssSharePub = ec.g.mul(userDec); - const tssCommitA0 = tssCommits[0]; - const tssCommitA1 = tssCommits[1]; - const _tssSharePub = tssCommitA0.add(tssCommitA1.mul(new BN(tssIndex))); - if (tssSharePub.eq(_tssSharePub)) { - const adjustedShare = this.adjustTssShare(userDec, accountIndex, coefficient); - return { tssIndex, tssShare: adjustedShare }; - } - throw new Error("user decryption does not match tss commitments..."); - } - - // if type === "hierarchical" - const serverDecs = tssShareBNs.slice(1); // 5 elems - const serverIndexes = new Array(serverDecs.length).fill(null).map((_, i) => i + 1); - - const threshold = opts?.threshold || Math.ceil(serverDecs.length / 2); - const combis = kCombinations(serverDecs.length, threshold); - for (let i = 0; i < combis.length; i++) { - const combi = combis[i]; - const selectedServerDecs = serverDecs.filter((_, j) => combi.indexOf(j) > -1); - if (selectedServerDecs.includes(null)) continue; - - const selectedServerIndexes = serverIndexes.filter((_, j) => combi.indexOf(j) > -1); - const serverLagrangeCoeffs = selectedServerIndexes.map((x) => getLagrangeCoeffs(ec, selectedServerIndexes, x)); - const serverInterpolated = dotProduct(serverLagrangeCoeffs, selectedServerDecs, ec.n); - const lagrangeCoeffs = [getLagrangeCoeffs(ec, [1, 99], 1), getLagrangeCoeffs(ec, [1, 99], 99)]; - const tssShare = dotProduct(lagrangeCoeffs, [serverInterpolated, userDec], ec.n); - const tssSharePub = ec.g.mul(tssShare); - const tssCommitA0 = tssCommits[0]; - const tssCommitA1 = tssCommits[1]; - let _tssSharePub = tssCommitA0; - for (let j = 0; j < tssIndex; j++) { - _tssSharePub = _tssSharePub.add(tssCommitA1); - } - if (tssSharePub.eq(_tssSharePub)) { - const adjustedShare = this.adjustTssShare(tssShare, accountIndex, coefficient); - return { tssIndex, tssShare: adjustedShare }; - } - } - throw new Error("could not find any combination of server decryptions that match tss commitments..."); - } - - /** - * Returns the TSS public key and the curve points corresponding to secret key - * shares, as stored in Metadata. - */ - getTSSCommits(): Point[] { - if (!this.metadata) throw CoreError.metadataUndefined(); - const tssPolyCommits = this.metadata.tssPolyCommits[this.tssTag]; - if (!tssPolyCommits) throw CoreError.default(`tss poly commits not found for tssTag ${this.tssTag}`); - if (tssPolyCommits.length === 0) throw CoreError.default("tss poly commits is empty"); - return tssPolyCommits; - } - - /** - * Returns the TSS public key. - */ - getTSSPub(accountIndex?: number): Point { - const ec = this._tssCurve; - const tssCommits = this.getTSSCommits(); - if (accountIndex && accountIndex > 0) { - // Add account nonce to pub key. - const nonce = this.computeAccountNonce(accountIndex); - const noncePub = ec.keyFromPrivate(nonce.toString("hex")).getPublic(); - const pubKeyPoint = tssCommits[0].toEllipticPoint(ec); - const devicePubKeyPoint = pubKeyPoint.add(noncePub); - return Point.fromElliptic(devicePubKeyPoint); - } - return tssCommits[0]; - } - - /** - * Returns the node details for RSS. - */ - async _getRssNodeDetails(): Promise<{ - serverEndpoints: string[]; - serverPubKeys: PointHex[]; - serverThreshold: number; - }> { - const { serverEndpoints, serverPubKeys, serverThreshold } = await this.serviceProvider.getRSSNodeDetails(); - if (!Array.isArray(serverEndpoints) || serverEndpoints.length === 0) throw new Error("service provider tss server endpoints are missing"); - if (!Array.isArray(serverPubKeys) || serverPubKeys.length === 0) throw new Error("service provider pub keys are missing"); - return { - serverEndpoints, - serverPubKeys, - serverThreshold: serverThreshold || Math.floor(serverEndpoints.length / 2) + 1, - }; - } - - /** - * Imports an existing private key for threshold signing. A corresponding user - * key share will be stored under the specified factor key. - */ - async importTssKey( - params: { - tag: string; - importKey: Buffer; - factorPub: Point; - newTSSIndex: number; - }, - serverOpts: { - selectedServers?: number[]; - authSignatures: string[]; - } - ): Promise { - const ec = this._tssCurve; - if (!this.secp256k1Key) throw CoreError.privateKeyUnavailable(); - if (!this.metadata) { - throw CoreError.metadataUndefined(); - } - const { importKey, factorPub, newTSSIndex, tag } = params; - - const oldTag = this.tssTag; - this._tssTag = tag; - - try { - const { selectedServers = [], authSignatures = [] } = serverOpts || {}; - - if (!tag) throw CoreError.default(`invalid param, tag is required`); - if (!factorPub) throw CoreError.default(`invalid param, newFactorPub is required`); - if (!newTSSIndex) throw CoreError.default(`invalid param, newTSSIndex is required`); - if (authSignatures.length === 0) throw CoreError.default(`invalid param, authSignatures is required`); - - const existingFactorPubs = this.metadata.factorPubs[tag]; - if (existingFactorPubs?.length > 0) { - throw CoreError.default(`Duplicate account tag, please use a unique tag for importing key`); - } - const factorPubs = [factorPub]; - - const importScalar = await (async () => { - if (this._tssKeyType === KeyType.secp256k1) { - return new BN(importKey); - } else if (this._tssKeyType === KeyType.ed25519) { - // Store seed in metadata. - const domainKey = getEd25519SeedStoreDomainKey(this.tssTag || TSS_TAG_DEFAULT); - const result = this.metadata.getGeneralStoreDomain(domainKey) as Record; - if (result) { - throw new Error("Seed already exists"); - } - - const { scalar } = getEd25519KeyPairFromSeed(importKey); - const encKey = Buffer.from(getSecpKeyFromEd25519(scalar).point.encodeCompressed("hex"), "hex"); - const msg = await encrypt(encKey, importKey); - this.metadata.setGeneralStoreDomain(domainKey, { message: msg }); - - return scalar; - } - throw new Error("Invalid key type"); - })(); - - if (!importScalar || importScalar.eq(new BN("0"))) { - throw new Error("Invalid importedKey"); - } - - const tssIndexes = [newTSSIndex]; - const existingNonce = this.metadata.tssNonces[this.tssTag]; - const newTssNonce: number = existingNonce && existingNonce > 0 ? existingNonce + 1 : 0; - const verifierAndVerifierID = this.serviceProvider.getVerifierNameVerifierId(); - const label = `${verifierAndVerifierID}\u0015${this.tssTag}\u0016${newTssNonce}`; - const tssPubKey = hexPoint(ec.g.mul(importScalar)); - const rssNodeDetails = await this._getRssNodeDetails(); - const { pubKey: newTSSServerPub, nodeIndexes } = await this.serviceProvider.getTSSPubKey(this.tssTag, newTssNonce); - let finalSelectedServers = selectedServers; - - if (nodeIndexes?.length > 0) { - if (selectedServers.length) { - finalSelectedServers = nodeIndexes.slice(0, Math.min(selectedServers.length, nodeIndexes.length)); - } else { - finalSelectedServers = nodeIndexes.slice(0, 3); - } - } else if (selectedServers?.length === 0) { - finalSelectedServers = randomSelection( - new Array(rssNodeDetails.serverEndpoints.length).fill(null).map((_, i) => i + 1), - Math.ceil(rssNodeDetails.serverEndpoints.length / 2) - ); - } - - const { serverEndpoints, serverPubKeys, serverThreshold } = rssNodeDetails; - - const rssClient = new RSSClient({ - serverEndpoints, - serverPubKeys, - serverThreshold, - tssPubKey, - keyType: this._tssKeyType, - }); - - const refreshResponses = await rssClient.import({ - importKey: importScalar, - dkgNewPub: pointToHex(newTSSServerPub), - selectedServers: finalSelectedServers, - factorPubs: factorPubs.map((f) => pointToHex(f)), - targetIndexes: tssIndexes, - newLabel: label, - sigs: authSignatures, - }); - const secondCommit = newTSSServerPub.toEllipticPoint(ec).add(ecPoint(ec, tssPubKey).neg()); - const newTSSCommits = [ - Point.fromJSON(tssPubKey), - Point.fromJSON({ x: secondCommit.getX().toString(16, 64), y: secondCommit.getY().toString(16, 64) }), - ]; - const factorEncs: { - [factorPubID: string]: FactorEnc; - } = {}; - for (let i = 0; i < refreshResponses.length; i++) { - const refreshResponse = refreshResponses[i]; - factorEncs[refreshResponse.factorPub.x.padStart(64, "0")] = { - type: "hierarchical", - tssIndex: refreshResponse.targetIndex, - userEnc: refreshResponse.userFactorEnc, - serverEncs: refreshResponse.serverFactorEncs, - }; - } - this.metadata.updateTSSData({ - tssKeyType: this._tssKeyType, - tssTag: this.tssTag, - tssNonce: newTssNonce, - tssPolyCommits: newTSSCommits, - factorPubs, - factorEncs, - }); - if (!this._accountSalt) { - const accountSalt = generateSalt(this._tssCurve); - await this._setTKeyStoreItem(TSS_MODULE, { - id: "accountSalt", - value: accountSalt, - } as IAccountSaltStore); - this._accountSalt = accountSalt; - } - await this._syncShareMetadata(); - } catch (error) { - this._tssTag = oldTag; - throw error; - } - } - - /** - * UNSAFE: USE WITH CAUTION - * - * Reconstructs and exports the TSS private key. - */ - async _UNSAFE_exportTssKey(tssOptions: { - factorKey: BN; - selectedServers?: number[]; - authSignatures: string[]; - accountIndex?: number; - }): Promise { - if (!this.metadata) throw CoreError.metadataUndefined("metadata is undefined"); - if (!this.secp256k1Key) throw new Error("Tkey is not reconstructed"); - if (!this.metadata.tssPolyCommits[this.tssTag]) throw new Error(`tss key has not been initialized for tssTag ${this.tssTag}`); - - const { factorKey, selectedServers, authSignatures, accountIndex } = tssOptions; - - const { tssIndex } = await this.getTSSShare(factorKey); - // Assumption that there are only index 2 and 3 for tss shares - // create complement index share - const tempShareIndex = tssIndex === 2 ? 3 : 2; - const tempFactorKey = factorKeyCurve.genKeyPair().getPrivate(); - const tempFactorPub = getPubKeyPoint(tempFactorKey, factorKeyCurve); - - await this.addFactorPub({ - existingFactorKey: factorKey, - newFactorPub: tempFactorPub, - newTSSIndex: tempShareIndex, - authSignatures, - selectedServers, - refreshShares: true, - }); - - const { tssShare: factorShare, tssIndex: factorIndex } = await this.getTSSShare(factorKey); - const { tssShare: tempShare, tssIndex: tempIndex } = await this.getTSSShare(tempFactorKey); - - // reconstruct final key using sss - const ec = this._tssCurve; - const tssKey = lagrangeInterpolation(ec, [tempShare, factorShare], [new BN(tempIndex), new BN(factorIndex)]); - - // delete created tss share - await this.deleteFactorPub({ - factorKey, - deleteFactorPub: tempFactorPub, - authSignatures, - selectedServers, - }); - - // Derive key for account index. - const nonce = this.computeAccountNonce(accountIndex); - const derivedKey = tssKey.add(nonce).umod(this._tssCurve.n); - - return derivedKey; - } - - /** - * UNSAFE: USE WITH CAUTION - * - * Reconstructs the TSS private key and exports the ed25519 private key seed. - */ - async _UNSAFE_exportTssEd25519Seed(tssOptions: { factorKey: BN; selectedServers?: number[]; authSignatures: string[] }): Promise { - const edScalar = await this._UNSAFE_exportTssKey(tssOptions); - - // Try to export ed25519 seed. This is only available if import key was being used. - const domainKey = getEd25519SeedStoreDomainKey(this.tssTag || TSS_TAG_DEFAULT); - const result = this.metadata.getGeneralStoreDomain(domainKey) as Record; - - const decKey = getSecpKeyFromEd25519(edScalar).scalar; - - const seed = await decrypt(decKey.toArrayLike(Buffer, "be", 32), result.message); - return seed; - } - - // remote signer function - - /** - * Refreshes TSS shares. Allows to change number of shares. New user shares are - * only produced for the target indices. - * @param factorPubs - Factor pub keys after refresh. - * @param tssIndices - Target tss indices to generate new shares for. - * @param remoteFactorPub - Factor Pub for remote share. - * @param signatures - Signatures for authentication against RSS servers. - */ - async remoteRefreshTssShares(params: { factorPubs: Point[]; tssIndices: number[]; remoteClient: IRemoteClientState }) { - const { factorPubs, tssIndices, remoteClient } = params; - const rssNodeDetails = await this._getRssNodeDetails(); - const { serverEndpoints, serverPubKeys, serverThreshold } = rssNodeDetails; - let finalSelectedServers = randomSelection( - new Array(rssNodeDetails.serverEndpoints.length).fill(null).map((_, i) => i + 1), - Math.ceil(rssNodeDetails.serverEndpoints.length / 2) - ); - - const verifierNameVerifierId = this.serviceProvider.getVerifierNameVerifierId(); - - const tssCommits = this.metadata.tssPolyCommits[this.tssTag]; - const tssNonce: number = this.metadata.tssNonces[this.tssTag] || 0; - const { pubKey: newTSSServerPub, nodeIndexes } = await this.serviceProvider.getTSSPubKey(this.tssTag, tssNonce + 1); - // move to pre-refresh - if (nodeIndexes?.length > 0) { - finalSelectedServers = nodeIndexes.slice(0, Math.min(serverEndpoints.length, nodeIndexes.length)); - } - - const factorEnc = this.getFactorEncs(Point.fromSEC1(secp256k1, remoteClient.remoteFactorPub)); - - const dataRequired: RefreshRemoteTssParams = { - factorEnc, - factorPubs: factorPubs.map((pub) => pub.toPointHex()), - targetIndexes: tssIndices, - verifierNameVerifierId, - tssTag: this.tssTag, - tssCommits: tssCommits.map((commit) => commit.toPointHex()), - tssNonce, - newTSSServerPub: newTSSServerPub.toPointHex(), - serverOpts: { - selectedServers: finalSelectedServers, - serverEndpoints, - serverPubKeys, - serverThreshold, - authSignatures: remoteClient.signatures, - }, - curve: this.tssKeyType, - }; - - const result = ( - await post<{ data: RefreshRemoteTssReturnType }>( - `${remoteClient.remoteClientUrl}/api/v3/mpc/refresh_tss`, - { dataRequired }, - { - headers: { - Authorization: `Bearer ${remoteClient.remoteClientToken}`, - }, - } - ) - ).data; - - this.metadata.updateTSSData({ - tssTag: result.tssTag, - tssNonce: result.tssNonce, - tssPolyCommits: result.tssPolyCommits.map((commit) => Point.fromJSON(commit)), - factorPubs: result.factorPubs.map((pub) => Point.fromJSON(pub)), - factorEncs: result.factorEncs, - }); - } - - async remoteAddFactorPub(params: { newFactorPub: Point; newFactorTSSIndex: number; remoteClient: IRemoteClientState }) { - const { newFactorPub, newFactorTSSIndex, remoteClient } = params; - const existingFactorPubs = this.metadata.factorPubs[this.tssTag]; - const updatedFactorPubs = existingFactorPubs.concat([newFactorPub]); - const existingTSSIndexes = existingFactorPubs.map((fb) => this.getFactorEncs(fb).tssIndex); - const updatedTSSIndexes = existingTSSIndexes.concat([newFactorTSSIndex]); - - await this.remoteRefreshTssShares({ - factorPubs: updatedFactorPubs, - tssIndices: updatedTSSIndexes, - remoteClient, - }); - } - - async remoteDeleteFactorPub(params: { factorPubToDelete: Point; remoteClient: IRemoteClientState }) { - const { factorPubToDelete, remoteClient } = params; - const existingFactorPubs = this.metadata.factorPubs[this.tssTag]; - const factorIndex = existingFactorPubs.findIndex((p) => p.x.eq(factorPubToDelete.x)); - if (factorIndex === -1) { - throw new Error(`factorPub ${factorPubToDelete} does not exist`); - } - const updatedFactorPubs = existingFactorPubs.slice(); - updatedFactorPubs.splice(factorIndex, 1); - const updatedTSSIndexes = updatedFactorPubs.map((fb) => this.getFactorEncs(fb).tssIndex); - - await this.remoteRefreshTssShares({ - factorPubs: updatedFactorPubs, - tssIndices: updatedTSSIndexes, - remoteClient, - }); - } - - async remoteCopyFactorPub(params: { newFactorPub: Point; tssIndex: number; remoteClient: IRemoteClientState }) { - const { newFactorPub, tssIndex, remoteClient } = params; - const remoteFactorPub = Point.fromSEC1(secp256k1, remoteClient.remoteFactorPub); - const factorEnc = this.getFactorEncs(remoteFactorPub); - const tssCommits = this.getTSSCommits().map((commit) => commit.toPointHex()); - const dataRequired: CopyRemoteTssParams = { - factorEnc, - tssCommits, - factorPub: newFactorPub.toPointHex(), - curve: this.tssKeyType, - }; - - const result = ( - await post<{ data?: EncryptedMessage }>( - `${remoteClient.remoteClientUrl}/api/v3/mpc/copy_tss_share`, - { dataRequired }, - { - headers: { - Authorization: `Bearer ${remoteClient.remoteClientToken}`, - }, - } - ) - ).data; - - const updatedFactorPubs = this.metadata.factorPubs[this.tssTag].concat([newFactorPub]); - const factorEncs: { [key: string]: FactorEnc } = JSON.parse(JSON.stringify(this.metadata.factorEncs[this.tssTag])); - const factorPubID = newFactorPub.x.toString(16, 64); - factorEncs[factorPubID] = { - tssIndex, - type: "direct", - userEnc: result, - serverEncs: [], - }; - this.metadata.updateTSSData({ - tssTag: this.tssTag, - factorPubs: updatedFactorPubs, - factorEncs, - }); - } - - /** - * Runs the share refresh protocol for the TSS key shares. - * @param inputShare - The current user secret share. - * @param inputIndex - The user share index. - * @param factorPubs - The target factor keys. - * @param targetIndexes - The target indices to provide new shares for. - */ - async _refreshTSSShares( - updateMetadata: boolean, - inputShare: BN, - inputIndex: number, - factorPubs: Point[], - targetIndexes: number[], - verifierNameVerifierId: string, - serverOpts: { - serverEndpoints: string[]; - serverPubKeys: PointHex[]; - serverThreshold: number; - selectedServers: number[]; - authSignatures: string[]; - } - ): Promise { - if (!this.metadata) throw CoreError.metadataUndefined(); - if (!this.metadata.tssPolyCommits) throw CoreError.default(`tss poly commits obj not found`); - const tssCommits = this.metadata.tssPolyCommits[this.tssTag]; - if (!tssCommits) throw CoreError.default(`tss commits not found for tssTag ${this.tssTag}`); - if (tssCommits.length === 0) throw CoreError.default(`tssCommits is empty`); - const tssPubKeyPoint = tssCommits[0]; - const tssPubKey = pointToHex(tssPubKeyPoint); - const { serverEndpoints, serverPubKeys, serverThreshold, selectedServers, authSignatures } = serverOpts; - - const rssClient = new RSSClient({ - serverEndpoints, - serverPubKeys, - serverThreshold, - tssPubKey, - keyType: this._tssKeyType, - }); - - if (!this.metadata.factorPubs) throw CoreError.default(`factorPubs obj not found`); - if (!factorPubs) throw CoreError.default(`factorPubs not found for tssTag ${this.tssTag}`); - if (factorPubs.length === 0) throw CoreError.default(`factorPubs is empty`); - - if (!this.metadata.tssNonces) throw CoreError.default(`tssNonces obj not found`); - const tssNonce: number = this.metadata.tssNonces[this.tssTag] || 0; - - const oldLabel = `${verifierNameVerifierId}\u0015${this.tssTag}\u0016${tssNonce}`; - const newLabel = `${verifierNameVerifierId}\u0015${this.tssTag}\u0016${tssNonce + 1}`; - - const { pubKey: newTSSServerPub, nodeIndexes } = await this.serviceProvider.getTSSPubKey(this.tssTag, tssNonce + 1); - let finalSelectedServers = selectedServers; - - if (nodeIndexes?.length > 0) { - finalSelectedServers = nodeIndexes.slice(0, Math.min(selectedServers.length, nodeIndexes.length)); - } - const refreshResponses = await rssClient.refresh({ - factorPubs: factorPubs.map((f) => pointToHex(f)), - targetIndexes, - oldLabel, - newLabel, - sigs: authSignatures, - dkgNewPub: pointToHex(newTSSServerPub), - inputShare, - inputIndex, - selectedServers: finalSelectedServers, - }); - - const secondCommit = newTSSServerPub.toEllipticPoint(this._tssCurve).add(ecPoint(this._tssCurve, tssPubKey).neg()); - const newTSSCommits = [ - Point.fromJSON(tssPubKey), - Point.fromJSON({ x: secondCommit.getX().toString(16, 64), y: secondCommit.getY().toString(16, 64) }), - ]; - const factorEncs: { - [factorPubID: string]: FactorEnc; - } = {}; - for (let i = 0; i < refreshResponses.length; i++) { - const refreshResponse = refreshResponses[i]; - factorEncs[refreshResponse.factorPub.x.padStart(64, "0")] = { - type: "hierarchical", - tssIndex: refreshResponse.targetIndex, - userEnc: refreshResponse.userFactorEnc, - serverEncs: refreshResponse.serverFactorEncs, - }; - } - - this.metadata.updateTSSData({ - tssKeyType: this._tssKeyType, - tssTag: this.tssTag, - tssNonce: tssNonce + 1, - tssPolyCommits: newTSSCommits, - factorPubs, - factorEncs, - }); - if (updateMetadata) await this._syncShareMetadata(); - } - - /** - * Derives the account nonce for the specified account index. - */ - computeAccountNonce(index?: number): BN { - if (!index || index === 0) { - return new BN(0); - } - - if (this._tssKeyType === KeyType.ed25519) { - throw new Error("account index not supported with ed25519"); - } - - // generation should occur during tkey.init, fails if accountSalt is absent - if (!this._accountSalt) { - throw Error("account salt undefined"); - } - let accountHash = keccak256(Buffer.from(`${index}${this._accountSalt}`)); - if (accountHash.length === 66) accountHash = accountHash.slice(2); - return new BN(accountHash, "hex").umod(this._tssCurve.n); - } - - /** - * Reconstructs the TKey and finalize intialization. - */ - async reconstructKey(_reconstructKeyMiddleware?: boolean): Promise { - const k = await super.reconstructKey(_reconstructKeyMiddleware); - - const accountSalt = (await this.getTKeyStoreItem(TSS_MODULE, "accountSalt")) as IAccountSaltStore; - if (accountSalt && accountSalt.value) { - this._accountSalt = accountSalt.value; - } else { - const newSalt = generateSalt(this._tssCurve); - await this._setTKeyStoreItem(TSS_MODULE, { - id: "accountSalt", - value: newSalt, - } as IAccountSaltStore); - this._accountSalt = newSalt; - // this is very specific case where exisiting user do not have salt. - // sync metadata to cloud to ensure salt is stored incase of manual sync mode - // new user or importKey should not hit this cases - // NOTE this is not mistake, we force sync for this case - if (this.manualSync) await this.syncLocalMetadataTransitions(); - } - - return k; - } - - /** - * Adds a factor key to the set of authorized keys. - * - * `refreshShares` - If this is true, then refresh the shares. If this is - * false, `newTSSIndex` must be the same as current factor key index. - */ - public async addFactorPub(args: { - existingFactorKey: BN; - newFactorPub: Point; - newTSSIndex: number; - selectedServers?: number[]; - authSignatures: string[]; - refreshShares?: boolean; - updateMetadata?: boolean; - }) { - if (!this.metadata) throw CoreError.metadataUndefined("metadata is undefined"); - if (!this.secp256k1Key) throw new Error("Tkey is not reconstructed"); - if (!this.metadata.tssPolyCommits[this.tssTag]) throw new Error(`tss key has not been initialized for tssTag ${this.tssTag}`); - const { existingFactorKey, newFactorPub, newTSSIndex, selectedServers, authSignatures, refreshShares } = args; - - const { tssShare, tssIndex } = await this.getTSSShare(existingFactorKey); - - if (tssIndex !== newTSSIndex && !refreshShares) { - throw CoreError.default("newTSSIndex does not match existing tssIndex, set refreshShares to true to refresh shares"); - } - - if (!refreshShares) { - // Just copy data stored under factor key. - if (tssIndex !== newTSSIndex) { - throw CoreError.default("newTSSIndex does not match existing tssIndex, set refreshShares to true to refresh shares"); - } - - const updatedFactorPubs = this.metadata.factorPubs[this.tssTag].concat([newFactorPub]); - const factorEncs = JSON.parse(JSON.stringify(this.metadata.factorEncs[this.tssTag])); - const factorPubID = newFactorPub.x.toString(16, 64); - factorEncs[factorPubID] = { - tssIndex, - type: "direct", - userEnc: await encrypt(newFactorPub.toSEC1(secp256k1, false), tssShare.toArrayLike(Buffer, "be", 32)), - serverEncs: [], - }; - this.metadata.updateTSSData({ - tssKeyType: this.tssKeyType, - tssTag: this.tssTag, - factorPubs: updatedFactorPubs, - factorEncs, - }); - } else { - // Use RSS to create new TSS share and store it under new factor key. - const existingFactorPubs = this.metadata.factorPubs[this.tssTag]; - const updatedFactorPubs = existingFactorPubs.concat([newFactorPub]); - - const verifierId = this.serviceProvider.getVerifierNameVerifierId(); - const rssNodeDetails = await this._getRssNodeDetails(); - const randomSelectedServers = randomSelection( - new Array(rssNodeDetails.serverEndpoints.length).fill(null).map((_, i) => i + 1), - Math.ceil(rssNodeDetails.serverEndpoints.length / 2) - ); - - const finalServer = selectedServers || randomSelectedServers; - - const existingTSSIndexes = existingFactorPubs.map((fb) => this.getFactorEncs(fb).tssIndex); - const updatedTSSIndexes = existingTSSIndexes.concat([newTSSIndex]); - - // sync metadata by default - // create a localMetadataTransition if manual sync - const updateMetadata = args.updateMetadata !== undefined ? args.updateMetadata : true; - - await this._refreshTSSShares(updateMetadata, tssShare, tssIndex, updatedFactorPubs, updatedTSSIndexes, verifierId, { - ...rssNodeDetails, - selectedServers: finalServer, - authSignatures, - }); - } - } - - /** - * Removes a factor key from the set of authorized keys and refreshes the TSS - * key shares. - */ - public async deleteFactorPub(args: { - factorKey: BN; - deleteFactorPub: Point; - selectedServers?: number[]; - authSignatures: string[]; - updateMetadata?: boolean; - }): Promise { - if (!this.metadata) throw CoreError.metadataUndefined("metadata is undefined"); - if (!this.secp256k1Key) throw new Error("Tkey is not reconstructed"); - if (!this.metadata.tssPolyCommits[this.tssTag]) throw new Error(`tss key has not been initialized for tssTag ${this.tssTag}`); - const { factorKey, deleteFactorPub, selectedServers, authSignatures } = args; - const existingFactorPubs = this.metadata.factorPubs[this.tssTag]; - const { tssShare, tssIndex } = await this.getTSSShare(factorKey); - - const found = existingFactorPubs.filter((f) => f.x.eq(deleteFactorPub.x) && f.y.eq(deleteFactorPub.y)); - if (found.length === 0) throw CoreError.default("could not find factorPub to delete"); - if (found.length > 1) throw CoreError.default("found two or more factorPubs that match, error in metadata"); - const updatedFactorPubs = existingFactorPubs.filter((f) => !f.x.eq(deleteFactorPub.x) || !f.y.eq(deleteFactorPub.y)); - this.metadata.updateTSSData({ tssKeyType: this._tssKeyType, tssTag: this.tssTag, factorPubs: updatedFactorPubs }); - const rssNodeDetails = await this._getRssNodeDetails(); - const randomSelectedServers = randomSelection( - new Array(rssNodeDetails.serverEndpoints.length).fill(null).map((_, i) => i + 1), - Math.ceil(rssNodeDetails.serverEndpoints.length / 2) - ); - - const finalServer = selectedServers || randomSelectedServers; - const updatedTSSIndexes = updatedFactorPubs.map((fb) => this.getFactorEncs(fb).tssIndex); - - const updateMetadata = args.updateMetadata !== undefined ? args.updateMetadata : true; - - await this._refreshTSSShares( - updateMetadata, - tssShare, - tssIndex, - updatedFactorPubs, - updatedTSSIndexes, - this.serviceProvider.getVerifierNameVerifierId(), - { - ...rssNodeDetails, - selectedServers: finalServer, - authSignatures, - } - ); - } - - /** - * Adjusts a TSS key share based on account index and share coefficient. - */ - protected adjustTssShare(share: BN, accountIndex: number, coefficient: BN): BN { - const nonce = this.computeAccountNonce(accountIndex); - return share.mul(coefficient).add(nonce).umod(this._tssCurve.n); - } - - /** - * Initializes a new TSS key under the specified factor key and using the - * provided user share. - */ - protected async _initializeNewTSSKey( - tssTag: string, - deviceTSSShare: BN, - factorPub: Point, - deviceTSSIndex?: number - ): Promise { - const ec = this._tssCurve; - let tss2: BN; - const _tssIndex = deviceTSSIndex || 2; // TODO: fix - if (deviceTSSShare) { - tss2 = deviceTSSShare; - } else { - tss2 = this._tssCurve.genKeyPair().getPrivate(); - } - const { pubKey: tss1Pub } = await this.serviceProvider.getTSSPubKey(tssTag, 0); - const tss1PubKey = tss1Pub.toEllipticPoint(ec); - const tss2PubKey = (this._tssCurve.g as EllipticPoint).mul(tss2); - - const L1_0 = getLagrangeCoeffs(ec, [1, _tssIndex], 1, 0); - - const LIndex_0 = getLagrangeCoeffs(ec, [1, _tssIndex], _tssIndex, 0); - - const a0Pub = tss1PubKey.mul(L1_0).add(tss2PubKey.mul(LIndex_0)); - const a1Pub = tss1PubKey.add(a0Pub.neg()); - - const tssPolyCommits = [Point.fromElliptic(a0Pub), Point.fromElliptic(a1Pub)]; - const factorPubs = [factorPub]; - const factorEncs: { [factorPubID: string]: FactorEnc } = {}; - - for (let i = 0; i < factorPubs.length; i++) { - const f = factorPubs[i]; - const factorPubID = f.x.toString(16, 64); - factorEncs[factorPubID] = { - tssIndex: _tssIndex, - type: "direct", - userEnc: await encrypt(f.toSEC1(factorKeyCurve, false), Buffer.from(tss2.toString(16, 64), "hex")), - serverEncs: [], - }; - } - - return { - tss2, - factorEncs, - factorPubs, - tssPolyCommits, - }; - } -} diff --git a/packages/tss/src/util.ts b/packages/tss/src/util.ts deleted file mode 100644 index 856bac4d0..000000000 --- a/packages/tss/src/util.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { EllipticCurve, EllipticPoint, Point } from "@tkey/common-types"; -import { PointHex } from "@toruslabs/rss-client"; -import BN from "bn.js"; - -export const kCombinations = (s: number | number[], k: number): number[][] => { - let set = s; - if (typeof set === "number") { - set = Array.from({ length: set }, (_, i) => i); - } - if (k > set.length || k <= 0) { - return []; - } - - if (k === set.length) { - return [set]; - } - - if (k === 1) { - return set.reduce((acc, cur) => [...acc, [cur]], [] as number[][]); - } - - const combs: number[][] = []; - let tailCombs: number[][] = []; - - for (let i = 0; i <= set.length - k + 1; i += 1) { - tailCombs = kCombinations(set.slice(i + 1), k - 1); - for (let j = 0; j < tailCombs.length; j += 1) { - combs.push([set[i], ...tailCombs[j]]); - } - } - - return combs; -}; - -export function generateSalt(ec: EllipticCurve) { - return ec.genKeyPair().getPrivate().toString("hex", 64); -} - -export function getLagrangeCoeffs(ecCurve: EllipticCurve, _allIndexes: number[] | BN[], _myIndex: number | BN, _target: number | BN = 0) { - const allIndexes: BN[] = _allIndexes.map((i) => new BN(i)); - const myIndex: BN = new BN(_myIndex); - const target: BN = new BN(_target); - let upper = new BN(1); - let lower = new BN(1); - for (let j = 0; j < allIndexes.length; j += 1) { - if (myIndex.cmp(allIndexes[j]) !== 0) { - let tempUpper = target.sub(allIndexes[j]); - tempUpper = tempUpper.umod(ecCurve.curve.n); - upper = upper.mul(tempUpper); - upper = upper.umod(ecCurve.curve.n); - let tempLower = myIndex.sub(allIndexes[j]); - tempLower = tempLower.umod(ecCurve.curve.n); - lower = lower.mul(tempLower).umod(ecCurve.curve.n); - } - } - return upper.mul(lower.invm(ecCurve.curve.n)).umod(ecCurve.curve.n); -} - -export function lagrangeInterpolation(ecCurve: EllipticCurve, shares: BN[], nodeIndex: BN[]) { - if (shares.length !== nodeIndex.length) { - return null; - } - let secret = new BN(0); - for (let i = 0; i < shares.length; i += 1) { - let upper = new BN(1); - let lower = new BN(1); - for (let j = 0; j < shares.length; j += 1) { - if (i !== j) { - upper = upper.mul(nodeIndex[j].neg()); - upper = upper.umod(ecCurve.curve.n); - let temp = nodeIndex[i].sub(nodeIndex[j]); - temp = temp.umod(ecCurve.curve.n); - lower = lower.mul(temp).umod(ecCurve.curve.n); - } - } - let delta = upper.mul(lower.invm(ecCurve.curve.n)).umod(ecCurve.curve.n); - delta = delta.mul(shares[i]).umod(ecCurve.curve.n); - secret = secret.add(delta); - } - return secret.umod(ecCurve.curve.n); -} - -export function pointToHex(p: Point): PointHex { - return { x: p.x.toString(16, 64), y: p.y.toString(16, 64) }; -} - -export function getPubKeyPoint(s: BN, ec: EllipticCurve): Point { - const p = (ec.g as EllipticPoint).mul(s); - return Point.fromElliptic(p); -} - -export const DELIMITERS = { - Delimiter1: "\u001c", - Delimiter2: "\u0015", - Delimiter3: "\u0016", - Delimiter4: "\u0017", -}; - -export function getExtendedVerifierId(verifierId: string, tssTag: string, tssNonce: number): string { - return `${verifierId}${DELIMITERS.Delimiter2}${tssTag}${DELIMITERS.Delimiter3}${tssNonce}`; -} - -export function getEd25519SeedStoreDomainKey(tssTag?: string): string { - return tssTag ? `ed25519Seed/${tssTag}` : "ed25519Seed"; -} diff --git a/packages/tss/test/.eslintrc.json b/packages/tss/test/.eslintrc.json deleted file mode 100644 index 5a0565b8c..000000000 --- a/packages/tss/test/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "import/no-extraneous-dependencies": ["error", { "devDependencies": true }] - } -} diff --git a/packages/tss/test/helpers.ts b/packages/tss/test/helpers.ts deleted file mode 100644 index 600704d95..000000000 --- a/packages/tss/test/helpers.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { IStorageLayer, KeyType } from "@tkey/common-types"; -import { MockStorageLayer, TorusStorageLayer } from "@tkey/storage-layer-torus"; -import { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed, getKeyCurve, Torus } from "@toruslabs/torus.js"; -import BN from "bn.js"; -import { KJUR } from "jsrsasign"; - -import { TSSTorusServiceProvider } from "../src"; - -const { METADATA } = process.env; - -export function initStorageLayer(): IStorageLayer { - return METADATA === "mocked" ? new MockStorageLayer() : new TorusStorageLayer({ hostUrl: METADATA }); -} - -function generateIdToken(email: string): string { - const privKey = `-----BEGIN PRIVATE KEY-----\nMEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCCD7oLrcKae+jVZPGx52Cb/lKhdKxpXjl9eGNa1MlY57A==\n-----END PRIVATE KEY-----`; - const alg = "ES256"; - const iat = Math.floor(Date.now() / 1000); - const payload = { - iss: "torus-key-test", - aud: "torus-key-test", - name: email, - email, - scope: "email", - iat, - eat: iat + 120, - }; - - const options = { - expiresIn: "120", - algorithm: alg, - }; - - const header = { alg, typ: "JWT" }; - - const token = KJUR.jws.JWS.sign(alg, header, payload, privKey, options); - - return token; -} - -export async function fetchPostboxKeyAndSigs(opts: { serviceProvider: TSSTorusServiceProvider; authConnectionId: string; userId: string }) { - const { serviceProvider, authConnectionId: verifier, userId: verifierId } = opts; - - const nodeDetails = await serviceProvider.customAuthInstance.nodeDetailManager.getNodeDetails({ verifier, verifierId }); - const token = generateIdToken(verifierId); - - const tKey = await serviceProvider.customAuthInstance.torus.retrieveShares({ - endpoints: nodeDetails.torusNodeEndpoints, - indexes: nodeDetails.torusIndexes, - verifier, - verifierParams: { verifier_id: verifierId }, - idToken: token, - nodePubkeys: nodeDetails.torusNodePub, - }); - - const signatures = tKey.sessionData.sessionTokenData.map((session) => JSON.stringify({ data: session.token, sig: session.signature })); - - const localPrivKey = Torus.getPostboxKey(tKey); - return { - signatures, - postboxkey: new BN(localPrivKey, "hex"), - }; -} - -// This function is only for testing and will return tss shares only for test verifiers. -export async function assignTssDkgKeys(opts: { - serviceProvider: TSSTorusServiceProvider; - authConnectionId: string; - userId: string; - maxTSSNonceToSimulate: number; - tssTag?: string; -}) { - const { serviceProvider, authConnectionId: verifier, userId: verifierId } = opts; - - let { tssTag, maxTSSNonceToSimulate } = opts; - tssTag = tssTag || "default"; - maxTSSNonceToSimulate = maxTSSNonceToSimulate || 1; - // set tssShares on servers - const serverDKGPrivKeys = []; - // const serverDKGPubKeys = []; - - for (let j = 0; j < maxTSSNonceToSimulate; j++) { - const token = generateIdToken(verifierId); - const extendedVerifierId = `${verifierId}\u0015${tssTag}\u0016${j}`; - - const nodeDetails = await serviceProvider.customAuthInstance.nodeDetailManager.getNodeDetails({ verifier, verifierId }); - - const tKey = await serviceProvider.customAuthInstance.torus.retrieveShares({ - endpoints: nodeDetails.torusNodeEndpoints, - indexes: nodeDetails.torusIndexes, - verifier, - verifierParams: { verifier_id: verifierId, extended_verifier_id: extendedVerifierId }, - idToken: token, - nodePubkeys: nodeDetails.torusNodePub, - }); - const localPrivKey = tKey.oAuthKeyData.privKey; - - serverDKGPrivKeys.push(new BN(localPrivKey, "hex")); - } - - return { - serverDKGPrivKeys, - }; -} - -export function generateKey(keyType: KeyType): { - raw: Buffer; - scalar: BN; -} { - if (keyType === KeyType.secp256k1) { - const scalar = getKeyCurve(keyType).genKeyPair().getPrivate(); - return { - raw: scalar.toArrayLike(Buffer, "be", 32), - scalar, - }; - } else if (keyType === KeyType.ed25519) { - const buf = new Uint32Array(32); - crypto.getRandomValues(buf); - const raw = Buffer.from(buf); - const { scalar } = getEd25519KeyPairFromSeed(raw); - return { - raw, - scalar, - }; - } - throw new Error("unsupported key type"); -} diff --git a/packages/tss/test/tsconfig.json b/packages/tss/test/tsconfig.json deleted file mode 100644 index 6cbe45027..000000000 --- a/packages/tss/test/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "module": "CommonJS", - "moduleResolution": "Node", - } -} \ No newline at end of file diff --git a/packages/tss/test/tss.ts b/packages/tss/test/tss.ts deleted file mode 100644 index f17ad6f11..000000000 --- a/packages/tss/test/tss.ts +++ /dev/null @@ -1,659 +0,0 @@ -import { EllipticPoint, KeyType, Point } from "@tkey/common-types"; -import assert, { equal, fail, rejects } from "assert"; -import BN from "bn.js"; -import { ec as EC } from "elliptic"; - -import { TKeyTSS as ThresholdKey, TKeyTSS, TSSTorusServiceProvider } from "../src"; -import { factorKeyCurve } from "../src/tss"; -import { getLagrangeCoeffs } from "../src/util"; -import { assignTssDkgKeys, fetchPostboxKeyAndSigs, generateKey, initStorageLayer } from "./helpers"; - -const TEST_KEY_TYPES = [KeyType.secp256k1, KeyType.ed25519]; - -TEST_KEY_TYPES.forEach((TSS_KEY_TYPE) => { - const ecFactor = factorKeyCurve; - const ecTSS = new EC(TSS_KEY_TYPE); - - const torusSP = new TSSTorusServiceProvider({ - customAuthArgs: { - network: "sapphire_devnet", - web3AuthClientId: "YOUR_CLIENT_ID", - baseUrl: "http://localhost:3000", - keyType: TSS_KEY_TYPE, - }, - }); - - const torusSL = initStorageLayer(); - - const manualSync = true; - - describe(`TSS tests, keyType=${TSS_KEY_TYPE}`, function () { - it("#should be able to reconstruct tss share from factor key", async function () { - const sp = torusSP; - - const deviceTSSShare = ecTSS.genKeyPair().getPrivate(); - const deviceTSSIndex = 3; - - sp.authConnectionId = "torus-test-health"; - sp.userId = "test@example.com"; - const { postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - sp.postboxKey = postboxkey; - - const storageLayer2 = initStorageLayer(); - const tb1 = new ThresholdKey({ - serviceProvider: sp, - storageLayer: storageLayer2, - manualSync, - tssKeyType: TSS_KEY_TYPE, - }); - - // factor key needs to passed from outside of tKey - const factorKeyPair = ecFactor.genKeyPair(); - const factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - - await tb1.initialize({ factorPub, deviceTSSShare, deviceTSSIndex }); - const reconstructedKey = await tb1.reconstructKey(); - await tb1.syncLocalMetadataTransitions(); - if (tb1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - const { tssShare: tss2 } = await tb1.getTSSShare(factorKey); - - const tssCommits = tb1.getTSSCommits(); - const tss2Pub = ecTSS.g.mul(tss2); - const tssCommitA0 = tssCommits[0].toEllipticPoint(ecTSS); - const tssCommitA1 = tssCommits[1].toEllipticPoint(ecTSS); - const _tss2Pub = tssCommitA0.add(tssCommitA1.mul(new BN(deviceTSSIndex))); - equal(tss2Pub.eq(_tss2Pub), true); - }); - - it("#should be able to reconstruct tss key from factor key", async function () { - const sp = torusSP; - - sp.authConnectionId = "torus-test-health"; - sp.userId = "test18@example.com"; - const { serverDKGPrivKeys } = await assignTssDkgKeys({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 2, - }); - - const tss1 = new BN(serverDKGPrivKeys[0], "hex"); - const deviceTSSShare = ecTSS.genKeyPair().getPrivate(); - const deviceTSSIndex = 2; - const { postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - sp.postboxKey = postboxkey; - const storageLayer = initStorageLayer(); - const tb1 = new ThresholdKey({ serviceProvider: sp, storageLayer, manualSync, tssKeyType: TSS_KEY_TYPE }); - - // factor key needs to passed from outside of tKey - const factorKeyPair = ecFactor.genKeyPair(); - const factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - - await tb1.initialize({ factorPub, deviceTSSShare, deviceTSSIndex }); - const reconstructedKey = await tb1.reconstructKey(); - await tb1.syncLocalMetadataTransitions(); - if (tb1.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - - const { tssShare: tss2 } = await tb1.getTSSShare(factorKey); - const tssCommits = tb1.getTSSCommits(); - - const tssPrivKey = getLagrangeCoeffs(ecTSS, [1, deviceTSSIndex], 1) - .mul(tss1) - .add(getLagrangeCoeffs(ecTSS, [1, deviceTSSIndex], deviceTSSIndex).mul(tss2)) - .umod(ecTSS.n); - - const tssPubKey = (ecTSS.g as EllipticPoint).mul(tssPrivKey); - const tssCommits0 = tssCommits[0].toEllipticPoint(ecTSS); - const tssPub = tb1.getTSSPub().toEllipticPoint(ecTSS); - equal(tssPubKey.eq(tssCommits0), true); - equal(tssPub.eq(tssPubKey), true); - - // With account index. - if (tb1.tssKeyType !== KeyType.ed25519) { - const accountIndex = Math.floor(Math.random() * 99) + 1; - const tss1Account = (() => { - const share = new BN(serverDKGPrivKeys[0], "hex"); - const nonce = tb1.computeAccountNonce(accountIndex); - return share.add(nonce).umod(ecTSS.n); - })(); - const { tssShare: tss2Account } = await tb1.getTSSShare(factorKey, { accountIndex }); - - const coefficient1 = getLagrangeCoeffs(ecTSS, [1, deviceTSSIndex], 1); - const coefficient2 = getLagrangeCoeffs(ecTSS, [1, deviceTSSIndex], deviceTSSIndex); - const tssKey = coefficient1.mul(tss1Account).add(coefficient2.mul(tss2Account)).umod(ecTSS.n); - - const tssKeyPub = (ecTSS.g as EllipticPoint).mul(tssKey); - const tssPubAccount = tb1.getTSSPub(accountIndex).toEllipticPoint(ecTSS); - equal(tssPubAccount.eq(tssKeyPub), true, "should equal account pub key"); - } - }); - - it(`#should be able to import a tss key for new account, manualSync=${manualSync}`, async function () { - const sp = torusSP; - sp.authConnectionId = "torus-test-health"; - sp.userId = `importeduserfresh${TSS_KEY_TYPE}@example.com`; - const { signatures, postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - sp.postboxKey = postboxkey; - - const tb = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - const factorKeyPair = ecFactor.genKeyPair(); - const factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - - const importTssKey = generateKey(TSS_KEY_TYPE); - const newTSSIndex = 2; - - await tb.initialize({ skipTssInit: true }); - await tb.reconstructKey(); - await tb.importTssKey( - { tag: "imported", importKey: importTssKey.raw, factorPub, newTSSIndex }, - { - authSignatures: signatures, - } - ); - - await tb.syncLocalMetadataTransitions(); - - // Check pub key. - const importTssKeyPub = Point.fromScalar(importTssKey.scalar, tb.tssCurve); - const tssPub = await tb.getTSSPub(); - assert(tssPub.equals(importTssKeyPub)); - - // Check exported key. - const exportedKey = await tb._UNSAFE_exportTssKey({ - factorKey, - authSignatures: signatures, - }); - assert(exportedKey.eq(importTssKey.scalar)); - if (TSS_KEY_TYPE === KeyType.ed25519) { - const seed = await tb._UNSAFE_exportTssEd25519Seed({ - factorKey, - authSignatures: signatures, - }); - assert(seed.equals(importTssKey.raw)); - } else { - // If not ed25519, then also check exporting with account index. - const exportedKeyIndex2 = await tb._UNSAFE_exportTssKey({ - factorKey, - authSignatures: signatures, - accountIndex: 2, - }); - const exportedPubKeyIndex2 = Point.fromScalar(exportedKeyIndex2, tb.tssCurve); - const pubKeyIndex2 = tb.getTSSPub(2); - assert(exportedPubKeyIndex2.equals(pubKeyIndex2)); - } - }); - - it(`#should be able to import a tss key for existing account, manualSync=${manualSync}`, async function () { - const sp = torusSP; - - const deviceTSSShare = ecTSS.genKeyPair().getPrivate(); - const deviceTSSIndex = 2; - const newTSSIndex = 3; - - sp.authConnectionId = "torus-test-health"; - sp.userId = `importeduser${TSS_KEY_TYPE}@example.com`; - const { signatures, postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - sp.postboxKey = postboxkey; - const { serverDKGPrivKeys } = await assignTssDkgKeys({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 1, - }); - - const tb = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - // factor key needs to passed from outside of tKey - const factorKeyPair = ecFactor.genKeyPair(); - const factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - // 2/2 - await tb.initialize({ factorPub, deviceTSSShare, deviceTSSIndex }); - const newShare = await tb.generateNewShare(); - - const reconstructedKey = await tb.reconstructKey(); - await tb.syncLocalMetadataTransitions(); - - if (tb.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - const { tssShare: retrievedTSS, tssIndex: retrievedTSSIndex } = await tb.getTSSShare(factorKey); - const tssCommits = tb.getTSSCommits(); - const tssPrivKey = getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndex], 1) - .mul(serverDKGPrivKeys[0]) - .add(getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndex], retrievedTSSIndex).mul(retrievedTSS)) - .umod(ecTSS.n); - const tssPubKey = (ecTSS.g as EllipticPoint).mul(tssPrivKey); - - const tssCommits0 = tssCommits[0].toEllipticPoint(ecTSS); - equal(tssPubKey.eq(tssCommits0), true); - - const { serverDKGPrivKeys: serverDKGPrivKeys1 } = await assignTssDkgKeys({ - tssTag: "imported", - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 1, - }); - - // import key - const { raw: importedKey, scalar: importedScalar } = generateKey(TSS_KEY_TYPE); - await tb.importTssKey( - { tag: "imported", importKey: importedKey, factorPub, newTSSIndex }, - { - authSignatures: signatures, - } - ); - // tag is switched to imported - await tb.syncLocalMetadataTransitions(); - // for imported key - const { tssShare: retrievedTSS1, tssIndex: retrievedTSSIndex1 } = await tb.getTSSShare(factorKey); - - const tssCommits1 = tb.getTSSCommits(); - const tssPrivKey1 = getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndex1], 1) - .mul(serverDKGPrivKeys1[0]) - .add(getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndex1], retrievedTSSIndex1).mul(retrievedTSS1)) - .umod(ecTSS.n); - const tssPubKey1 = (ecTSS.g as EllipticPoint).mul(tssPrivKey1); - - const tssCommits10 = tssCommits1[0].toEllipticPoint(ecTSS); - equal(tssPubKey1.eq(tssCommits10), true); - equal(tssPrivKey1.toString("hex"), importedScalar.toString("hex")); - - if (TSS_KEY_TYPE === KeyType.ed25519) { - const seed = await tb._UNSAFE_exportTssEd25519Seed({ - factorKey, - selectedServers: [1, 2, 3], - authSignatures: signatures, - }); - equal(seed.equals(importedKey), true); - } - - const tb2 = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - await tb2.initialize({ factorPub }); - tb2.inputShareStore(newShare.newShareStores[newShare.newShareIndex.toString("hex")]); - const reconstructedKey2 = await tb2.reconstructKey(); - await tb2.syncLocalMetadataTransitions(); - - if (tb2.secp256k1Key.cmp(reconstructedKey2.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - const tssCommits2 = tb2.getTSSCommits(); - const tssCommits20 = tssCommits2[0].toEllipticPoint(ecTSS); - equal(tssPubKey.eq(tssCommits20), true); - - // switch to imported account - tb2.tssTag = "imported"; - const { tssShare: retrievedTSSImported, tssIndex: retrievedTSSIndexImported } = await tb2.getTSSShare(factorKey); - - const tssCommitsImported = tb2.getTSSCommits(); - - const tssPrivKeyImported = getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndexImported], 1) - .mul(serverDKGPrivKeys1[0]) - .add(getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndexImported], retrievedTSSIndexImported).mul(retrievedTSSImported)) - .umod(ecTSS.n); - - const tssPubKeyImported = (ecTSS.g as EllipticPoint).mul(tssPrivKeyImported); - - const tssCommitsImported0 = tssCommitsImported[0].toEllipticPoint(ecTSS); - equal(tssPubKeyImported.eq(tssCommitsImported0), true); - equal(tssPrivKeyImported.toString("hex"), importedScalar.toString("hex")); - }); - - it(`#should be able to unsafe export final tss key, manualSync=${manualSync}`, async function () { - const sp = torusSP; - - const deviceTSSShare = ecTSS.genKeyPair().getPrivate(); - const deviceTSSIndex = 3; - - sp.authConnectionId = "torus-test-health"; - sp.userId = `exportUser${TSS_KEY_TYPE}@example.com-1`; - const { signatures, postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - sp.postboxKey = postboxkey; - const { serverDKGPrivKeys } = await assignTssDkgKeys({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 1, - }); - - const tb = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - // factor key needs to passed from outside of tKey - const factorKeyPair = ecFactor.genKeyPair(); - const factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - - // 2/2 - await tb.initialize({ factorPub, deviceTSSShare, deviceTSSIndex }); - const newShare = await tb.generateNewShare(); - - const reconstructedKey = await tb.reconstructKey(); - await tb.syncLocalMetadataTransitions(); - - if (tb.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - const { tssShare: retrievedTSS, tssIndex: retrievedTSSIndex } = await tb.getTSSShare(factorKey); - const tssCommits = tb.getTSSCommits(); - const tssPrivKey = getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndex], 1) - .mul(serverDKGPrivKeys[0]) - .add(getLagrangeCoeffs(ecTSS, [1, retrievedTSSIndex], retrievedTSSIndex).mul(retrievedTSS)) - .umod(ecTSS.n); - const tssPubKey = (ecTSS.g as EllipticPoint).mul(tssPrivKey); - - const tssCommits0 = tssCommits[0].toEllipticPoint(ecTSS); - equal(tssPubKey.eq(tssCommits0), true); - - await assignTssDkgKeys({ - tssTag: "imported", - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 1, - }); - // import key - const { raw: importedKey, scalar: importedScalar } = generateKey(TSS_KEY_TYPE); - const importedIndex = 2; - await tb.importTssKey( - { tag: "imported", importKey: importedKey, factorPub, newTSSIndex: importedIndex }, - { - authSignatures: signatures, - } - ); - // tag is switched to imported - await tb.syncLocalMetadataTransitions(); - // for imported key - { - const finalPubKey = tb.getTSSCommits()[0].toEllipticPoint(ecTSS); - - const finalTssKey = await tb._UNSAFE_exportTssKey({ - factorKey, - selectedServers: [1, 2, 3], - authSignatures: signatures, - }); - const tssPubKeyImported = (ecTSS.g as EllipticPoint).mul(importedScalar); - - equal(finalTssKey.toString("hex"), importedScalar.toString("hex")); - equal(tssPubKeyImported.eq(finalPubKey), true); - - if (TSS_KEY_TYPE === KeyType.ed25519) { - const seed = await tb._UNSAFE_exportTssEd25519Seed({ - factorKey, - selectedServers: [3, 4, 5], - authSignatures: signatures, - }); - equal(seed.equals(importedKey), true); - } - } - { - tb.tssTag = "default"; - - const finalPubKey = tb.getTSSCommits()[0].toEllipticPoint(ecTSS); - - const finalTssKey = await tb._UNSAFE_exportTssKey({ - factorKey, - selectedServers: [1, 2, 3], - authSignatures: signatures, - }); - const tssPubKeyImported = (ecTSS.g as EllipticPoint).mul(finalTssKey); - - equal(tssPubKeyImported.eq(finalPubKey), true); - } - - const tb2 = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - await tb2.initialize({ factorPub }); - tb2.inputShareStore(newShare.newShareStores[newShare.newShareIndex.toString("hex")]); - await tb2.reconstructKey(); - await tb2.syncLocalMetadataTransitions(); - { - tb2.tssTag = "imported"; - const finalPubKey = tb2.getTSSCommits()[0].toEllipticPoint(ecTSS); - - const finalTssKey = await tb2._UNSAFE_exportTssKey({ - factorKey, - selectedServers: [1, 2, 3], - authSignatures: signatures, - }); - const tssPubKeyImported = (ecTSS.g as EllipticPoint).mul(finalTssKey); - - equal(finalTssKey.toString("hex"), importedScalar.toString("hex")); - equal(tssPubKeyImported.eq(finalPubKey), true); - } - { - tb2.tssTag = "default"; - - const finalPubKey = tb2.getTSSCommits()[0].toEllipticPoint(ecTSS); - - const finalTssKey = await tb2._UNSAFE_exportTssKey({ - factorKey, - selectedServers: [1, 2, 3], - authSignatures: signatures, - }); - const tssPubKeyImported = (ecTSS.g as EllipticPoint).mul(finalTssKey); - - equal(tssPubKeyImported.eq(finalPubKey), true); - } - }); - - describe(`factor addition and removal, manualSync=${manualSync}`, function () { - let tb: TKeyTSS; - let factorKey: BN; - let newFactorKeySameIndex: BN; - let newFactorKeyNewIndex: BN; - let signatures: string[]; - - const deviceTSSIndex = 2; - const newTSSIndex = 3; - - before("setup", async function () { - const sp = torusSP; - sp.authConnectionId = "torus-test-health"; - sp.userId = `test192${TSS_KEY_TYPE}@example.com-1`; - const { signatures: authSignatures, postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - signatures = authSignatures; - sp.postboxKey = postboxkey; - await assignTssDkgKeys({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 4, - }); - - tb = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - // factor key needs to passed from outside of tKey - const factorKeyPair = ecFactor.genKeyPair(); - factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - const deviceTSSShare = ecTSS.genKeyPair().getPrivate(); - await tb.initialize({ factorPub, deviceTSSShare, deviceTSSIndex }); - const reconstructedKey = await tb.reconstructKey(); - await tb.syncLocalMetadataTransitions(); - - if (tb.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - }); - - it("should be able to add factor for same index", async function () { - newFactorKeySameIndex = ecFactor.genKeyPair().getPrivate(); - const newFactorPub = (ecFactor.g as EllipticPoint).mul(newFactorKeySameIndex); - await tb.addFactorPub({ - authSignatures: signatures, - existingFactorKey: factorKey, - newFactorPub: Point.fromElliptic(newFactorPub), - newTSSIndex: deviceTSSIndex, - }); - await tb.syncLocalMetadataTransitions(); - }); - - it("should be able to add factor for different index", async function () { - newFactorKeyNewIndex = ecFactor.genKeyPair().getPrivate(); - const newFactorPub = (ecFactor.g as EllipticPoint).mul(newFactorKeyNewIndex); - await tb.addFactorPub({ - authSignatures: signatures, - existingFactorKey: factorKey, - newFactorPub: Point.fromElliptic(newFactorPub), - newTSSIndex, - refreshShares: true, - }); - await tb.syncLocalMetadataTransitions(); - }); - - it("should be able to remove factor for same index", async function () { - const newFactorPub = (ecFactor.g as EllipticPoint).mul(newFactorKeySameIndex); - await tb.deleteFactorPub({ - factorKey, - deleteFactorPub: Point.fromElliptic(newFactorPub), - authSignatures: signatures, - }); - await tb.syncLocalMetadataTransitions(); - }); - - it("should no longer be able to access key share with removed factor (same index)", async function () { - await rejects(tb.getTSSShare(newFactorKeySameIndex)); - }); - - it("should be able to remove factor for different index", async function () { - const newFactorPub = (ecFactor.g as EllipticPoint).mul(newFactorKeyNewIndex); - await tb.deleteFactorPub({ - factorKey, - deleteFactorPub: Point.fromElliptic(newFactorPub), - authSignatures: signatures, - }); - await tb.syncLocalMetadataTransitions(); - }); - - it("should no longer be able to access key share with removed factor (different index)", async function () { - await rejects(tb.getTSSShare(newFactorKeyNewIndex)); - }); - }); - - describe(`TSS serialization and deserialization tests, manualSync=${manualSync}`, function () { - let tb: TKeyTSS; - let factorKey: BN; - let signatures: string[]; - - const deviceTSSIndex = 2; - const newTSSIndex = 3; - - const sp = torusSP; - - before("setup", async function () { - sp.authConnectionId = "torus-test-health"; - sp.userId = `test193${TSS_KEY_TYPE}@example.com-1`; - const { signatures: authSignatures, postboxkey } = await fetchPostboxKeyAndSigs({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - }); - signatures = authSignatures; - - sp.postboxKey = postboxkey; - - await assignTssDkgKeys({ - serviceProvider: sp, - authConnectionId: sp.authConnectionId, - userId: sp.userId, - maxTSSNonceToSimulate: 4, - }); - - tb = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); - - // factor key needs to passed from outside of tKey - const factorKeyPair = ecFactor.genKeyPair(); - factorKey = factorKeyPair.getPrivate(); - const factorPub = Point.fromElliptic(factorKeyPair.getPublic()); - const deviceTSSShare = ecTSS.genKeyPair().getPrivate(); - await tb.initialize({ factorPub, deviceTSSShare, deviceTSSIndex }); - const reconstructedKey = await tb.reconstructKey(); - await tb.syncLocalMetadataTransitions(); - - if (tb.secp256k1Key.cmp(reconstructedKey.secp256k1Key) !== 0) { - fail("key should be able to be reconstructed"); - } - }); - - it("should be able to serialize and deserialize", async function () { - const serialized = JSON.stringify(tb); - const serializedSp = JSON.stringify(tb.serviceProvider); - const spJson = TSSTorusServiceProvider.fromJSON(JSON.parse(serializedSp)); - - // we are using mocked storage layer for local testing - // const slJson = TorusStorageLayer.fromJSON(JSON.parse(serializedTorusSL)); - - const tbJson = await ThresholdKey.fromJSON(JSON.parse(serialized), { - serviceProvider: spJson, - storageLayer: torusSL, - manualSync, - tssKeyType: TSS_KEY_TYPE, - }); - // reconstruct metdata key - await tbJson.reconstructKey(); - - // try refresh share - await tbJson.getTSSShare(factorKey); - - const newFactorKeyPair = ecFactor.genKeyPair(); - await tbJson.addFactorPub({ - authSignatures: signatures, - existingFactorKey: factorKey, - newFactorPub: Point.fromElliptic(newFactorKeyPair.getPublic()), - newTSSIndex, - refreshShares: true, - }); - - await tbJson.getTSSShare(newFactorKeyPair.getPrivate()); - - const serialized2 = JSON.stringify(tbJson); - - const tbJson2 = await ThresholdKey.fromJSON(JSON.parse(serialized2), { - serviceProvider: sp, - storageLayer: torusSL, - manualSync, - tssKeyType: TSS_KEY_TYPE, - }); - - await tbJson2.reconstructKey(); - - await tbJson2.getTSSShare(factorKey); - await tbJson2.getTSSShare(newFactorKeyPair.getPrivate()); - }); - }); - }); -}); diff --git a/packages/tss/torus.config.js b/packages/tss/torus.config.js deleted file mode 100644 index 66be7083b..000000000 --- a/packages/tss/torus.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("../../torus.config"); diff --git a/packages/tss/tsconfig.json b/packages/tss/tsconfig.json deleted file mode 100644 index ef502e89c..000000000 --- a/packages/tss/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src", "test"] -} diff --git a/packages/tss/webpack.config.js b/packages/tss/webpack.config.js deleted file mode 100644 index 568d72454..000000000 --- a/packages/tss/webpack.config.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const generateWebpackConfig = require("../../webpack.config"); - -const config = generateWebpackConfig({}); - -exports.baseConfig = config.baseConfig; diff --git a/packages/web-storage/README.md b/packages/web-storage/README.md index 7c97e3a16..a15b161a0 100644 --- a/packages/web-storage/README.md +++ b/packages/web-storage/README.md @@ -44,7 +44,7 @@ class WebStorageModule implements IModule { setModuleReferences(tbSDK: ITKeyApi): void; initialize(): Promise; storeDeviceShare(deviceShareStore: ShareStore, customDeviceInfo?: StringifiedType): Promise; - storeDeviceShareOnFileStorage(shareIndex: BNString): Promise; + storeDeviceShareOnFileStorage(shareIndex: bigint): Promise; getDeviceShare(): Promise; inputShareFromWebStorage(): Promise; } diff --git a/packages/web-storage/package.json b/packages/web-storage/package.json index 91a713e4e..8daff9ef6 100644 --- a/packages/web-storage/package.json +++ b/packages/web-storage/package.json @@ -7,8 +7,8 @@ "license": "MIT", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js", - "unpkg": "dist/webStorage.umd.min.js", - "jsdelivr": "dist/webStorage.umd.min.js", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -43,9 +43,7 @@ "@babel/runtime": "7.x" }, "dependencies": { - "@tkey/common-types": "^16.0.0", - "@types/bn.js": "^5.1.6", - "bn.js": "^5.2.1" + "@tkey/common-types": "^16.0.0" }, "devDependencies": { "@tkey/core": "^16.0.0", @@ -63,8 +61,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/web-storage/src/WebStorageModule.ts b/packages/web-storage/src/WebStorageModule.ts index 0211ccec6..c33ad4a64 100644 --- a/packages/web-storage/src/WebStorageModule.ts +++ b/packages/web-storage/src/WebStorageModule.ts @@ -1,5 +1,4 @@ -import { BNString, DeviceShareDescription, IModule, ITKeyApi, prettyPrintError, ShareStore, StringifiedType } from "@tkey/common-types"; -import BN from "bn.js"; +import { DeviceShareDescription, IModule, ITKeyApi, prettyPrintError, ShareStore, StringifiedType } from "@tkey/common-types"; import WebStorageError from "./errors"; import { canAccessFileStorage, getShareFromFileStorage, storeShareOnFileStorage } from "./FileStorageHelpers"; @@ -50,7 +49,7 @@ class WebStorageModule implements IModule { async storeDeviceShare(deviceShareStore: ShareStore, customDeviceInfo?: StringifiedType): Promise { const metadata = this.tbSDK.getMetadata(); - const tkeypubx = metadata.pubKey.x.toString("hex"); + const tkeypubx = metadata.pubKey.x.toString(16); await storeShareOnLocalStorage(deviceShareStore, tkeypubx); const shareDescription: DeviceShareDescription = { module: this.moduleName, @@ -60,19 +59,19 @@ class WebStorageModule implements IModule { if (customDeviceInfo) { shareDescription.customDeviceInfo = JSON.stringify(customDeviceInfo); } - await this.tbSDK.addShareDescription(deviceShareStore.share.shareIndex.toString("hex"), JSON.stringify(shareDescription), true); + await this.tbSDK.addShareDescription(deviceShareStore.share.shareIndex.toString(16), JSON.stringify(shareDescription), true); } - async storeDeviceShareOnFileStorage(shareIndex: BNString): Promise { + async storeDeviceShareOnFileStorage(shareIndex: bigint): Promise { const metadata = this.tbSDK.getMetadata(); - const tkeypubx = metadata.pubKey.x.toString("hex"); - const shareStore = this.tbSDK.outputShareStore(new BN(shareIndex)); + const tkeypubx = metadata.pubKey.x.toString(16); + const shareStore = this.tbSDK.outputShareStore(shareIndex); return storeShareOnFileStorage(shareStore, tkeypubx); } async getDeviceShare(): Promise { const metadata = this.tbSDK.getMetadata(); - const tkeypubx = metadata.pubKey.x.toString("hex"); + const tkeypubx = metadata.pubKey.x.toString(16); let shareStore: ShareStore; try { shareStore = await getShareFromLocalStorage(tkeypubx); @@ -102,7 +101,7 @@ class WebStorageModule implements IModule { const metadata = this.tbSDK.getMetadata(); if (metadata.getLatestPublicPolynomial().getPolynomialID() !== shareStore.polynomialID) { latestShareStore = (await this.tbSDK.catchupToLatestShare({ shareStore, includeLocalMetadataTransitions: true })).latestShare; - const tkeypubx = metadata.pubKey.x.toString("hex"); + const tkeypubx = metadata.pubKey.x.toString(16); await storeShareOnLocalStorage(latestShareStore, tkeypubx); } this.tbSDK.inputShareStore(latestShareStore); diff --git a/packages/web-storage/test/test.js b/packages/web-storage/test/test.js index 0b6c114f8..ac97e4401 100644 --- a/packages/web-storage/test/test.js +++ b/packages/web-storage/test/test.js @@ -80,20 +80,20 @@ manualSyncModes.forEach((mode) => { await tb2.initialize(); await tb2.modules[WEB_STORAGE_MODULE_NAME].inputShareFromWebStorage(); const secondKey = await tb2.reconstructKey(); - strictEqual(reconstructedKey.secp256k1Key.toString("hex"), secondKey.secp256k1Key.toString("hex"), "Must be equal"); + strictEqual(reconstructedKey.secp256k1Key.toString(16), secondKey.secp256k1Key.toString(16), "Must be equal"); }); it(`#should be able to input share from web storage after external share deletion, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); const reconstructedKey = await tb.reconstructKey(); const newShare = await tb.generateNewShare(); - await tb.deleteShare(newShare.newShareIndex.toString("hex")); + await tb.deleteShare(newShare.newShareIndex); await tb.syncLocalMetadataTransitions(); await tb2.initialize(); await tb2.modules[WEB_STORAGE_MODULE_NAME].inputShareFromWebStorage(); const secondKey = await tb2.reconstructKey(); - strictEqual(reconstructedKey.secp256k1Key.toString("hex"), secondKey.secp256k1Key.toString("hex"), "Must be equal"); + strictEqual(reconstructedKey.secp256k1Key.toString(16), secondKey.secp256k1Key.toString(16), "Must be equal"); }); it(`#should not be able to input share from web storage after deletion, manualSync=${mode}`, async function () { @@ -101,7 +101,7 @@ manualSyncModes.forEach((mode) => { await tb.reconstructKey(); // console.log("%O", tb.shares); await tb.generateNewShare(); - await tb.deleteShare(resp1.deviceShare.share.shareIndex.toString("hex")); + await tb.deleteShare(resp1.deviceShare.share.shareIndex); await tb.syncLocalMetadataTransitions(); // console.log("%O", tb.shares); @@ -123,7 +123,7 @@ manualSyncModes.forEach((mode) => { const reconstructedKey = await tb.reconstructKey(); // console.log("%O", tb.shares); const newShare = await tb.generateNewShare(); - await tb.deleteShare(resp1.deviceShare.share.shareIndex.toString("hex")); + await tb.deleteShare(resp1.deviceShare.share.shareIndex); await tb.syncLocalMetadataTransitions(); await tb2.initialize(); @@ -139,9 +139,9 @@ manualSyncModes.forEach((mode) => { ); // console.log("%O", tb2.shares); - await tb2.inputShareStore(newShare.newShareStores[newShare.newShareIndex.toString("hex")]); + await tb2.inputShareStore(newShare.newShareStores[newShare.newShareIndex.toString(16)]); const secondKey = await tb2.reconstructKey(); - strictEqual(reconstructedKey.secp256k1Key.toString("hex"), secondKey.secp256k1Key.toString("hex"), "Must be equal"); + strictEqual(reconstructedKey.secp256k1Key.toString(16), secondKey.secp256k1Key.toString(16), "Must be equal"); }); it(`#should be able to add custom device share info, manualSync=${mode}`, async function () { @@ -185,10 +185,10 @@ manualSyncModes.forEach((mode) => { const newDeviceShareInfo = { device_name: "my home's laptop", }; - await tb2.modules[WEB_STORAGE_MODULE_NAME].storeDeviceShare(newShareStores1[newShareIndex1.toString("hex")], newDeviceShareInfo); + await tb2.modules[WEB_STORAGE_MODULE_NAME].storeDeviceShare(newShareStores1[newShareIndex1.toString(16)], newDeviceShareInfo); const deviceShareDesc3 = await tb2.metadata.getShareDescription(); deepStrictEqual( - JSON.parse(JSON.parse(deviceShareDesc3[newShareIndex1.toString("hex")]).customDeviceInfo), + JSON.parse(JSON.parse(deviceShareDesc3[newShareIndex1.toString(16)]).customDeviceInfo), newDeviceShareInfo, "new device share info should be correct" ); diff --git a/test/setup.mjs b/test/setup.mjs index 226133ece..7fa7f8eea 100644 --- a/test/setup.mjs +++ b/test/setup.mjs @@ -1,3 +1,9 @@ +import "dotenv/config"; +import "@noble/curves/secp256k1.js"; +import "@noble/curves/ed25519.js"; +import "@noble/curves/utils.js"; +import "@noble/curves/abstract/modular.js"; + import Register from "@babel/register"; import JSDOM from "jsdom-global"; @@ -5,12 +11,20 @@ import currentPkg from "../package.json" with { type: "json" }; const runtimeVersion = currentPkg.peerDependencies["@babel/runtime"]; +const nativeBtoa = globalThis.btoa; +const nativeAtob = globalThis.atob; +const NativeFormData = globalThis.FormData; + JSDOM(``, { url: "http://localhost", }); +globalThis.btoa = nativeBtoa; +globalThis.atob = nativeAtob; +globalThis.FormData = NativeFormData; + Register({ - presets: [["@babel/env", { bugfixes: true }], "@babel/typescript"], + presets: [["@babel/env", { bugfixes: true, targets: { node: "current" } }], "@babel/typescript"], plugins: [ "@babel/plugin-syntax-bigint", "@babel/plugin-transform-object-rest-spread",