From 095ec12f1780ad32367d47c7ddf93ee0b100e348 Mon Sep 17 00:00:00 2001 From: Tuna Date: Wed, 25 Feb 2026 16:46:20 +0700 Subject: [PATCH 01/57] feat: upgrade node version --- .github/workflows/backward.yml | 2 +- .github/workflows/browserTests.yml | 2 +- .github/workflows/buildMocks.yml | 2 +- .github/workflows/ci.yml | 2 +- .nvmrc | 2 +- package-lock.json | 53 +++++++++++++++--------------- package.json | 4 +-- 7 files changed, 33 insertions(+), 34 deletions(-) diff --git a/.github/workflows/backward.yml b/.github/workflows/backward.yml index 74d2962de..52b11cc95 100644 --- a/.github/workflows/backward.yml +++ b/.github/workflows/backward.yml @@ -19,7 +19,7 @@ jobs: name: Backward Compatibility Tests strategy: matrix: - node: ["22.x"] + node: ["24.x"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/browserTests.yml b/.github/workflows/browserTests.yml index 304a5cb74..9b0bfef0b 100644 --- a/.github/workflows/browserTests.yml +++ b/.github/workflows/browserTests.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: env: PLAYWRIGHT_BROWSERS_PATH: 0 - NODE_VERSION: 20 + NODE_VERSION: 24 FORCE_COLOR: 3 jobs: diff --git a/.github/workflows/buildMocks.yml b/.github/workflows/buildMocks.yml index a91be9141..c7700ceeb 100644 --- a/.github/workflows/buildMocks.yml +++ b/.github/workflows/buildMocks.yml @@ -14,7 +14,7 @@ jobs: name: Backward Compatibility Tests strategy: matrix: - node: ["22.x"] + node: ["24.x"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f475b9e4..a55f7ae7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: test: strategy: matrix: - node: ["22.x"] + node: ["24.x"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} 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/package-lock.json b/package-lock.json index 1852fb005..399962eb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,8 +48,8 @@ "typescript": "^5.8.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "^7.x" @@ -127,6 +127,7 @@ "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -1658,6 +1659,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "license": "MIT", + "peer": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1813,6 +1815,7 @@ "url": "https://opencollective.com/csstools" } ], + "peer": true, "engines": { "node": ">=18" }, @@ -1835,6 +1838,7 @@ "url": "https://opencollective.com/csstools" } ], + "peer": true, "engines": { "node": ">=18" } @@ -4600,6 +4604,7 @@ "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -6138,6 +6143,7 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -6266,6 +6272,7 @@ "version": "22.10.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.6.tgz", "integrity": "sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==", + "peer": true, "dependencies": { "undici-types": "~6.20.0" } @@ -6350,6 +6357,7 @@ "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.26.0", "@typescript-eslint/types": "8.26.0", @@ -6471,6 +6479,7 @@ "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "8.26.0", @@ -6836,6 +6845,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8012,6 +8022,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -9980,31 +9991,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -10486,6 +10472,7 @@ "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -10547,6 +10534,7 @@ "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10670,6 +10658,7 @@ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -14542,6 +14531,7 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", "dev": true, + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -14783,6 +14773,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -17765,6 +17756,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", @@ -19454,6 +19446,7 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -20412,6 +20405,7 @@ "integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.1.2", @@ -21459,6 +21453,7 @@ "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.6" }, @@ -21691,6 +21686,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -23159,6 +23155,7 @@ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -23719,6 +23716,7 @@ "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -24228,6 +24226,7 @@ "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", diff --git a/package.json b/package.json index 3fd265300..4b916a54d 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ } }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } } From a93131168685f248b4debbf814c66a82c5cd8651 Mon Sep 17 00:00:00 2001 From: Tuna Date: Wed, 25 Feb 2026 16:46:30 +0700 Subject: [PATCH 02/57] feat: add pr template --- .github/PULL_REQUEST_TEMPLATE.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md 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 From f035f5d8d4cbbcaec968017c300214cd23d158b4 Mon Sep 17 00:00:00 2001 From: Tuna Date: Wed, 25 Feb 2026 17:17:55 +0700 Subject: [PATCH 03/57] feat: upgrade deps --- package-lock.json | 7508 +++++++++--------- package.json | 12 +- packages/chrome-storage/package.json | 8 +- packages/common-types/package.json | 12 +- packages/core/package.json | 12 +- packages/core/src/core.ts | 7 +- packages/default/package.json | 10 +- packages/private-keys/package.json | 8 +- packages/security-questions/package.json | 8 +- packages/seed-phrase/package.json | 8 +- packages/service-provider-base/package.json | 8 +- packages/service-provider-sfa/package.json | 12 +- packages/service-provider-torus/package.json | 12 +- packages/share-serialization/package.json | 8 +- packages/share-transfer/package.json | 10 +- packages/storage-layer-torus/package.json | 10 +- packages/tss/package.json | 14 +- packages/tss/src/tss.ts | 11 +- packages/web-storage/package.json | 8 +- 19 files changed, 3811 insertions(+), 3875 deletions(-) diff --git a/package-lock.json b/package-lock.json index 399962eb6..cb5b0899f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "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", @@ -22,7 +22,7 @@ "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", @@ -61,20 +61,6 @@ "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 +84,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,23 +109,23 @@ } }, "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==", + "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", "peer": true, "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", + "@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", @@ -154,16 +141,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": { @@ -171,25 +158,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" @@ -199,17 +188,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": { @@ -220,14 +210,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": { @@ -238,57 +228,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" @@ -298,36 +326,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" @@ -337,14 +367,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" @@ -354,82 +385,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" @@ -439,14 +474,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" @@ -456,13 +491,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" @@ -472,13 +507,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" @@ -488,15 +523,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" @@ -506,14 +541,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" @@ -549,13 +584,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" @@ -565,13 +600,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" @@ -581,12 +616,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" @@ -596,12 +632,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" @@ -628,13 +665,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" @@ -644,15 +681,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" @@ -662,15 +699,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" @@ -680,13 +717,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" @@ -696,13 +733,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" @@ -712,14 +749,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" @@ -729,14 +766,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" @@ -746,18 +783,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" @@ -767,14 +804,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" @@ -784,13 +821,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" @@ -800,14 +838,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" @@ -817,13 +855,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" @@ -833,14 +871,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" @@ -850,13 +888,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" @@ -866,13 +921,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" @@ -882,13 +937,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" @@ -898,14 +953,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" @@ -915,15 +970,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" @@ -933,13 +988,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" @@ -949,13 +1004,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" @@ -965,13 +1020,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" @@ -981,13 +1036,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" @@ -997,14 +1052,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" @@ -1014,13 +1069,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" @@ -1030,16 +1086,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" @@ -1049,14 +1105,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" @@ -1066,14 +1122,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" @@ -1083,13 +1139,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" @@ -1099,13 +1155,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" @@ -1115,13 +1171,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" @@ -1131,15 +1187,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" @@ -1149,14 +1207,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" @@ -1166,13 +1224,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" @@ -1182,14 +1240,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" @@ -1199,13 +1257,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" @@ -1215,14 +1273,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" @@ -1232,15 +1290,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" @@ -1250,13 +1308,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" @@ -1266,14 +1324,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" @@ -1283,14 +1340,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" @@ -1300,13 +1357,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" @@ -1316,17 +1373,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": { @@ -1337,13 +1394,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" @@ -1353,14 +1410,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" @@ -1370,13 +1427,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" @@ -1386,13 +1443,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" @@ -1402,13 +1459,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" @@ -1418,16 +1475,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" @@ -1437,13 +1495,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" @@ -1453,14 +1511,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" @@ -1470,14 +1528,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" @@ -1487,14 +1545,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" @@ -1504,80 +1562,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": { @@ -1588,14 +1647,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" @@ -1617,16 +1676,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" @@ -1636,10 +1696,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", @@ -1655,61 +1716,58 @@ } }, "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", "peer": true, - "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" @@ -1843,31 +1901,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": { @@ -1875,9 +1923,9 @@ } }, "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": { @@ -2310,56 +2358,42 @@ } }, "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==", + "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", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "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/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "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", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "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==", - "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==", + "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": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -2368,9 +2402,9 @@ } }, "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==", + "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": { @@ -2379,9 +2413,9 @@ } }, "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==", + "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": { @@ -2392,19 +2426,22 @@ } }, "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==", + "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": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "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==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2415,20 +2452,20 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz", + "integrity": "sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "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.0", - "minimatch": "^3.1.2", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.3", "strip-json-comments": "^3.1.1" }, "engines": { @@ -2439,9 +2476,9 @@ } }, "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==", + "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": { @@ -2449,23 +2486,23 @@ "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==", + "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", - "engines": { - "node": ">=18" + "dependencies": { + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "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==", + "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": { @@ -2476,19 +2513,22 @@ } }, "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==", + "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", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "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==", + "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": "Apache-2.0", "engines": { @@ -2496,13 +2536,13 @@ } }, "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==", + "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": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -2582,25 +2622,28 @@ "node": ">=6.9.0" } }, - "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==", + "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": "ISC" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "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==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", "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" @@ -2615,14 +2658,14 @@ } }, "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==", + "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", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -2637,20 +2680,20 @@ } }, "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==", + "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", "dependencies": { - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", + "@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.2" + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -2749,15 +2792,15 @@ } }, "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==", + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "external-editor": "^3.1.0" + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -2772,15 +2815,37 @@ } }, "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==", + "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": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "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", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { "node": ">=18" @@ -2794,10 +2859,34 @@ } } }, + "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, + "license": "MIT" + }, + "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": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "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==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", "dev": true, "license": "MIT", "engines": { @@ -2805,14 +2894,14 @@ } }, "node_modules/@inquirer/input": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.7.tgz", - "integrity": "sha512-rCQAipJNA14UTH84df/z4jDJ9LZ54H6zzuCAi7WZ0qVqx3CSqLjfXAMd5cpISIxbiHVJCPRB81gZksq6CZsqDg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -2827,14 +2916,14 @@ } }, "node_modules/@inquirer/number": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.10.tgz", - "integrity": "sha512-GLsdnxzNefjCJUmWyjaAuNklHgDpCTL4RMllAVhVvAzBwRW9g38eZ5tWgzo1lirtSDTpsh593hqXVhxvdrjfwA==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.8", - "@inquirer/type": "^3.0.5" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -2849,15 +2938,15 @@ } }, "node_modules/@inquirer/password": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.10.tgz", - "integrity": "sha512-JC538ujqeYKkFqLoWZ0ILBteIUO2yajBMVEUZSxjl9x6fiEQtM+I5Rca7M2D8edMDbyHLnXifGH1hJZdh8V5rA==", + "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/type": "^3.0.5", - "ansi-escapes": "^4.3.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -2872,22 +2961,22 @@ } }, "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==", + "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/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" + "@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" @@ -2902,15 +2991,15 @@ } }, "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==", + "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/core": "^10.1.8", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -2925,16 +3014,16 @@ } }, "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==", + "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": { - "@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" @@ -2949,17 +3038,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" @@ -2974,9 +3063,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": { @@ -3238,144 +3327,47 @@ "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==", + "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==", "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3386,9 +3378,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": { @@ -3711,33 +3703,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", @@ -3748,7 +3743,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", @@ -3763,9 +3759,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" @@ -3775,27 +3771,27 @@ } }, "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/" @@ -3839,14 +3835,14 @@ "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==", + "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", - "engines": { - "node": ">=12.4.0" + "license": "ISC", + "dependencies": { + "lodash": "^4.15.0" } }, "node_modules/@npmcli/agent": { @@ -4763,6 +4759,20 @@ "@octokit/openapi-types": "^23.0.1" } }, + "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": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -4775,16 +4785,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": { @@ -4818,9 +4828,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": { @@ -4832,17 +4842,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": { @@ -4867,10 +4870,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", @@ -4891,9 +4895,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": { @@ -4918,15 +4922,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" @@ -4940,10 +4944,23 @@ } } }, + "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.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==", + "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" ], @@ -4955,9 +4972,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" ], @@ -4969,9 +4986,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" ], @@ -4983,9 +5000,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" ], @@ -4997,9 +5014,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" ], @@ -5011,9 +5028,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" ], @@ -5025,9 +5042,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" ], @@ -5039,9 +5056,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" ], @@ -5053,9 +5070,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" ], @@ -5067,9 +5084,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" ], @@ -5080,10 +5097,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" ], @@ -5094,10 +5125,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" ], @@ -5109,9 +5154,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" ], @@ -5123,9 +5182,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" ], @@ -5137,9 +5196,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" ], @@ -5150,9 +5209,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" ], @@ -5163,10 +5222,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" ], @@ -5178,9 +5265,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" ], @@ -5191,10 +5278,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" ], @@ -5213,47 +5314,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", @@ -5342,19 +5475,6 @@ "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", @@ -5473,50 +5593,35 @@ "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" + "oblivious-set": "2.0.0", + "socket.io-client": "^4.8.3" }, "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": ">=22.x", + "npm": ">=10.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==", + "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.6.1" + "@noble/curves": "^2.0.1" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } }, "node_modules/@toruslabs/bs58": { @@ -5533,56 +5638,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", @@ -5595,34 +5699,34 @@ } }, "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==", + "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.6.1" + "@noble/curves": "^2.0.1" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.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": { @@ -5644,30 +5748,28 @@ } }, "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", @@ -5676,9 +5778,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": { @@ -5689,40 +5791,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": { @@ -5731,16 +5833,16 @@ } }, "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" @@ -5769,54 +5871,54 @@ } }, "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==", + "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.6.1" + "@noble/curves": "^2.0.1" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.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": { @@ -5844,66 +5946,53 @@ } }, "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" + "@rollup/rollup-linux-x64-gnu": "^4.59.0" } }, "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==", + "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.6.1" + "@noble/curves": "^2.0.1" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } }, "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": { @@ -5912,74 +6001,102 @@ } }, "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/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": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=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": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "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==", + "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": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5987,104 +6104,409 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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/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": { - "@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" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=18" }, - "peerDependencies": { - "@babel/runtime": "7.x" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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", + "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": { - "elliptic": "^6.6.1" + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/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": { - "deepmerge": "^4.3.1", - "loglevel": "^1.9.2" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "^7.x", - "@sentry/core": "^9.x" + "node": ">=20" }, - "peerDependenciesMeta": { - "@sentry/core": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/@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": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } }, - "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/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": "^16.14.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "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/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/@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, + "license": "MIT" + }, + "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": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18" + }, + "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/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": { - "tslib": "^2.4.0" + "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/@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": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "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/@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": { + "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/@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": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/eccrypto": { + "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": { + "@noble/curves": "^2.0.1" + }, + "engines": { + "node": ">=22.x", + "npm": ">=10.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/@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==", + "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": { @@ -6161,10 +6583,11 @@ } }, "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 + "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", @@ -6190,33 +6613,6 @@ "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -6295,7 +6691,8 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/webextension-polyfill": { "version": "0.12.3", @@ -6304,39 +6701,21 @@ "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==", - "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" @@ -6346,24 +6725,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", - "peer": true, "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" @@ -6373,39 +6761,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/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": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "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.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz", - "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==", + "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.26.0", - "@typescript-eslint/visitor-keys": "8.26.0" + "@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" @@ -6415,14 +6893,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": { @@ -6434,20 +6937,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" @@ -6457,13 +6961,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": { @@ -6474,17 +7042,16 @@ } }, "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==", + "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", - "peer": true, "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" + "@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" @@ -6494,51 +7061,350 @@ "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/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/@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/@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", - "dependencies": { - "@typescript-eslint/types": "8.26.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "optional": true, + "os": [ + "win32" + ] }, - "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==", + "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": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, "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==", + "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/scope-manager": "^8.55.0", + "@typescript-eslint/utils": "^8.55.0" + }, + "engines": { + "node": ">=18" + }, "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": { @@ -6696,50 +7562,6 @@ "@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", @@ -6841,10 +7663,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", "peer": true, "bin": { "acorn": "bin/acorn" @@ -6863,19 +7686,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", @@ -6913,9 +7723,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": { @@ -7113,18 +7923,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" @@ -7144,18 +7956,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" @@ -7234,23 +8047,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", @@ -7322,13 +8118,14 @@ "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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", "dev": true, + "license": "MIT", "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" } }, "node_modules/available-typed-arrays": { @@ -7359,145 +8156,15 @@ "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==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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": { @@ -7505,27 +8172,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" @@ -7587,10 +8254,23 @@ "node": ">=6.0.0" } }, + "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": { @@ -7733,9 +8413,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": { @@ -7762,9 +8442,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": { @@ -7775,9 +8455,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": { @@ -7801,9 +8481,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": { @@ -7814,9 +8494,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" }, @@ -7839,9 +8519,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": { @@ -7855,9 +8535,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": { @@ -7868,9 +8548,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": { @@ -7916,97 +8596,15 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "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==", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } + "license": "ISC" }, "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": [ { @@ -8022,12 +8620,14 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "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" @@ -8124,31 +8724,6 @@ "node": ">= 4.5.0" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -8156,19 +8731,6 @@ "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/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==", - "dev": true, - "license": "MIT" - }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -8205,6 +8767,78 @@ "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/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": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "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": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/cacache": { "version": "18.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", @@ -8350,9 +8984,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" @@ -8362,12 +8997,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" @@ -8415,9 +9051,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": [ { @@ -8432,7 +9068,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", @@ -8530,17 +9167,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": { @@ -8783,16 +9417,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -8800,12 +9424,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", @@ -8862,6 +9480,13 @@ "node": ">= 6" } }, + "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" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -8874,9 +9499,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": { @@ -8889,7 +9514,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": { @@ -8909,9 +9534,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": { @@ -8954,6 +9579,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", @@ -9186,13 +9821,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", @@ -9246,49 +9881,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", @@ -9322,32 +9914,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", @@ -9489,13 +10055,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", @@ -9599,9 +10158,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": { @@ -9616,9 +10175,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": { @@ -9702,6 +10261,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", @@ -9743,15 +10309,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", @@ -9801,23 +10364,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", @@ -9949,10 +10495,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 + "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/elliptic": { "version": "6.6.1", @@ -10023,39 +10570,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", @@ -10192,9 +10741,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": { @@ -10202,18 +10751,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", @@ -10225,21 +10774,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", @@ -10248,7 +10800,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" @@ -10282,9 +10834,9 @@ "license": "MIT" }, "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" @@ -10467,34 +11019,33 @@ } }, "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", "peer": true, "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", @@ -10529,19 +11080,47 @@ } }, "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", "peer": true, "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", @@ -10565,25 +11144,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": "*", @@ -10600,9 +11179,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": { @@ -10625,9 +11204,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": { @@ -10653,31 +11232,31 @@ } }, "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", "peer": true, "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": { @@ -10688,9 +11267,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": { @@ -10722,9 +11301,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": { @@ -10758,14 +11337,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" @@ -10776,7 +11355,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": { @@ -10817,19 +11396,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": { @@ -10856,31 +11437,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", @@ -10959,10 +11515,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" }, @@ -11007,15 +11564,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" @@ -11025,9 +11582,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": { @@ -11104,23 +11661,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/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": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/ethers": { "version": "6.13.5", "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.5.tgz", @@ -11256,16 +11853,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", @@ -11297,6 +11884,13 @@ "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", @@ -11333,9 +11927,9 @@ } }, "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": [ { @@ -11414,15 +12008,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", @@ -11630,13 +12215,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": { @@ -11854,9 +12445,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": { @@ -11867,16 +12458,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", @@ -12008,9 +12600,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": { @@ -12021,9 +12613,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": { @@ -12035,6 +12627,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", @@ -12282,13 +12892,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": { @@ -12347,29 +12960,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", @@ -12487,19 +13077,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", @@ -12673,13 +13250,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", @@ -13091,16 +13661,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", @@ -13224,19 +13784,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": { @@ -13521,7 +14081,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", @@ -13540,10 +14101,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": { @@ -14137,142 +14711,26 @@ "@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==", + "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": "MIT", + "license": "Apache-2.0", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { + "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==", @@ -14288,7 +14746,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff/node_modules/chalk": { + "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==", @@ -14305,7 +14774,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-diff/node_modules/color-convert": { + "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==", @@ -14318,14 +14787,14 @@ "node": ">=7.0.0" } }, - "node_modules/jest-diff/node_modules/color-name": { + "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/jest-diff/node_modules/has-flag": { + "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==", @@ -14335,7 +14804,20 @@ "node": ">=8" } }, - "node_modules/jest-diff/node_modules/supports-color": { + "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==", @@ -14348,35 +14830,23 @@ "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-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==", @@ -14392,7 +14862,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==", @@ -14409,7 +14879,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==", @@ -14422,14 +14892,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==", @@ -14439,7 +14909,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==", @@ -14452,53 +14922,32 @@ "node": ">=8" } }, - "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==", + "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", - "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_modules/jest-worker/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-worker/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==", + "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", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "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", @@ -14582,6 +15031,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -14621,12 +15071,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" @@ -14668,6 +15119,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", @@ -15016,9 +15474,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": { @@ -16195,14 +16653,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": { @@ -16297,17 +16756,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", @@ -16599,25 +17047,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", @@ -16741,11 +17170,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" } @@ -17196,16 +17625,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", @@ -17273,6 +17692,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", @@ -17370,6 +17805,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", @@ -17531,10 +17973,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", @@ -18312,6 +18755,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", @@ -18322,10 +18790,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" }, @@ -18446,14 +18915,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", @@ -18511,16 +18987,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", @@ -18656,22 +19122,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" @@ -18925,16 +19384,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": { @@ -18976,13 +19435,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", @@ -18996,23 +19448,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", @@ -19061,19 +19496,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", @@ -19196,6 +19618,13 @@ "node": ">=8" } }, + "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, + "license": "MIT" + }, "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -19209,21 +19638,12 @@ "through": "~2.3" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "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, - "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/picocolors": { "version": "1.1.1", @@ -19359,6 +19779,18 @@ "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", @@ -19458,9 +19890,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": { @@ -19485,33 +19917,17 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "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==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "parse-ms": "^4.0.0" - }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/proc-log": { @@ -19524,16 +19940,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", @@ -19685,26 +20091,6 @@ "node": ">= 0.10" } }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "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 - }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -19713,9 +20099,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": { @@ -19806,16 +20192,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", @@ -19868,6 +20244,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", @@ -20153,18 +20540,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", @@ -20210,9 +20585,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": { @@ -20222,22 +20597,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", @@ -20260,31 +20619,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" @@ -20314,35 +20673,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": [ { @@ -20356,28 +20702,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" @@ -20386,163 +20730,181 @@ "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", "peer": true, "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": { @@ -20553,16 +20915,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": { @@ -20573,9 +20935,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": [ { @@ -20605,13 +20967,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" @@ -20630,77 +20992,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": { @@ -20709,79 +21004,40 @@ } }, "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==", + "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", "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" + "git-up": "^8.1.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==", + "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/core": "^10.1.2", - "@inquirer/prompts": "^7.2.1", - "@inquirer/type": "^3.0.2", - "ansi-escapes": "^4.3.2", + "@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": "^3.0.0", - "rxjs": "^7.8.1" + "run-async": "^4.0.6", + "rxjs": "^7.8.2" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/release-it/node_modules/is-interactive": { @@ -20797,32 +21053,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/release-it/node_modules/is-unicode-supported": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", @@ -20836,50 +21066,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": { @@ -20892,36 +21120,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", @@ -20939,16 +21137,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" @@ -20958,24 +21156,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" @@ -20995,32 +21193,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", @@ -21039,9 +21211,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": { @@ -21049,9 +21221,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": { @@ -21074,41 +21246,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": { @@ -21121,23 +21279,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" }, @@ -21189,19 +21334,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" } @@ -21302,14 +21450,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" @@ -21321,96 +21469,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": { @@ -21418,44 +21547,21 @@ "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", "peer": true, "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -21465,28 +21571,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", @@ -21494,9 +21616,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": { @@ -21800,19 +21922,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", @@ -21849,24 +21958,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", @@ -22014,21 +22105,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", @@ -22132,13 +22208,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" }, @@ -22146,6 +22222,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", @@ -22367,12 +22466,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", @@ -22397,30 +22499,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==", + "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/stream-combiner": { @@ -22433,34 +22523,6 @@ "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/streamroller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", @@ -22740,10 +22802,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", @@ -22779,20 +22852,19 @@ "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": { @@ -23112,20 +23184,30 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "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" @@ -23135,11 +23217,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" }, @@ -23150,9 +23235,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", "peer": true, @@ -23214,16 +23299,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", @@ -23280,9 +23355,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": { @@ -23711,9 +23786,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", "peer": true, @@ -23726,15 +23801,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" @@ -23744,8 +23820,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": { @@ -23806,9 +23882,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": { @@ -23845,9 +23921,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": { @@ -23855,28 +23931,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", @@ -23920,15 +23983,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", @@ -23939,6 +23993,42 @@ "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", + "peer": true, + "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", @@ -23951,9 +24041,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": [ { @@ -23969,6 +24059,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -24006,9 +24097,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": { @@ -24019,9 +24110,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": { @@ -24051,20 +24142,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", @@ -24151,291 +24228,120 @@ } }, "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/walk-up-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webextension-polyfill": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz", - "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", - "peer": true, - "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14.17.0" + "node": ">=0.10.0" } }, - "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/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, - "bin": { - "envinfo": "dist/cli.js" + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "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==", + "node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true, + "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==", "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, "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==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { - "resolve": "^1.20.0" - }, + "defaults": "^1.0.3" + } + }, + "node_modules/webextension-polyfill": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz", + "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": ">= 10.13.0" + "node": ">=12" } }, - "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==", + "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": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" + "@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": ">=18.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, "node_modules/webpack-merge": { @@ -24448,16 +24354,6 @@ "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", @@ -24549,9 +24445,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" }, @@ -24653,15 +24549,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" }, @@ -24699,9 +24597,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": { @@ -24712,9 +24610,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" }, @@ -24737,9 +24635,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": { @@ -24752,12 +24650,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", @@ -24766,9 +24658,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": { @@ -25158,10 +25050,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" @@ -25179,6 +25070,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", @@ -25241,7 +25164,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", @@ -25373,9 +25297,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": { @@ -25386,9 +25310,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": { @@ -25411,8 +25335,8 @@ "@types/webextension-polyfill": "^0.12.3" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25423,9 +25347,9 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@toruslabs/customauth": "^21.0.0", + "@toruslabs/customauth": "^22.1.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", "ts-custom-error": "^3.3.1" @@ -25435,8 +25359,8 @@ "@types/elliptic": "^6.4.18" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25462,8 +25386,8 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", "ethereum-cryptography": "^3.1.0", @@ -25474,8 +25398,8 @@ "@types/elliptic": "^6.4.18" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25495,21 +25419,21 @@ } }, "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==", + "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": { @@ -25536,11 +25460,11 @@ "@tkey/private-keys": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1" + "@toruslabs/http-helpers": "^9.0.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25561,9 +25485,9 @@ } }, "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": { @@ -25571,12 +25495,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": { @@ -25597,8 +25521,8 @@ "@types/bn.js": "^5.1.6" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25617,8 +25541,8 @@ "@types/bn.js": "^5.1.6" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25637,8 +25561,8 @@ "@types/bn.js": "^5.1.6" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25658,8 +25582,8 @@ "@types/elliptic": "^6.4.18" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25671,16 +25595,16 @@ "license": "MIT", "dependencies": { "@tkey/service-provider-base": "^16.0.0", - "@toruslabs/fetch-node-details": "^15.0.0", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1" }, "devDependencies": { "@types/bn.js": "^5.1.6" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25693,8 +25617,8 @@ "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", + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1" }, @@ -25703,8 +25627,8 @@ "@types/elliptic": "^6.4.18" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25720,8 +25644,8 @@ "ethereum-cryptography": "^3.1.0" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25734,15 +25658,15 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", + "@toruslabs/http-helpers": "^9.0.0", "bn.js": "^5.2.1" }, "devDependencies": { "@types/bn.js": "^5.1.6" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -25762,21 +25686,21 @@ } }, "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": { @@ -25790,7 +25714,7 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/http-helpers": "^8.1.1", + "@toruslabs/http-helpers": "^9.0.0", "base64url": "3.0.1", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0", @@ -25801,29 +25725,29 @@ "@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": { @@ -25839,10 +25763,10 @@ "@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/customauth": "^22.1.0", + "@toruslabs/http-helpers": "^9.0.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", @@ -25854,24 +25778,28 @@ "jsrsasign": "^11.1.0", "tsx": "^4.19.3", "typescript": "^5.8.2" + }, + "engines": { + "node": ">=22.x", + "npm": ">=10.x" } }, "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==", + "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": { @@ -25895,8 +25823,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 4b916a54d..753ac2548 100644 --- a/package.json +++ b/package.json @@ -32,11 +32,11 @@ "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", @@ -44,7 +44,7 @@ "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", diff --git a/packages/chrome-storage/package.json b/packages/chrome-storage/package.json index 8a67a174b..53752fa2c 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": [ @@ -55,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/common-types/package.json b/packages/common-types/package.json index 4ced7dba0..ec42d1a8c 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,9 +43,9 @@ "@babel/runtime": "7.x" }, "dependencies": { - "@toruslabs/customauth": "^21.0.0", + "@toruslabs/customauth": "^22.1.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", "ts-custom-error": "^3.3.1" @@ -64,8 +64,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/core/package.json b/packages/core/package.json index 66f01ca61..9848817e7 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": { @@ -36,8 +36,8 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", "ethereum-cryptography": "^3.1.0", @@ -72,8 +72,8 @@ "tkey" ], "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index e5aadfe08..30c447bec 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -45,7 +45,7 @@ import { TkeyStoreItemType, toPrivKeyECC, } from "@tkey/common-types"; -import { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; +import { encodeEd25519Point, getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; import BN from "bn.js"; import { getRandomBytes } from "ethereum-cryptography/random"; import stringify from "json-stable-stringify"; @@ -1472,7 +1472,10 @@ 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: Buffer.from(encodeEd25519Point(keyPair.point)).toString("hex"), + }); this._ed25519Seed = seed; } diff --git a/packages/default/package.json b/packages/default/package.json index 199b57791..3560109e6 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": { @@ -48,7 +48,7 @@ "@tkey/private-keys": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1" + "@toruslabs/http-helpers": "^9.0.0" }, "peerDependencies": { "@babel/runtime": "7.x" @@ -78,8 +78,8 @@ "tkey" ], "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/private-keys/package.json b/packages/private-keys/package.json index d4ca21362..9b4ebee0a 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": [ @@ -55,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/security-questions/package.json b/packages/security-questions/package.json index 46a1fe9a0..9ca0ac03c 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": [ @@ -55,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/seed-phrase/package.json b/packages/seed-phrase/package.json index a134de9d3..eafab977b 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": [ @@ -55,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/service-provider-base/package.json b/packages/service-provider-base/package.json index 6db455f01..8a8b222db 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": [ @@ -61,8 +61,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/service-provider-sfa/package.json b/packages/service-provider-sfa/package.json index 415f1b313..59c68375c 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,8 +38,8 @@ }, "dependencies": { "@tkey/service-provider-base": "^16.0.0", - "@toruslabs/fetch-node-details": "^15.0.0", - "@toruslabs/torus.js": "^16.0.0", + "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1" }, "devDependencies": { @@ -55,8 +55,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "9967ce9f795f495f28ef0da1fc50acde31dcc258" } diff --git a/packages/service-provider-torus/package.json b/packages/service-provider-torus/package.json index 2dbd46a5e..34b7c20c5 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,8 +40,8 @@ "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", + "@toruslabs/customauth": "^22.1.0", + "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1" }, @@ -59,8 +59,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/share-serialization/package.json b/packages/share-serialization/package.json index a32eb7dc9..487cbe806 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": [ @@ -57,8 +57,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/share-transfer/package.json b/packages/share-transfer/package.json index 5828d0db3..4719ee74f 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": [ @@ -40,7 +40,7 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", - "@toruslabs/http-helpers": "^8.1.1", + "@toruslabs/http-helpers": "^9.0.0", "bn.js": "^5.2.1" }, "devDependencies": { @@ -56,8 +56,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/storage-layer-torus/package.json b/packages/storage-layer-torus/package.json index 39c17a52d..32db780c4 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,7 +39,7 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/http-helpers": "^8.1.1", + "@toruslabs/http-helpers": "^9.0.0", "base64url": "3.0.1", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0", @@ -59,8 +59,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } diff --git a/packages/tss/package.json b/packages/tss/package.json index 7c70e193e..f9b73ec7f 100644 --- a/packages/tss/package.json +++ b/packages/tss/package.json @@ -4,8 +4,8 @@ "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", + "unpkg": "dist/lib.esm/index.js", + "jsdelivr": "dist/lib.esm/index.js", "types": "dist/lib.cjs/types/index.d.ts", "sideEffects": false, "files": [ @@ -24,10 +24,10 @@ "@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/customauth": "^22.1.0", + "@toruslabs/http-helpers": "^9.0.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", @@ -39,5 +39,9 @@ "jsrsasign": "^11.1.0", "tsx": "^4.19.3", "typescript": "^5.8.2" + }, + "engines": { + "node": ">=22.x", + "npm": ">=10.x" } } diff --git a/packages/tss/src/tss.ts b/packages/tss/src/tss.ts index d4d78c88f..aa98b3b62 100644 --- a/packages/tss/src/tss.ts +++ b/packages/tss/src/tss.ts @@ -16,7 +16,7 @@ import { 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 { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed, getKeyCurve, getSecpKeyFromEd25519 } from "@toruslabs/torus.js"; import BN from "bn.js"; import { ec as EC } from "elliptic"; import { keccak256 } from "ethereum-cryptography/keccak"; @@ -378,11 +378,11 @@ export class TKeyTSS extends TKey { } const { scalar } = getEd25519KeyPairFromSeed(importKey); - const encKey = Buffer.from(getSecpKeyFromEd25519(scalar).point.encodeCompressed("hex"), "hex"); + const encKey = Buffer.from(getKeyCurve(KeyType.secp256k1).Point.fromAffine(getSecpKeyFromEd25519(scalar).point).toBytes(true)); const msg = await encrypt(encKey, importKey); this.metadata.setGeneralStoreDomain(domainKey, { message: msg }); - return scalar; + return new BN(scalar.toString(16), 16); } throw new Error("Invalid key type"); })(); @@ -540,9 +540,10 @@ export class TKeyTSS extends TKey { const domainKey = getEd25519SeedStoreDomainKey(this.tssTag || TSS_TAG_DEFAULT); const result = this.metadata.getGeneralStoreDomain(domainKey) as Record; - const decKey = getSecpKeyFromEd25519(edScalar).scalar; + const decKey = getSecpKeyFromEd25519(BigInt(`0x${edScalar.toString(16)}`)).scalar; + const decKeyBuffer = Buffer.from(decKey.toString(16).padStart(64, "0"), "hex"); - const seed = await decrypt(decKey.toArrayLike(Buffer, "be", 32), result.message); + const seed = await decrypt(decKeyBuffer, result.message); return seed; } diff --git a/packages/web-storage/package.json b/packages/web-storage/package.json index 91a713e4e..9794cac0a 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": [ @@ -63,8 +63,8 @@ ] }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" }, "gitHead": "4ff88f7fe92b8c85bd0bfde069cde2e56005faca" } From 09876d430ad6cdea8cf0c14a6e36cbf5835920b8 Mon Sep 17 00:00:00 2001 From: Tuna Date: Thu, 26 Feb 2026 14:52:59 +0700 Subject: [PATCH 04/57] feat: Buffer remove phase 1 before ecc to noble --- package-lock.json | 19 +++++++-- packages/common-types/package.json | 1 + packages/common-types/src/base/BNUtils.ts | 7 ++-- packages/common-types/src/base/Point.ts | 21 ++++++---- .../src/baseTypes/aggregateTypes.ts | 12 +++--- .../common-types/src/baseTypes/commonTypes.ts | 8 ++-- packages/common-types/src/utils.ts | 31 +++++++------- packages/core/package.json | 1 + packages/core/src/authMetadata.ts | 5 ++- packages/core/src/core.ts | 40 +++++++++---------- packages/core/src/metadata.ts | 3 +- packages/default/package.json | 1 + packages/default/test/ed25519/ed25519.ts | 15 +++---- packages/default/test/shared.js | 19 ++++----- packages/private-keys/package.json | 1 + packages/private-keys/src/ED25519Format.ts | 5 ++- packages/private-keys/src/SECP256K1Format.ts | 6 +-- packages/security-questions/package.json | 1 + .../src/SecurityQuestionsModule.ts | 3 +- packages/service-provider-base/package.json | 1 + .../src/ServiceProviderBase.ts | 9 +++-- packages/service-provider-base/test/test.js | 5 ++- packages/service-provider-sfa/package.json | 1 + .../src/SfaServiceProvider.ts | 3 +- packages/share-serialization/package.json | 1 + packages/share-serialization/src/utils.ts | 17 ++++---- packages/share-transfer/package.json | 1 + packages/share-transfer/src/ShareRequest.ts | 6 +-- .../share-transfer/src/ShareTransferModule.ts | 13 +++--- packages/storage-layer-torus/package.json | 1 + .../src/TorusStorageLayer.ts | 22 +++++----- packages/tss/package.json | 7 ++-- packages/tss/src/tss.ts | 22 +++++----- packages/tss/test/helpers.ts | 13 +++--- packages/tss/test/tss.ts | 8 ++-- 35 files changed, 187 insertions(+), 142 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb5b0899f..98445af1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6746,6 +6746,7 @@ "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", @@ -15199,7 +15200,6 @@ "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" @@ -25349,6 +25349,7 @@ "dependencies": { "@toruslabs/customauth": "^22.1.0", "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", @@ -25387,6 +25388,7 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", @@ -25454,6 +25456,7 @@ "@tkey/share-serialization": "^16.0.0", "@tkey/share-transfer": "^16.0.0", "@tkey/storage-layer-torus": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1" }, "devDependencies": { @@ -25514,6 +25517,7 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/tweetnacl-js": "^1.0.4", "bn.js": "^5.2.1" }, @@ -25534,6 +25538,7 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, @@ -25574,6 +25579,7 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1" }, @@ -25596,6 +25602,7 @@ "dependencies": { "@tkey/service-provider-base": "^16.0.0", "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1" }, @@ -25640,6 +25647,7 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, @@ -25659,6 +25667,7 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1" }, "devDependencies": { @@ -25715,6 +25724,7 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "base64url": "3.0.1", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0", @@ -25763,19 +25773,20 @@ "@tkey/common-types": "^16.0.0", "@tkey/core": "^16.0.0", "@tkey/service-provider-torus": "^16.0.0", + "@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": "^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" }, diff --git a/packages/common-types/package.json b/packages/common-types/package.json index ec42d1a8c..52c0b914b 100644 --- a/packages/common-types/package.json +++ b/packages/common-types/package.json @@ -45,6 +45,7 @@ "dependencies": { "@toruslabs/customauth": "^22.1.0", "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", diff --git a/packages/common-types/src/base/BNUtils.ts b/packages/common-types/src/base/BNUtils.ts index 188ef06c0..ca07149c6 100644 --- a/packages/common-types/src/base/BNUtils.ts +++ b/packages/common-types/src/base/BNUtils.ts @@ -1,4 +1,5 @@ import { getPublic } from "@toruslabs/eccrypto"; +import { hexToBytes } from "@toruslabs/metadata-helpers"; import BN from "bn.js"; import type { curve, ec } from "elliptic"; @@ -9,14 +10,14 @@ 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 => { +export const toPrivKeyECC = (bn: BNString): Uint8Array => { const tmp = new BN(bn, "hex"); - return Buffer.from(tmp.toString("hex", 64), "hex"); + return hexToBytes(tmp.toString("hex", 64)); }; 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 getPubKeyECC = (bn: BN): Uint8Array => getPublic(Buffer.from(toPrivKeyECC(bn))); export const getPubKeyPoint = (bn: BN): Point => { const pubKeyEc = getPubKeyEC(bn); diff --git a/packages/common-types/src/base/Point.ts b/packages/common-types/src/base/Point.ts index 7c3fb8148..aa1f30294 100644 --- a/packages/common-types/src/base/Point.ts +++ b/packages/common-types/src/base/Point.ts @@ -1,3 +1,5 @@ +import { hexToBytes } from "@toruslabs/metadata-helpers"; +import { concatBytes } from "@toruslabs/torus.js"; import BN from "bn.js"; import { BNString, EllipticCurve, EllipticPoint, IPoint, StringifiedType } from "../baseTypes/commonTypes"; @@ -59,14 +61,19 @@ class Point implements IPoint { * * 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 "arr": { + const prefix = hexToBytes("0x04"); + const xBytes = hexToBytes(this.x.toString("hex")); + const yBytes = hexToBytes(this.y.toString("hex")); + const result = concatBytes(prefix, xBytes, yBytes); + return result; + } 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")); + return hexToBytes(key.getPublic(true, "hex")); } default: throw new Error("encoding doesnt exist in Point"); @@ -88,14 +95,14 @@ class Point implements IPoint { * @param compressed - Whether to use compressed format. * @returns The SEC1-encoded point. */ - toSEC1(ec: EllipticCurve, compressed = false): Buffer { + toSEC1(ec: EllipticCurve, compressed = false): Uint8Array { // "elliptic"@6.5.4 can't encode identity. if (this.isIdentity()) { - return Buffer.from("00", "hex"); + return hexToBytes("00"); } const p = this.toEllipticPoint(ec); - return Buffer.from(p.encode("hex", compressed), "hex"); + return hexToBytes(p.encode("hex", compressed)); } toJSON(): StringifiedType { diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index f59903c43..0b1167900 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -116,14 +116,14 @@ export interface IMetadata extends ISerializable { export type InitializeNewKeyResult = { secp256k1Key: BN; - ed25519Seed?: Buffer; + ed25519Seed?: Uint8Array; deviceShare?: ShareStore; userShare?: ShareStore; }; export type ReconstructedKeyResult = { secp256k1Key: BN; - ed25519Seed?: Buffer; + ed25519Seed?: Uint8Array; seedPhrase?: BN[]; allKeys?: BN[]; }; @@ -293,8 +293,8 @@ export interface ITKeyApi { outputShare(shareIndex: BNString, type?: string): Promise; inputShareStore(shareStore: ShareStore): void; deleteShare(shareIndex: BNString): Promise; - encrypt(data: Buffer): Promise; - decrypt(encryptedMesage: EncryptedMessage): Promise; + encrypt(data: Uint8Array): Promise; + decrypt(encryptedMesage: EncryptedMessage): Promise; getTKeyStoreItem(moduleName: string, id: string): Promise; getTKeyStore(moduleName: string): Promise; @@ -313,7 +313,7 @@ export interface ITKey extends ITKeyApi, ISerializable { secp256k1Key: BN; - ed25519Key: Buffer; + ed25519Key: Uint8Array; manualSync: boolean; @@ -337,7 +337,7 @@ export interface ITKey extends ITKeyApi, ISerializable { export type TKeyInitArgs = { withShare?: ShareStore; importKey?: BN; - importEd25519Seed?: Buffer; + 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..a32d83e07 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -40,7 +40,7 @@ export interface ISerializable { export interface IPoint extends ISerializable { x: BN | null; y: BN | null; - encode(enc: string, params?: unknown): Buffer; + encode(enc: string, params?: unknown): Uint8Array; } export interface IServiceProvider extends ISerializable { @@ -52,9 +52,9 @@ export interface IServiceProvider extends ISerializable { migratableKey?: BN | null; - encrypt(msg: Buffer): Promise; - decrypt(msg: EncryptedMessage): Promise; - retrievePubKey(type: PubKeyType): Buffer; + encrypt(msg: Uint8Array): Promise; + decrypt(msg: EncryptedMessage): Promise; + retrievePubKey(type: PubKeyType): Uint8Array; retrievePubKeyPoint(): EllipticPoint; sign(msg: BNString): string; } diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 205bbdabd..35024369f 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -1,5 +1,6 @@ import { serializeError } from "@toruslabs/customauth"; import { decrypt as ecDecrypt, encrypt as ecEncrypt, generatePrivate } 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"; @@ -8,28 +9,28 @@ import { EncryptedMessage } from "./baseTypes/commonTypes"; export const secp256k1 = new EC("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 { - const encryptedDetails = await ecEncrypt(publicKey, msg); +// eccrypto boundary: convert Uint8Array <-> Buffer at the edge +export async function encrypt(publicKey: Uint8Array, msg: Uint8Array): Promise { + const encryptedDetails = await ecEncrypt(Buffer.from(publicKey), Buffer.from(msg)); return { - ciphertext: encryptedDetails.ciphertext.toString("hex"), - ephemPublicKey: encryptedDetails.ephemPublicKey.toString("hex"), - iv: encryptedDetails.iv.toString("hex"), - mac: encryptedDetails.mac.toString("hex"), + ciphertext: bytesToHex(new Uint8Array(encryptedDetails.ciphertext)), + ephemPublicKey: bytesToHex(new Uint8Array(encryptedDetails.ephemPublicKey)), + iv: bytesToHex(new Uint8Array(encryptedDetails.iv)), + mac: bytesToHex(new Uint8Array(encryptedDetails.mac)), }; } -export async function decrypt(privKey: Buffer, msg: EncryptedMessage): Promise { +export async function decrypt(privKey: Uint8Array, 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"), + ciphertext: Buffer.from(hexToBytes(msg.ciphertext)), + ephemPublicKey: Buffer.from(hexToBytes(msg.ephemPublicKey)), + iv: Buffer.from(hexToBytes(msg.iv)), + mac: Buffer.from(hexToBytes(msg.mac)), }; - return ecDecrypt(privKey, bufferEncDetails); + const result = await ecDecrypt(Buffer.from(privKey), bufferEncDetails); + return new Uint8Array(result); } export function isEmptyObject(obj: unknown): boolean { @@ -45,7 +46,7 @@ export async function prettyPrintError(error: unknown): Promise { return serializeError(error); } -export function generateAddressFromPublicKey(publicKey: Buffer): string { +export function generateAddressFromPublicKey(publicKey: Uint8Array): string { const ethAddressLower = `0x${keccak256(publicKey).slice(64 - 38)}`; return toChecksumAddress(ethAddressLower); } diff --git a/packages/core/package.json b/packages/core/package.json index 9848817e7..dfe072998 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -37,6 +37,7 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1", diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index 7f8a4c0f7..8b946f1f3 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -1,4 +1,5 @@ import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyEC } from "@tkey/common-types"; +import { utf8ToBytes } from "@toruslabs/metadata-helpers"; import { keccak256 } from "@toruslabs/torus.js"; import BN from "bn.js"; import stringify from "json-stable-stringify"; @@ -24,7 +25,7 @@ class AuthMetadata implements IAuthMetadata { 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)) { + if (!keyPair.verify(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))), sig)) { throw CoreError.default("Signature not valid for returning metadata"); } return new AuthMetadata(m); @@ -35,7 +36,7 @@ class AuthMetadata implements IAuthMetadata { if (!this.privKey) throw CoreError.privKeyUnavailable(); const k = toPrivKeyEC(this.privKey); - const sig = k.sign(stripHexPrefix(keccak256(Buffer.from(stringify(data), "utf8")))); + const sig = k.sign(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); return { data, diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 30c447bec..91c78733c 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -45,6 +45,7 @@ import { TkeyStoreItemType, toPrivKeyECC, } from "@tkey/common-types"; +import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { encodeEd25519Point, getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; import BN from "bn.js"; import { getRandomBytes } from "ethereum-cryptography/random"; @@ -93,7 +94,7 @@ class ThresholdKey implements ITKey { // secp256k1 key private privKey: BN; - private _ed25519Seed?: Buffer; + private _ed25519Seed?: Uint8Array; constructor(args?: TKeyArgs) { const { enableLogging = false, modules = {}, serviceProvider, storageLayer, manualSync = false, serverTimeOffset } = args || {}; @@ -122,7 +123,7 @@ class ThresholdKey implements ITKey { return null; } - get ed25519Key(): Buffer | null { + get ed25519Key(): Uint8Array | null { if (typeof this._ed25519Seed !== "undefined") { return this._ed25519Seed; } @@ -133,7 +134,7 @@ class ThresholdKey implements ITKey { this.privKey = privKey; } - protected set ed25519Key(seed: Buffer) { + protected set ed25519Key(seed: Uint8Array) { this._ed25519Seed = seed; } @@ -162,7 +163,7 @@ 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"); + if (ed25519Key) tb.ed25519Key = hexToBytes(ed25519Key); tb.shares = shares; @@ -617,7 +618,7 @@ class ThresholdKey implements ITKey { return result?.publicKey; } - async retrieveEd25519Seed(): Promise { + async retrieveEd25519Seed(): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); } @@ -1061,12 +1062,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 +1080,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))); const duplicateItemIndex = decryptedItems.findIndex((x) => x.id === data.id); if (duplicateItemIndex > -1) { rawTkeyStoreItems[duplicateItemIndex] = encryptedData; @@ -1103,7 +1104,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 +1121,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 +1136,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); @@ -1174,7 +1175,7 @@ class ThresholdKey implements ITKey { shares: this.shares, enableLogging: this.enableLogging, privKey: this.privKey ? this.privKey.toString("hex") : undefined, - ed25519Key: this.ed25519Key ? this.ed25519Key.toString("hex") : undefined, + ed25519Key: this.ed25519Key ? bytesToHex(this.ed25519Key) : undefined, metadata: this.metadata, lastFetchedCloudMetadata: this.lastFetchedCloudMetadata, _localMetadataTransitions: this._localMetadataTransitions, @@ -1323,7 +1324,7 @@ class ThresholdKey implements ITKey { 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]))); + const encryptedShare = await encrypt(getPubKeyECC(oldShare), utf8ToBytes(JSON.stringify(newShareStores[shareIndex]))); newScopedStore[getPubKeyPoint(oldShare).x.toString("hex")] = encryptedShare; oldShareStores[shareIndex] = new ShareStore(new Share(shareIndex, oldShare), previousPolyID); return oldShare; @@ -1380,7 +1381,7 @@ class ThresholdKey implements ITKey { determinedShare?: BN; initializeModules?: boolean; importedKey?: BN; - importEd25519Seed?: Buffer; + importEd25519Seed?: Uint8Array; delete1OutOf1?: boolean; } = {}): Promise { this.lastFetchedCloudMetadata = undefined; @@ -1461,7 +1462,7 @@ class ThresholdKey implements ITKey { return result; } - private async importEd25519Seed(seed: Buffer): Promise { + private async importEd25519Seed(seed: Uint8Array): Promise { if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } @@ -1474,19 +1475,18 @@ class ThresholdKey implements ITKey { this.metadata.setGeneralStoreDomain(ed25519SeedConst, { message: await this.encrypt(seed), - publicKey: Buffer.from(encodeEd25519Point(keyPair.point)).toString("hex"), + 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 = await getRandomBytes(32); } await this.importEd25519Seed(seedToUse); } diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index bb4df5723..c6065f851 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -21,6 +21,7 @@ import { StringifiedType, toPrivKeyECC, } from "@tkey/common-types"; +import { bytesToHex } from "@toruslabs/metadata-helpers"; import BN from "bn.js"; import stringify from "json-stable-stringify"; @@ -321,7 +322,7 @@ class Metadata implements IMetadata { } return { - pubKey: this.pubKey.toSEC1(secp256k1, true).toString("hex"), + pubKey: bytesToHex(this.pubKey.toSEC1(secp256k1, true)), polyIDList: serializedPolyIDList, scopedStore: this.scopedStore, generalStore: this.generalStore, diff --git a/packages/default/package.json b/packages/default/package.json index 3560109e6..887282415 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -42,6 +42,7 @@ "@tkey/share-serialization": "^16.0.0", "@tkey/share-transfer": "^16.0.0", "@tkey/storage-layer-torus": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1" }, "devDependencies": { diff --git a/packages/default/test/ed25519/ed25519.ts b/packages/default/test/ed25519/ed25519.ts index 0cfcd32df..bd7ef425d 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 { 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"; @@ -44,12 +45,12 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic await newInstance.reconstructKey(); assert.strictEqual(secp.toString("hex"), newInstance.secp256k1Key.toString("hex")); - assert.strictEqual(ed.toString("hex"), newInstance.ed25519Key.toString("hex")); + 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: generatePrivateBN(), importEd25519Seed: new Uint8Array(randomBytes(32)) }); assert.fail("should not be able to reinitialize with import key"); } catch (error) {} }); @@ -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 }); @@ -87,12 +88,12 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic newInstance.inputShareStore(share.newShareStores[share.newShareIndex.toString("hex")]); 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: generatePrivateBN(), importEd25519Seed: new Uint8Array(randomBytes(32)) }); assert.fail("should not be able to reinitialize with import key"); } catch (error) {} }); @@ -121,12 +122,12 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic await newInstance.reconstructKey(); assert.strictEqual(secp.toString("hex"), newInstance.secp256k1Key.toString("hex")); - 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: generatePrivateBN(), importEd25519Seed: new Uint8Array(randomBytes(32)) }); assert.fail("should not be able to reinitialize with import key"); } catch (error) {} }); diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index ea0f965a5..4c895d348 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -12,6 +12,7 @@ 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 { 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"; @@ -101,7 +102,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let determinedShare = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); determinedShare = determinedShare.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ determinedShare, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -131,7 +132,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -146,7 +147,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); const newShares = await tb.generateNewShare(); @@ -163,7 +164,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); const newShares = await tb.generateNewShare(); @@ -445,7 +446,7 @@ 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.generateNewShare(); @@ -458,7 +459,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.generateNewShare(); @@ -471,7 +472,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); @@ -499,7 +500,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); 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"); + let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(secp256k1.curve.n); const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -1493,7 +1494,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"); diff --git a/packages/private-keys/package.json b/packages/private-keys/package.json index 9b4ebee0a..5039607f7 100644 --- a/packages/private-keys/package.json +++ b/packages/private-keys/package.json @@ -42,6 +42,7 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/tweetnacl-js": "^1.0.4", "bn.js": "^5.2.1" }, diff --git a/packages/private-keys/src/ED25519Format.ts b/packages/private-keys/src/ED25519Format.ts index ea4d33088..c9468de74 100644 --- a/packages/private-keys/src/ED25519Format.ts +++ b/packages/private-keys/src/ED25519Format.ts @@ -1,4 +1,5 @@ import { generateID, IPrivateKeyFormat, IPrivateKeyStore } from "@tkey/common-types"; +import { base64ToBytes, bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; import nacl from "@toruslabs/tweetnacl-js"; import BN from "bn.js"; @@ -16,8 +17,8 @@ export class ED25519Format implements IPrivateKeyFormat { // Validation as per // https://github.com/solana-labs/solana-web3.js/blob/e1567ab/src/keypair.ts#L65 try { - const secretKey = Buffer.from(privateKey.toString("hex"), "hex").toString("base64"); - const keypair = nacl.sign.keyPair.fromSecretKey(Buffer.from(secretKey, "base64")); + const secretKey = bytesToBase64(hexToBytes(privateKey.toString("hex"))); + const keypair = nacl.sign.keyPair.fromSecretKey(base64ToBytes(secretKey)); const encoder = new TextEncoder(); const signData = encoder.encode("@solana/web3.js-validation-v1"); const signature = nacl.sign.detached(signData, keypair.secretKey); diff --git a/packages/private-keys/src/SECP256K1Format.ts b/packages/private-keys/src/SECP256K1Format.ts index 0f81f3878..f17dc88fe 100644 --- a/packages/private-keys/src/SECP256K1Format.ts +++ b/packages/private-keys/src/SECP256K1Format.ts @@ -4,13 +4,13 @@ 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 { +function randomBytes(size: number): Uint8Array { if (typeof browserCrypto.getRandomValues === "undefined") { - return Buffer.from(browserCrypto.randomBytes(size)); + return new Uint8Array(browserCrypto.randomBytes(size)); } const arr = new Uint8Array(size); browserCrypto.getRandomValues(arr); - return Buffer.from(arr); + return arr; } export class SECP256K1Format implements IPrivateKeyFormat { diff --git a/packages/security-questions/package.json b/packages/security-questions/package.json index 9ca0ac03c..8fb0e2b47 100644 --- a/packages/security-questions/package.json +++ b/packages/security-questions/package.json @@ -42,6 +42,7 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, diff --git a/packages/security-questions/src/SecurityQuestionsModule.ts b/packages/security-questions/src/SecurityQuestionsModule.ts index b48b1806b..4ae19ecf0 100644 --- a/packages/security-questions/src/SecurityQuestionsModule.ts +++ b/packages/security-questions/src/SecurityQuestionsModule.ts @@ -10,6 +10,7 @@ import { ShareStore, ShareStoreMap, } from "@tkey/common-types"; +import { utf8ToBytes } from "@toruslabs/metadata-helpers"; import BN from "bn.js"; import { keccak256 } from "ethereum-cryptography/keccak"; @@ -17,7 +18,7 @@ import SecurityQuestionsError from "./errors"; import SecurityQuestionStore from "./SecurityQuestionStore"; function answerToUserInputHashBN(answerString: string): BN { - return new BN(keccak256(Buffer.from(answerString, "utf8"))); + return new BN(keccak256(utf8ToBytes(answerString))); } export const SECURITY_QUESTIONS_MODULE_NAME = "securityQuestions"; diff --git a/packages/service-provider-base/package.json b/packages/service-provider-base/package.json index 8a8b222db..8768632bd 100644 --- a/packages/service-provider-base/package.json +++ b/packages/service-provider-base/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1", "elliptic": "^6.6.1" }, diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 36dc93209..0eb17d35a 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -11,6 +11,7 @@ import { toPrivKeyEC, toPrivKeyECC, } from "@tkey/common-types"; +import { bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; import BN from "bn.js"; import { curve } from "elliptic"; @@ -37,12 +38,12 @@ 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); } @@ -50,7 +51,7 @@ class ServiceProviderBase implements IServiceProvider { return toPrivKeyEC(this.postboxKey).getPublic(); } - retrievePubKey(type: PubKeyType): Buffer { + retrievePubKey(type: PubKeyType): Uint8Array { if (type === "ecc") { return getPubKeyECC(this.postboxKey); } @@ -60,7 +61,7 @@ class ServiceProviderBase implements IServiceProvider { 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"); + return bytesToBase64(hexToBytes(sig.r.toString(16, 64) + sig.s.toString(16, 64) + new BN(0).toString(16, 2))); } toJSON(): StringifiedType { diff --git a/packages/service-provider-base/test/test.js b/packages/service-provider-base/test/test.js index d048101e3..126a7271c 100644 --- a/packages/service-provider-base/test/test.js +++ b/packages/service-provider-base/test/test.js @@ -1,3 +1,4 @@ +import { hexToBytes } from "@toruslabs/metadata-helpers"; import { deepStrictEqual } from "assert"; import BN from "bn.js"; @@ -9,7 +10,7 @@ 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 message = hexToBytes(tmp.toString("hex", 15)); const tsp = new ServiceProviderBase({ postboxKey: privKey }); const encDeets = await tsp.encrypt(message); const result = await tsp.decrypt(encDeets); @@ -19,7 +20,7 @@ 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 message = hexToBytes(tmp.toString("hex", 16)); 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 59c68375c..d263b2f35 100644 --- a/packages/service-provider-sfa/package.json +++ b/packages/service-provider-sfa/package.json @@ -39,6 +39,7 @@ "dependencies": { "@tkey/service-provider-base": "^16.0.0", "@toruslabs/fetch-node-details": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "bn.js": "^5.2.1" }, diff --git a/packages/service-provider-sfa/src/SfaServiceProvider.ts b/packages/service-provider-sfa/src/SfaServiceProvider.ts index 593bc3a4e..9bea73d63 100644 --- a/packages/service-provider-sfa/src/SfaServiceProvider.ts +++ b/packages/service-provider-sfa/src/SfaServiceProvider.ts @@ -1,6 +1,7 @@ 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"; @@ -56,7 +57,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 }); diff --git a/packages/share-serialization/package.json b/packages/share-serialization/package.json index 487cbe806..0156acf5f 100644 --- a/packages/share-serialization/package.json +++ b/packages/share-serialization/package.json @@ -44,6 +44,7 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, diff --git a/packages/share-serialization/src/utils.ts b/packages/share-serialization/src/utils.ts index d0989a0dc..eec128ff4 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,7 +23,7 @@ export function bytesToBinary(bytes: number[]): string { return bytes.map((x) => lpad(x.toString(2), "0", 8)).join(""); } -export function deriveChecksumBits(entropyBuffer: Buffer): string { +export function deriveChecksumBits(entropyBuffer: Uint8Array): string { const ENT = entropyBuffer.length * 8; const CS = ENT / 32; const hash = sha256(entropyBuffer); @@ -30,10 +31,12 @@ export function deriveChecksumBits(entropyBuffer: Buffer): string { 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-transfer/package.json b/packages/share-transfer/package.json index 4719ee74f..628ccf7ae 100644 --- a/packages/share-transfer/package.json +++ b/packages/share-transfer/package.json @@ -41,6 +41,7 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "bn.js": "^5.2.1" }, "devDependencies": { diff --git a/packages/share-transfer/src/ShareRequest.ts b/packages/share-transfer/src/ShareRequest.ts index ad9329f15..d8bfc7f8a 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; @@ -18,9 +18,9 @@ class ShareRequest { constructor({ encPubKey, encShareInTransit, availableShareIndexes, userAgent, userIp, timestamp }: ShareRequestArgs) { const testEncPubKey = encPubKey as BufferObj; if (testEncPubKey.type === "Buffer") { - this.encPubKey = Buffer.from(testEncPubKey.data); + this.encPubKey = new Uint8Array(testEncPubKey.data); } else { - this.encPubKey = encPubKey as unknown as Buffer; + this.encPubKey = encPubKey as unknown as Uint8Array; } this.availableShareIndexes = availableShareIndexes; this.encShareInTransit = encShareInTransit; diff --git a/packages/share-transfer/src/ShareTransferModule.ts b/packages/share-transfer/src/ShareTransferModule.ts index eeb6e108e..63b25f343 100644 --- a/packages/share-transfer/src/ShareTransferModule.ts +++ b/packages/share-transfer/src/ShareTransferModule.ts @@ -12,6 +12,7 @@ import { toPrivKeyECC, } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; +import { bytesToUtf8, utf8ToBytes } from "@toruslabs/metadata-helpers"; import BN from "bn.js"; import ShareTransferError from "./errors"; @@ -108,7 +109,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 +144,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; @@ -155,10 +156,10 @@ class ShareTransferModule implements IModule { 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)); + 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; } @@ -195,7 +196,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); diff --git a/packages/storage-layer-torus/package.json b/packages/storage-layer-torus/package.json index 32db780c4..2840be922 100644 --- a/packages/storage-layer-torus/package.json +++ b/packages/storage-layer-torus/package.json @@ -40,6 +40,7 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/http-helpers": "^9.0.0", + "@toruslabs/metadata-helpers": "^8.1.0", "base64url": "3.0.1", "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0", diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index 5e1406834..995219fa9 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -10,7 +10,6 @@ import { ONE_KEY_DELETE_NONCE, ONE_KEY_NAMESPACE, prettyPrintError, - secp256k1, StringifiedType, toPrivKeyEC, toPrivKeyECC, @@ -18,13 +17,14 @@ import { TorusStorageLayerArgs, } from "@tkey/common-types"; import { post } from "@toruslabs/http-helpers"; +import { bytesToBase64, bytesToUtf8, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import base64url from "base64url"; import BN from "bn.js"; import { keccak256 } from "ethereum-cryptography/keccak"; 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"); + const sig = toPrivKeyEC(privKey).sign(keccak256(utf8ToBytes(stringify(data)))); return sig.toDER("hex"); } @@ -53,12 +53,12 @@ class TorusStorageLayer implements IStorageLayer { } // General case, encrypt message - const bufferMetadata = Buffer.from(stringify(el)); + const msgBytes = utf8ToBytes(stringify(el)); 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)); return serializedEncryptedDetails; @@ -84,14 +84,14 @@ class TorusStorageLayer implements IStorageLayer { } const encryptedMessage = JSON.parse(base64url.decode(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; } /** @@ -168,10 +168,10 @@ class TorusStorageLayer implements IStorageLayer { setTKeyStore.data = ""; } - const hash = keccak256(Buffer.from(stringify(setTKeyStore), "utf8")); + const hash = 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"); + sig = bytesToBase64(hexToBytes(unparsedSig.r.toString(16, 64) + unparsedSig.s.toString(16, 64) + new BN(0).toString(16, 2))); const pubK = getPubKeyPoint(privKey); pubX = pubK.x.toString("hex"); pubY = pubK.y.toString("hex"); @@ -200,7 +200,7 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(new BN(keccak256(Buffer.from(stringify(data), "utf8")))); + signature = serviceProvider.sign(new BN(keccak256(utf8ToBytes(stringify(data))))); } const metadataParams = { key: toPrivKeyEC(privKey).getPublic("hex"), @@ -220,7 +220,7 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(new BN(keccak256(Buffer.from(stringify(data), "utf8")))); + signature = serviceProvider.sign(new BN(keccak256(utf8ToBytes(stringify(data))))); } const metadataParams = { key: toPrivKeyEC(privKey).getPublic("hex"), diff --git a/packages/tss/package.json b/packages/tss/package.json index f9b73ec7f..4823eeab7 100644 --- a/packages/tss/package.json +++ b/packages/tss/package.json @@ -24,19 +24,20 @@ "@tkey/common-types": "^16.0.0", "@tkey/core": "^16.0.0", "@tkey/service-provider-torus": "^16.0.0", + "@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": "^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" }, diff --git a/packages/tss/src/tss.ts b/packages/tss/src/tss.ts index aa98b3b62..73ce11dda 100644 --- a/packages/tss/src/tss.ts +++ b/packages/tss/src/tss.ts @@ -15,6 +15,7 @@ import { } from "@tkey/common-types"; import { CoreError, TKey } from "@tkey/core"; import { post } from "@toruslabs/http-helpers"; +import { hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { dotProduct, ecPoint, hexPoint, PointHex, randomSelection, RSSClient } from "@toruslabs/rss-client"; import { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed, getKeyCurve, getSecpKeyFromEd25519 } from "@toruslabs/torus.js"; import BN from "bn.js"; @@ -213,11 +214,12 @@ export class TKeyTSS extends TKey { 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 factorKeyBytes = hexToBytes(factorKey.toString(16, 64)); + const userDecryption = await decrypt(factorKeyBytes, userEnc); const serverDecryptions = await Promise.all( serverEncs.map((factorEnc) => { if (factorEnc === null) return null; - return decrypt(Buffer.from(factorKey.toString(16, 64), "hex"), factorEnc); + return decrypt(factorKeyBytes, factorEnc); }) ); const tssShareBufs = [userDecryption].concat(serverDecryptions); @@ -333,7 +335,7 @@ export class TKeyTSS extends TKey { async importTssKey( params: { tag: string; - importKey: Buffer; + importKey: Uint8Array; factorPub: Point; newTSSIndex: number; }, @@ -378,7 +380,7 @@ export class TKeyTSS extends TKey { } const { scalar } = getEd25519KeyPairFromSeed(importKey); - const encKey = Buffer.from(getKeyCurve(KeyType.secp256k1).Point.fromAffine(getSecpKeyFromEd25519(scalar).point).toBytes(true)); + const encKey = new Uint8Array(getKeyCurve(KeyType.secp256k1).Point.fromAffine(getSecpKeyFromEd25519(scalar).point).toBytes(true)); const msg = await encrypt(encKey, importKey); this.metadata.setGeneralStoreDomain(domainKey, { message: msg }); @@ -533,7 +535,7 @@ export class TKeyTSS extends TKey { * * Reconstructs the TSS private key and exports the ed25519 private key seed. */ - async _UNSAFE_exportTssEd25519Seed(tssOptions: { factorKey: BN; selectedServers?: number[]; authSignatures: string[] }): Promise { + 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. @@ -541,9 +543,9 @@ export class TKeyTSS extends TKey { const result = this.metadata.getGeneralStoreDomain(domainKey) as Record; const decKey = getSecpKeyFromEd25519(BigInt(`0x${edScalar.toString(16)}`)).scalar; - const decKeyBuffer = Buffer.from(decKey.toString(16).padStart(64, "0"), "hex"); + const decKeyBytes = hexToBytes(decKey.toString(16).padStart(64, "0")); - const seed = await decrypt(decKeyBuffer, result.message); + const seed = await decrypt(decKeyBytes, result.message); return seed; } @@ -802,7 +804,7 @@ export class TKeyTSS extends TKey { if (!this._accountSalt) { throw Error("account salt undefined"); } - let accountHash = keccak256(Buffer.from(`${index}${this._accountSalt}`)); + let accountHash = keccak256(utf8ToBytes(`${index}${this._accountSalt}`)); if (accountHash.length === 66) accountHash = accountHash.slice(2); return new BN(accountHash, "hex").umod(this._tssCurve.n); } @@ -871,7 +873,7 @@ export class TKeyTSS extends TKey { factorEncs[factorPubID] = { tssIndex, type: "direct", - userEnc: await encrypt(newFactorPub.toSEC1(secp256k1, false), tssShare.toArrayLike(Buffer, "be", 32)), + userEnc: await encrypt(newFactorPub.toSEC1(secp256k1, false), new Uint8Array(tssShare.toArrayLike(Buffer, "be", 32))), serverEncs: [], }; this.metadata.updateTSSData({ @@ -1005,7 +1007,7 @@ export class TKeyTSS extends TKey { factorEncs[factorPubID] = { tssIndex: _tssIndex, type: "direct", - userEnc: await encrypt(f.toSEC1(factorKeyCurve, false), Buffer.from(tss2.toString(16, 64), "hex")), + userEnc: await encrypt(f.toSEC1(factorKeyCurve, false), hexToBytes(tss2.toString(16, 64))), serverEncs: [], }; } diff --git a/packages/tss/test/helpers.ts b/packages/tss/test/helpers.ts index 600704d95..e8b1f6fa7 100644 --- a/packages/tss/test/helpers.ts +++ b/packages/tss/test/helpers.ts @@ -104,23 +104,22 @@ export async function assignTssDkgKeys(opts: { } export function generateKey(keyType: KeyType): { - raw: Buffer; + raw: Uint8Array; scalar: BN; } { if (keyType === KeyType.secp256k1) { - const scalar = getKeyCurve(keyType).genKeyPair().getPrivate(); + const scalar = new BN(getKeyCurve(keyType).keygen().secretKey); return { - raw: scalar.toArrayLike(Buffer, "be", 32), + raw: new Uint8Array(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 raw = new Uint8Array(32); + crypto.getRandomValues(raw); const { scalar } = getEd25519KeyPairFromSeed(raw); return { raw, - scalar, + scalar: new BN(scalar.toString(16), 16), }; } throw new Error("unsupported key type"); diff --git a/packages/tss/test/tss.ts b/packages/tss/test/tss.ts index f17ad6f11..a63c95492 100644 --- a/packages/tss/test/tss.ts +++ b/packages/tss/test/tss.ts @@ -1,5 +1,5 @@ import { EllipticPoint, KeyType, Point } from "@tkey/common-types"; -import assert, { equal, fail, rejects } from "assert"; +import assert, { deepStrictEqual, equal, fail, rejects } from "assert"; import BN from "bn.js"; import { ec as EC } from "elliptic"; @@ -189,7 +189,7 @@ TEST_KEY_TYPES.forEach((TSS_KEY_TYPE) => { factorKey, authSignatures: signatures, }); - assert(seed.equals(importTssKey.raw)); + deepStrictEqual(new Uint8Array(seed), new Uint8Array(importTssKey.raw)); } else { // If not ed25519, then also check exporting with account index. const exportedKeyIndex2 = await tb._UNSAFE_exportTssKey({ @@ -290,7 +290,7 @@ TEST_KEY_TYPES.forEach((TSS_KEY_TYPE) => { selectedServers: [1, 2, 3], authSignatures: signatures, }); - equal(seed.equals(importedKey), true); + deepStrictEqual(new Uint8Array(seed), new Uint8Array(importedKey)); } const tb2 = new ThresholdKey({ serviceProvider: sp, storageLayer: torusSL, manualSync, tssKeyType: TSS_KEY_TYPE }); @@ -412,7 +412,7 @@ TEST_KEY_TYPES.forEach((TSS_KEY_TYPE) => { selectedServers: [3, 4, 5], authSignatures: signatures, }); - equal(seed.equals(importedKey), true); + deepStrictEqual(new Uint8Array(seed), new Uint8Array(importedKey)); } } { From 775f6de16df27465ba928fc740275fdb79a3d7e0 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 15:18:00 +0700 Subject: [PATCH 05/57] feat: update deps --- package-lock.json | 31 +++++++++++++++--------------- packages/common-types/package.json | 6 +++--- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98445af1a..491d75852 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6516,9 +6516,10 @@ "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==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8367,9 +8368,9 @@ } }, "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==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", "license": "MIT" }, "node_modules/body-parser": { @@ -25348,15 +25349,15 @@ "license": "MIT", "dependencies": { "@toruslabs/customauth": "^22.1.0", - "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.1", + "bn.js": "^5.2.3", "elliptic": "^6.6.1", "ts-custom-error": "^3.3.1" }, "devDependencies": { - "@types/bn.js": "^5.1.6", + "@types/bn.js": "^5.2.0", "@types/elliptic": "^6.4.18" }, "engines": { @@ -25368,16 +25369,16 @@ } }, "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==", + "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.6.1" + "@noble/curves": "^2.0.1" }, "engines": { - "node": ">=20.x", - "npm": ">=9.x" + "node": ">=22.x", + "npm": ">=10.x" } }, "packages/core": { diff --git a/packages/common-types/package.json b/packages/common-types/package.json index 52c0b914b..fc7e7d8d8 100644 --- a/packages/common-types/package.json +++ b/packages/common-types/package.json @@ -44,15 +44,15 @@ }, "dependencies": { "@toruslabs/customauth": "^22.1.0", - "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.1", + "bn.js": "^5.2.3", "elliptic": "^6.6.1", "ts-custom-error": "^3.3.1" }, "devDependencies": { - "@types/bn.js": "^5.1.6", + "@types/bn.js": "^5.2.0", "@types/elliptic": "^6.4.18" }, "bugs": { From 8eb42d76aa454bb7d3c84ceafaee0b6c72664eef Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 15:19:19 +0700 Subject: [PATCH 06/57] fix: update common-types --- .../common-types/src/baseTypes/commonTypes.ts | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index a32d83e07..1a4b958b6 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -1,9 +1,4 @@ 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"; @@ -12,7 +7,7 @@ export type PolynomialID = string; export type PolyIDAndShares = [PolynomialID, string[]]; -export type BNString = string | BN; +export type BNString = string | bigint; export interface EncryptedMessage { ciphertext: string; @@ -38,24 +33,24 @@ export interface ISerializable { } export interface IPoint extends ISerializable { - x: BN | null; - y: BN | null; + x: bigint | null; + y: bigint | null; 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: Uint8Array): Promise; decrypt(msg: EncryptedMessage): Promise; retrievePubKey(type: PubKeyType): Uint8Array; - retrievePubKeyPoint(): EllipticPoint; + retrievePubKeyPoint(): { x: bigint; y: bigint }; sign(msg: BNString): string; } export type TorusStorageLayerAPIParams = { @@ -69,15 +64,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 = { From 3e9b8dc29c5b213414d1590cc14b8827a8076f4a Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 15:31:17 +0700 Subject: [PATCH 07/57] fix: update common utils --- package-lock.json | 1 + packages/common-types/package.json | 1 + packages/common-types/src/utils.ts | 38 +++++++++++++----------------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 491d75852..72da895f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25348,6 +25348,7 @@ "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^2.0.1", "@toruslabs/customauth": "^22.1.0", "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/metadata-helpers": "^8.1.0", diff --git a/packages/common-types/package.json b/packages/common-types/package.json index fc7e7d8d8..168909b04 100644 --- a/packages/common-types/package.json +++ b/packages/common-types/package.json @@ -43,6 +43,7 @@ "@babel/runtime": "7.x" }, "dependencies": { + "@noble/curves": "^2.0.1", "@toruslabs/customauth": "^22.1.0", "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/metadata-helpers": "^8.1.0", diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 35024369f..196c67edd 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -1,36 +1,32 @@ +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 { 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 }; -// eccrypto boundary: convert Uint8Array <-> Buffer at the edge export async function encrypt(publicKey: Uint8Array, msg: Uint8Array): Promise { - const encryptedDetails = await ecEncrypt(Buffer.from(publicKey), Buffer.from(msg)); + const encryptedDetails = await ecEncrypt(publicKey, msg); return { - ciphertext: bytesToHex(new Uint8Array(encryptedDetails.ciphertext)), - ephemPublicKey: bytesToHex(new Uint8Array(encryptedDetails.ephemPublicKey)), - iv: bytesToHex(new Uint8Array(encryptedDetails.iv)), - mac: bytesToHex(new Uint8Array(encryptedDetails.mac)), + ciphertext: bytesToHex(encryptedDetails.ciphertext), + ephemPublicKey: bytesToHex(encryptedDetails.ephemPublicKey), + iv: bytesToHex(encryptedDetails.iv), + mac: bytesToHex(encryptedDetails.mac), }; } export async function decrypt(privKey: Uint8Array, msg: EncryptedMessage): Promise { - const bufferEncDetails = { - ciphertext: Buffer.from(hexToBytes(msg.ciphertext)), - ephemPublicKey: Buffer.from(hexToBytes(msg.ephemPublicKey)), - iv: Buffer.from(hexToBytes(msg.iv)), - mac: Buffer.from(hexToBytes(msg.mac)), - }; - - const result = await ecDecrypt(Buffer.from(privKey), bufferEncDetails); - return new Uint8Array(result); + 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 { @@ -71,9 +67,9 @@ export function normalize(input: number | string): string { return `0x${hexString}`; } -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; From 90864cc6d1306126e6e7653b4527e8c73612c9b2 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 15:47:30 +0700 Subject: [PATCH 08/57] fix: refactor Point constructor to accept pure bigint --- packages/common-types/src/base/Point.ts | 99 ++++++++++--------------- 1 file changed, 38 insertions(+), 61 deletions(-) diff --git a/packages/common-types/src/base/Point.ts b/packages/common-types/src/base/Point.ts index aa1f30294..2f7d61af3 100644 --- a/packages/common-types/src/base/Point.ts +++ b/packages/common-types/src/base/Point.ts @@ -1,121 +1,98 @@ -import { hexToBytes } from "@toruslabs/metadata-helpers"; -import { concatBytes } from "@toruslabs/torus.js"; -import BN from "bn.js"; +import { concatBytes, hexToBytes, 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 | null | undefined): bigint | null { + if (s === null || s === undefined) return null; + return s.length > 0 ? BigInt(`0x${s}`) : 0n; +} + class Point implements IPoint { - x: BN | null; + x: bigint | null; - y: BN | null; + y: bigint | null; - constructor(x: BNString, y: BNString) { - this.x = new BN(x, "hex"); - this.y = new BN(y, "hex"); + constructor(x: bigint | null, y: bigint | null) { + 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. + static fromSEC1(encodedPoint: string): Point { if (encodedPoint.length === 2 && encodedPoint === "00") { - const identity = (ec.g as EllipticPoint).mul(new BN(0)); - return Point.fromElliptic(identity); + return new Point(null, null); } - const key = ec.keyFromPublic(encodedPoint, "hex"); - const pt = key.getPublic(); - return Point.fromElliptic(pt); + 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): Uint8Array { switch (enc) { case "arr": { - const prefix = hexToBytes("0x04"); - const xBytes = hexToBytes(this.x.toString("hex")); - const yBytes = hexToBytes(this.y.toString("hex")); - const result = concatBytes(prefix, xBytes, yBytes); - return result; + const prefix = new Uint8Array([0x04]); + const xBytes = numberToBytesBE(this.x, 32); + const yBytes = numberToBytesBE(this.y, 32); + return concatBytes(prefix, xBytes, yBytes); } case "elliptic-compressed": { - const ec = secp256k1; - const key = ec.keyFromPublic({ x: this.x.toString("hex"), y: this.y.toString("hex") }, "hex"); - return hexToBytes(key.getPublic(true, "hex")); + return this.toSEC1(true); } default: throw new Error("encoding doesnt exist in Point"); } } - toEllipticPoint(ec: EllipticCurve): EllipticPoint { + toProjectivePoint() { if (this.isIdentity()) { - return (ec.g as EllipticPoint).mul(new BN(0)); + return secp256k1.Point.ZERO; } - - const keyPair = ec.keyFromPublic({ x: this.x.toString("hex"), y: this.y.toString("hex") }, "hex"); - return keyPair.getPublic(); + 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): Uint8Array { - // "elliptic"@6.5.4 can't encode identity. + toSEC1(compressed = false): Uint8Array { if (this.isIdentity()) { return hexToBytes("00"); } - const p = this.toEllipticPoint(ec); - return hexToBytes(p.encode("hex", compressed)); + return this.toProjectivePoint().toBytes(compressed); } toJSON(): StringifiedType { return { - x: this.x.toString("hex"), - y: this.y.toString("hex"), + x: this.x?.toString(16) ?? null, + y: this.y?.toString(16) ?? null, }; } 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"), }; } @@ -127,7 +104,7 @@ class Point implements IPoint { 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; } } From dc395f3a8bc4597d5affe4d06cbc843264cfd4aa Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 16:00:02 +0700 Subject: [PATCH 09/57] refactor(common-types): replace bn.js/elliptic with bigint/@noble/curves --- packages/common-types/src/base/BNUtils.ts | 23 +++----- packages/common-types/src/base/Polynomial.ts | 52 +++++++------------ .../common-types/src/base/PublicPolynomial.ts | 4 +- packages/common-types/src/base/PublicShare.ts | 16 +++--- packages/common-types/src/base/Share.ts | 21 ++++---- packages/common-types/src/base/index.ts | 2 +- .../src/baseTypes/aggregateTypes.ts | 49 +++++++++-------- 7 files changed, 71 insertions(+), 96 deletions(-) diff --git a/packages/common-types/src/base/BNUtils.ts b/packages/common-types/src/base/BNUtils.ts index ca07149c6..596606755 100644 --- a/packages/common-types/src/base/BNUtils.ts +++ b/packages/common-types/src/base/BNUtils.ts @@ -1,25 +1,16 @@ +import { numberToBytesBE } from "@noble/curves/utils.js"; import { getPublic } from "@toruslabs/eccrypto"; -import { hexToBytes } from "@toruslabs/metadata-helpers"; -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): Uint8Array => { - const tmp = new BN(bn, "hex"); - return hexToBytes(tmp.toString("hex", 64)); +export const toPrivKeyECC = (s: bigint): Uint8Array => { + return numberToBytesBE(s, 32); }; -export const getPubKeyEC = (bn: BN): curve.base.BasePoint => secp256k1.keyFromPrivate(bn.toString("hex", 64)).getPublic(); - -export const getPubKeyECC = (bn: BN): Uint8Array => getPublic(Buffer.from(toPrivKeyECC(bn))); +export const getPubKeyECC = (s: bigint): Uint8Array => getPublic(toPrivKeyECC(s)); -export const getPubKeyPoint = (bn: BN): Point => { - const pubKeyEc = getPubKeyEC(bn); - return new Point(pubKeyEc.getX().toString("hex"), pubKeyEc.getY().toString("hex")); +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/base/Polynomial.ts b/packages/common-types/src/base/Polynomial.ts index 0b83b69ea..6259373ce 100644 --- a/packages/common-types/src/base/Polynomial.ts +++ b/packages/common-types/src/base/Polynomial.ts @@ -1,9 +1,9 @@ -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 Point, { hexToBigInt } from "./Point"; import PublicPolynomial from "./PublicPolynomial"; import Share from "./Share"; @@ -12,56 +12,42 @@ export type ShareMap = { [x: string]: Share; }; +const N = secp256k1.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 +67,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..1417fd799 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}`; } diff --git a/packages/common-types/src/base/PublicShare.ts b/packages/common-types/src/base/PublicShare.ts index 0e547545a..de432f0f1 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), }; } } diff --git a/packages/common-types/src/base/Share.ts b/packages/common-types/src/base/Share.ts index 4e4e38fec..5d9536a18 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 { ISerializable, StringifiedType } from "../baseTypes/commonTypes"; import { getPubKeyPoint } from "./BNUtils"; +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/index.ts b/packages/common-types/src/base/index.ts index 861103b0d..aa1c69791 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 "./OneKey"; -export { default as Point } from "./Point"; +export { default as Point, hexToBigInt } from "./Point"; export { default as Polynomial } from "./Polynomial"; export * from "./Polynomial"; export { default as PublicPolynomial } from "./PublicPolynomial"; diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index 0b1167900..454917381 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, @@ -45,12 +44,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 +96,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 +114,17 @@ export interface IMetadata extends ISerializable { } export type InitializeNewKeyResult = { - secp256k1Key: BN; + secp256k1Key: bigint; ed25519Seed?: Uint8Array; deviceShare?: ShareStore; userShare?: ShareStore; }; export type ReconstructedKeyResult = { - secp256k1Key: BN; + secp256k1Key: bigint; ed25519Seed?: Uint8Array; - seedPhrase?: BN[]; - allKeys?: BN[]; + seedPhrase?: bigint[]; + allKeys?: bigint[]; }; export type MiddlewareExtraKeys = Omit; @@ -136,7 +135,7 @@ export type CatchupToLatestShareResult = { export type GenerateNewShareResult = { newShareStores: ShareStoreMap; - newShareIndex: BN; + newShareIndex: bigint; }; export type DeleteShareResult = { @@ -222,7 +221,7 @@ export type ISQAnswerStore = TkeyStoreItemType & { }; export type ISeedPhraseStoreWithKeys = ISeedPhraseStore & { - keys: BN[]; + keys: bigint[]; }; export type MetamaskSeedPhraseStore = ISeedPhraseStore & { @@ -230,27 +229,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 +260,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,10 +281,10 @@ 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; @@ -311,7 +310,7 @@ export interface ITKey extends ITKeyApi, ISerializable { shares: ShareStorePolyIDShareIndexMap; - secp256k1Key: BN; + secp256k1Key: bigint; ed25519Key: Uint8Array; @@ -325,7 +324,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,7 +335,7 @@ export interface ITKey extends ITKeyApi, ISerializable { export type TKeyInitArgs = { withShare?: ShareStore; - importKey?: BN; + importKey?: bigint; importEd25519Seed?: Uint8Array; neverInitializeNewKey?: boolean; transitionMetadata?: IMetadata; From 463ff9a35b15a4a13726a9536f2699b65b86f396 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 16:02:02 +0700 Subject: [PATCH 10/57] fix: remove packages --- packages/common-types/package.json | 7 +------ packages/common-types/src/base/Polynomial.ts | 2 +- packages/common-types/src/base/index.ts | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/common-types/package.json b/packages/common-types/package.json index 168909b04..3bb983c81 100644 --- a/packages/common-types/package.json +++ b/packages/common-types/package.json @@ -48,14 +48,9 @@ "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.3", - "elliptic": "^6.6.1", "ts-custom-error": "^3.3.1" }, - "devDependencies": { - "@types/bn.js": "^5.2.0", - "@types/elliptic": "^6.4.18" - }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, diff --git a/packages/common-types/src/base/Polynomial.ts b/packages/common-types/src/base/Polynomial.ts index 6259373ce..64ff33a5f 100644 --- a/packages/common-types/src/base/Polynomial.ts +++ b/packages/common-types/src/base/Polynomial.ts @@ -12,7 +12,7 @@ export type ShareMap = { [x: string]: Share; }; -const N = secp256k1.CURVE.n; +const N = secp256k1.Point.CURVE().n; class Polynomial implements ISerializable { polynomial: bigint[]; diff --git a/packages/common-types/src/base/index.ts b/packages/common-types/src/base/index.ts index aa1c69791..7f82f79d2 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 "./OneKey"; -export { default as Point, hexToBigInt } from "./Point"; +export { hexToBigInt, default as Point } from "./Point"; export { default as Polynomial } from "./Polynomial"; export * from "./Polynomial"; export { default as PublicPolynomial } from "./PublicPolynomial"; From 83b498f5ba57fb66fab689d8cef84f9b58518eaa Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 17:14:16 +0700 Subject: [PATCH 11/57] refactor(core): migrate lagrangeInterpolatePolynomial to bigint/@noble/curves --- package-lock.json | 8 +- packages/core/package.json | 1 + .../core/src/lagrangeInterpolatePolynomial.ts | 121 ++++++++---------- 3 files changed, 55 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72da895f0..2c86cb870 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25353,14 +25353,9 @@ "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.3", - "elliptic": "^6.6.1", "ts-custom-error": "^3.3.1" }, - "devDependencies": { - "@types/bn.js": "^5.2.0", - "@types/elliptic": "^6.4.18" - }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25387,6 +25382,7 @@ "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": "^9.0.0", diff --git a/packages/core/package.json b/packages/core/package.json index dfe072998..014343110 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -34,6 +34,7 @@ "dist" ], "dependencies": { + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", 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); } From bfc7a30cbfaf91bee06eac5b3a85b376e1f3df15 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 17:18:31 +0700 Subject: [PATCH 12/57] refactor(core): replace elliptic sign/verify with noble secp256k1 in authMetadata --- packages/core/src/authMetadata.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index 8b946f1f3..9444c5d8d 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -1,7 +1,6 @@ -import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyEC } from "@tkey/common-types"; +import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyECC } from "@tkey/common-types"; import { 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"; @@ -10,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; } @@ -24,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(utf8ToBytes(stringify(data)))), sig)) { + const msgHash = stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))); + if (!secp256k1.verify(sig, msgHash, m.pubKey.toSEC1(), { prehash: false, format: "der" })) { throw CoreError.default("Signature not valid for returning metadata"); } return new AuthMetadata(m); @@ -35,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(utf8ToBytes(stringify(data))))); + const msgHash = stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))); + const sig = secp256k1.sign(msgHash, toPrivKeyECC(this.privKey), { prehash: false }); return { data, - sig: sig.toDER("hex"), + sig: sig.toHex("der"), }; } } From 254429d834305d404e668331193f6a17849eb51f Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 17:47:02 +0700 Subject: [PATCH 13/57] refactor(core): migrate metadata.ts from BN/elliptic to bigint/noble --- packages/core/src/metadata.ts | 38 ++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index c6065f851..10b461367 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -3,6 +3,7 @@ import { EncryptedMessage, FactorEnc, getPubKeyPoint, + hexToBigInt, IMetadata, KeyType, Point, @@ -13,7 +14,6 @@ import { PublicPolynomialMap, PublicShare, PublicSharePolyIDShareIndexMap, - secp256k1, Share, ShareDescriptionMap, ShareMap, @@ -21,8 +21,7 @@ import { StringifiedType, toPrivKeyECC, } from "@tkey/common-types"; -import { bytesToHex } from "@toruslabs/metadata-helpers"; -import BN from "bn.js"; +import { bytesToHex, bytesToUtf8 } from "@toruslabs/metadata-helpers"; import stringify from "json-stable-stringify"; import CoreError from "./errors"; @@ -92,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[] = []; @@ -110,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) { @@ -122,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; @@ -168,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 { @@ -202,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)); } } } @@ -225,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 { @@ -269,7 +268,7 @@ class Metadata implements IMetadata { } } - shareToShareStore(share: BN): ShareStore { + shareToShareStore(share: bigint): ShareStore { const pubkey = getPubKeyPoint(share); let returnShare: ShareStore; @@ -288,9 +287,12 @@ 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); } @@ -312,7 +314,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") @@ -322,7 +328,7 @@ class Metadata implements IMetadata { } return { - pubKey: bytesToHex(this.pubKey.toSEC1(secp256k1, true)), + pubKey: bytesToHex(this.pubKey.toSEC1(true)), polyIDList: serializedPolyIDList, scopedStore: this.scopedStore, generalStore: this.generalStore, From 88f7f3beba1b4f24b5fc8570d2b13c731489a542 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 19:01:02 +0700 Subject: [PATCH 14/57] refactor(core): migrate core.ts from BN/elliptic to bigint/noble --- packages/core/src/core.ts | 143 ++++++++++++++++++---------------- packages/core/src/metadata.ts | 1 - 2 files changed, 76 insertions(+), 68 deletions(-) diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 91c78733c..5c64aca7c 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -47,17 +47,25 @@ import { } from "@tkey/common-types"; import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { encodeEd25519Point, getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; -import BN from "bn.js"; import { getRandomBytes } from "ethereum-cryptography/random"; 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"; +function hexToBigInt(s: string): bigint { + return BigInt(`0x${s}`); +} + // TODO: handle errors for get and set with retries class ThresholdKey implements ITKey { @@ -92,7 +100,7 @@ class ThresholdKey implements ITKey { serverTimeOffset?: number = 0; // secp256k1 key - private privKey: BN; + private privKey: bigint; private _ed25519Seed?: Uint8Array; @@ -115,7 +123,7 @@ class ThresholdKey implements ITKey { this.serverTimeOffset = serverTimeOffset; } - get secp256k1Key(): BN | null { + get secp256k1Key(): bigint | null { if (typeof this.privKey !== "undefined") { return this.privKey; } @@ -130,7 +138,7 @@ class ThresholdKey implements ITKey { return null; } - protected set secp256k1Key(privKey: BN) { + protected set secp256k1Key(privKey: bigint) { this.privKey = privKey; } @@ -162,14 +170,14 @@ class ThresholdKey implements ITKey { }); // this will computed during reconstructKey should we restore here? - if (privKey) tb.privKey = new BN(privKey, "hex"); + if (privKey) tb.privKey = hexToBigInt(privKey); if (ed25519Key) tb.ed25519Key = hexToBytes(ed25519Key); tb.shares = shares; // 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 AuthMetadataKeys = Object.keys(JSON.parse(stringify(new AuthMetadata(new Metadata(new Point(0n, 0n)), 0n)))); + const ShareStoreKeys = Object.keys(JSON.parse(stringify(new ShareStore(new Share(0n, 0n), "")))); const sampleMessageMetadata: IMessageMetadata = { message: "Sample message", dateAdded: Date.now() }; const MessageMetadataKeys = Object.keys(sampleMessageMetadata); @@ -178,7 +186,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); } @@ -214,7 +222,7 @@ 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") { + if (tb.serviceProvider.postboxKey.toString(16) === "0") { const shareIndexesExistInSDK = Object.keys(shares[latestPolyIDOnCloud]); const randomIndex = shareIndexesExistInSDK[Math.floor(Math.random() * (shareIndexesExistInSDK.length - 1))]; if (shareIndexesExistInSDK.length >= 1) { @@ -499,7 +507,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; @@ -515,7 +523,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); } }) ); @@ -549,7 +557,7 @@ 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); } @@ -561,9 +569,9 @@ class ThresholdKey implements ITKey { if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } - const shareIndexToDelete = new BN(shareIndex, "hex"); + const shareIndexToDelete = typeof shareIndex === "string" ? hexToBigInt(shareIndex) : shareIndex; const shareToDelete = this.outputShareStore(shareIndexToDelete); - if (shareIndexToDelete.cmp(new BN("1", "hex")) === 0) { + if (shareIndexToDelete === 1n) { throw new CoreError(1001, "Unable to delete service provider share"); } @@ -573,9 +581,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) !== shareIndexToDelete) { + newShareIndexes.push(el); } }); @@ -601,10 +608,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 }; @@ -635,7 +642,7 @@ class ThresholdKey implements ITKey { async addLocalMetadataTransitions(params: { input: LocalTransitionData; serviceProvider?: IServiceProvider; - privKey?: BN[]; + privKey?: bigint[]; acquireLock?: boolean; }): Promise { const { privKey, input } = params; @@ -673,7 +680,7 @@ class ThresholdKey implements ITKey { } } - async readMetadata(privKey: BN): Promise { + async readMetadata(privKey: bigint): Promise { return this.storageLayer.getMetadata({ privKey }); } @@ -728,7 +735,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 @@ -757,19 +764,19 @@ 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; } } @@ -777,13 +784,11 @@ class ThresholdKey implements ITKey { if (!this.metadata) { throw CoreError.metadataUndefined(); } - let shareIndexParsed: BN; - if (typeof shareIndex === "number") { - shareIndexParsed = new BN(shareIndex); - } else if (BN.isBN(shareIndex)) { + let shareIndexParsed: bigint; + if (typeof shareIndex === "bigint") { shareIndexParsed = shareIndex; } else if (typeof shareIndex === "string") { - shareIndexParsed = new BN(shareIndex, "hex"); + shareIndexParsed = hexToBigInt(shareIndex); } let polyIDToSearch: string; if (polyID) { @@ -791,15 +796,15 @@ class ThresholdKey implements ITKey { } else { polyIDToSearch = this.metadata.getLatestPublicPolynomial().getPolynomialID(); } - if (!this.metadata.getShareIndexesForPolynomial(polyIDToSearch).includes(shareIndexParsed.toString("hex"))) { + if (!this.metadata.getShareIndexesForPolynomial(polyIDToSearch).includes(shareIndexParsed.toString(16))) { throw new CoreError(1002, "no such share index created"); } - const shareFromStore = this.shares[polyIDToSearch][shareIndexParsed.toString("hex")]; + const shareFromStore = this.shares[polyIDToSearch][shareIndexParsed.toString(16)]; if (shareFromStore) return shareFromStore; const poly = this.reconstructLatestPoly(); const shareMap = poly.generateShares([shareIndexParsed]); - return new ShareStore(shareMap[shareIndexParsed.toString("hex")], polyIDToSearch); + return new ShareStore(shareMap[shareIndexParsed.toString(16)], polyIDToSearch); } getCurrentShareIndexes(): string[] { @@ -850,7 +855,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; @@ -858,7 +863,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(); } @@ -870,7 +875,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; @@ -880,11 +889,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) { @@ -894,7 +903,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; } @@ -975,7 +984,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(); } @@ -1011,13 +1020,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, @@ -1156,7 +1165,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); @@ -1164,7 +1173,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); @@ -1174,7 +1183,7 @@ class ThresholdKey implements ITKey { return { shares: this.shares, enableLogging: this.enableLogging, - privKey: this.privKey ? this.privKey.toString("hex") : undefined, + privKey: this.privKey ? this.privKey.toString(16) : undefined, ed25519Key: this.ed25519Key ? bytesToHex(this.ed25519Key) : undefined, metadata: this.metadata, lastFetchedCloudMetadata: this.lastFetchedCloudMetadata, @@ -1197,10 +1206,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); }); @@ -1284,7 +1293,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 = []; @@ -1293,7 +1302,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); @@ -1323,10 +1332,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 oldShare = oldPoly.polyEval(hexToBigInt(shareIndex)); const encryptedShare = await encrypt(getPubKeyECC(oldShare), utf8ToBytes(JSON.stringify(newShareStores[shareIndex]))); - newScopedStore[getPubKeyPoint(oldShare).x.toString("hex")] = encryptedShare; - oldShareStores[shareIndex] = new ShareStore(new Share(shareIndex, oldShare), previousPolyID); + newScopedStore[getPubKeyPoint(oldShare).x.toString(16)] = encryptedShare; + oldShareStores[shareIndex] = new ShareStore(new Share(hexToBigInt(shareIndex), oldShare), previousPolyID); return oldShare; }) ); @@ -1378,16 +1387,16 @@ class ThresholdKey implements ITKey { importEd25519Seed, delete1OutOf1, }: { - determinedShare?: BN; + determinedShare?: bigint; initializeModules?: boolean; - importedKey?: BN; + 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; @@ -1396,12 +1405,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 { @@ -1412,7 +1421,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; @@ -1428,7 +1437,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 }); @@ -1444,20 +1453,20 @@ 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; } diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index 10b461367..670d6b45b 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -3,7 +3,6 @@ import { EncryptedMessage, FactorEnc, getPubKeyPoint, - hexToBigInt, IMetadata, KeyType, Point, From 3a3653b89943053c19465d5397a3e7ec87d07dc2 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 21:33:52 +0700 Subject: [PATCH 15/57] refactor(service-providers): migrate base/torus/sfa from BN/elliptic to bigint/noble --- packages/core/package.json | 6 ----- packages/service-provider-base/package.json | 9 ++----- .../src/ServiceProviderBase.ts | 26 ++++++++++--------- packages/service-provider-sfa/package.json | 7 ++--- .../src/SfaServiceProvider.ts | 9 +++---- packages/service-provider-torus/package.json | 9 ++----- .../src/TorusServiceProvider.ts | 9 +++---- 7 files changed, 28 insertions(+), 47 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 014343110..0eafb4a27 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -40,15 +40,9 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.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" - }, "peerDependencies": { "@babel/runtime": "7.x" }, diff --git a/packages/service-provider-base/package.json b/packages/service-provider-base/package.json index 8768632bd..f19d70e4b 100644 --- a/packages/service-provider-base/package.json +++ b/packages/service-provider-base/package.json @@ -44,14 +44,9 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/metadata-helpers": "^8.1.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" }, diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 0eb17d35a..e62686538 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -4,30 +4,29 @@ import { encrypt as encryptUtils, EncryptedMessage, getPubKeyECC, + getPubKeyPoint, IServiceProvider, PubKeyType, + secp256k1, ServiceProviderArgs, StringifiedType, - toPrivKeyEC, toPrivKeyECC, } from "@tkey/common-types"; import { bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; -import BN from "bn.js"; -import { curve } from "elliptic"; 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 = BigInt(`0x${postboxKey}`); this.serviceProviderName = "ServiceProviderBase"; } @@ -47,8 +46,9 @@ class ServiceProviderBase implements IServiceProvider { 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): Uint8Array { @@ -59,15 +59,17 @@ class ServiceProviderBase implements IServiceProvider { } sign(msg: BNString): string { - const tmp = new BN(msg, "hex"); - const sig = toPrivKeyEC(this.postboxKey).sign(tmp.toString("hex")); - return bytesToBase64(hexToBytes(sig.r.toString(16, 64) + sig.s.toString(16, 64) + new BN(0).toString(16, 2))); + const msgHex = typeof msg === "bigint" ? msg.toString(16) : msg; + const sig = secp256k1.sign(msgHex, toPrivKeyECC(this.postboxKey), { prehash: false }); + const rHex = sig.r.toString(16).padStart(64, "0"); + const sHex = sig.s.toString(16).padStart(64, "0"); + return bytesToBase64(hexToBytes(rHex + sHex + "00")); } 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-sfa/package.json b/packages/service-provider-sfa/package.json index d263b2f35..791a17a1d 100644 --- a/packages/service-provider-sfa/package.json +++ b/packages/service-provider-sfa/package.json @@ -40,12 +40,9 @@ "@tkey/service-provider-base": "^16.0.0", "@toruslabs/fetch-node-details": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, diff --git a/packages/service-provider-sfa/src/SfaServiceProvider.ts b/packages/service-provider-sfa/src/SfaServiceProvider.ts index 9bea73d63..093e8661a 100644 --- a/packages/service-provider-sfa/src/SfaServiceProvider.ts +++ b/packages/service-provider-sfa/src/SfaServiceProvider.ts @@ -3,7 +3,6 @@ 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"; @@ -14,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; @@ -46,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; @@ -80,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 34b7c20c5..b71a91a11 100644 --- a/packages/service-provider-torus/package.json +++ b/packages/service-provider-torus/package.json @@ -41,14 +41,9 @@ "@tkey/common-types": "^16.0.0", "@tkey/service-provider-base": "^16.0.0", "@toruslabs/customauth": "^22.1.0", - "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, 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; From 1dbc33f948a968ec64769dbf0547df6c6d6653ce Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 22:12:15 +0700 Subject: [PATCH 16/57] refactor(modules): migrate storage-layer, security-questions, private-keys, share-transfer, seed-phrase from BN/elliptic to bigint/noble --- package-lock.json | 151 +++++++++++------- packages/core/src/authMetadata.ts | 6 +- packages/private-keys/package.json | 8 +- packages/private-keys/src/ED25519Format.ts | 16 +- packages/private-keys/src/PrivateKeys.ts | 10 +- packages/private-keys/src/SECP256K1Format.ts | 18 +-- packages/security-questions/package.json | 6 +- .../src/SecurityQuestionStore.ts | 17 +- .../src/SecurityQuestionsModule.ts | 35 ++-- packages/seed-phrase/package.json | 5 +- .../src/MetamaskSeedPhraseFormat.ts | 7 +- packages/seed-phrase/src/SeedPhrase.ts | 5 +- .../src/ServiceProviderBase.ts | 11 +- packages/share-transfer/package.json | 8 +- .../share-transfer/src/ShareTransferModule.ts | 16 +- .../src/ShareTransferStorePointer.ts | 5 +- packages/storage-layer-torus/package.json | 2 - .../src/MockStorageLayer.ts | 49 +++--- .../src/TorusStorageLayer.ts | 53 +++--- 19 files changed, 225 insertions(+), 203 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c86cb870..c49d5df76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6550,16 +6550,6 @@ "@types/node": "*" } }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bn.js": "*" - } - }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -25388,15 +25378,9 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.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" - }, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25514,14 +25498,12 @@ "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^1.8.1", "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "@toruslabs/tweetnacl-js": "^1.0.4", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/tweetnacl-js": "^1.0.4" }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25530,19 +25512,44 @@ "@babel/runtime": "7.x" } }, + "packages/private-keys/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/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/private-keys/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/" + } + }, "packages/security-questions": { "name": "@tkey/security-questions", "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^1.8.1", "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, - "devDependencies": { - "@types/bn.js": "^5.1.6" - }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25551,18 +25558,42 @@ "@babel/runtime": "7.x" } }, + "packages/security-questions/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/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/security-questions/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/" + } + }, "packages/seed-phrase": { "name": "@tkey/seed-phrase", "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" - }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25577,14 +25608,9 @@ "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/metadata-helpers": "^8.1.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": ">=22.x", "npm": ">=10.x" @@ -25601,12 +25627,9 @@ "@tkey/service-provider-base": "^16.0.0", "@toruslabs/fetch-node-details": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25623,14 +25646,9 @@ "@tkey/common-types": "^16.0.0", "@tkey/service-provider-base": "^16.0.0", "@toruslabs/customauth": "^22.1.0", - "@toruslabs/torus.js": "^17.0.0", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6", - "@types/elliptic": "^6.4.18" + "@toruslabs/torus.js": "^17.0.0" }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25662,15 +25680,13 @@ "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^1.8.1", "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", - "@toruslabs/metadata-helpers": "^8.1.0", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@toruslabs/metadata-helpers": "^8.1.0" }, + "devDependencies": {}, "engines": { "node": ">=22.x", "npm": ">=10.x" @@ -25679,6 +25695,33 @@ "@babel/runtime": "7.x" } }, + "packages/share-transfer/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/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/share-transfer/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/" + } + }, "packages/share-transfer/node_modules/@toruslabs/eccrypto": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-6.0.2.tgz", @@ -25724,12 +25767,10 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "base64url": "3.0.1", - "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0", "json-stable-stringify": "^1.2.1" }, "devDependencies": { - "@types/bn.js": "^5.1.6", "@types/json-stable-stringify": "^1.2.0" }, "engines": { diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index 9444c5d8d..c13506553 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -1,5 +1,5 @@ import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyECC } from "@tkey/common-types"; -import { utf8ToBytes } from "@toruslabs/metadata-helpers"; +import { bytesToHex, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { keccak256 } from "@toruslabs/torus.js"; import stringify from "json-stable-stringify"; @@ -35,11 +35,11 @@ class AuthMetadata implements IAuthMetadata { if (!this.privKey) throw CoreError.privKeyUnavailable(); const msgHash = stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))); - const sig = secp256k1.sign(msgHash, toPrivKeyECC(this.privKey), { prehash: false }); + const sig = secp256k1.sign(msgHash, toPrivKeyECC(this.privKey), { prehash: false, format: "der" }); return { data, - sig: sig.toHex("der"), + sig: bytesToHex(sig), }; } } diff --git a/packages/private-keys/package.json b/packages/private-keys/package.json index 5039607f7..4c6f3143c 100644 --- a/packages/private-keys/package.json +++ b/packages/private-keys/package.json @@ -37,14 +37,12 @@ "peerDependencies": { "@babel/runtime": "7.x" }, - "devDependencies": { - "@types/bn.js": "^5.1.6" - }, + "devDependencies": {}, "dependencies": { "@tkey/common-types": "^16.0.0", + "@noble/curves": "^1.8.1", "@toruslabs/metadata-helpers": "^8.1.0", - "@toruslabs/tweetnacl-js": "^1.0.4", - "bn.js": "^5.2.1" + "@toruslabs/tweetnacl-js": "^1.0.4" }, "bugs": { "url": "https://github.com/tkey/tkey/issues" diff --git a/packages/private-keys/src/ED25519Format.ts b/packages/private-keys/src/ED25519Format.ts index c9468de74..a11fefb6f 100644 --- a/packages/private-keys/src/ED25519Format.ts +++ b/packages/private-keys/src/ED25519Format.ts @@ -1,23 +1,23 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generateID, IPrivateKeyFormat, IPrivateKeyStore } from "@tkey/common-types"; import { base64ToBytes, bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; 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 { + validatePrivateKey(privateKey: bigint): boolean { // Validation as per // https://github.com/solana-labs/solana-web3.js/blob/e1567ab/src/keypair.ts#L65 try { - const secretKey = bytesToBase64(hexToBytes(privateKey.toString("hex"))); + const secretKey = bytesToBase64(hexToBytes(privateKey.toString(16))); const keypair = nacl.sign.keyPair.fromSecretKey(base64ToBytes(secretKey)); const encoder = new TextEncoder(); const signData = encoder.encode("@solana/web3.js-validation-v1"); @@ -31,10 +31,10 @@ export class ED25519Format implements IPrivateKeyFormat { 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); + privKey = bytesToNumberBE(nacl.sign.keyPair().secretKey); } 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 f17dc88fe..785737856 100644 --- a/packages/private-keys/src/SECP256K1Format.ts +++ b/packages/private-keys/src/SECP256K1Format.ts @@ -1,5 +1,5 @@ +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 || {}; @@ -14,27 +14,27 @@ function randomBytes(size: number): Uint8Array { } 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(randomBytes(64)); } else { if (!this.validatePrivateKey(privateKey)) { throw Error("Invalid Private Key"); diff --git a/packages/security-questions/package.json b/packages/security-questions/package.json index 8fb0e2b47..e9c1762fa 100644 --- a/packages/security-questions/package.json +++ b/packages/security-questions/package.json @@ -42,13 +42,11 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", + "@noble/curves": "^1.8.1", "@toruslabs/metadata-helpers": "^8.1.0", - "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, - "devDependencies": { - "@types/bn.js": "^5.1.6" - }, + "devDependencies": {}, "lint-staged": { "!(*d).ts": [ "npm run lint --", diff --git a/packages/security-questions/src/SecurityQuestionStore.ts b/packages/security-questions/src/SecurityQuestionStore.ts index 995bcdb4c..37d1e5d7b 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,8 +12,8 @@ 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.nonce = typeof nonce === "bigint" ? nonce : BigInt(`0x${nonce}`); + this.shareIndex = typeof shareIndex === "bigint" ? shareIndex : BigInt(`0x${shareIndex}`); this.sqPublicShare = new PublicShare(sqPublicShare.shareIndex, sqPublicShare.shareCommitment); 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 4ae19ecf0..5b4f5c926 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, @@ -11,14 +13,13 @@ import { ShareStoreMap, } from "@tkey/common-types"; import { utf8ToBytes } from "@toruslabs/metadata-helpers"; -import BN from "bn.js"; import { keccak256 } from "ethereum-cryptography/keccak"; import SecurityQuestionsError from "./errors"; import SecurityQuestionStore from "./SecurityQuestionStore"; -function answerToUserInputHashBN(answerString: string): BN { - return new BN(keccak256(utf8ToBytes(answerString))); +function answerToUserInputHashBigInt(answerString: string): bigint { + return bytesToNumberBE(keccak256(utf8ToBytes(answerString))); } export const SECURITY_QUESTIONS_MODULE_NAME = "securityQuestions"; @@ -41,13 +42,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, @@ -72,10 +72,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, @@ -86,7 +85,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) ); @@ -108,13 +107,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(); } @@ -131,10 +129,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 eafab977b..3d1429dd8 100644 --- a/packages/seed-phrase/package.json +++ b/packages/seed-phrase/package.json @@ -42,12 +42,9 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "bn.js": "^5.2.1", "ethers": "^6.13.5" }, - "devDependencies": { - "@types/bn.js": "^5.1.6" - }, + "devDependencies": {}, "lint-staged": { "!(*d).ts": [ "npm run lint --", diff --git a/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts b/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts index 4c7778447..f9496dd53 100644 --- a/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts +++ b/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts @@ -1,5 +1,4 @@ import { generateID, ISeedPhraseFormat, ISeedPhraseStore, MetamaskSeedPhraseStore } from "@tkey/common-types"; -import BN from "bn.js"; import { HDNodeWallet, Mnemonic, Provider, randomBytes } from "ethers"; class MetamaskSeedPhraseFormat implements ISeedPhraseFormat { @@ -24,16 +23,16 @@ class MetamaskSeedPhraseFormat implements ISeedPhraseFormat { return Mnemonic.isValidMnemonic(parsedSeedPhrase); } - 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 numOfWallets = mmStore.numberOfWallets; - const wallets: BN[] = []; + const wallets: bigint[] = []; const root = hdkey.derivePath(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(child.privateKey); wallets.push(wallet); } return wallets; 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/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index e62686538..cd3f44ae3 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -12,7 +12,7 @@ import { StringifiedType, toPrivKeyECC, } from "@tkey/common-types"; -import { bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; +import { bytesToBase64 } from "@toruslabs/metadata-helpers"; class ServiceProviderBase implements IServiceProvider { enableLogging: boolean; @@ -60,10 +60,11 @@ class ServiceProviderBase implements IServiceProvider { sign(msg: BNString): string { const msgHex = typeof msg === "bigint" ? msg.toString(16) : msg; - const sig = secp256k1.sign(msgHex, toPrivKeyECC(this.postboxKey), { prehash: false }); - const rHex = sig.r.toString(16).padStart(64, "0"); - const sHex = sig.s.toString(16).padStart(64, "0"); - return bytesToBase64(hexToBytes(rHex + sHex + "00")); + const compactSig = secp256k1.sign(msgHex, toPrivKeyECC(this.postboxKey), { prehash: false }); + const sigWithV = new Uint8Array(65); + sigWithV.set(compactSig); + sigWithV[64] = 0; + return bytesToBase64(sigWithV); } toJSON(): StringifiedType { diff --git a/packages/share-transfer/package.json b/packages/share-transfer/package.json index 628ccf7ae..b4ff12a24 100644 --- a/packages/share-transfer/package.json +++ b/packages/share-transfer/package.json @@ -41,12 +41,10 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/eccrypto": "^6.0.2", "@toruslabs/http-helpers": "^9.0.0", - "@toruslabs/metadata-helpers": "^8.1.0", - "bn.js": "^5.2.1" - }, - "devDependencies": { - "@types/bn.js": "^5.1.6" + "@noble/curves": "^1.8.1", + "@toruslabs/metadata-helpers": "^8.1.0" }, + "devDependencies": {}, "bugs": { "url": "https://github.com/tkey/tkey/issues" }, diff --git a/packages/share-transfer/src/ShareTransferModule.ts b/packages/share-transfer/src/ShareTransferModule.ts index 63b25f343..a9774bff4 100644 --- a/packages/share-transfer/src/ShareTransferModule.ts +++ b/packages/share-transfer/src/ShareTransferModule.ts @@ -1,3 +1,4 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { decrypt, encrypt, @@ -13,7 +14,6 @@ import { } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { bytesToUtf8, utf8ToBytes } from "@toruslabs/metadata-helpers"; -import BN from "bn.js"; import ShareTransferError from "./errors"; import ShareRequest from "./ShareRequest"; @@ -31,7 +31,7 @@ class ShareTransferModule implements IModule { tbSDK: ITKeyApi; - currentEncKey: BN; + currentEncKey: bigint; requestStatusCheckId: number; @@ -52,7 +52,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; } @@ -73,7 +73,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 @@ -87,10 +87,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, @@ -225,7 +225,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 2840be922..e6b7668be 100644 --- a/packages/storage-layer-torus/package.json +++ b/packages/storage-layer-torus/package.json @@ -42,12 +42,10 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "base64url": "3.0.1", - "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0", "json-stable-stringify": "^1.2.1" }, "devDependencies": { - "@types/bn.js": "^5.1.6", "@types/json-stable-stringify": "^1.2.0" }, "bugs": { diff --git a/packages/storage-layer-torus/src/MockStorageLayer.ts b/packages/storage-layer-torus/src/MockStorageLayer.ts index dbb48f2be..02522817a 100644 --- a/packages/storage-layer-torus/src/MockStorageLayer.ts +++ b/packages/storage-layer-torus/src/MockStorageLayer.ts @@ -7,7 +7,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 +38,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 +56,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); 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); }); 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 995219fa9..10d873dfd 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -10,22 +10,22 @@ import { ONE_KEY_DELETE_NONCE, ONE_KEY_NAMESPACE, prettyPrintError, + secp256k1, StringifiedType, - toPrivKeyEC, toPrivKeyECC, TorusStorageLayerAPIParams, TorusStorageLayerArgs, } from "@tkey/common-types"; import { post } from "@toruslabs/http-helpers"; -import { bytesToBase64, bytesToUtf8, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; +import { bytesToBase64, bytesToHex, bytesToUtf8, utf8ToBytes } from "@toruslabs/metadata-helpers"; import base64url from "base64url"; -import BN from "bn.js"; import { keccak256 } from "ethereum-cryptography/keccak"; import stringify from "json-stable-stringify"; -function signDataWithPrivKey(data: { timestamp: number }, privKey: BN): string { - const sig = toPrivKeyEC(privKey).sign(keccak256(utf8ToBytes(stringify(data)))); - return sig.toDER("hex"); +function signDataWithPrivKey(data: { timestamp: number }, privKey: bigint): string { + const hash = keccak256(utf8ToBytes(stringify(data))); + const sig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false, format: "der" }); + return bytesToHex(sig); } class TorusStorageLayer implements IStorageLayer { @@ -44,7 +44,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; @@ -74,7 +74,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); @@ -99,7 +99,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 +114,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; @@ -151,14 +151,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. @@ -170,16 +170,19 @@ class TorusStorageLayer implements IStorageLayer { const hash = keccak256(utf8ToBytes(stringify(setTKeyStore))); if (privKey) { - const unparsedSig = toPrivKeyEC(privKey).sign(hash); - sig = bytesToBase64(hexToBytes(unparsedSig.r.toString(16, 64) + unparsedSig.s.toString(16, 64) + new BN(0).toString(16, 2))); + const compactSig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false }); + const sigWithV = new Uint8Array(65); + sigWithV.set(compactSig); + sigWithV[64] = 0; + 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(bytesToHex(hash)); + pubX = point.x.toString(16); + pubY = point.y.toString(16); } return { pub_key_X: pubX, @@ -190,7 +193,7 @@ 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; const data = { timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000), @@ -200,17 +203,17 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(new BN(keccak256(utf8ToBytes(stringify(data))))); + signature = serviceProvider.sign(bytesToHex(keccak256(utf8ToBytes(stringify(data))))); } const metadataParams = { - key: toPrivKeyEC(privKey).getPublic("hex"), + key: bytesToHex(getPubKeyECC(privKey)), 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; const data = { timestamp: Math.floor(this.serverTimeOffset + Date.now() / 1000), @@ -220,10 +223,10 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(new BN(keccak256(utf8ToBytes(stringify(data))))); + signature = serviceProvider.sign(bytesToHex(keccak256(utf8ToBytes(stringify(data))))); } const metadataParams = { - key: toPrivKeyEC(privKey).getPublic("hex"), + key: bytesToHex(getPubKeyECC(privKey)), data, signature, id, From 7829ba5791b2f89d0c4c1ecabb6ec4bb95127230 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 22:40:47 +0700 Subject: [PATCH 17/57] test: migrate test files from BN/elliptic to bigint/noble --- packages/common-types/test/test.js | 41 +-- packages/core/test/authMetadata.test.js | 6 +- packages/core/test/lagrange.test.js | 20 +- packages/core/test/lagrangePoly.test.js | 18 +- packages/core/test/metadata.test.js | 20 +- packages/core/test/polyEval.test.js | 20 +- packages/default/test/ed25519/ed25519.ts | 24 +- packages/default/test/helpers.js | 3 +- packages/default/test/shared.js | 303 ++++++++++---------- packages/private-keys/test/test.js | 27 +- packages/service-provider-base/test/test.js | 9 +- packages/share-serialization/test/test.js | 3 +- packages/web-storage/test/test.js | 18 +- 13 files changed, 253 insertions(+), 259 deletions(-) diff --git a/packages/common-types/test/test.js b/packages/common-types/test/test.js index 003ce2bbb..df2ea8669 100644 --- a/packages/common-types/test/test.js +++ b/packages/common-types/test/test.js @@ -1,16 +1,17 @@ import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; +import { bytesToHex } from "@toruslabs/metadata-helpers"; 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/test/authMetadata.test.js b/packages/core/test/authMetadata.test.js index c8a8e1446..326452513 100644 --- a/packages/core/test/authMetadata.test.js +++ b/packages/core/test/authMetadata.test.js @@ -1,7 +1,7 @@ import { generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import BN from "bn.js"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; import stringify from "json-stable-stringify"; import { AuthMetadata, generateRandomPolynomial, Metadata } from "../src/index"; @@ -10,9 +10,9 @@ const PRIVATE_KEY = generatePrivate().toString("hex"); describe("AuthMetadata", function () { it("#should authenticate and serialize and deserialize into JSON seamlessly", async function () { - const privKeyBN = new BN(PRIVATE_KEY, 16); + const privKeyBN = BigInt(`0x${PRIVATE_KEY}`); // create a random poly and respective shares - const shareIndexes = [new BN(1), new BN(2)]; + const shareIndexes = [1n, 2n]; shareIndexes.push(generatePrivateExcludingIndexes(shareIndexes)); const poly = generateRandomPolynomial(1, privKeyBN); const shares = poly.generateShares(shareIndexes); diff --git a/packages/core/test/lagrange.test.js b/packages/core/test/lagrange.test.js index cca6c523d..3c3476691 100644 --- a/packages/core/test/lagrange.test.js +++ b/packages/core/test/lagrange.test.js @@ -1,33 +1,33 @@ import { Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; +import { bytesToNumberBE } from "@noble/curves/utils.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..3afb3ba75 100644 --- a/packages/core/test/lagrangePoly.test.js +++ b/packages/core/test/lagrangePoly.test.js @@ -1,21 +1,21 @@ import { Point, Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; +import { bytesToNumberBE } from "@noble/curves/utils.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..c8588d971 100644 --- a/packages/core/test/metadata.test.js +++ b/packages/core/test/metadata.test.js @@ -1,7 +1,7 @@ import { getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import BN from "bn.js"; +import { bytesToNumberBE } from "@noble/curves/utils.js"; import stringify from "json-stable-stringify"; import { generateRandomPolynomial, Metadata } from "../src/index"; @@ -11,16 +11,16 @@ const PRIVATE_KEY = generatePrivate().toString("hex"); 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..580cf27b3 100644 --- a/packages/core/test/polyEval.test.js +++ b/packages/core/test/polyEval.test.js @@ -1,25 +1,25 @@ import { getPubKeyPoint, Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import BN from "bn.js"; +import { bytesToNumberBE } from "@noble/curves/utils.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/test/ed25519/ed25519.ts b/packages/default/test/ed25519/ed25519.ts index bd7ef425d..c4151ea04 100644 --- a/packages/default/test/ed25519/ed25519.ts +++ b/packages/default/test/ed25519/ed25519.ts @@ -1,4 +1,4 @@ -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"; @@ -18,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({ @@ -41,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(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: new Uint8Array(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) {} }); @@ -58,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); @@ -85,7 +85,7 @@ 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(bytesToHex(ed), bytesToHex(newInstance.ed25519Key)); @@ -93,14 +93,14 @@ export function ed25519Tests(params: { manualSync: boolean; torusSP: TorusServic // should not able to reinitialize with import key const instance3 = new TKeyDefault({ serviceProvider: customSP, storageLayer: customSL, manualSync }); try { - await instance3.initialize({ importKey: generatePrivateBN(), importEd25519Seed: new Uint8Array(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 }); @@ -118,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(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: new Uint8Array(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 4c895d348..96cb0b6d4 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -12,10 +12,10 @@ 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 { utf8ToBytes } from "@toruslabs/metadata-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 { bytesToNumberBE } from "@noble/curves/utils.js"; import { JsonRpcProvider } from "ethers"; import { createSandbox } from "sinon"; @@ -39,28 +39,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); } } @@ -77,13 +76,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"); } }); @@ -96,14 +95,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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - determinedShare = determinedShare.umod(secp256k1.curve.n); + let determinedShare = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + determinedShare = determinedShare % secp256k1.CURVE.n; const resp1 = await tb._initializeNewKey({ determinedShare, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -112,13 +111,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(); @@ -126,14 +125,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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.CURVE.n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -141,40 +140,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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.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"); } }); @@ -191,7 +190,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"); } }); @@ -214,9 +213,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"); } }); @@ -236,11 +235,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 () { @@ -253,7 +252,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"); } }); @@ -276,7 +275,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"); @@ -299,9 +298,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"); } }); @@ -355,7 +354,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"); } }); @@ -372,7 +371,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)] }); }); }); @@ -380,7 +379,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); }); @@ -432,7 +431,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"); } }); @@ -446,8 +445,8 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); it(`#should serialize and deserialize correctly without tkeyArgs, manualSync=${mode}`, async function () { - let userInput = new BN(keccak256(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.CURVE.n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); @@ -455,12 +454,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const stringified = JSON.stringify(tb); 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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.CURVE.n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); @@ -468,12 +467,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const stringified = JSON.stringify(tb); 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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.CURVE.n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); // generate and delete @@ -489,19 +488,19 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { } 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(utf8ToBytes("user answer blublu")).slice(2), "hex"); - userInput = userInput.umod(secp256k1.curve.n); + let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); + userInput = userInput % secp256k1.CURVE.n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); const reconstructedKey = await tb.reconstructKey(); @@ -511,12 +510,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { 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"); } }); @@ -527,12 +526,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 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 () { @@ -547,13 +546,13 @@ 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 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 () { @@ -587,8 +586,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 = generatePrivate().toString(16); + 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 }); @@ -600,7 +599,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 }); @@ -649,7 +648,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"); } }); @@ -677,7 +676,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"); } }); @@ -698,7 +697,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"); } }); @@ -725,7 +724,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"); } }); @@ -746,14 +745,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 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 () { @@ -784,7 +783,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"); } @@ -823,28 +822,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(); @@ -876,7 +875,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"); } }); @@ -940,13 +939,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"); } }); @@ -993,13 +992,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); }); @@ -1031,13 +1030,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"), ], }); }); @@ -1048,9 +1047,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 () { @@ -1101,11 +1100,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]); @@ -1116,8 +1114,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)) ); }); @@ -1125,11 +1123,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" ), ]; @@ -1141,8 +1138,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)) ); }); @@ -1165,8 +1162,8 @@ 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]); @@ -1188,19 +1185,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"), ], }); @@ -1241,7 +1238,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()); @@ -1270,7 +1267,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())); }); @@ -1283,7 +1280,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(); @@ -1294,7 +1291,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())); @@ -1312,7 +1309,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]; @@ -1335,7 +1332,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)); }); }); @@ -1349,7 +1346,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(); @@ -1376,7 +1373,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 = []; @@ -1541,7 +1538,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) => { @@ -1552,7 +1549,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"); @@ -1567,12 +1564,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(), @@ -1588,8 +1585,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, @@ -1600,16 +1597,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.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, @@ -1619,8 +1616,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, @@ -1633,7 +1630,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 @@ -1643,8 +1640,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 } @@ -1652,7 +1649,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, @@ -1667,8 +1664,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"); @@ -1677,8 +1674,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); @@ -1688,10 +1685,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(), @@ -1702,20 +1699,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/private-keys/test/test.js b/packages/private-keys/test/test.js index f2a9ef64a..d9cdccb91 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,15 @@ 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 +30,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 +40,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 +48,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 +68,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 +88,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 +96,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/service-provider-base/test/test.js b/packages/service-provider-base/test/test.js index 126a7271c..e31ccfde6 100644 --- a/packages/service-provider-base/test/test.js +++ b/packages/service-provider-base/test/test.js @@ -1,6 +1,5 @@ import { hexToBytes } from "@toruslabs/metadata-helpers"; import { deepStrictEqual } from "assert"; -import BN from "bn.js"; import ServiceProviderBase from "../src/ServiceProviderBase"; @@ -9,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 = hexToBytes(tmp.toString("hex", 15)); + const tmp = 123n; + const message = hexToBytes(tmp.toString(16).padStart(15, "0")); const tsp = new ServiceProviderBase({ postboxKey: privKey }); const encDeets = await tsp.encrypt(message); const result = await tsp.decrypt(encDeets); @@ -19,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 = hexToBytes(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/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/web-storage/test/test.js b/packages/web-storage/test/test.js index 0b6c114f8..952965de0 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.toString(16)); 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.toString(16)); 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.toString(16)); 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" ); From a916c5b08fc3bf1233fb3bd04ac49fbc82e825f4 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 22:49:52 +0700 Subject: [PATCH 18/57] Update package-lock.json --- package-lock.json | 521 +++++++--------------------------------------- 1 file changed, 79 insertions(+), 442 deletions(-) diff --git a/package-lock.json b/package-lock.json index c49d5df76..27ffde512 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,7 +114,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1720,7 +1719,6 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -1873,7 +1871,6 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, "engines": { "node": ">=18" }, @@ -1896,7 +1893,6 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, "engines": { "node": ">=18" } @@ -1932,74 +1928,6 @@ "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", @@ -2017,346 +1945,6 @@ "node": ">=18" } }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "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" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "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", @@ -3365,6 +2953,7 @@ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -4600,7 +4189,6 @@ "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -6568,6 +6156,7 @@ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -6659,7 +6248,6 @@ "version": "22.10.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.6.tgz", "integrity": "sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==", - "peer": true, "dependencies": { "undici-types": "~6.20.0" } @@ -6737,7 +6325,6 @@ "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", @@ -7413,6 +7000,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" @@ -7422,25 +7010,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", @@ -7451,13 +7043,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", @@ -7470,6 +7064,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" } @@ -7479,6 +7074,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" } @@ -7487,13 +7083,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", @@ -7510,6 +7108,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", @@ -7523,6 +7122,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", @@ -7535,6 +7135,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", @@ -7549,6 +7150,7 @@ "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" @@ -7558,13 +7160,15 @@ "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", @@ -7660,7 +7264,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7737,6 +7340,7 @@ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ajv": "^8.0.0" }, @@ -7755,6 +7359,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -7771,7 +7376,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", @@ -8613,7 +8219,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -9139,6 +8744,7 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.0" } @@ -10530,6 +10136,31 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -10823,7 +10454,8 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -11016,7 +10648,6 @@ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -11077,7 +10708,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -11229,7 +10859,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -12780,7 +12409,8 @@ "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", @@ -14972,7 +14602,6 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", "dev": true, - "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -15222,7 +14851,6 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -16277,6 +15905,7 @@ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.11.5" } @@ -18190,7 +17819,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", @@ -19869,7 +19497,6 @@ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -20740,7 +20367,6 @@ "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", @@ -21550,7 +21176,6 @@ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -21779,6 +21404,7 @@ "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -21817,6 +21443,7 @@ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -21829,7 +21456,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", @@ -23017,6 +22645,7 @@ "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -23036,6 +22665,7 @@ "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -23071,6 +22701,7 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -23081,6 +22712,7 @@ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -23096,6 +22728,7 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -23111,7 +22744,8 @@ "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" + "license": "MIT", + "peer": true }, "node_modules/test-exclude": { "version": "6.0.0", @@ -23231,7 +22865,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -23782,7 +23415,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -23991,7 +23623,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -24254,6 +23885,7 @@ "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -24294,6 +23926,7 @@ "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -24351,6 +23984,7 @@ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10.13.0" } @@ -24361,6 +23995,7 @@ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -24375,6 +24010,7 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -24384,7 +24020,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", From f59dbd333e72e427d3f239c770f16abee3793add Mon Sep 17 00:00:00 2001 From: hieu-w Date: Thu, 26 Feb 2026 23:00:59 +0700 Subject: [PATCH 19/57] fix: build --- .../src/ChromeExtensionStorageModule.ts | 6 +++--- packages/core/src/authMetadata.ts | 8 ++++---- .../src/ServiceProviderBase.ts | 6 +++--- packages/share-serialization/package.json | 1 - .../src/ShareSerializationModule.ts | 13 ++++++------- packages/web-storage/package.json | 4 +--- packages/web-storage/src/WebStorageModule.ts | 17 ++++++++--------- 7 files changed, 25 insertions(+), 30 deletions(-) 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/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index c13506553..fbb7b9ea9 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -1,5 +1,5 @@ import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyECC } from "@tkey/common-types"; -import { bytesToHex, utf8ToBytes } from "@toruslabs/metadata-helpers"; +import { bytesToHex, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { keccak256 } from "@toruslabs/torus.js"; import stringify from "json-stable-stringify"; @@ -23,8 +23,8 @@ class AuthMetadata implements IAuthMetadata { const m = Metadata.fromJSON(data); if (!m.pubKey) throw CoreError.metadataPubKeyUnavailable(); - const msgHash = stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))); - if (!secp256k1.verify(sig, msgHash, m.pubKey.toSEC1(), { prehash: false, format: "der" })) { + const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); + if (!secp256k1.verify(hexToBytes(sig), msgHash, m.pubKey.toSEC1(), { prehash: false, format: "der" })) { throw CoreError.default("Signature not valid for returning metadata"); } return new AuthMetadata(m); @@ -34,7 +34,7 @@ class AuthMetadata implements IAuthMetadata { const data = this.metadata; if (!this.privKey) throw CoreError.privKeyUnavailable(); - const msgHash = stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))); + const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); const sig = secp256k1.sign(msgHash, toPrivKeyECC(this.privKey), { prehash: false, format: "der" }); return { diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index cd3f44ae3..500d2929f 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -12,7 +12,7 @@ import { StringifiedType, toPrivKeyECC, } from "@tkey/common-types"; -import { bytesToBase64 } from "@toruslabs/metadata-helpers"; +import { bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; class ServiceProviderBase implements IServiceProvider { enableLogging: boolean; @@ -59,8 +59,8 @@ class ServiceProviderBase implements IServiceProvider { } sign(msg: BNString): string { - const msgHex = typeof msg === "bigint" ? msg.toString(16) : msg; - const compactSig = secp256k1.sign(msgHex, toPrivKeyECC(this.postboxKey), { prehash: false }); + const msgHex = typeof msg === "bigint" ? msg.toString(16).padStart(64, "0") : msg; + const compactSig = secp256k1.sign(hexToBytes(msgHex), toPrivKeyECC(this.postboxKey), { prehash: false }); const sigWithV = new Uint8Array(65); sigWithV.set(compactSig); sigWithV[64] = 0; diff --git a/packages/share-serialization/package.json b/packages/share-serialization/package.json index 0156acf5f..1310abf31 100644 --- a/packages/share-serialization/package.json +++ b/packages/share-serialization/package.json @@ -45,7 +45,6 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, "bugs": { 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/web-storage/package.json b/packages/web-storage/package.json index 9794cac0a..8daff9ef6 100644 --- a/packages/web-storage/package.json +++ b/packages/web-storage/package.json @@ -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", 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); From 1b93f8dea2dd48f4dc6b766b62dd94630bee4ed7 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 12:01:04 +0700 Subject: [PATCH 20/57] fix: test --- packages/private-keys/package.json | 4 +--- packages/private-keys/src/ED25519Format.ts | 25 +++++++++------------ packages/service-provider-base/test/test.js | 2 +- packages/tss/src/provider.ts | 2 +- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/packages/private-keys/package.json b/packages/private-keys/package.json index 4c6f3143c..1483fb182 100644 --- a/packages/private-keys/package.json +++ b/packages/private-keys/package.json @@ -40,9 +40,7 @@ "devDependencies": {}, "dependencies": { "@tkey/common-types": "^16.0.0", - "@noble/curves": "^1.8.1", - "@toruslabs/metadata-helpers": "^8.1.0", - "@toruslabs/tweetnacl-js": "^1.0.4" + "@noble/curves": "^1.8.1" }, "bugs": { "url": "https://github.com/tkey/tkey/issues" diff --git a/packages/private-keys/src/ED25519Format.ts b/packages/private-keys/src/ED25519Format.ts index a11fefb6f..32ad3b70c 100644 --- a/packages/private-keys/src/ED25519Format.ts +++ b/packages/private-keys/src/ED25519Format.ts @@ -1,7 +1,6 @@ -import { bytesToNumberBE } from "@noble/curves/utils.js"; +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 { base64ToBytes, bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; -import nacl from "@toruslabs/tweetnacl-js"; export class ED25519Format implements IPrivateKeyFormat { privateKey: bigint; @@ -14,27 +13,23 @@ export class ED25519Format implements IPrivateKeyFormat { } validatePrivateKey(privateKey: bigint): boolean { - // Validation as per - // https://github.com/solana-labs/solana-web3.js/blob/e1567ab/src/keypair.ts#L65 try { - const secretKey = bytesToBase64(hexToBytes(privateKey.toString(16))); - const keypair = nacl.sign.keyPair.fromSecretKey(base64ToBytes(secretKey)); - 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?: bigint): IPrivateKeyStore { let privKey: bigint; if (!privateKey) { - privKey = bytesToNumberBE(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/service-provider-base/test/test.js b/packages/service-provider-base/test/test.js index e31ccfde6..fff5bb1f4 100644 --- a/packages/service-provider-base/test/test.js +++ b/packages/service-provider-base/test/test.js @@ -9,7 +9,7 @@ describe("ServiceProvider", function () { it("#should encrypt and decrypt correctly", async function () { const privKey = PRIVATE_KEY; const tmp = 123n; - const message = hexToBytes(tmp.toString(16).padStart(15, "0")); + 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/tss/src/provider.ts b/packages/tss/src/provider.ts index 014f18ba4..fd7d85781 100644 --- a/packages/tss/src/provider.ts +++ b/packages/tss/src/provider.ts @@ -72,7 +72,7 @@ export class TSSTorusServiceProvider extends TorusServiceProvider { }); return { - pubKey: new Point(tssServerPub.finalKeyData.X, tssServerPub.finalKeyData.Y), + pubKey: new Point(BigInt(`0x${tssServerPub.finalKeyData.X}`), BigInt(`0x${tssServerPub.finalKeyData.Y}`)), nodeIndexes: tssServerPub.nodesData.nodeIndexes || [], }; } From cc8ca5eb320f8ef92395ff2f37d2cc04f361c1e5 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 12:04:25 +0700 Subject: [PATCH 21/57] fix: remove tss package --- package-lock.json | 195 +----- packages/tss/.mocharc.json | 7 - packages/tss/README.md | 3 - packages/tss/package.json | 48 -- packages/tss/src/common.ts | 78 --- packages/tss/src/index.ts | 5 - packages/tss/src/provider.ts | 95 --- packages/tss/src/tss.ts | 1022 ------------------------------ packages/tss/src/util.ts | 105 --- packages/tss/test/.eslintrc.json | 5 - packages/tss/test/helpers.ts | 126 ---- packages/tss/test/tsconfig.json | 7 - packages/tss/test/tss.ts | 659 ------------------- packages/tss/torus.config.js | 1 - packages/tss/tsconfig.json | 4 - packages/tss/webpack.config.js | 6 - 16 files changed, 7 insertions(+), 2359 deletions(-) delete mode 100644 packages/tss/.mocharc.json delete mode 100644 packages/tss/README.md delete mode 100644 packages/tss/package.json delete mode 100644 packages/tss/src/common.ts delete mode 100644 packages/tss/src/index.ts delete mode 100644 packages/tss/src/provider.ts delete mode 100644 packages/tss/src/tss.ts delete mode 100644 packages/tss/src/util.ts delete mode 100644 packages/tss/test/.eslintrc.json delete mode 100644 packages/tss/test/helpers.ts delete mode 100644 packages/tss/test/tsconfig.json delete mode 100644 packages/tss/test/tss.ts delete mode 100644 packages/tss/torus.config.js delete mode 100644 packages/tss/tsconfig.json delete mode 100644 packages/tss/webpack.config.js diff --git a/package-lock.json b/package-lock.json index 27ffde512..f865ea916 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1928,23 +1928,6 @@ "tslib": "^2.4.0" } }, - "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" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, "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", @@ -5165,10 +5148,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 @@ -5322,19 +5301,6 @@ } } }, - "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==", - "license": "CC0-1.0", - "dependencies": { - "elliptic": "^6.5.5" - }, - "engines": { - "node": ">=18.x", - "npm": ">=9.x" - } - }, "node_modules/@toruslabs/eslint-config-typescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/eslint-config-typescript/-/eslint-config-typescript-5.0.0.tgz", @@ -5436,28 +5402,6 @@ "@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": "8.1.0", "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-8.1.0.tgz", @@ -5514,25 +5458,6 @@ } } }, - "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": "5.3.0", "resolved": "https://registry.npmjs.org/@toruslabs/session-manager/-/session-manager-5.3.0.tgz", @@ -6057,12 +5982,6 @@ } } }, - "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", @@ -6107,6 +6026,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -6218,12 +6138,6 @@ "dev": true, "license": "MIT" }, - "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==", - "dev": true - }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -6248,6 +6162,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" } @@ -10540,47 +10455,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", @@ -14816,15 +14690,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==", - "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", @@ -23230,26 +23095,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", @@ -23517,7 +23362,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", @@ -25136,9 +24982,7 @@ "license": "MIT", "dependencies": { "@noble/curves": "^1.8.1", - "@tkey/common-types": "^16.0.0", - "@toruslabs/metadata-helpers": "^8.1.0", - "@toruslabs/tweetnacl-js": "^1.0.4" + "@tkey/common-types": "^16.0.0" }, "devDependencies": {}, "engines": { @@ -25301,7 +25145,6 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "bn.js": "^5.2.1", "ethereum-cryptography": "^3.1.0" }, "engines": { @@ -25444,6 +25287,7 @@ "packages/tss": { "name": "@tkey/tss", "version": "16.0.0", + "extraneous": true, "license": "ISC", "dependencies": { "@tkey/common-types": "^16.0.0", @@ -25471,37 +25315,12 @@ "npm": ">=10.x" } }, - "packages/tss/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 - } - } - }, "packages/web-storage": { "name": "@tkey/web-storage", "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", 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 4823eeab7..000000000 --- a/packages/tss/package.json +++ /dev/null @@ -1,48 +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/lib.esm/index.js", - "jsdelivr": "dist/lib.esm/index.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", - "@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": "^17.0.0", - "@types/bn.js": "^5.1.6", - "bn.js": "^5.2.1", - "elliptic": "^6.6.1", - "ethereum-cryptography": "^3.1.0", - "jsrsasign": "^11.1.0" - }, - "devDependencies": { - "@types/jsrsasign": "^10.5.15", - "tsx": "^4.19.3", - "typescript": "^5.8.2" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.x" - } -} 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 fd7d85781..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(BigInt(`0x${tssServerPub.finalKeyData.X}`), BigInt(`0x${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 73ce11dda..000000000 --- a/packages/tss/src/tss.ts +++ /dev/null @@ -1,1022 +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 { hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; -import { dotProduct, ecPoint, hexPoint, PointHex, randomSelection, RSSClient } from "@toruslabs/rss-client"; -import { getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed, getKeyCurve, 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 factorKeyBytes = hexToBytes(factorKey.toString(16, 64)); - const userDecryption = await decrypt(factorKeyBytes, userEnc); - const serverDecryptions = await Promise.all( - serverEncs.map((factorEnc) => { - if (factorEnc === null) return null; - return decrypt(factorKeyBytes, 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: Uint8Array; - 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 = new Uint8Array(getKeyCurve(KeyType.secp256k1).Point.fromAffine(getSecpKeyFromEd25519(scalar).point).toBytes(true)); - const msg = await encrypt(encKey, importKey); - this.metadata.setGeneralStoreDomain(domainKey, { message: msg }); - - return new BN(scalar.toString(16), 16); - } - 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(BigInt(`0x${edScalar.toString(16)}`)).scalar; - const decKeyBytes = hexToBytes(decKey.toString(16).padStart(64, "0")); - - const seed = await decrypt(decKeyBytes, 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(utf8ToBytes(`${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), new Uint8Array(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), hexToBytes(tss2.toString(16, 64))), - 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 e8b1f6fa7..000000000 --- a/packages/tss/test/helpers.ts +++ /dev/null @@ -1,126 +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: Uint8Array; - scalar: BN; -} { - if (keyType === KeyType.secp256k1) { - const scalar = new BN(getKeyCurve(keyType).keygen().secretKey); - return { - raw: new Uint8Array(scalar.toArrayLike(Buffer, "be", 32)), - scalar, - }; - } else if (keyType === KeyType.ed25519) { - const raw = new Uint8Array(32); - crypto.getRandomValues(raw); - const { scalar } = getEd25519KeyPairFromSeed(raw); - return { - raw, - scalar: new BN(scalar.toString(16), 16), - }; - } - 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 a63c95492..000000000 --- a/packages/tss/test/tss.ts +++ /dev/null @@ -1,659 +0,0 @@ -import { EllipticPoint, KeyType, Point } from "@tkey/common-types"; -import assert, { deepStrictEqual, 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, - }); - deepStrictEqual(new Uint8Array(seed), new Uint8Array(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, - }); - deepStrictEqual(new Uint8Array(seed), new Uint8Array(importedKey)); - } - - 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, - }); - deepStrictEqual(new Uint8Array(seed), new Uint8Array(importedKey)); - } - } - { - 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; From c46e1f414514b1e4fbf99aff29526e44671b86eb Mon Sep 17 00:00:00 2001 From: Tuna Date: Fri, 27 Feb 2026 13:05:11 +0700 Subject: [PATCH 22/57] chore: upgrade ci actions version --- .github/workflows/backward.yml | 6 +++--- .github/workflows/browserTests.yml | 8 ++++---- .github/workflows/buildMocks.yml | 6 +++--- .github/workflows/ci.yml | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/backward.yml b/.github/workflows/backward.yml index 52b11cc95..2ae88095b 100644 --- a/.github/workflows/backward.yml +++ b/.github/workflows/backward.yml @@ -26,7 +26,7 @@ jobs: 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 9b0bfef0b..5b195d8a8 100644 --- a/.github/workflows/browserTests.yml +++ b/.github/workflows/browserTests.yml @@ -1,6 +1,6 @@ name: BrowserTests -on: +on: create: #[push] workflow_dispatch: env: @@ -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 c7700ceeb..567f7f9da 100644 --- a/.github/workflows/buildMocks.yml +++ b/.github/workflows/buildMocks.yml @@ -21,12 +21,12 @@ jobs: 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 a55f7ae7b..3a97ba981 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,10 +13,10 @@ jobs: 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" From 78b7ac21178b0b571757d2efbd7571ff49bc8d46 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 13:40:12 +0700 Subject: [PATCH 23/57] fix: test --- packages/common-types/src/utils.ts | 4 ++ packages/core/src/authMetadata.ts | 6 +-- packages/core/src/core.ts | 34 +++++++++++------ packages/core/src/metadata.ts | 3 +- packages/default/test/shared.js | 38 +++++++++---------- .../src/SecurityQuestionStore.ts | 2 +- .../src/ServiceProviderBase.ts | 2 +- packages/share-transfer/src/ShareRequest.ts | 9 +++-- .../src/MockStorageLayer.ts | 5 ++- .../src/TorusStorageLayer.ts | 5 ++- test/setup.mjs | 6 ++- 11 files changed, 69 insertions(+), 45 deletions(-) diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 196c67edd..81056e510 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -42,6 +42,10 @@ export async function prettyPrintError(error: unknown): Promise { return serializeError(error); } +export function bigIntReplacer(this: unknown, _key: string | number, value: unknown): unknown { + return typeof value === "bigint" ? value.toString(16) : value; +} + export function generateAddressFromPublicKey(publicKey: Uint8Array): string { const ethAddressLower = `0x${keccak256(publicKey).slice(64 - 38)}`; return toChecksumAddress(ethAddressLower); diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index fbb7b9ea9..9e49948d7 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -1,4 +1,4 @@ -import { IAuthMetadata, secp256k1, StringifiedType, stripHexPrefix, toPrivKeyECC } 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 stringify from "json-stable-stringify"; @@ -23,7 +23,7 @@ class AuthMetadata implements IAuthMetadata { const m = Metadata.fromJSON(data); if (!m.pubKey) throw CoreError.metadataPubKeyUnavailable(); - const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); + const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); if (!secp256k1.verify(hexToBytes(sig), msgHash, m.pubKey.toSEC1(), { prehash: false, format: "der" })) { throw CoreError.default("Signature not valid for returning metadata"); } @@ -34,7 +34,7 @@ class AuthMetadata implements IAuthMetadata { const data = this.metadata; if (!this.privKey) throw CoreError.privKeyUnavailable(); - const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); + const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); const sig = secp256k1.sign(msgHash, toPrivKeyECC(this.privKey), { prehash: false, format: "der" }); return { diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 5c64aca7c..abda0f7d0 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -1,4 +1,5 @@ import { + bigIntReplacer, BNString, CatchupToLatestShareResult, decrypt, @@ -173,11 +174,19 @@ class ThresholdKey implements ITKey { if (privKey) tb.privKey = hexToBigInt(privKey); if (ed25519Key) tb.ed25519Key = hexToBytes(ed25519Key); - tb.shares = shares; + 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(0n, 0n)), 0n)))); - const ShareStoreKeys = Object.keys(JSON.parse(stringify(new ShareStore(new Share(0n, 0n), "")))); + 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); @@ -194,7 +203,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])); @@ -223,14 +232,14 @@ class ThresholdKey implements ITKey { // TODO: fix for deleted share const latestPolyIDOnCloud = tempCloud.getLatestPublicPolynomial().getPolynomialID(); if (tb.serviceProvider.postboxKey.toString(16) === "0") { - const shareIndexesExistInSDK = Object.keys(shares[latestPolyIDOnCloud]); + 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 @@ -339,7 +348,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"); } @@ -1092,7 +1101,7 @@ class ThresholdKey implements ITKey { return JSON.parse(bytesToUtf8(decryptedItem)) as TkeyStoreItemType; }) ); - const encryptedData = await this.encrypt(utf8ToBytes(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; @@ -1187,7 +1196,10 @@ class ThresholdKey implements ITKey { 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, @@ -1333,7 +1345,7 @@ class ThresholdKey implements ITKey { const sharesToPush = await Promise.all( shareIndexesNeedingEncryption.map(async (shareIndex) => { const oldShare = oldPoly.polyEval(hexToBigInt(shareIndex)); - const encryptedShare = await encrypt(getPubKeyECC(oldShare), utf8ToBytes(JSON.stringify(newShareStores[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; diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index 670d6b45b..10245cfdf 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -1,4 +1,5 @@ import { + bigIntReplacer, decrypt, EncryptedMessage, FactorEnc, @@ -304,7 +305,7 @@ class Metadata implements IMetadata { } clone(): Metadata { - return Metadata.fromJSON(JSON.parse(stringify(this))); + return Metadata.fromJSON(JSON.parse(stringify(this, { replacer: bigIntReplacer }))); } toJSON(): StringifiedType { diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index 96cb0b6d4..dd3b13b78 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"; @@ -102,7 +102,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should be able to reconstruct key when initializing with user input, manualSync=${mode}`, async function () { let determinedShare = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - determinedShare = determinedShare % secp256k1.CURVE.n; + determinedShare = determinedShare % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ determinedShare, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -132,7 +132,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should be able to reconstruct key when initializing a with a share, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -147,7 +147,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should be able to reconstruct key after refresh and initializing with a share, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); const newShares = await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); @@ -164,7 +164,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should be able to reconstruct key after refresh and initializing with service provider, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); const newShares = await tb.generateNewShare(); await tb.syncLocalMetadataTransitions(); @@ -446,12 +446,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should serialize and deserialize correctly without tkeyArgs, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + 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(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); @@ -459,12 +459,12 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should serialize and deserialize correctly with tkeyArgs, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + 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(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); @@ -472,7 +472,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should serialize and deserialize correctly, keeping localTransitions consistent before syncing NewKeyAssign, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + userInput = userInput % secp256k1.Point.CURVE().n; const resp1 = await tb._initializeNewKey({ userInput, initializeModules: true }); // generate and delete @@ -481,7 +481,7 @@ 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}`); @@ -500,13 +500,13 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { it(`#should serialize and deserialize correctly keeping localTransitions afterNewKeyAssign, manualSync=${mode}`, async function () { let userInput = BigInt(keccak256(utf8ToBytes("user answer blublu"))); - userInput = userInput % secp256k1.CURVE.n; + 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); @@ -528,7 +528,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb3.initialize(); 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(16), resp1.secp256k1Key.toString(16), "Incorrect serialization"); @@ -548,7 +548,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize({ withShare: resp1.deviceShare }); 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(); @@ -557,7 +557,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { 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,7 +586,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); it(`#should get or set with specified private key correctly, manualSync=${mode}`, async function () { - const privKey = generatePrivate().toString(16); + const privKey = bytesToHex(generatePrivate()); const privKeyBN = BigInt(`0x${privKey}`); const storageLayer = initStorageLayer({ hostUrl: metadataURL }); const message = { test: Math.random().toString(36).substring(7) }; @@ -749,7 +749,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { 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(16), reconstructedKey.toString(16), "Incorrect serialization"); @@ -1598,7 +1598,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { equal(isUpgraded, false); const nonceBN = BigInt(`0x${nonce}`); - const importKey = ((postboxKeyBN + nonceBN) % secp256k1.CURVE.n).toString(16); + const importKey = ((postboxKeyBN + nonceBN) % secp256k1.Point.CURVE().n).toString(16); const tKey = new ThresholdKey({ serviceProvider, storageLayer: storageLayer2, manualSync: mode }); await tKey.initialize({ diff --git a/packages/security-questions/src/SecurityQuestionStore.ts b/packages/security-questions/src/SecurityQuestionStore.ts index 37d1e5d7b..042eade6d 100644 --- a/packages/security-questions/src/SecurityQuestionStore.ts +++ b/packages/security-questions/src/SecurityQuestionStore.ts @@ -14,7 +14,7 @@ class SecurityQuestionStore implements ISerializable { constructor({ nonce, shareIndex, sqPublicShare, polynomialID, questions }: SecurityQuestionStoreArgs) { this.nonce = typeof nonce === "bigint" ? nonce : BigInt(`0x${nonce}`); this.shareIndex = typeof shareIndex === "bigint" ? shareIndex : BigInt(`0x${shareIndex}`); - this.sqPublicShare = new PublicShare(sqPublicShare.shareIndex, sqPublicShare.shareCommitment); + this.sqPublicShare = sqPublicShare instanceof PublicShare ? sqPublicShare : PublicShare.fromJSON(sqPublicShare); this.polynomialID = polynomialID; this.questions = questions; } diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 500d2929f..81a111e48 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -26,7 +26,7 @@ class ServiceProviderBase implements IServiceProvider { constructor({ enableLogging = false, postboxKey }: ServiceProviderArgs) { this.enableLogging = enableLogging; - this.postboxKey = BigInt(`0x${postboxKey}`); + this.postboxKey = postboxKey != null ? BigInt(`0x${postboxKey}`) : 0n; this.serviceProviderName = "ServiceProviderBase"; } diff --git a/packages/share-transfer/src/ShareRequest.ts b/packages/share-transfer/src/ShareRequest.ts index d8bfc7f8a..7177b2db1 100644 --- a/packages/share-transfer/src/ShareRequest.ts +++ b/packages/share-transfer/src/ShareRequest.ts @@ -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 = new Uint8Array(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 Uint8Array; + this.encPubKey = Uint8Array.from(Object.values(encPubKey as ArrayLike)); } this.availableShareIndexes = availableShareIndexes; this.encShareInTransit = encShareInTransit; diff --git a/packages/storage-layer-torus/src/MockStorageLayer.ts b/packages/storage-layer-torus/src/MockStorageLayer.ts index 02522817a..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, @@ -61,7 +62,7 @@ class MockStorageLayer implements IStorageLayer { let usedKey: bigint; if (!privKey) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey).x; - this.dataMap[usedKey.toString(16)] = stringify(input); + this.dataMap[usedKey.toString(16)] = stringify(input, { replacer: bigIntReplacer }); return { message: "success" }; } @@ -71,7 +72,7 @@ class MockStorageLayer implements IStorageLayer { let usedKey: bigint; if (!privKey || !privKey[index]) usedKey = serviceProvider.retrievePubKeyPoint().x; else usedKey = getPubKeyPoint(privKey[index]).x; - this.dataMap[usedKey.toString(16)] = stringify(el); + this.dataMap[usedKey.toString(16)] = stringify(el, { replacer: bigIntReplacer }); }); return { message: "success" }; diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index 10d873dfd..127a17412 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, @@ -53,7 +54,7 @@ class TorusStorageLayer implements IStorageLayer { } // General case, encrypt message - const msgBytes = utf8ToBytes(stringify(el)); + const msgBytes = utf8ToBytes(stringify(el, { replacer: bigIntReplacer })); let encryptedDetails: EncryptedMessage; if (privKey) { encryptedDetails = await encrypt(getPubKeyECC(privKey), msgBytes); @@ -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", diff --git a/test/setup.mjs b/test/setup.mjs index 226133ece..0751f3b04 100644 --- a/test/setup.mjs +++ b/test/setup.mjs @@ -1,3 +1,7 @@ +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"; @@ -10,7 +14,7 @@ JSDOM(``, { }); 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", From 8e0be902d3d32a59b2177165f1838f51b30a79de Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 14:42:57 +0700 Subject: [PATCH 24/57] fix: update readme --- README.md | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 32cfc97e2..02bef10ee 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** is now `bigint | string` (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 From 3d83da813a7f16d41c1df1b25326268ed21845cb Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 15:01:08 +0700 Subject: [PATCH 25/57] fix: infura key in test as ci secret --- .github/workflows/ci.yml | 4 ++++ packages/default/test/shared.js | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3a97ba981..67f3ae876 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,10 @@ jobs: - name: Test Development run: npm run test + env: + TEST_INFURA_KEY: ${{ secrets.TEST_INFURA_KEY }} - name: Test Production run: npm run test-production + env: + TEST_INFURA_KEY: ${{ secrets.TEST_INFURA_KEY }} diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index dd3b13b78..bf1d340fc 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -958,7 +958,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(new JsonRpcProvider(process.env.TEST_INFURA_KEY)); secp256k1Format = new SECP256K1Format(); ed25519privateKeyFormat = new ED25519Format(); tb = new ThresholdKey({ @@ -1014,7 +1014,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(returnedSeed[1].seedPhrase, seedPhraseToSet2); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider("https://mainnet.infura.io/v3/bca735fdbba0408bb09471e86463ae68") + new JsonRpcProvider(process.env.TEST_INFURA_KEY) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, @@ -1170,7 +1170,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.syncLocalMetadataTransitions(); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider("https://mainnet.infura.io/v3/bca735fdbba0408bb09471e86463ae68") + new JsonRpcProvider(process.env.TEST_INFURA_KEY) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, From 1cb640e072bc093cc9649e77de4b2139913f07a9 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 15:49:41 +0700 Subject: [PATCH 26/57] fix: update deps --- package-lock.json | 329 +++------------------- packages/chrome-storage/package.json | 4 +- packages/core/package.json | 5 +- packages/core/src/core.ts | 4 +- packages/default/package.json | 5 +- packages/private-keys/package.json | 2 +- packages/security-questions/package.json | 4 +- packages/seed-phrase/package.json | 2 +- packages/share-serialization/package.json | 2 +- packages/share-transfer/package.json | 4 +- packages/storage-layer-torus/package.json | 4 +- 11 files changed, 56 insertions(+), 309 deletions(-) diff --git a/package-lock.json b/package-lock.json index f865ea916..a03b9e335 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5178,19 +5178,6 @@ "npm": ">=10.x" } }, - "node_modules/@toruslabs/broadcast-channel/node_modules/@toruslabs/eccrypto": { - "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": { - "@noble/curves": "^2.0.1" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.x" - } - }, "node_modules/@toruslabs/bs58": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/bs58/-/bs58-1.0.0.tgz", @@ -5265,19 +5252,6 @@ } } }, - "node_modules/@toruslabs/customauth/node_modules/@toruslabs/eccrypto": { - "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": { - "@noble/curves": "^2.0.1" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.x" - } - }, "node_modules/@toruslabs/customauth/node_modules/@toruslabs/http-helpers": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", @@ -5301,6 +5275,19 @@ } } }, + "node_modules/@toruslabs/eccrypto": { + "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": { + "@noble/curves": "^2.0.1" + }, + "engines": { + "node": ">=22.x", + "npm": ">=10.x" + } + }, "node_modules/@toruslabs/eslint-config-typescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/eslint-config-typescript/-/eslint-config-typescript-5.0.0.tgz", @@ -5422,19 +5409,6 @@ "@babel/runtime": "7.x" } }, - "node_modules/@toruslabs/metadata-helpers/node_modules/@toruslabs/eccrypto": { - "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": { - "@noble/curves": "^2.0.1" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.x" - } - }, "node_modules/@toruslabs/metadata-helpers/node_modules/@toruslabs/http-helpers": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", @@ -5477,19 +5451,6 @@ "@rollup/rollup-linux-x64-gnu": "^4.59.0" } }, - "node_modules/@toruslabs/session-manager/node_modules/@toruslabs/eccrypto": { - "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": { - "@noble/curves": "^2.0.1" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.x" - } - }, "node_modules/@toruslabs/session-manager/node_modules/@toruslabs/http-helpers": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", @@ -5946,19 +5907,6 @@ "@babel/runtime": "7.x" } }, - "node_modules/@toruslabs/torus.js/node_modules/@toruslabs/eccrypto": { - "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": { - "@noble/curves": "^2.0.1" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.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", @@ -6033,9 +5981,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.0.309", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.309.tgz", - "integrity": "sha512-ZFADzcp8b+roUrux68U8pti4cmNOLJXWkShk8lfxj9SBcjYqpJt7NypBprSJUJDJVakGZgd2Tt00QePIGh7oPA==", + "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": { @@ -6189,9 +6137,9 @@ "license": "MIT" }, "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==", + "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" }, @@ -7878,12 +7826,6 @@ "node": ">= 6" } }, - "node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "license": "MIT" - }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -8101,12 +8043,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", @@ -10014,26 +9950,6 @@ "dev": true, "license": "ISC" }, - "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" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -11214,9 +11130,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==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", "funding": [ { "type": "individual", @@ -11227,6 +11143,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -12573,16 +12490,6 @@ "dev": true, "license": "ISC" }, - "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", @@ -12632,17 +12539,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", @@ -12983,6 +12879,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": { @@ -16601,18 +16498,6 @@ "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", @@ -24805,8 +24690,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" }, "engines": { "node": ">=22.x", @@ -24837,19 +24722,6 @@ "@babel/runtime": "7.x" } }, - "packages/common-types/node_modules/@toruslabs/eccrypto": { - "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": { - "@noble/curves": "^2.0.1" - }, - "engines": { - "node": ">=22.x", - "npm": ">=10.x" - } - }, "packages/core": { "name": "@tkey/core", "version": "16.0.0", @@ -24857,12 +24729,11 @@ "dependencies": { "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "json-stable-stringify": "^1.3.0" }, "engines": { "node": ">=22.x", @@ -24872,19 +24743,6 @@ "@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": "9.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", @@ -24921,13 +24779,12 @@ "@tkey/share-serialization": "^16.0.0", "@tkey/share-transfer": "^16.0.0", "@tkey/storage-layer-torus": "^16.0.0", - "@toruslabs/metadata-helpers": "^8.1.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/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0" }, "engines": { @@ -24938,20 +24795,6 @@ "@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": "9.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", @@ -24981,7 +24824,7 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@noble/curves": "^1.8.1", + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0" }, "devDependencies": {}, @@ -24993,42 +24836,15 @@ "@babel/runtime": "7.x" } }, - "packages/private-keys/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/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/private-keys/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/" - } - }, "packages/security-questions": { "name": "@tkey/security-questions", "version": "16.0.0", "license": "MIT", "dependencies": { - "@noble/curves": "^1.8.1", + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.1.0" + "ethereum-cryptography": "^3.2.0" }, "devDependencies": {}, "engines": { @@ -25039,40 +24855,13 @@ "@babel/runtime": "7.x" } }, - "packages/security-questions/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/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/security-questions/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/" - } - }, "packages/seed-phrase": { "name": "@tkey/seed-phrase", "version": "16.0.0", "license": "MIT", "dependencies": { "@tkey/common-types": "^16.0.0", - "ethers": "^6.13.5" + "ethers": "^6.16.0" }, "devDependencies": {}, "engines": { @@ -25145,7 +24934,7 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.1.0" + "ethereum-cryptography": "^3.2.0" }, "engines": { "node": ">=22.x", @@ -25160,9 +24949,9 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@noble/curves": "^1.8.1", + "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0" }, @@ -25175,46 +24964,6 @@ "@babel/runtime": "7.x" } }, - "packages/share-transfer/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/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "packages/share-transfer/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/" - } - }, - "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": "9.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-9.0.0.tgz", @@ -25247,8 +24996,8 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "base64url": "3.0.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "ethereum-cryptography": "^3.2.0", + "json-stable-stringify": "^1.3.0" }, "devDependencies": { "@types/json-stable-stringify": "^1.2.0" diff --git a/packages/chrome-storage/package.json b/packages/chrome-storage/package.json index 53752fa2c..5aa5c0d6e 100644 --- a/packages/chrome-storage/package.json +++ b/packages/chrome-storage/package.json @@ -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": [ diff --git a/packages/core/package.json b/packages/core/package.json index 0eafb4a27..204f7f2c3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -36,12 +36,11 @@ "dependencies": { "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "json-stable-stringify": "^1.3.0" }, "peerDependencies": { "@babel/runtime": "7.x" diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index abda0f7d0..34da0ac53 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -1,3 +1,4 @@ +import { randomBytes } from "@noble/curves/utils.js"; import { bigIntReplacer, BNString, @@ -48,7 +49,6 @@ import { } from "@tkey/common-types"; import { bytesToHex, bytesToUtf8, hexToBytes, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { encodeEd25519Point, getEd25519ExtendedPublicKey as getEd25519KeyPairFromSeed } from "@toruslabs/torus.js"; -import { getRandomBytes } from "ethereum-cryptography/random"; import stringify from "json-stable-stringify"; import AuthMetadata from "./authMetadata"; @@ -1507,7 +1507,7 @@ class ThresholdKey implements ITKey { } let seedToUse = seed; if (!seed) { - seedToUse = await getRandomBytes(32); + seedToUse = randomBytes(32); } await this.importEd25519Seed(seedToUse); } diff --git a/packages/default/package.json b/packages/default/package.json index 887282415..c7ff16f06 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -42,13 +42,12 @@ "@tkey/share-serialization": "^16.0.0", "@tkey/share-transfer": "^16.0.0", "@tkey/storage-layer-torus": "^16.0.0", - "@toruslabs/metadata-helpers": "^8.1.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/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0" }, "peerDependencies": { diff --git a/packages/private-keys/package.json b/packages/private-keys/package.json index 1483fb182..01a3e474c 100644 --- a/packages/private-keys/package.json +++ b/packages/private-keys/package.json @@ -40,7 +40,7 @@ "devDependencies": {}, "dependencies": { "@tkey/common-types": "^16.0.0", - "@noble/curves": "^1.8.1" + "@noble/curves": "^2.0.1" }, "bugs": { "url": "https://github.com/tkey/tkey/issues" diff --git a/packages/security-questions/package.json b/packages/security-questions/package.json index e9c1762fa..c36a4b2ed 100644 --- a/packages/security-questions/package.json +++ b/packages/security-questions/package.json @@ -42,9 +42,9 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "@noble/curves": "^1.8.1", + "@noble/curves": "^2.0.1", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.1.0" + "ethereum-cryptography": "^3.2.0" }, "devDependencies": {}, "lint-staged": { diff --git a/packages/seed-phrase/package.json b/packages/seed-phrase/package.json index 3d1429dd8..bde08977b 100644 --- a/packages/seed-phrase/package.json +++ b/packages/seed-phrase/package.json @@ -42,7 +42,7 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "ethers": "^6.13.5" + "ethers": "^6.16.0" }, "devDependencies": {}, "lint-staged": { diff --git a/packages/share-serialization/package.json b/packages/share-serialization/package.json index 1310abf31..066a43d46 100644 --- a/packages/share-serialization/package.json +++ b/packages/share-serialization/package.json @@ -45,7 +45,7 @@ "dependencies": { "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.1.0" + "ethereum-cryptography": "^3.2.0" }, "bugs": { "url": "https://github.com/tkey/tkey/issues" diff --git a/packages/share-transfer/package.json b/packages/share-transfer/package.json index b4ff12a24..680e5faab 100644 --- a/packages/share-transfer/package.json +++ b/packages/share-transfer/package.json @@ -39,9 +39,9 @@ }, "dependencies": { "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^6.0.2", + "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", - "@noble/curves": "^1.8.1", + "@noble/curves": "^2.0.1", "@toruslabs/metadata-helpers": "^8.1.0" }, "devDependencies": {}, diff --git a/packages/storage-layer-torus/package.json b/packages/storage-layer-torus/package.json index e6b7668be..d2d302e73 100644 --- a/packages/storage-layer-torus/package.json +++ b/packages/storage-layer-torus/package.json @@ -42,8 +42,8 @@ "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "base64url": "3.0.1", - "ethereum-cryptography": "^3.1.0", - "json-stable-stringify": "^1.2.1" + "ethereum-cryptography": "^3.2.0", + "json-stable-stringify": "^1.3.0" }, "devDependencies": { "@types/json-stable-stringify": "^1.2.0" From ab359656217e0e122ec206f4750be0a098f3ef31 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 15:55:39 +0700 Subject: [PATCH 27/57] fix: test --- packages/core/test/authMetadata.test.js | 4 ++-- packages/core/test/metadata.test.js | 4 ++-- packages/default/test/baseSPAutoSync.test.js | 3 ++- packages/default/test/baseSPManualSync.test.js | 3 ++- packages/default/test/torusSPAutoSync.test.js | 3 ++- packages/default/test/torusSPManualSync.test.js | 3 ++- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/core/test/authMetadata.test.js b/packages/core/test/authMetadata.test.js index 326452513..e51a3551a 100644 --- a/packages/core/test/authMetadata.test.js +++ b/packages/core/test/authMetadata.test.js @@ -1,12 +1,12 @@ import { generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import { bytesToNumberBE } from "@noble/curves/utils.js"; +import { bytesToHex, bytesToNumberBE } from "@noble/curves/utils.js"; import stringify from "json-stable-stringify"; import { AuthMetadata, generateRandomPolynomial, Metadata } from "../src/index"; -const PRIVATE_KEY = generatePrivate().toString("hex"); +const PRIVATE_KEY = bytesToHex(generatePrivate()); describe("AuthMetadata", function () { it("#should authenticate and serialize and deserialize into JSON seamlessly", async function () { diff --git a/packages/core/test/metadata.test.js b/packages/core/test/metadata.test.js index c8588d971..4564f38d3 100644 --- a/packages/core/test/metadata.test.js +++ b/packages/core/test/metadata.test.js @@ -1,12 +1,12 @@ import { getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import { bytesToNumberBE } from "@noble/curves/utils.js"; +import { bytesToHex, bytesToNumberBE } from "@noble/curves/utils.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 () { 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/torusSPAutoSync.test.js b/packages/default/test/torusSPAutoSync.test.js index 31bd56333..9ff058c97 100644 --- a/packages/default/test/torusSPAutoSync.test.js +++ b/packages/default/test/torusSPAutoSync.test.js @@ -1,4 +1,5 @@ import { TorusServiceProvider } from "@tkey/service-provider-torus"; +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 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..e5acaa413 100644 --- a/packages/default/test/torusSPManualSync.test.js +++ b/packages/default/test/torusSPManualSync.test.js @@ -1,10 +1,11 @@ import { TorusServiceProvider } from "@tkey/service-provider-torus"; +import { bytesToHex } from "@noble/curves/utils.js"; 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: { From be21e01742af211365d88d70802f252b8d18f135 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 16:01:29 +0700 Subject: [PATCH 28/57] fix: ci --- packages/default/test/shared.js | 6 +++--- test/setup.mjs | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index bf1d340fc..2b4f3c73f 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -958,7 +958,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let ed25519privateKeyFormat; beforeEach("Setup ThresholdKey", async function () { - metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider(process.env.TEST_INFURA_KEY)); + metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider(`https://mainnet.infura.io/v3/${process.env.TEST_INFURA_KEY}`)); secp256k1Format = new SECP256K1Format(); ed25519privateKeyFormat = new ED25519Format(); tb = new ThresholdKey({ @@ -1014,7 +1014,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(returnedSeed[1].seedPhrase, seedPhraseToSet2); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider(process.env.TEST_INFURA_KEY) + new JsonRpcProvider(`https://mainnet.infura.io/v3/${process.env.TEST_INFURA_KEY}`) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, @@ -1170,7 +1170,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.syncLocalMetadataTransitions(); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider(process.env.TEST_INFURA_KEY) + new JsonRpcProvider(`https://mainnet.infura.io/v3/${process.env.TEST_INFURA_KEY}`) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, diff --git a/test/setup.mjs b/test/setup.mjs index 0751f3b04..946ebb942 100644 --- a/test/setup.mjs +++ b/test/setup.mjs @@ -1,3 +1,4 @@ +import "dotenv/config"; import "@noble/curves/secp256k1.js"; import "@noble/curves/ed25519.js"; import "@noble/curves/utils.js"; From ea4f8241f6ed6f583f29432249c2270a2ad305a3 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 16:03:16 +0700 Subject: [PATCH 29/57] fix: clean up --- .github/workflows/ci.yml | 4 ++-- packages/default/test/shared.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67f3ae876..7731bd56e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,9 +30,9 @@ jobs: - name: Test Development run: npm run test env: - TEST_INFURA_KEY: ${{ secrets.TEST_INFURA_KEY }} + TEST_RPC_TARGET: ${{ secrets.TEST_RPC_TARGET }} - name: Test Production run: npm run test-production env: - TEST_INFURA_KEY: ${{ secrets.TEST_INFURA_KEY }} + TEST_RPC_TARGET: ${{ secrets.TEST_RPC_TARGET }} diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index 2b4f3c73f..7c9ddfaab 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -958,7 +958,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let ed25519privateKeyFormat; beforeEach("Setup ThresholdKey", async function () { - metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider(`https://mainnet.infura.io/v3/${process.env.TEST_INFURA_KEY}`)); + metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider(process.env.TEST_RPC_TARGET)); secp256k1Format = new SECP256K1Format(); ed25519privateKeyFormat = new ED25519Format(); tb = new ThresholdKey({ @@ -1014,7 +1014,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(returnedSeed[1].seedPhrase, seedPhraseToSet2); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider(`https://mainnet.infura.io/v3/${process.env.TEST_INFURA_KEY}`) + new JsonRpcProvider(process.env.TEST_RPC_TARGET) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, @@ -1170,7 +1170,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.syncLocalMetadataTransitions(); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider(`https://mainnet.infura.io/v3/${process.env.TEST_INFURA_KEY}`) + new JsonRpcProvider(process.env.TEST_RPC_TARGET) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, From dfb0c0d687609ff78559025077e409b62fd11adb Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 17:24:59 +0700 Subject: [PATCH 30/57] fix: jsdom test issue --- test/setup.mjs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/setup.mjs b/test/setup.mjs index 946ebb942..dc700d023 100644 --- a/test/setup.mjs +++ b/test/setup.mjs @@ -10,10 +10,18 @@ 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, targets: { node: "current" } }], "@babel/typescript"], plugins: [ From bfc0584ec90ebee316cefc84ba7166e2f09d6166 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Fri, 27 Feb 2026 17:58:06 +0700 Subject: [PATCH 31/57] fix: replace etherjs by viem --- package-lock.json | 2238 +++++++---------- packages/default/package.json | 3 +- packages/default/test/shared.js | 14 +- packages/seed-phrase/package.json | 5 +- .../src/MetamaskSeedPhraseFormat.ts | 52 +- packages/seed-phrase/src/index.ts | 1 + 6 files changed, 1024 insertions(+), 1289 deletions(-) diff --git a/package-lock.json b/package-lock.json index a03b9e335..b10ba2765 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,12 +55,6 @@ "@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/@asamuzakjp/css-color": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz", @@ -1903,6 +1897,7 @@ "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" @@ -1914,6 +1909,7 @@ "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -1924,6 +1920,7 @@ "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -2803,9 +2800,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": { @@ -2931,9 +2928,9 @@ } }, "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==", + "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, @@ -2961,9 +2958,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": { @@ -2990,7 +2987,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", @@ -3001,7 +2997,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", @@ -3025,9 +3020,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", @@ -3059,9 +3055,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": { @@ -3106,10 +3102,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": { @@ -3126,9 +3141,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": { @@ -3136,9 +3151,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": { @@ -3200,6 +3215,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", @@ -3230,9 +3258,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": { @@ -3255,6 +3283,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", @@ -3318,18 +3363,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, "node_modules/@noble/ciphers": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", @@ -3369,44 +3402,6 @@ "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@nodeutils/defaults-deep": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@nodeutils/defaults-deep/-/defaults-deep-1.1.0.tgz", @@ -3499,9 +3494,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": { @@ -3569,13 +3564,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": { @@ -3586,9 +3581,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": { @@ -3665,9 +3660,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": { @@ -3716,9 +3712,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": { @@ -3785,9 +3781,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": { @@ -3806,9 +3803,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": { @@ -3845,13 +3842,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": { @@ -3912,13 +3909,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": { @@ -3937,46 +3934,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.2.8.tgz", + "integrity": "sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "17.2.8", + "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": { @@ -3987,9 +3992,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz", + "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==", "cpu": [ "arm64" ], @@ -4004,9 +4009,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz", + "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==", "cpu": [ "x64" ], @@ -4021,9 +4026,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz", + "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==", "cpu": [ "x64" ], @@ -4038,9 +4043,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz", + "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==", "cpu": [ "arm" ], @@ -4055,9 +4060,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz", + "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==", "cpu": [ "arm64" ], @@ -4072,9 +4077,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz", + "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==", "cpu": [ "arm64" ], @@ -4089,9 +4094,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz", + "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==", "cpu": [ "x64" ], @@ -4106,9 +4111,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz", + "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==", "cpu": [ "x64" ], @@ -4123,9 +4128,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz", + "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==", "cpu": [ "arm64" ], @@ -4140,9 +4145,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": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz", + "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==", "cpu": [ "x64" ], @@ -4167,16 +4172,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" @@ -4215,9 +4220,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" }, @@ -4321,13 +4326,13 @@ } }, "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": { @@ -5040,9 +5045,9 @@ } }, "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" }, @@ -5954,16 +5959,6 @@ "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", @@ -7041,9 +7036,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": { @@ -7051,7 +7046,7 @@ "tslib": "^2.4.0" }, "engines": { - "node": ">=18.12.0" + "node": ">=14.15.0" } }, "node_modules/@yarnpkg/parsers/node_modules/argparse": { @@ -7065,9 +7060,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": { @@ -7086,9 +7081,9 @@ "license": "BSD-3-Clause" }, "node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", "dev": true, "license": "MIT", "dependencies": { @@ -7108,6 +7103,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", @@ -7134,6 +7151,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", @@ -7151,12 +7182,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", @@ -7217,9 +7242,9 @@ } }, "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, @@ -7606,14 +7631,14 @@ } }, "node_modules/axios": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", - "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", + "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, @@ -7786,64 +7811,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/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", @@ -8021,9 +8007,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": { @@ -8095,17 +8081,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": { @@ -8172,6 +8157,31 @@ "node": ">= 4.5.0" } }, + "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/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -8329,9 +8339,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": { @@ -8534,13 +8545,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", @@ -8866,6 +8870,14 @@ "node": ">= 0.8" } }, + "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", + "peer": true + }, "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -8914,21 +8926,6 @@ "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/confbox": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", @@ -9134,9 +9131,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": { @@ -9186,9 +9183,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": { @@ -9794,9 +9791,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": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -9813,19 +9810,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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", @@ -9878,19 +9862,13 @@ } }, "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", "dev": true, "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" } }, "node_modules/dunder-proto": { @@ -9993,9 +9971,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": { @@ -10090,14 +10068,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" @@ -10185,9 +10163,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": { @@ -10281,9 +10259,9 @@ } }, "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", "peer": true @@ -10865,9 +10843,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": { @@ -10949,9 +10927,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": { @@ -11129,126 +11107,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/ethers": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", - "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - }, - "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" - }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 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", @@ -11290,9 +11148,9 @@ } }, "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" }, @@ -11310,34 +11168,6 @@ "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": "3.0.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", @@ -11369,36 +11199,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", @@ -11420,16 +11220,6 @@ "dev": true, "license": "MIT" }, - "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", @@ -11459,9 +11249,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": { @@ -11469,9 +11259,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": { @@ -11606,9 +11396,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": [ { @@ -11657,26 +11447,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", @@ -11698,47 +11484,6 @@ ], "license": "MIT" }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1" - } - }, - "node_modules/front-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/front-matter/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -11747,9 +11492,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": { @@ -12117,9 +11862,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": { @@ -12204,9 +11949,9 @@ "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": { @@ -12215,9 +11960,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": { @@ -12334,27 +12079,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", @@ -12587,26 +12311,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": { @@ -12909,9 +12637,9 @@ } }, "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==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -12922,17 +12650,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", @@ -13864,6 +13592,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", @@ -14105,16 +13849,15 @@ } }, "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "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.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -14123,106 +13866,6 @@ "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", @@ -14325,6 +13968,50 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "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", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/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", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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", @@ -14539,9 +14226,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": { @@ -14794,9 +14481,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": { @@ -14805,9 +14492,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": { @@ -14884,13 +14571,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", @@ -14917,7 +14604,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", @@ -14931,7 +14617,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", @@ -14957,9 +14642,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", @@ -14995,9 +14681,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": { @@ -15042,6 +14728,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", @@ -15062,9 +14766,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": { @@ -15072,9 +14776,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": { @@ -15136,6 +14840,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", @@ -15191,6 +14908,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", @@ -15259,9 +14993,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": [ { @@ -15275,9 +15009,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": { @@ -15300,9 +15034,9 @@ } }, "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, "license": "MIT", "engines": { @@ -15662,14 +15396,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": { @@ -15689,9 +15427,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" }, @@ -16124,12 +15862,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", @@ -16357,9 +16089,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": { @@ -16406,16 +16138,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", @@ -16499,13 +16221,13 @@ } }, "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" @@ -16858,10 +16580,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", @@ -16878,12 +16602,13 @@ } }, "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==", + "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" @@ -16920,10 +16645,11 @@ } }, "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==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17032,9 +16758,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": { @@ -17043,9 +16769,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": { @@ -17250,9 +16976,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": { @@ -17271,19 +16998,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": { @@ -17381,9 +17108,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": { @@ -17430,9 +17157,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": { @@ -17511,9 +17238,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": { @@ -17563,45 +17290,45 @@ "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": "17.2.8", + "resolved": "https://registry.npmjs.org/nx/-/nx-17.2.8.tgz", + "integrity": "sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", + "@nrwl/tao": "17.2.8", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.4", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.5.1", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", - "front-matter": "^4.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", "ignore": "^5.0.4", "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.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" }, @@ -17610,19 +17337,19 @@ "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": "17.2.8", + "@nx/nx-darwin-x64": "17.2.8", + "@nx/nx-freebsd-x64": "17.2.8", + "@nx/nx-linux-arm-gnueabihf": "17.2.8", + "@nx/nx-linux-arm64-gnu": "17.2.8", + "@nx/nx-linux-arm64-musl": "17.2.8", + "@nx/nx-linux-x64-gnu": "17.2.8", + "@nx/nx-linux-x64-musl": "17.2.8", + "@nx/nx-win32-arm64-msvc": "17.2.8", + "@nx/nx-win32-x64-msvc": "17.2.8" }, "peerDependencies": { - "@swc-node/register": "^1.8.0", + "@swc-node/register": "^1.6.7", "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { @@ -17650,6 +17377,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/nx/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", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -17687,6 +17425,38 @@ "dev": true, "license": "MIT" }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", + "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "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": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/nx/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -17697,68 +17467,41 @@ "node": ">=8" } }, - "node_modules/nx/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "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": "MIT", + "license": "ISC", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nx/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "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" }, @@ -17779,6 +17522,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", @@ -18508,16 +18258,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", @@ -18536,6 +18276,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", @@ -18978,13 +18792,26 @@ } }, "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/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", + "engines": { + "node": ">=4" } }, "node_modules/pathe": { @@ -18994,19 +18821,6 @@ "dev": true, "license": "MIT" }, - "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==", - "dev": true, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, "node_modules/perfect-debounce": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", @@ -19161,13 +18975,13 @@ } }, "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" @@ -19180,9 +18994,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": { @@ -19443,22 +19257,6 @@ "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" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -19505,12 +19303,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" @@ -19519,27 +19318,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", @@ -19571,16 +19349,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" @@ -19819,19 +19597,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", @@ -19873,28 +19638,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", @@ -20764,16 +20521,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", @@ -20798,17 +20545,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", @@ -21004,30 +20740,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", @@ -21149,9 +20861,9 @@ } }, "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, @@ -21170,9 +20882,9 @@ } }, "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, @@ -21425,13 +21137,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", @@ -21771,9 +21484,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" }, @@ -21800,21 +21513,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", @@ -21882,16 +21580,6 @@ "node": ">= 0.4" } }, - "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/streamroller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", @@ -21943,22 +21631,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", @@ -22237,13 +21918,17 @@ } }, "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": { @@ -22281,21 +21966,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", @@ -22362,43 +22032,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" }, @@ -22410,9 +22053,9 @@ } }, "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, @@ -22445,58 +22088,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", - "peer": true, - "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", - "peer": true, - "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", - "peer": true, - "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", - "peer": true - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -22513,9 +22104,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": { @@ -22524,9 +22115,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": { @@ -22564,6 +22155,39 @@ "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": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/tinyexec": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", @@ -22641,9 +22265,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": { @@ -22708,6 +22332,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", @@ -23580,6 +23214,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", @@ -23611,9 +23305,9 @@ "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, @@ -23652,36 +23346,38 @@ } }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "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.6", + "@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.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "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.2.0", + "loader-runner": "^4.3.1", "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" + "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": { "webpack": "bin/webpack.js" @@ -23710,9 +23406,9 @@ } }, "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, @@ -24785,7 +24481,8 @@ "@tkey/private-keys": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", "@toruslabs/eccrypto": "^7.0.0", - "@toruslabs/http-helpers": "^9.0.0" + "@toruslabs/http-helpers": "^9.0.0", + "viem": "^2.46.3" }, "engines": { "node": ">=22.x", @@ -24860,8 +24557,11 @@ "version": "16.0.0", "license": "MIT", "dependencies": { + "@noble/curves": "^2.0.1", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", "@tkey/common-types": "^16.0.0", - "ethers": "^6.16.0" + "@toruslabs/torus.js": "^17.0.0" }, "devDependencies": {}, "engines": { diff --git a/packages/default/package.json b/packages/default/package.json index c7ff16f06..d593593a9 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -48,7 +48,8 @@ "@tkey/private-keys": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", "@toruslabs/eccrypto": "^7.0.0", - "@toruslabs/http-helpers": "^9.0.0" + "@toruslabs/http-helpers": "^9.0.0", + "viem": "^2.46.3" }, "peerDependencies": { "@babel/runtime": "7.x" diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index 7c9ddfaab..b74f77164 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -16,9 +16,15 @@ 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 { bytesToNumberBE } from "@noble/curves/utils.js"; -import { JsonRpcProvider } from "ethers"; +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"; @@ -958,7 +964,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let ed25519privateKeyFormat; beforeEach("Setup ThresholdKey", async function () { - metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider(process.env.TEST_RPC_TARGET)); + metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(createEthProvider(process.env.TEST_RPC_TARGET)); secp256k1Format = new SECP256K1Format(); ed25519privateKeyFormat = new ED25519Format(); tb = new ThresholdKey({ @@ -1014,7 +1020,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(returnedSeed[1].seedPhrase, seedPhraseToSet2); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider(process.env.TEST_RPC_TARGET) + createEthProvider(process.env.TEST_RPC_TARGET) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, @@ -1170,7 +1176,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.syncLocalMetadataTransitions(); const metamaskSeedPhraseFormat2 = new MetamaskSeedPhraseFormat( - new JsonRpcProvider(process.env.TEST_RPC_TARGET) + createEthProvider(process.env.TEST_RPC_TARGET) ); const tb2 = new ThresholdKey({ serviceProvider: customSP, diff --git a/packages/seed-phrase/package.json b/packages/seed-phrase/package.json index bde08977b..7db0735c9 100644 --- a/packages/seed-phrase/package.json +++ b/packages/seed-phrase/package.json @@ -41,8 +41,11 @@ "@babel/runtime": "7.x" }, "dependencies": { + "@noble/curves": "^2.0.1", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", "@tkey/common-types": "^16.0.0", - "ethers": "^6.16.0" + "@toruslabs/torus.js": "^17.0.0" }, "devDependencies": {}, "lint-staged": { diff --git a/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts b/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts index f9496dd53..7f1c397e8 100644 --- a/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts +++ b/packages/seed-phrase/src/MetamaskSeedPhraseFormat.ts @@ -1,14 +1,28 @@ -import { generateID, ISeedPhraseFormat, ISeedPhraseStore, MetamaskSeedPhraseStore } from "@tkey/common-types"; -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; @@ -20,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 { 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: bigint[] = []; - const root = hdkey.derivePath(this.hdPathString); + const root = hdkey.derive(this.hdPathString); for (let i = 0; i < numOfWallets; i += 1) { const child = root.deriveChild(i); - const wallet = BigInt(child.privateKey); + const wallet = BigInt(`0x${bytesToHex(child.privateKey)}`); wallets.push(wallet); } return wallets; @@ -41,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/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"; From 7e615725d425768effe41db8d859dad640df2d58 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 14:54:00 +0700 Subject: [PATCH 32/57] fix: remove hardcode recover char --- packages/service-provider-base/src/ServiceProviderBase.ts | 6 +++--- packages/storage-layer-torus/src/TorusStorageLayer.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 81a111e48..75edc2f6d 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -60,10 +60,10 @@ class ServiceProviderBase implements IServiceProvider { sign(msg: BNString): string { const msgHex = typeof msg === "bigint" ? msg.toString(16).padStart(64, "0") : msg; - const compactSig = secp256k1.sign(hexToBytes(msgHex), toPrivKeyECC(this.postboxKey), { prehash: false }); + const recoveredSig = secp256k1.sign(hexToBytes(msgHex), toPrivKeyECC(this.postboxKey), { prehash: false, format: "recovered" }); const sigWithV = new Uint8Array(65); - sigWithV.set(compactSig); - sigWithV[64] = 0; + sigWithV.set(recoveredSig.slice(1, 65), 0); // r + s + sigWithV[64] = recoveredSig[0]; // v return bytesToBase64(sigWithV); } diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index 127a17412..e52064c05 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -171,10 +171,10 @@ class TorusStorageLayer implements IStorageLayer { const hash = keccak256(utf8ToBytes(stringify(setTKeyStore))); if (privKey) { - const compactSig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false }); + const recoveredSig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false, format: "recovered" }); const sigWithV = new Uint8Array(65); - sigWithV.set(compactSig); - sigWithV[64] = 0; + 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(16); From ffeb23c1f642ceba15eaa59443ba237bf7c4ba18 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 14:57:02 +0700 Subject: [PATCH 33/57] fix: remove randomBytes --- packages/private-keys/src/SECP256K1Format.ts | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/packages/private-keys/src/SECP256K1Format.ts b/packages/private-keys/src/SECP256K1Format.ts index 785737856..e13f27a1f 100644 --- a/packages/private-keys/src/SECP256K1Format.ts +++ b/packages/private-keys/src/SECP256K1Format.ts @@ -1,18 +1,6 @@ import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generateID, IPrivateKeyFormat, IPrivateKeyStore, secp256k1 } from "@tkey/common-types"; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const browserCrypto = global.crypto || (global as any).msCrypto || {}; - -function randomBytes(size: number): Uint8Array { - if (typeof browserCrypto.getRandomValues === "undefined") { - return new Uint8Array(browserCrypto.randomBytes(size)); - } - const arr = new Uint8Array(size); - browserCrypto.getRandomValues(arr); - return arr; -} - export class SECP256K1Format implements IPrivateKeyFormat { privateKey: bigint; @@ -34,7 +22,7 @@ export class SECP256K1Format implements IPrivateKeyFormat { createPrivateKeyStore(privateKey?: bigint): IPrivateKeyStore { let privKey: bigint; if (!privateKey) { - privKey = bytesToNumberBE(randomBytes(64)); + privKey = bytesToNumberBE(secp256k1.utils.randomSecretKey()); } else { if (!this.validatePrivateKey(privateKey)) { throw Error("Invalid Private Key"); From e3ecf98e0e5320f06f7821080c0fa3ea3e7989cb Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 15:01:03 +0700 Subject: [PATCH 34/57] fix: comments --- package-lock.json | 12 ------------ package.json | 2 +- packages/core/package.json | 1 - packages/share-serialization/src/utils.ts | 6 +++--- 4 files changed, 4 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index b10ba2765..bf0a7062e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,6 @@ "@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", @@ -5965,16 +5964,6 @@ "integrity": "sha512-FjS1mxq2dlGr9N4z72/DO+XmyRS3ZZIoVn998MEopAN/OmyN28F4yumRL5pOw2z+hbFLuWGYuF2rrw5p11xM5A==", "dev": true }, - "node_modules/@types/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/chrome": { "version": "0.1.37", "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.37.tgz", @@ -24425,7 +24414,6 @@ "dependencies": { "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", diff --git a/package.json b/package.json index 753ac2548..bef51c017 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@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", diff --git a/packages/core/package.json b/packages/core/package.json index 204f7f2c3..bc2f461a6 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -36,7 +36,6 @@ "dependencies": { "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", diff --git a/packages/share-serialization/src/utils.ts b/packages/share-serialization/src/utils.ts index eec128ff4..f08d44ba6 100644 --- a/packages/share-serialization/src/utils.ts +++ b/packages/share-serialization/src/utils.ts @@ -23,10 +23,10 @@ export function bytesToBinary(bytes: number[]): string { return bytes.map((x) => lpad(x.toString(2), "0", 8)).join(""); } -export function deriveChecksumBits(entropyBuffer: Uint8Array): 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); } From 64b570fb25e658035b17aecfbd9f14db94104903 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 15:06:34 +0700 Subject: [PATCH 35/57] fix: rename BNString to BigIntString --- README.md | 2 +- .../common-types/src/baseTypes/aggregateTypes.ts | 14 +++++++------- packages/common-types/src/baseTypes/commonTypes.ts | 4 ++-- packages/core/src/core.ts | 8 ++++---- .../src/ServiceProviderBase.ts | 4 ++-- packages/web-storage/README.md | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 02bef10ee..06546f45f 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ v16 removes all legacy cryptography dependencies in favor of modern, audited alt - **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** is now `bigint | string` (was `BN | string`). +- **`BNString` type** has been renamed to **`BigIntString`** and is `bigint | string` (was `BN | string`). - **JSON serialization** of objects containing `bigint` requires the `bigIntReplacer` from `@tkey/common-types`: ```js import { bigIntReplacer } from "@tkey/common-types"; diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index 454917381..105d9ca4f 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -14,7 +14,7 @@ import { ShareStorePolyIDShareIndexMap, } from "../base"; import { - BNString, + BigIntString, EncryptedMessage, ISerializable, IServiceProvider, @@ -166,9 +166,9 @@ export type TKeyArgs = { }; export interface SecurityQuestionStoreArgs { - nonce: BNString; + nonce: BigIntString; - shareIndex: BNString; + shareIndex: BigIntString; sqPublicShare: PublicShare; @@ -186,7 +186,7 @@ export interface TkeyStoreArgs { } export interface ShareTransferStorePointerArgs { - pointer: BNString; + pointer: BigIntString; } export type BufferObj = { @@ -287,11 +287,11 @@ export interface ITKeyApi { deserialize: (serializedShare: unknown, type: string) => Promise ): void; generateNewShare(): Promise; - outputShareStore(shareIndex: BNString, polyID?: string): ShareStore; + outputShareStore(shareIndex: BigIntString, polyID?: string): ShareStore; inputShare(share: unknown, type?: string): Promise; - outputShare(shareIndex: BNString, type?: string): Promise; + outputShare(shareIndex: BigIntString, type?: string): Promise; inputShareStore(shareStore: ShareStore): void; - deleteShare(shareIndex: BNString): Promise; + deleteShare(shareIndex: BigIntString): Promise; encrypt(data: Uint8Array): Promise; decrypt(encryptedMesage: EncryptedMessage): Promise; diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index 1a4b958b6..d0e23f349 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -7,7 +7,7 @@ export type PolynomialID = string; export type PolyIDAndShares = [PolynomialID, string[]]; -export type BNString = string | bigint; +export type BigIntString = string | bigint; export interface EncryptedMessage { ciphertext: string; @@ -51,7 +51,7 @@ export interface IServiceProvider extends ISerializable { decrypt(msg: EncryptedMessage): Promise; retrievePubKey(type: PubKeyType): Uint8Array; retrievePubKeyPoint(): { x: bigint; y: bigint }; - sign(msg: BNString): string; + sign(msg: BigIntString): string; } export type TorusStorageLayerAPIParams = { pub_key_X: string; diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 34da0ac53..1e91cc14c 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -1,7 +1,7 @@ import { randomBytes } from "@noble/curves/utils.js"; import { bigIntReplacer, - BNString, + BigIntString, CatchupToLatestShareResult, decrypt, DeleteShareResult, @@ -571,7 +571,7 @@ class ThresholdKey implements ITKey { return lagrangeInterpolatePolynomial(pointsArr); } - async deleteShare(shareIndex: BNString): Promise { + async deleteShare(shareIndex: BigIntString): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); } @@ -789,7 +789,7 @@ class ThresholdKey implements ITKey { } } - outputShareStore(shareIndex: BNString, polyID?: string): ShareStore { + outputShareStore(shareIndex: BigIntString, polyID?: string): ShareStore { if (!this.metadata) { throw CoreError.metadataUndefined(); } @@ -1162,7 +1162,7 @@ class ThresholdKey implements ITKey { } // Import export shares - async outputShare(shareIndex: BNString, type?: string): Promise { + async outputShare(shareIndex: BigIntString, type?: string): Promise { const { share } = this.outputShareStore(shareIndex).share; if (!type) return share; diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 75edc2f6d..3ffee9a3f 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -1,5 +1,5 @@ import { - BNString, + BigIntString, decrypt as decryptUtils, encrypt as encryptUtils, EncryptedMessage, @@ -58,7 +58,7 @@ class ServiceProviderBase implements IServiceProvider { throw new Error("Unsupported pub key type"); } - sign(msg: BNString): string { + sign(msg: BigIntString): string { const msgHex = typeof msg === "bigint" ? msg.toString(16).padStart(64, "0") : msg; const recoveredSig = secp256k1.sign(hexToBytes(msgHex), toPrivKeyECC(this.postboxKey), { prehash: false, format: "recovered" }); const sigWithV = new Uint8Array(65); diff --git a/packages/web-storage/README.md b/packages/web-storage/README.md index 7c97e3a16..98e68768d 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: BigIntString): Promise; getDeviceShare(): Promise; inputShareFromWebStorage(): Promise; } From c56be57c8b5af60cf0ea1ab96627d6410ecbb4a8 Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Mon, 2 Mar 2026 16:29:15 +0800 Subject: [PATCH 36/57] lint fixes --- .cursor/worktrees.json | 3 +++ packages/common-types/test/test.js | 4 ++-- packages/core/test/metadata.test.js | 2 +- packages/core/test/polyEval.test.js | 2 +- packages/default/test/torusSPAutoSync.test.js | 2 +- packages/default/test/torusSPManualSync.test.js | 2 +- test/setup.mjs | 1 + 7 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 .cursor/worktrees.json 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/packages/common-types/test/test.js b/packages/common-types/test/test.js index df2ea8669..565c5e482 100644 --- a/packages/common-types/test/test.js +++ b/packages/common-types/test/test.js @@ -1,7 +1,7 @@ -import { generatePrivate } from "@toruslabs/eccrypto"; -import { fail } from "assert"; import { bytesToNumberBE } from "@noble/curves/utils.js"; +import { generatePrivate } from "@toruslabs/eccrypto"; import { bytesToHex } from "@toruslabs/metadata-helpers"; +import { fail } from "assert"; import { getPubKeyPoint, Point, Polynomial } from "../src/base"; import { secp256k1 } from "../src/utils"; diff --git a/packages/core/test/metadata.test.js b/packages/core/test/metadata.test.js index 4564f38d3..fb93bff91 100644 --- a/packages/core/test/metadata.test.js +++ b/packages/core/test/metadata.test.js @@ -1,7 +1,7 @@ +import { bytesToHex, bytesToNumberBE } from "@noble/curves/utils.js"; import { getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import { bytesToHex, bytesToNumberBE } from "@noble/curves/utils.js"; import stringify from "json-stable-stringify"; import { generateRandomPolynomial, Metadata } from "../src/index"; diff --git a/packages/core/test/polyEval.test.js b/packages/core/test/polyEval.test.js index 580cf27b3..c3cb832c1 100644 --- a/packages/core/test/polyEval.test.js +++ b/packages/core/test/polyEval.test.js @@ -1,7 +1,7 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { getPubKeyPoint, Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generateRandomPolynomial, polyCommitmentEval } from "../src/index"; diff --git a/packages/default/test/torusSPAutoSync.test.js b/packages/default/test/torusSPAutoSync.test.js index 9ff058c97..655768566 100644 --- a/packages/default/test/torusSPAutoSync.test.js +++ b/packages/default/test/torusSPAutoSync.test.js @@ -1,5 +1,5 @@ -import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { bytesToHex } from "@noble/curves/utils.js"; +import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { generatePrivate } from "@toruslabs/eccrypto"; import { getMetadataUrl, initStorageLayer } from "./helpers"; diff --git a/packages/default/test/torusSPManualSync.test.js b/packages/default/test/torusSPManualSync.test.js index e5acaa413..bc38a99c5 100644 --- a/packages/default/test/torusSPManualSync.test.js +++ b/packages/default/test/torusSPManualSync.test.js @@ -1,5 +1,5 @@ -import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { bytesToHex } from "@noble/curves/utils.js"; +import { TorusServiceProvider } from "@tkey/service-provider-torus"; import { generatePrivate } from "@toruslabs/eccrypto"; import { getMetadataUrl, initStorageLayer } from "./helpers"; diff --git a/test/setup.mjs b/test/setup.mjs index dc700d023..7fa7f8eea 100644 --- a/test/setup.mjs +++ b/test/setup.mjs @@ -3,6 +3,7 @@ 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"; From 886652da2c86f989a6cb60b703a17d2200797236 Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Mon, 2 Mar 2026 16:35:22 +0800 Subject: [PATCH 37/57] more lint fixes --- eslint.config.mjs | 6 ++++++ package.json | 1 - packages/core/test/.eslintrc.json | 1 - packages/core/test/authMetadata.test.js | 2 +- packages/core/test/lagrange.test.js | 2 +- packages/core/test/lagrangePoly.test.js | 2 +- packages/default/test/.eslintrc.json | 1 - 7 files changed, 9 insertions(+), 6 deletions(-) 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.json b/package.json index bef51c017..c907ac07b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "@toruslabs/eslint-config-typescript": "^5.0.0", "@toruslabs/torus-scripts": "^8.0.0", "@types/assert": "^1.5.11", - "@types/mocha": "^10.0.10", "@types/node": "^22", "assert": "^2.1.0", 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 e51a3551a..0150ba4f1 100644 --- a/packages/core/test/authMetadata.test.js +++ b/packages/core/test/authMetadata.test.js @@ -1,7 +1,7 @@ +import { bytesToHex } from "@noble/curves/utils.js"; import { generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { deepStrictEqual } from "assert"; -import { bytesToHex, bytesToNumberBE } from "@noble/curves/utils.js"; import stringify from "json-stable-stringify"; import { AuthMetadata, generateRandomPolynomial, Metadata } from "../src/index"; diff --git a/packages/core/test/lagrange.test.js b/packages/core/test/lagrange.test.js index 3c3476691..39be6ab65 100644 --- a/packages/core/test/lagrange.test.js +++ b/packages/core/test/lagrange.test.js @@ -1,7 +1,7 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generateRandomPolynomial, lagrangeInterpolation } from "../src/index"; diff --git a/packages/core/test/lagrangePoly.test.js b/packages/core/test/lagrangePoly.test.js index 3afb3ba75..69d06b478 100644 --- a/packages/core/test/lagrangePoly.test.js +++ b/packages/core/test/lagrangePoly.test.js @@ -1,7 +1,7 @@ +import { bytesToNumberBE } from "@noble/curves/utils.js"; import { Point, Polynomial } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; import { fail } from "assert"; -import { bytesToNumberBE } from "@noble/curves/utils.js"; import { generateRandomPolynomial, lagrangeInterpolatePolynomial } from "../src/index"; 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" } - } From 82fa424581e8f4c862b983ae34f56ebd4d9deddd Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Mon, 2 Mar 2026 16:37:21 +0800 Subject: [PATCH 38/57] lint --- packages/private-keys/test/test.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/private-keys/test/test.js b/packages/private-keys/test/test.js index d9cdccb91..15225f0a9 100644 --- a/packages/private-keys/test/test.js +++ b/packages/private-keys/test/test.js @@ -14,9 +14,7 @@ describe("ed25519", function () { it("#should use the same ed25519 private key if supplied", async function () { const keyFormat = new ED25519Format(); const privateKeyStore = keyFormat.createPrivateKeyStore( - BigInt( - "0x7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98" - ) + BigInt("0x7a3118ccdd405b2750271f51cc8fe237d9863584173aec3fa4579d40e5b4951215351c3d54ef416e49567b79c42fd985fcda60a6da9a794e4e844ac8dec47e98") ); if (!privateKeyStore) { fail("unable to create ed25519 key"); From ce1473f4eb084eaed1416615b31509485c713c3e Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 15:52:53 +0700 Subject: [PATCH 39/57] fix: remove unuse package --- package-lock.json | 29 ++--------------------------- packages/core/package.json | 1 - packages/default/package.json | 2 +- packages/seed-phrase/package.json | 3 +-- 4 files changed, 4 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf0a7062e..40676a648 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24414,7 +24414,6 @@ "dependencies": { "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "json-stable-stringify": "^1.3.0" @@ -24427,29 +24426,6 @@ "@babel/runtime": "7.x" } }, - "packages/core/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 - } - } - }, "packages/default": { "name": "@tkey/default", "version": "16.0.0", @@ -24457,7 +24433,6 @@ "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", @@ -24467,6 +24442,7 @@ }, "devDependencies": { "@tkey/private-keys": "^16.0.0", + "@tkey/security-questions": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", @@ -24548,8 +24524,7 @@ "@noble/curves": "^2.0.1", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", - "@tkey/common-types": "^16.0.0", - "@toruslabs/torus.js": "^17.0.0" + "@tkey/common-types": "^16.0.0" }, "devDependencies": {}, "engines": { diff --git a/packages/core/package.json b/packages/core/package.json index bc2f461a6..97b7b61c1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -36,7 +36,6 @@ "dependencies": { "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", - "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", "@toruslabs/torus.js": "^17.0.0", "json-stable-stringify": "^1.3.0" diff --git a/packages/default/package.json b/packages/default/package.json index d593593a9..3a9f0c641 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -36,7 +36,6 @@ "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", @@ -47,6 +46,7 @@ "devDependencies": { "@tkey/private-keys": "^16.0.0", "@tkey/seed-phrase": "^16.0.0", + "@tkey/security-questions": "^16.0.0", "@toruslabs/eccrypto": "^7.0.0", "@toruslabs/http-helpers": "^9.0.0", "viem": "^2.46.3" diff --git a/packages/seed-phrase/package.json b/packages/seed-phrase/package.json index 7db0735c9..84f48b901 100644 --- a/packages/seed-phrase/package.json +++ b/packages/seed-phrase/package.json @@ -44,8 +44,7 @@ "@noble/curves": "^2.0.1", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0", - "@tkey/common-types": "^16.0.0", - "@toruslabs/torus.js": "^17.0.0" + "@tkey/common-types": "^16.0.0" }, "devDependencies": {}, "lint-staged": { From bf00981bfb8baa9228b6db96da9a20b71db5cb64 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 15:56:16 +0700 Subject: [PATCH 40/57] fix: remove base64url --- package-lock.json | 10 ---------- packages/storage-layer-torus/package.json | 1 - packages/storage-layer-torus/src/TorusStorageLayer.ts | 7 +++---- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 40676a648..7adc2a2c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7720,15 +7720,6 @@ "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", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/baseline-browser-mapping": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", @@ -24658,7 +24649,6 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "base64url": "3.0.1", "ethereum-cryptography": "^3.2.0", "json-stable-stringify": "^1.3.0" }, diff --git a/packages/storage-layer-torus/package.json b/packages/storage-layer-torus/package.json index d2d302e73..8172d6aa7 100644 --- a/packages/storage-layer-torus/package.json +++ b/packages/storage-layer-torus/package.json @@ -41,7 +41,6 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "base64url": "3.0.1", "ethereum-cryptography": "^3.2.0", "json-stable-stringify": "^1.3.0" }, diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index e52064c05..2e6c9da32 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -18,8 +18,7 @@ import { TorusStorageLayerArgs, } from "@tkey/common-types"; import { post } from "@toruslabs/http-helpers"; -import { bytesToBase64, bytesToHex, bytesToUtf8, utf8ToBytes } from "@toruslabs/metadata-helpers"; -import base64url from "base64url"; +import { bytesToBase64, bytesToHex, bytesToUtf8, decodeBase64Url, encodeBase64Url, utf8ToBytes } from "@toruslabs/metadata-helpers"; import { keccak256 } from "ethereum-cryptography/keccak"; import stringify from "json-stable-stringify"; @@ -61,7 +60,7 @@ class TorusStorageLayer implements IStorageLayer { } else { encryptedDetails = await serviceProvider.encrypt(msgBytes); } - const serializedEncryptedDetails = base64url.encode(stringify(encryptedDetails)); + const serializedEncryptedDetails = encodeBase64Url(stringify(encryptedDetails)); return serializedEncryptedDetails; } @@ -83,7 +82,7 @@ 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: Uint8Array; if (privKey) { From 42bc9d9ce557a9f0407283100f1ab6f780c516f3 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 16:55:15 +0700 Subject: [PATCH 41/57] fix: remove BigInString --- README.md | 2 +- .../src/baseTypes/aggregateTypes.ts | 23 ++++--------- .../common-types/src/baseTypes/commonTypes.ts | 4 +-- packages/core/src/core.ts | 33 ++++++++----------- .../src/ServiceProviderBase.ts | 8 ++--- .../share-transfer/src/ShareTransferModule.ts | 5 +-- .../src/TorusStorageLayer.ts | 6 ++-- packages/web-storage/README.md | 2 +- 8 files changed, 32 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 06546f45f..e28b92bdb 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ v16 removes all legacy cryptography dependencies in favor of modern, audited alt - **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 renamed to **`BigIntString`** and is `bigint | string` (was `BN | string`). +- **`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"; diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index 105d9ca4f..c5c71c8e6 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -13,16 +13,7 @@ import { ShareStoreMap, ShareStorePolyIDShareIndexMap, } from "../base"; -import { - BigIntString, - EncryptedMessage, - ISerializable, - IServiceProvider, - IStorageLayer, - PolyIDAndShares, - PolynomialID, - ShareDescriptionMap, -} from "./commonTypes"; +import { EncryptedMessage, ISerializable, IServiceProvider, IStorageLayer, PolyIDAndShares, PolynomialID, ShareDescriptionMap } from "./commonTypes"; export interface IModule { moduleName: string; @@ -166,9 +157,9 @@ export type TKeyArgs = { }; export interface SecurityQuestionStoreArgs { - nonce: BigIntString; + nonce: bigint | string; - shareIndex: BigIntString; + shareIndex: bigint | string; sqPublicShare: PublicShare; @@ -186,7 +177,7 @@ export interface TkeyStoreArgs { } export interface ShareTransferStorePointerArgs { - pointer: BigIntString; + pointer: bigint | string; } export type BufferObj = { @@ -287,11 +278,11 @@ export interface ITKeyApi { deserialize: (serializedShare: unknown, type: string) => Promise ): void; generateNewShare(): Promise; - outputShareStore(shareIndex: BigIntString, polyID?: string): ShareStore; + outputShareStore(shareIndex: bigint, polyID?: string): ShareStore; inputShare(share: unknown, type?: string): Promise; - outputShare(shareIndex: BigIntString, type?: string): Promise; + outputShare(shareIndex: bigint, type?: string): Promise; inputShareStore(shareStore: ShareStore): void; - deleteShare(shareIndex: BigIntString): Promise; + deleteShare(shareIndex: bigint): Promise; encrypt(data: Uint8Array): Promise; decrypt(encryptedMesage: EncryptedMessage): Promise; diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index d0e23f349..0e75c7645 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -7,8 +7,6 @@ export type PolynomialID = string; export type PolyIDAndShares = [PolynomialID, string[]]; -export type BigIntString = string | bigint; - export interface EncryptedMessage { ciphertext: string; ephemPublicKey: string; @@ -51,7 +49,7 @@ export interface IServiceProvider extends ISerializable { decrypt(msg: EncryptedMessage): Promise; retrievePubKey(type: PubKeyType): Uint8Array; retrievePubKeyPoint(): { x: bigint; y: bigint }; - sign(msg: BigIntString): string; + sign(msg: Uint8Array): string; } export type TorusStorageLayerAPIParams = { pub_key_X: string; diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 1e91cc14c..9dfc95ff8 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -1,7 +1,6 @@ import { randomBytes } from "@noble/curves/utils.js"; import { bigIntReplacer, - BigIntString, CatchupToLatestShareResult, decrypt, DeleteShareResult, @@ -571,16 +570,15 @@ class ThresholdKey implements ITKey { return lagrangeInterpolatePolynomial(pointsArr); } - async deleteShare(shareIndex: BigIntString): Promise { + async deleteShare(shareIndex: bigint): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); } if (!this.privKey) { throw CoreError.privateKeyUnavailable(); } - const shareIndexToDelete = typeof shareIndex === "string" ? hexToBigInt(shareIndex) : shareIndex; - const shareToDelete = this.outputShareStore(shareIndexToDelete); - if (shareIndexToDelete === 1n) { + const shareToDelete = this.outputShareStore(shareIndex); + if (shareIndex === 1n) { throw new CoreError(1001, "Unable to delete service provider share"); } @@ -590,7 +588,7 @@ class ThresholdKey implements ITKey { const existingShareIndexes = this.metadata.getShareIndexesForPolynomial(previousPolyID); const newShareIndexes: string[] = []; existingShareIndexes.forEach((el) => { - if (hexToBigInt(el) !== shareIndexToDelete) { + if (hexToBigInt(el) !== shareIndex) { newShareIndexes.push(el); } }); @@ -725,7 +723,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; @@ -789,31 +787,26 @@ class ThresholdKey implements ITKey { } } - outputShareStore(shareIndex: BigIntString, polyID?: string): ShareStore { + outputShareStore(shareIndex: bigint, polyID?: string): ShareStore { if (!this.metadata) { throw CoreError.metadataUndefined(); } - let shareIndexParsed: bigint; - if (typeof shareIndex === "bigint") { - shareIndexParsed = shareIndex; - } else if (typeof shareIndex === "string") { - shareIndexParsed = hexToBigInt(shareIndex); - } + 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(16))) { + if (!this.metadata.getShareIndexesForPolynomial(polyIDToSearch).includes(shareIndexHex)) { throw new CoreError(1002, "no such share index created"); } - const shareFromStore = this.shares[polyIDToSearch][shareIndexParsed.toString(16)]; + 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(16)], polyIDToSearch); + return new ShareStore(shareMap[shareIndexHex], polyIDToSearch); } getCurrentShareIndexes(): string[] { @@ -949,7 +942,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; @@ -1162,7 +1155,7 @@ class ThresholdKey implements ITKey { } // Import export shares - async outputShare(shareIndex: BigIntString, type?: string): Promise { + async outputShare(shareIndex: bigint, type?: string): Promise { const { share } = this.outputShareStore(shareIndex).share; if (!type) return share; diff --git a/packages/service-provider-base/src/ServiceProviderBase.ts b/packages/service-provider-base/src/ServiceProviderBase.ts index 3ffee9a3f..cbf563a3f 100644 --- a/packages/service-provider-base/src/ServiceProviderBase.ts +++ b/packages/service-provider-base/src/ServiceProviderBase.ts @@ -1,5 +1,4 @@ import { - BigIntString, decrypt as decryptUtils, encrypt as encryptUtils, EncryptedMessage, @@ -12,7 +11,7 @@ import { StringifiedType, toPrivKeyECC, } from "@tkey/common-types"; -import { bytesToBase64, hexToBytes } from "@toruslabs/metadata-helpers"; +import { bytesToBase64 } from "@toruslabs/metadata-helpers"; class ServiceProviderBase implements IServiceProvider { enableLogging: boolean; @@ -58,9 +57,8 @@ class ServiceProviderBase implements IServiceProvider { throw new Error("Unsupported pub key type"); } - sign(msg: BigIntString): string { - const msgHex = typeof msg === "bigint" ? msg.toString(16).padStart(64, "0") : msg; - const recoveredSig = secp256k1.sign(hexToBytes(msgHex), toPrivKeyECC(this.postboxKey), { prehash: false, format: "recovered" }); + 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 diff --git a/packages/share-transfer/src/ShareTransferModule.ts b/packages/share-transfer/src/ShareTransferModule.ts index a9774bff4..a21116c7e 100644 --- a/packages/share-transfer/src/ShareTransferModule.ts +++ b/packages/share-transfer/src/ShareTransferModule.ts @@ -4,6 +4,7 @@ import { encrypt, getPubKeyECC, getPubKeyPoint, + hexToBigInt, IModule, ITKeyApi, ITkeyError, @@ -155,7 +156,7 @@ 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]); + const share = this.tbSDK.outputShareStore(hexToBigInt(filtered[0])); shareBytes = utf8ToBytes(JSON.stringify(share)); } const shareRequest = new ShareRequest(shareTransferStore[encPubKeyX]); @@ -164,7 +165,7 @@ class ShareTransferModule implements IModule { 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); } diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index 2e6c9da32..bef2d35bc 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -180,7 +180,7 @@ class TorusStorageLayer implements IStorageLayer { pubY = pubK.y.toString(16); } else { const point = serviceProvider.retrievePubKeyPoint(); - sig = serviceProvider.sign(bytesToHex(hash)); + sig = serviceProvider.sign(hash); pubX = point.x.toString(16); pubY = point.y.toString(16); } @@ -203,7 +203,7 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(bytesToHex(keccak256(utf8ToBytes(stringify(data))))); + signature = serviceProvider.sign(keccak256(utf8ToBytes(stringify(data)))); } const metadataParams = { key: bytesToHex(getPubKeyECC(privKey)), @@ -223,7 +223,7 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(bytesToHex(keccak256(utf8ToBytes(stringify(data))))); + signature = serviceProvider.sign(keccak256(utf8ToBytes(stringify(data)))); } const metadataParams = { key: bytesToHex(getPubKeyECC(privKey)), diff --git a/packages/web-storage/README.md b/packages/web-storage/README.md index 98e68768d..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: BigIntString): Promise; + storeDeviceShareOnFileStorage(shareIndex: bigint): Promise; getDeviceShare(): Promise; inputShareFromWebStorage(): Promise; } From 3ae8d617defacd4315571745e2120ad67b4d8006 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 17:02:08 +0700 Subject: [PATCH 42/57] fix: test --- packages/web-storage/test/test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/web-storage/test/test.js b/packages/web-storage/test/test.js index 952965de0..ac97e4401 100644 --- a/packages/web-storage/test/test.js +++ b/packages/web-storage/test/test.js @@ -87,7 +87,7 @@ manualSyncModes.forEach((mode) => { await tb._initializeNewKey({ initializeModules: true }); const reconstructedKey = await tb.reconstructKey(); const newShare = await tb.generateNewShare(); - await tb.deleteShare(newShare.newShareIndex.toString(16)); + await tb.deleteShare(newShare.newShareIndex); await tb.syncLocalMetadataTransitions(); await tb2.initialize(); @@ -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(16)); + 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(16)); + await tb.deleteShare(resp1.deviceShare.share.shareIndex); await tb.syncLocalMetadataTransitions(); await tb2.initialize(); From a32d3282884bd42bfde390894d6a226753fea568 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 18:07:36 +0700 Subject: [PATCH 43/57] fix: remove bigin | null, in IPoint --- packages/common-types/src/base/Point.ts | 33 ++++--------------- .../common-types/src/baseTypes/commonTypes.ts | 4 +-- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/packages/common-types/src/base/Point.ts b/packages/common-types/src/base/Point.ts index 2f7d61af3..f1c0d36b1 100644 --- a/packages/common-types/src/base/Point.ts +++ b/packages/common-types/src/base/Point.ts @@ -1,19 +1,18 @@ -import { concatBytes, hexToBytes, numberToBytesBE } from "@noble/curves/utils.js"; +import { concatBytes, numberToBytesBE } from "@noble/curves/utils.js"; import { IPoint, StringifiedType } from "../baseTypes/commonTypes"; import { secp256k1 } from "../utils"; -export function hexToBigInt(s: string | null | undefined): bigint | null { - if (s === null || s === undefined) return null; +export function hexToBigInt(s: string): bigint { return s.length > 0 ? BigInt(`0x${s}`) : 0n; } class Point implements IPoint { - x: bigint | null; + x: bigint; - y: bigint | null; + y: bigint; - constructor(x: bigint | null, y: bigint | null) { + constructor(x: bigint, y: bigint) { this.x = x; this.y = y; } @@ -40,10 +39,6 @@ class Point implements IPoint { } static fromSEC1(encodedPoint: string): Point { - if (encodedPoint.length === 2 && encodedPoint === "00") { - return new Point(null, null); - } - const p = secp256k1.Point.fromHex(encodedPoint).toAffine(); return new Point(p.x, p.y); } @@ -68,24 +63,17 @@ class Point implements IPoint { } toProjectivePoint() { - if (this.isIdentity()) { - return secp256k1.Point.ZERO; - } return secp256k1.Point.fromAffine({ x: this.x, y: this.y }); } toSEC1(compressed = false): Uint8Array { - if (this.isIdentity()) { - return hexToBytes("00"); - } - return this.toProjectivePoint().toBytes(compressed); } toJSON(): StringifiedType { return { - x: this.x?.toString(16) ?? null, - y: this.y?.toString(16) ?? null, + x: this.x.toString(16), + y: this.y.toString(16), }; } @@ -96,14 +84,7 @@ class Point implements IPoint { }; } - isIdentity(): boolean { - return this.x === null && this.y === null; - } - equals(p: Point): boolean { - if (this.isIdentity()) { - return p.isIdentity(); - } return this.x === p.x && this.y === p.y; } } diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index 0e75c7645..24c6e2b4c 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -31,8 +31,8 @@ export interface ISerializable { } export interface IPoint extends ISerializable { - x: bigint | null; - y: bigint | null; + x: bigint; + y: bigint; encode(enc: string, params?: unknown): Uint8Array; } From 6d6c2e2e65d61ad7da5448605a3abcbd88dabdf1 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 18:53:23 +0700 Subject: [PATCH 44/57] fix: comments --- packages/core/src/authMetadata.ts | 2 +- packages/core/src/core.ts | 5 +---- packages/security-questions/package.json | 2 +- .../src/SecurityQuestionsModule.ts | 7 ++++--- packages/storage-layer-torus/package.json | 2 +- .../storage-layer-torus/src/TorusStorageLayer.ts | 13 +++++++------ 6 files changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index 9e49948d7..c573564af 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -24,7 +24,7 @@ class AuthMetadata implements IAuthMetadata { if (!m.pubKey) throw CoreError.metadataPubKeyUnavailable(); const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); - if (!secp256k1.verify(hexToBytes(sig), msgHash, m.pubKey.toSEC1(), { prehash: false, format: "der" })) { + if (!secp256k1.verify(hexToBytes(sig), msgHash, m.pubKey.toSEC1(true), { prehash: false, format: "der" })) { throw CoreError.default("Signature not valid for returning metadata"); } return new AuthMetadata(m); diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 9dfc95ff8..ef472782d 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -11,6 +11,7 @@ import { generatePrivateExcludingIndexes, getPubKeyECC, getPubKeyPoint, + hexToBigInt, IMessageMetadata, IMetadata, InitializeNewKeyResult, @@ -62,10 +63,6 @@ import Metadata from "./metadata"; const ed25519SeedConst = "ed25519Seed"; -function hexToBigInt(s: string): bigint { - return BigInt(`0x${s}`); -} - // TODO: handle errors for get and set with retries class ThresholdKey implements ITKey { diff --git a/packages/security-questions/package.json b/packages/security-questions/package.json index c36a4b2ed..6dc2db759 100644 --- a/packages/security-questions/package.json +++ b/packages/security-questions/package.json @@ -44,7 +44,7 @@ "@tkey/common-types": "^16.0.0", "@noble/curves": "^2.0.1", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.2.0" + "@toruslabs/torus.js": "^17.0.0" }, "devDependencies": {}, "lint-staged": { diff --git a/packages/security-questions/src/SecurityQuestionsModule.ts b/packages/security-questions/src/SecurityQuestionsModule.ts index 5b4f5c926..34021744e 100644 --- a/packages/security-questions/src/SecurityQuestionsModule.ts +++ b/packages/security-questions/src/SecurityQuestionsModule.ts @@ -11,15 +11,16 @@ import { Share, ShareStore, ShareStoreMap, + stripHexPrefix, } from "@tkey/common-types"; -import { utf8ToBytes } from "@toruslabs/metadata-helpers"; -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 answerToUserInputHashBigInt(answerString: string): bigint { - return bytesToNumberBE(keccak256(utf8ToBytes(answerString))); + return bytesToNumberBE(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(answerString))))); } export const SECURITY_QUESTIONS_MODULE_NAME = "securityQuestions"; diff --git a/packages/storage-layer-torus/package.json b/packages/storage-layer-torus/package.json index 8172d6aa7..fa5b6a8b4 100644 --- a/packages/storage-layer-torus/package.json +++ b/packages/storage-layer-torus/package.json @@ -41,7 +41,7 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.2.0", + "@toruslabs/torus.js": "^17.0.0", "json-stable-stringify": "^1.3.0" }, "devDependencies": { diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index bef2d35bc..4d457f4c3 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -13,17 +13,18 @@ import { prettyPrintError, secp256k1, StringifiedType, + stripHexPrefix, toPrivKeyECC, TorusStorageLayerAPIParams, TorusStorageLayerArgs, } from "@tkey/common-types"; import { post } from "@toruslabs/http-helpers"; -import { bytesToBase64, bytesToHex, bytesToUtf8, decodeBase64Url, encodeBase64Url, utf8ToBytes } from "@toruslabs/metadata-helpers"; -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: bigint): string { - const hash = keccak256(utf8ToBytes(stringify(data))); + const hash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data))))); const sig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false, format: "der" }); return bytesToHex(sig); } @@ -168,7 +169,7 @@ class TorusStorageLayer implements IStorageLayer { setTKeyStore.data = ""; } - const hash = keccak256(utf8ToBytes(stringify(setTKeyStore))); + const hash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(setTKeyStore))))); if (privKey) { const recoveredSig = secp256k1.sign(hash, toPrivKeyECC(privKey), { prehash: false, format: "recovered" }); const sigWithV = new Uint8Array(65); @@ -203,7 +204,7 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(keccak256(utf8ToBytes(stringify(data)))); + signature = serviceProvider.sign(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))))); } const metadataParams = { key: bytesToHex(getPubKeyECC(privKey)), @@ -223,7 +224,7 @@ class TorusStorageLayer implements IStorageLayer { if (privKey) { signature = signDataWithPrivKey(data, privKey); } else { - signature = serviceProvider.sign(keccak256(utf8ToBytes(stringify(data)))); + signature = serviceProvider.sign(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))))); } const metadataParams = { key: bytesToHex(getPubKeyECC(privKey)), From 8ed588d7a827739642db485bb2b2382ea56795f7 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Mon, 2 Mar 2026 18:55:47 +0700 Subject: [PATCH 45/57] fix: comment --- packages/common-types/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 81056e510..7b1fb8b35 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -47,7 +47,7 @@ export function bigIntReplacer(this: unknown, _key: string | number, value: unkn } export function generateAddressFromPublicKey(publicKey: Uint8Array): string { - const ethAddressLower = `0x${keccak256(publicKey).slice(64 - 38)}`; + const ethAddressLower = `0x${keccak256(publicKey).slice(-40)}`; return toChecksumAddress(ethAddressLower); } From c24a264c74a8db89122f284823731f94c65dcedc Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Mon, 2 Mar 2026 20:06:17 +0800 Subject: [PATCH 46/57] fix test --- packages/common-types/test/test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common-types/test/test.js b/packages/common-types/test/test.js index 565c5e482..236a46000 100644 --- a/packages/common-types/test/test.js +++ b/packages/common-types/test/test.js @@ -23,7 +23,7 @@ describe("Point", function () { const point = getPubKeyPoint(secret); 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}`); + fail(`elliptic format x should be equal ${secret} ${bytesToHex(result)} ${point.x.toString(16)} ${secret % secp256k1.Point.CURVE().n}`); } }); From 2e25404082961c2fa4a9d33bb58f24ebb2876c11 Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Mon, 2 Mar 2026 20:19:39 +0800 Subject: [PATCH 47/57] undo fix --- packages/common-types/test/test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common-types/test/test.js b/packages/common-types/test/test.js index 236a46000..565c5e482 100644 --- a/packages/common-types/test/test.js +++ b/packages/common-types/test/test.js @@ -23,7 +23,7 @@ describe("Point", function () { const point = getPubKeyPoint(secret); 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.Point.CURVE().n}`); + fail(`elliptic format x should be equal ${secret} ${bytesToHex(result)} ${point.x.toString(16)} ${secret % secp256k1.CURVE.n}`); } }); From 411e983d48f996704ab95efcaae6928abd7413a6 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:11:31 +0700 Subject: [PATCH 48/57] fix: crash when privKey is undefined --- .../storage-layer-torus/src/TorusStorageLayer.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/storage-layer-torus/src/TorusStorageLayer.ts b/packages/storage-layer-torus/src/TorusStorageLayer.ts index 4d457f4c3..4db163a5a 100644 --- a/packages/storage-layer-torus/src/TorusStorageLayer.ts +++ b/packages/storage-layer-torus/src/TorusStorageLayer.ts @@ -196,18 +196,22 @@ class TorusStorageLayer implements IStorageLayer { 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(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))))); + key = bytesToHex(serviceProvider.retrievePubKey("ecc")); } const metadataParams = { - key: bytesToHex(getPubKeyECC(privKey)), + key, data, signature, }; @@ -216,18 +220,22 @@ class TorusStorageLayer implements IStorageLayer { 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(hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data)))))); + key = bytesToHex(serviceProvider.retrievePubKey("ecc")); } const metadataParams = { - key: bytesToHex(getPubKeyECC(privKey)), + key, data, signature, id, From 44252f7793b6a42a6f039be9ad0e17c2e6d07420 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:25:50 +0700 Subject: [PATCH 49/57] fix: hexToBigInt("") silently returns 0n --- packages/common-types/src/base/Point.ts | 3 ++- packages/share-transfer/src/ShareTransferModule.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/common-types/src/base/Point.ts b/packages/common-types/src/base/Point.ts index f1c0d36b1..781883462 100644 --- a/packages/common-types/src/base/Point.ts +++ b/packages/common-types/src/base/Point.ts @@ -4,7 +4,8 @@ import { IPoint, StringifiedType } from "../baseTypes/commonTypes"; import { secp256k1 } from "../utils"; export function hexToBigInt(s: string): bigint { - return s.length > 0 ? BigInt(`0x${s}`) : 0n; + if (s.length === 0) throw new Error("hexToBigInt: empty string is invalid"); + return BigInt(`0x${s}`); } class Point implements IPoint { diff --git a/packages/share-transfer/src/ShareTransferModule.ts b/packages/share-transfer/src/ShareTransferModule.ts index a21116c7e..fa35e63d3 100644 --- a/packages/share-transfer/src/ShareTransferModule.ts +++ b/packages/share-transfer/src/ShareTransferModule.ts @@ -156,6 +156,7 @@ class ShareTransferModule implements IModule { const latestPolynomialId = latestPolynomial.getPolynomialID(); const indexes = metadata.getShareIndexesForPolynomial(latestPolynomialId); const filtered = indexes.filter((el) => !availableShareIndexes.includes(el)); + 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)); } From 45e8cf1e1b0f3392a6a895225f5158afb212573a Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:38:19 +0700 Subject: [PATCH 50/57] fix: use noble to gen privKey --- packages/common-types/src/utils.ts | 7 ++++++- packages/share-transfer/src/ShareTransferModule.ts | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 7b1fb8b35..95101beba 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -1,7 +1,7 @@ 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"; @@ -9,6 +9,11 @@ import { EncryptedMessage } from "./baseTypes/commonTypes"; export { secp256k1 }; +/** 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); diff --git a/packages/share-transfer/src/ShareTransferModule.ts b/packages/share-transfer/src/ShareTransferModule.ts index fa35e63d3..f412b8707 100644 --- a/packages/share-transfer/src/ShareTransferModule.ts +++ b/packages/share-transfer/src/ShareTransferModule.ts @@ -2,6 +2,7 @@ import { bytesToNumberBE } from "@noble/curves/utils.js"; import { decrypt, encrypt, + generatePrivate, getPubKeyECC, getPubKeyPoint, hexToBigInt, @@ -13,7 +14,6 @@ import { ShareTransferStorePointerArgs, toPrivKeyECC, } from "@tkey/common-types"; -import { generatePrivate } from "@toruslabs/eccrypto"; import { bytesToUtf8, utf8ToBytes } from "@toruslabs/metadata-helpers"; import ShareTransferError from "./errors"; From 63bb0ab8397891d1382f5a863084f40641cd8938 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:42:10 +0700 Subject: [PATCH 51/57] fix: shareToShareStore unreachable return --- packages/core/src/metadata.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index 10245cfdf..e7461a3d4 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -270,7 +270,6 @@ class Metadata implements IMetadata { 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]; @@ -298,10 +297,7 @@ class Metadata implements IMetadata { } } } - if (!returnShare) { - throw CoreError.fromCode(1307); - } - return returnShare; + throw CoreError.fromCode(1307); } clone(): Metadata { From 512630cecee2851987fffc1d21c42c8adcf2fab9 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:49:25 +0700 Subject: [PATCH 52/57] fix: remove unuse code --- packages/common-types/src/utils.ts | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/packages/common-types/src/utils.ts b/packages/common-types/src/utils.ts index 95101beba..2b0536dec 100644 --- a/packages/common-types/src/utils.ts +++ b/packages/common-types/src/utils.ts @@ -56,26 +56,6 @@ export function generateAddressFromPublicKey(publicKey: Uint8Array): string { return toChecksumAddress(ethAddressLower); } -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 generatePrivateExcludingIndexes(shareIndexes: bigint[]): bigint { const key = bytesToNumberBE(generatePrivate()); if (shareIndexes.find((el) => el === key)) { From d95ef691d69f73acbbbe63f686bdfae3af3d2903 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:51:19 +0700 Subject: [PATCH 53/57] fix: clean up --- packages/common-types/src/base/Error.ts | 1 - packages/common-types/src/base/Point.ts | 3 --- packages/common-types/src/base/Polynomial.ts | 3 +-- packages/common-types/src/base/PublicPolynomial.ts | 1 - packages/common-types/src/base/PublicShare.ts | 1 - packages/common-types/src/base/Share.ts | 2 +- packages/common-types/src/base/ShareStore.ts | 1 - packages/common-types/src/base/index.ts | 2 +- packages/common-types/src/base/{BNUtils.ts => keyUtils.ts} | 0 packages/common-types/src/baseTypes/aggregateTypes.ts | 3 +-- packages/common-types/src/baseTypes/commonTypes.ts | 1 - 11 files changed, 4 insertions(+), 14 deletions(-) rename packages/common-types/src/base/{BNUtils.ts => keyUtils.ts} (100%) 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 781883462..3ab543b32 100644 --- a/packages/common-types/src/base/Point.ts +++ b/packages/common-types/src/base/Point.ts @@ -55,9 +55,6 @@ class Point implements IPoint { const yBytes = numberToBytesBE(this.y, 32); return concatBytes(prefix, xBytes, yBytes); } - case "elliptic-compressed": { - return this.toSEC1(true); - } default: throw new Error("encoding doesnt exist in Point"); } diff --git a/packages/common-types/src/base/Polynomial.ts b/packages/common-types/src/base/Polynomial.ts index 64ff33a5f..f38ae7c0a 100644 --- a/packages/common-types/src/base/Polynomial.ts +++ b/packages/common-types/src/base/Polynomial.ts @@ -2,12 +2,11 @@ import { mod } from "@noble/curves/abstract/modular.js"; import { ISerializable, PolynomialID, StringifiedType } from "../baseTypes/commonTypes"; import { secp256k1 } from "../utils"; -import { getPubKeyPoint } from "./BNUtils"; +import { getPubKeyPoint } from "./keyUtils"; import Point, { hexToBigInt } from "./Point"; import PublicPolynomial from "./PublicPolynomial"; import Share from "./Share"; -// @flow export type ShareMap = { [x: string]: Share; }; diff --git a/packages/common-types/src/base/PublicPolynomial.ts b/packages/common-types/src/base/PublicPolynomial.ts index 1417fd799..4306bc50b 100644 --- a/packages/common-types/src/base/PublicPolynomial.ts +++ b/packages/common-types/src/base/PublicPolynomial.ts @@ -41,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 de432f0f1..e493abb34 100644 --- a/packages/common-types/src/base/PublicShare.ts +++ b/packages/common-types/src/base/PublicShare.ts @@ -30,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 5d9536a18..2ec28c315 100644 --- a/packages/common-types/src/base/Share.ts +++ b/packages/common-types/src/base/Share.ts @@ -1,5 +1,5 @@ import { ISerializable, StringifiedType } from "../baseTypes/commonTypes"; -import { getPubKeyPoint } from "./BNUtils"; +import { getPubKeyPoint } from "./keyUtils"; import { hexToBigInt } from "./Point"; import PublicShare from "./PublicShare"; 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 7f82f79d2..c837a3733 100644 --- a/packages/common-types/src/base/index.ts +++ b/packages/common-types/src/base/index.ts @@ -1,4 +1,4 @@ -export * from "./BNUtils"; +export * from "./keyUtils"; export * from "./Error"; export * from "./OneKey"; export { hexToBigInt, default as Point } from "./Point"; diff --git a/packages/common-types/src/base/BNUtils.ts b/packages/common-types/src/base/keyUtils.ts similarity index 100% rename from packages/common-types/src/base/BNUtils.ts rename to packages/common-types/src/base/keyUtils.ts diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index c5c71c8e6..48ee638e0 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -24,8 +24,6 @@ export interface IModule { initialize(): Promise; } -// @flow - export type ModuleMap = { [moduleName: string]: IModule; }; @@ -180,6 +178,7 @@ export interface ShareTransferStorePointerArgs { 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[]; diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index 24c6e2b4c..46c2cd12b 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -2,7 +2,6 @@ import type { CustomAuthArgs } from "@toruslabs/customauth"; export type PubKeyType = "ecc"; -// @flow export type PolynomialID = string; export type PolyIDAndShares = [PolynomialID, string[]]; From d1d6f9fe4f029904ac4aacc0eee80891212b16c9 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 11:55:43 +0700 Subject: [PATCH 54/57] fix: lint --- packages/common-types/src/base/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common-types/src/base/index.ts b/packages/common-types/src/base/index.ts index c837a3733..e0d61563b 100644 --- a/packages/common-types/src/base/index.ts +++ b/packages/common-types/src/base/index.ts @@ -1,5 +1,5 @@ -export * from "./keyUtils"; export * from "./Error"; +export * from "./keyUtils"; export * from "./OneKey"; export { hexToBigInt, default as Point } from "./Point"; export { default as Polynomial } from "./Polynomial"; From 13c4454bd87317b0edd4ec2cc80e99606d01951d Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 12:11:17 +0700 Subject: [PATCH 55/57] fix: add compatible test in authMetadata --- packages/core/test/authMetadata.test.js | 116 +++++++++++++++++++++--- 1 file changed, 104 insertions(+), 12 deletions(-) diff --git a/packages/core/test/authMetadata.test.js b/packages/core/test/authMetadata.test.js index 0150ba4f1..e9f9bef99 100644 --- a/packages/core/test/authMetadata.test.js +++ b/packages/core/test/authMetadata.test.js @@ -1,28 +1,120 @@ import { bytesToHex } from "@noble/curves/utils.js"; -import { generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; +import { bigIntReplacer, generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; import { generatePrivate } from "@toruslabs/eccrypto"; -import { deepStrictEqual } from "assert"; +import { deepStrictEqual, throws } from "assert"; import stringify from "json-stable-stringify"; import { AuthMetadata, generateRandomPolynomial, Metadata } from "../src/index"; 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 = BigInt(`0x${PRIVATE_KEY}`); - // create a random poly and respective shares - 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" }); + 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"); + }); }); From d4b738d2d0c4da479dca3e94653cf5bb49abb6c3 Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 15:46:26 +0700 Subject: [PATCH 56/57] fix: add old-format toJSON snapshots tests --- package-lock.json | 415 ++++++++++++++---------- packages/core/src/authMetadata.ts | 2 +- packages/core/test/authMetadata.test.js | 110 ++++++- 3 files changed, 346 insertions(+), 181 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7adc2a2c4..af28e30ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1896,7 +1896,6 @@ "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" @@ -1908,7 +1907,6 @@ "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -1919,7 +1917,6 @@ "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "tslib": "^2.4.0" } @@ -3362,6 +3359,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, "node_modules/@noble/ciphers": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", @@ -3944,13 +3953,13 @@ } }, "node_modules/@nrwl/tao": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.2.8.tgz", - "integrity": "sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg==", + "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": "17.2.8", + "nx": "19.8.14", "tslib": "^2.3.0" }, "bin": { @@ -3991,9 +4000,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz", - "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==", + "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" ], @@ -4008,9 +4017,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz", - "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==", + "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" ], @@ -4025,9 +4034,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz", - "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==", + "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" ], @@ -4042,9 +4051,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz", - "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==", + "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" ], @@ -4059,9 +4068,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz", - "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==", + "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" ], @@ -4076,9 +4085,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz", - "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==", + "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" ], @@ -4093,9 +4102,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz", - "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==", + "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" ], @@ -4110,9 +4119,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz", - "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==", + "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" ], @@ -4127,9 +4136,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz", - "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==", + "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" ], @@ -4144,9 +4153,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz", - "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==", + "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" ], @@ -5958,6 +5967,16 @@ "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", @@ -7070,9 +7089,9 @@ "license": "BSD-3-Clause" }, "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9771,9 +9790,9 @@ "license": "MIT" }, "node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "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": { @@ -9842,13 +9861,19 @@ } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dunder-proto": { @@ -11464,6 +11489,47 @@ ], "license": "MIT" }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/node_modules/js-yaml": { + "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": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/front-matter/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -15014,9 +15080,9 @@ } }, "node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", "engines": { @@ -16429,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" @@ -16510,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", @@ -16581,22 +16664,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "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.2" - }, - "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", @@ -16607,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", @@ -16624,19 +16701,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "license": "ISC", - "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", @@ -16644,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", @@ -17270,39 +17348,39 @@ "dev": true }, "node_modules/nx": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/nx/-/nx-17.2.8.tgz", - "integrity": "sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==", + "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": { - "@nrwl/tao": "17.2.8", + "@napi-rs/wasm-runtime": "0.2.4", + "@nrwl/tao": "19.8.14", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.5.1", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", - "dotenv": "~16.3.1", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", - "fs-extra": "^11.1.0", - "glob": "7.1.4", + "front-matter": "^4.0.2", "ignore": "^5.0.4", "jest-diff": "^29.4.1", - "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "3.0.5", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "semver": "7.5.3", + "ora": "5.3.0", + "semver": "^7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", @@ -17317,19 +17395,19 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "17.2.8", - "@nx/nx-darwin-x64": "17.2.8", - "@nx/nx-freebsd-x64": "17.2.8", - "@nx/nx-linux-arm-gnueabihf": "17.2.8", - "@nx/nx-linux-arm64-gnu": "17.2.8", - "@nx/nx-linux-arm64-musl": "17.2.8", - "@nx/nx-linux-x64-gnu": "17.2.8", - "@nx/nx-linux-x64-musl": "17.2.8", - "@nx/nx-win32-arm64-msvc": "17.2.8", - "@nx/nx-win32-x64-msvc": "17.2.8" + "@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.6.7", + "@swc-node/register": "^1.8.0", "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { @@ -17357,17 +17435,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/nx/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", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -17405,38 +17472,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nx/node_modules/dotenv": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", - "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "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": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/nx/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -17447,6 +17482,23 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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", @@ -17461,16 +17513,42 @@ } }, "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "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": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nx/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nx/node_modules/semver": { @@ -21135,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", @@ -23870,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" }, @@ -24496,7 +24565,7 @@ "@noble/curves": "^2.0.1", "@tkey/common-types": "^16.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.2.0" + "@toruslabs/torus.js": "^17.0.0" }, "devDependencies": {}, "engines": { @@ -24649,7 +24718,7 @@ "@tkey/common-types": "^16.0.0", "@toruslabs/http-helpers": "^9.0.0", "@toruslabs/metadata-helpers": "^8.1.0", - "ethereum-cryptography": "^3.2.0", + "@toruslabs/torus.js": "^17.0.0", "json-stable-stringify": "^1.3.0" }, "devDependencies": { diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index c573564af..7e896a99f 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -24,7 +24,7 @@ class AuthMetadata implements IAuthMetadata { if (!m.pubKey) throw CoreError.metadataPubKeyUnavailable(); const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); - if (!secp256k1.verify(hexToBytes(sig), msgHash, m.pubKey.toSEC1(true), { prehash: false, format: "der" })) { + 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); diff --git a/packages/core/test/authMetadata.test.js b/packages/core/test/authMetadata.test.js index e9f9bef99..d28667d6a 100644 --- a/packages/core/test/authMetadata.test.js +++ b/packages/core/test/authMetadata.test.js @@ -1,11 +1,69 @@ import { bytesToHex } from "@noble/curves/utils.js"; -import { bigIntReplacer, generatePrivateExcludingIndexes, getPubKeyPoint } from "@tkey/common-types"; -import { generatePrivate } from "@toruslabs/eccrypto"; +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"; +// 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) { @@ -100,11 +158,7 @@ describe("AuthMetadata", function () { 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` - ); + deepStrictEqual(restored.metadata.polyIDList[i][1].sort(), metadata.polyIDList[i][1].sort(), `shareIndexes[${i}] must match`); } }); @@ -117,4 +171,46 @@ describe("AuthMetadata", function () { 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`); + } + }); }); From 9b9548e1df0f68e709aeb4e117ad725cd760145e Mon Sep 17 00:00:00 2001 From: hieu-w Date: Tue, 3 Mar 2026 16:53:11 +0700 Subject: [PATCH 57/57] fix: add comment explain lowS option used --- packages/core/src/authMetadata.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core/src/authMetadata.ts b/packages/core/src/authMetadata.ts index 7e896a99f..37497fa3c 100644 --- a/packages/core/src/authMetadata.ts +++ b/packages/core/src/authMetadata.ts @@ -24,6 +24,8 @@ class AuthMetadata implements IAuthMetadata { if (!m.pubKey) throw CoreError.metadataPubKeyUnavailable(); const msgHash = hexToBytes(stripHexPrefix(keccak256(utf8ToBytes(stringify(data, { replacer: bigIntReplacer }))))); + // keep lowS: false for backward compatibility with old @tkey/core@16.0.0 + // lowS: true work for both lowS and highS signatures 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"); }