From 7418945a710d828ef2f59d3e019ac572d49dac48 Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 17 Feb 2026 20:07:27 +0800 Subject: [PATCH 01/13] feat: eip 7702 support --- package-lock.json | 520 ++++++++++++------ packages/no-modal/package.json | 2 +- .../EthereumSigningProvider.ts | 7 + .../signingProviders/signingUtils.ts | 65 ++- .../rpc/eip7702Middleware.ts | 139 +++++ 5 files changed, 558 insertions(+), 175 deletions(-) create mode 100644 packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts diff --git a/package-lock.json b/package-lock.json index 8b7a5d8d9..0c1ac581c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,7 +96,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -1769,7 +1768,6 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -2001,7 +1999,6 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -4523,7 +4520,6 @@ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4687,7 +4683,6 @@ "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "license": "MIT", - "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -5759,7 +5754,6 @@ "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -6391,7 +6385,6 @@ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -6807,7 +6800,6 @@ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -7162,7 +7154,6 @@ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -8656,7 +8647,6 @@ "integrity": "sha512-CEEhCDmkvztd1zbgADsEQhmj9GyWOOGeW1hZD+gtwbBSF5YN1uofS/pex5MIh/VIqKRj+A2UnYWI1V+9+q/lyQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@solana/accounts": "3.0.3", "@solana/addresses": "3.0.3", @@ -10024,7 +10014,6 @@ "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -10190,6 +10179,7 @@ "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "remove-accents": "0.5.0" }, @@ -10207,6 +10197,7 @@ "integrity": "sha512-6PN65csiuTNfBMXqQUxQhCNdtm1rV+9kC9YwWAIKcaxAauq3Wu7p18j3gQY3YIBJU70jT/wzCCZ2uqto/vQgiQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -10218,6 +10209,7 @@ "integrity": "sha512-wAHc/cgKzW7LZNFloThyHnV/AX9gTg3w5yAv0gvQHPZoCnepwqCMtzbuPbb2UvfvO32XZ46e8bPOYbfZhzVnnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@tanstack/query-core": "5.90.7" }, @@ -10496,65 +10488,6 @@ "typescript": "^5.x" } }, - "node_modules/@toruslabs/ethereum-controllers": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@toruslabs/ethereum-controllers/-/ethereum-controllers-8.15.0.tgz", - "integrity": "sha512-SV7u4c9+ICBgKC0W6NVQKVnixHtpVTsk5aXh+C4SPKpMRHXriNnqK57SHfRSoo6E1gXTbiBpQ8RqI0aJW5i+eA==", - "license": "ISC", - "dependencies": { - "@ethereumjs/common": "^10.1.0", - "@ethereumjs/tx": "^10.1.0", - "@ethereumjs/util": "^10.1.0", - "@metamask/smart-accounts-kit": "~0.3.0", - "@toruslabs/base-controllers": "^8.15.0", - "@toruslabs/http-helpers": "^8.1.1", - "@web3auth/auth": "^10.8.0", - "async-mutex": "^0.5.0", - "bignumber.js": "^9.3.1", - "bn.js": "^5.2.2", - "deepmerge": "^4.3.1", - "ethereum-cryptography": "^3.2.0", - "ethers": "^6.16.0", - "fast-json-patch": "^3.1.1", - "fast-safe-stringify": "^2.1.1", - "jsonschema": "^1.5.0", - "loglevel": "^1.9.2", - "permissionless": "^0.3.2" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "7.x", - "viem": ">=2.23" - } - }, - "node_modules/@toruslabs/ethereum-controllers/node_modules/@ethereumjs/common": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-10.1.0.tgz", - "integrity": "sha512-zIHCy0i2LFmMDp+QkENyoPGxcoD3QzeNVhx6/vE4nJk4uWGNXzO8xJ2UC4gtGW4UJTAOXja8Z1yZMVeRc2/+Ew==", - "license": "MIT", - "dependencies": { - "@ethereumjs/util": "^10.1.0", - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@toruslabs/ethereum-controllers/node_modules/@ethereumjs/tx": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-10.1.0.tgz", - "integrity": "sha512-svG6pyzUZDpunafszf2BaolA6Izuvo8ZTIETIegpKxAXYudV1hmzPQDdSI+d8nHCFyQfEFbQ6tfUq95lNArmmg==", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^10.1.0", - "@ethereumjs/rlp": "^10.1.0", - "@ethereumjs/util": "^10.1.0", - "ethereum-cryptography": "^3.2.0" - }, - "engines": { - "node": ">=18" - } - }, "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", @@ -11091,7 +11024,6 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -11201,7 +11133,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.0.tgz", "integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -11333,7 +11264,6 @@ "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -11938,7 +11868,8 @@ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@vue/eslint-config-typescript": { "version": "14.6.0", @@ -12228,7 +12159,6 @@ "integrity": "sha512-cG/xwQWsBEcKgRTkQVhH29cbpbs/TdcUJVFXCyri3ZknxhMyGv0YEjTcrNpRgt2SaswL1KrvslSNYKKo+5YEAg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "eventemitter3": "5.0.1", "mipd": "0.0.7", @@ -12788,7 +12718,6 @@ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -13586,7 +13515,6 @@ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -14349,7 +14277,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -14448,7 +14375,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15193,7 +15119,6 @@ "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -15872,7 +15797,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -16658,7 +16582,6 @@ "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", "license": "MIT", - "peer": true, "dependencies": { "color-convert": "^3.1.3", "color-string": "^2.1.3" @@ -17337,7 +17260,6 @@ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "license": "MIT", - "peer": true, "dependencies": { "node-fetch": "^2.7.0" } @@ -18398,7 +18320,6 @@ "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.16.tgz", "integrity": "sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==", "license": "MIT", - "peer": true, "dependencies": { "@ecies/ciphers": "^0.2.4", "@noble/ciphers": "^1.3.0", @@ -18945,7 +18866,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -19035,7 +18955,6 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -19431,7 +19350,6 @@ "integrity": "sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", @@ -19977,8 +19895,7 @@ "version": "6.4.9", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/eventemitter3": { "version": "5.0.1", @@ -23864,6 +23781,7 @@ "integrity": "sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^3.0.0", @@ -23883,6 +23801,7 @@ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -23896,6 +23815,7 @@ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -23914,6 +23834,7 @@ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -26945,6 +26866,7 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -27169,7 +27091,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", @@ -28052,44 +27973,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ox": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.8.9.tgz", - "integrity": "sha512-8pDZzrfZ3EE/ubomc57Nf+ZEQzvtdDjJaW8/ygI8O026V8oVWV4+WwBRCaSP0IYc3Pi0fQCgpg9WDQjl9qN3yQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "optional": true, - "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.0.8", - "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==", - "license": "MIT", - "optional": true - }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -28814,21 +28697,6 @@ "dev": true, "license": "MIT" }, - "node_modules/permissionless": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.2.tgz", - "integrity": "sha512-/YlcuybrW9ph+IQ0/vwRWZooEElXnsEgvXLJ/+HA1iU0kwIeTcxx4xlA6TiVZ/zTTsovS3+cSgVa8n7Sz/oTXg==", - "license": "MIT", - "peerDependencies": { - "ox": "^0.8.0", - "viem": "^2.28.1" - }, - "peerDependenciesMeta": { - "ox": { - "optional": true - } - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -29219,7 +29087,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -30193,7 +30060,6 @@ "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -30870,6 +30736,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -31475,7 +31342,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", @@ -31895,7 +31761,8 @@ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/remove-trailing-separator": { "version": "1.1.0", @@ -32278,7 +32145,6 @@ "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -32677,7 +32543,8 @@ "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/schema-utils": { "version": "4.3.3", @@ -32705,7 +32572,6 @@ "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", @@ -33360,7 +33226,6 @@ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", "license": "MIT", - "peer": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -34351,7 +34216,6 @@ "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -34461,7 +34325,6 @@ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -35122,7 +34985,6 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -35516,7 +35378,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -35810,7 +35671,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -36210,7 +36070,6 @@ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -36305,7 +36164,6 @@ "integrity": "sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "derive-valtio": "0.1.0", "proxy-compare": "2.6.0", @@ -36348,7 +36206,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", @@ -36455,7 +36312,6 @@ "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.25", "@vue/compiler-sfc": "3.5.25", @@ -36505,7 +36361,6 @@ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", @@ -36912,7 +36767,6 @@ "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -37039,7 +36893,6 @@ "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -37934,7 +37787,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=8.3.0" }, @@ -38165,6 +38017,7 @@ "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" @@ -38182,6 +38035,7 @@ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -38429,7 +38283,6 @@ "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "devOptional": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -38730,7 +38583,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -38823,7 +38675,6 @@ "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -38885,7 +38736,6 @@ "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.26", "@vue/compiler-sfc": "3.5.26", @@ -38916,7 +38766,7 @@ "@toruslabs/bs58": "^1.0.0", "@toruslabs/constants": "^15.0.0", "@toruslabs/eccrypto": "^6.2.0", - "@toruslabs/ethereum-controllers": "^8.15.0", + "@toruslabs/ethereum-controllers": "^8.17.0", "@toruslabs/http-helpers": "^8.1.1", "@toruslabs/loglevel-sentry": "^8.1.0", "@toruslabs/secure-pub-sub": "3.0.2", @@ -38983,6 +38833,88 @@ } } }, + "packages/no-modal/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==", + "license": "MIT" + }, + "packages/no-modal/node_modules/@ethereumjs/common": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-10.1.1.tgz", + "integrity": "sha512-NefPzPlrJ9w+NWVe06P+sHZQU98E1AEU9vhiHJEVT2wEcNBC1YX6hON9+smrfbn86C4U1pb2zbvjhkF+n/LKBw==", + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^10.1.1", + "eventemitter3": "^5.0.1" + } + }, + "packages/no-modal/node_modules/@ethereumjs/rlp": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-10.1.1.tgz", + "integrity": "sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=20" + } + }, + "packages/no-modal/node_modules/@ethereumjs/tx": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-10.1.1.tgz", + "integrity": "sha512-Kz8GWIKQjEQB60ko9hsYDX3rZMHZZOTcmm6OFl855Lu3padVnf5ZactUKM6nmWPsumHED5bWDjO32novZd1zyw==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^10.1.1", + "@ethereumjs/rlp": "^10.1.1", + "@ethereumjs/util": "^10.1.1", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1" + }, + "engines": { + "node": ">=20" + } + }, + "packages/no-modal/node_modules/@ethereumjs/tx/node_modules/@noble/hashes": { + "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": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/no-modal/node_modules/@ethereumjs/util": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-10.1.1.tgz", + "integrity": "sha512-r2EhaeEmLZXVs1dT2HJFQysAkr63ZWATu/9tgYSp1IlvjvwyC++DLg5kCDwMM49HBq3sOAhrPnXkoqf9DV2gbw==", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^10.1.1", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1" + }, + "engines": { + "node": ">=20" + } + }, + "packages/no-modal/node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "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": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "packages/no-modal/node_modules/@metamask/sdk": { "version": "0.34.0", "resolved": "https://registry.npmjs.org/@metamask/sdk/-/sdk-0.34.0.tgz", @@ -39030,6 +38962,95 @@ "socket.io-client": "^4.5.1" } }, + "packages/no-modal/node_modules/@noble/curves": { + "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": "2.0.1" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/no-modal/node_modules/@noble/curves/node_modules/@noble/hashes": { + "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": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/no-modal/node_modules/@toruslabs/base-controllers": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-8.17.0.tgz", + "integrity": "sha512-AQwl7VANyIwXSCXNnSg5Is8L4W4rMd6LprYthzp5C9DimzGTIqj+rvjvh1dhaM+fbBCHrln75vveiVuW6pRRNA==", + "license": "ISC", + "dependencies": { + "@ethereumjs/util": "^10.1.0", + "@toruslabs/broadcast-channel": "^12.0.0", + "@toruslabs/http-helpers": "^8.1.1", + "@web3auth/auth": "^10.8.0", + "async-mutex": "^0.5.0", + "bignumber.js": "^9.3.1", + "bowser": "^2.13.1", + "ethereum-cryptography": "^3.2.0", + "events": "^3.3.0", + "jwt-decode": "^4.0.0", + "loglevel": "^1.9.2" + }, + "engines": { + "node": ">=20.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "packages/no-modal/node_modules/@toruslabs/ethereum-controllers": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@toruslabs/ethereum-controllers/-/ethereum-controllers-8.17.0.tgz", + "integrity": "sha512-BPocXky0EEHf2+vHlIzqdNc73rWHIM4FZ0PcLCATkWBFNxHtRgjdPf1nN/mb5WewJaVAn3KPoS8fNOqqVnm2pg==", + "license": "ISC", + "dependencies": { + "@ethereumjs/common": "^10.1.0", + "@ethereumjs/rlp": "^10.1.0", + "@ethereumjs/tx": "^10.1.0", + "@ethereumjs/util": "^10.1.0", + "@metamask/smart-accounts-kit": "~0.3.0", + "@toruslabs/base-controllers": "^8.17.0", + "@toruslabs/http-helpers": "^8.1.1", + "@web3auth/auth": "^10.8.0", + "async-mutex": "^0.5.0", + "bignumber.js": "^9.3.1", + "bn.js": "^5.2.2", + "deepmerge": "^4.3.1", + "ethereum-cryptography": "^3.2.0", + "ethers": "^6.16.0", + "fast-json-patch": "^3.1.1", + "fast-safe-stringify": "^2.1.1", + "jsonschema": "^1.5.0", + "loglevel": "^1.9.2", + "permissionless": "^0.3.4", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=20.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x", + "viem": ">=2.45.0" + } + }, "packages/no-modal/node_modules/@types/react": { "version": "19.2.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", @@ -39063,6 +39084,70 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, + "packages/no-modal/node_modules/ox": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.11.3.tgz", + "integrity": "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "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 + } + } + }, + "packages/no-modal/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==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/no-modal/node_modules/permissionless": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/permissionless/-/permissionless-0.3.4.tgz", + "integrity": "sha512-pml3Do0e/AMoAq89tzpXlhhxmVdOigQCCoC+df/kRCVFiJ9pQTgzKQKhxYTWWB2xW/AOgwBwGzLBfqFZrDpFiA==", + "license": "MIT", + "peerDependencies": { + "ox": "^0.11.3", + "viem": "^2.44.4" + }, + "peerDependenciesMeta": { + "ox": { + "optional": true + } + } + }, "packages/no-modal/node_modules/react": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", @@ -39078,7 +39163,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -39105,6 +39189,102 @@ "bin": { "uuid": "dist/bin/uuid" } + }, + "packages/no-modal/node_modules/viem": { + "version": "2.46.1", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.46.1.tgz", + "integrity": "sha512-c5YPQR/VueqoPG09Tp1JBw2iItKVRGVI0YkWekquRDZw0ciNBhO3muu2QjO9xFelOXh18q3d/kLbW83B2Oxf0g==", + "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.1", + "ws": "8.18.3" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/no-modal/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==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "packages/no-modal/node_modules/viem/node_modules/ox": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.12.1.tgz", + "integrity": "sha512-uU0llpthaaw4UJoXlseCyBHmQ3bLrQmz9rRLIAUHqv46uHuae9SE+ukYBRIPVCnlEnHKuWjDUcDFHWx9gbGNoA==", + "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 + } + } + }, + "packages/no-modal/node_modules/viem/node_modules/ws": { + "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" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } } } } diff --git a/packages/no-modal/package.json b/packages/no-modal/package.json index 9c1649980..cf8794228 100644 --- a/packages/no-modal/package.json +++ b/packages/no-modal/package.json @@ -62,7 +62,7 @@ "@toruslabs/bs58": "^1.0.0", "@toruslabs/constants": "^15.0.0", "@toruslabs/eccrypto": "^6.2.0", - "@toruslabs/ethereum-controllers": "^8.15.0", + "@toruslabs/ethereum-controllers": "^8.17.0", "@toruslabs/http-helpers": "^8.1.1", "@toruslabs/loglevel-sentry": "^8.1.0", "@toruslabs/secure-pub-sub": "3.0.2", diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts index e7a97f5f5..ff37f5101 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts @@ -10,6 +10,7 @@ import { IEthChainSwitchHandlers, TransactionFormatter, } from "../../../ethereum-provider"; +import { createEip7702Middleware } from "../../../ethereum-provider/rpc/eip7702Middleware"; import { createEthAccountMiddleware } from "../../rpc/ethRpcMiddlewares"; import { IAccountHandlers } from "../../rpc/interfaces"; import { getProviderHandlers } from "./signingUtils"; @@ -90,12 +91,18 @@ export class EthereumSigningProvider extends BaseProvider< getPublic, getProviderEngineProxy: this.getProviderEngineProxy.bind(this), }); + const ethMiddleware = createEthMiddleware(providerHandlers); + const eip7702Middleware = createEip7702Middleware({ + getProviderEngineProxy: this.getProviderEngineProxy.bind(this), + processTransaction: providerHandlers.processTransaction, + }); const chainSwitchMiddleware = this.getChainSwitchMiddleware(); const engine = new JRPCEngine(); // Not a partial anymore because of checks in ctor const { networkMiddleware } = createEthJsonRpcClient(chain); engine.push(ethMiddleware); + engine.push(eip7702Middleware); engine.push(chainSwitchMiddleware); engine.push(this.getAccountMiddleware()); engine.push(networkMiddleware); diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts index 8c4c87dad..a11cb6756 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts @@ -1,7 +1,7 @@ -import { intToBytes, isHexString, PrefixedHexString, publicToAddress, stripHexPrefix, toBytes } from "@ethereumjs/util"; +import { addHexPrefix, intToBytes, isHexString, PrefixedHexString, publicToAddress, stripHexPrefix, toBytes } from "@ethereumjs/util"; import { concatSig } from "@toruslabs/base-controllers"; -import { JRPCRequest, providerErrors, SafeEventEmitterProvider } from "@web3auth/auth"; -import { hashMessage, Signature } from "ethers"; +import { JRPCRequest, providerErrors, rpcErrors, SafeEventEmitterProvider } from "@web3auth/auth"; +import { Authorization, hashAuthorization, hashMessage, Signature } from "ethers"; import { hashTypedData, hexToBytes, validateTypedData } from "viem"; import { log } from "../../../../base"; @@ -15,13 +15,70 @@ import { validateTypedSignMessageDataV4, } from "../../../ethereum-provider"; +/** + * Signs EIP-7702 authorization entries from the transaction params using the MPC sign function. + * Extracts authorizationList from txParams, computes keccak256(0x05 || rlp([chainId, address, nonce])) + * for each unsigned authorization and signs the hash. + * Returns updated txParams with signed ethers-compatible Authorization objects ready for Transaction.from(). + */ +async function signAuthorizationList( + txParams: TransactionParams & { gas?: string }, + sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }> +): Promise { + const { authorizationList, nonce } = txParams; + if (!nonce) { + throw rpcErrors.invalidRequest({ + message: "Nonce is required", + }); + } + + if (!authorizationList || authorizationList.length === 0) { + return txParams; + } + + const authorizationSignatures = await Promise.all( + authorizationList.map((authorization: Authorization) => { + const authorizationNonce = authorization.nonce ? Number(authorization.nonce) : nonce + 1; + + // EIP-7702 authorization hash: keccak256(0x05 || rlp([chainId, address, nonce])) + const authorizationHash = hashAuthorization({ + ...authorization, + nonce: BigInt(authorizationNonce ?? 0), + address: addHexPrefix(authorization.address), + chainId: BigInt(authorization.chainId), + }); + + return sign(Buffer.from(stripHexPrefix(authorizationHash), "hex")); + }) + ); + + const signedAuthorizations = authorizationSignatures.map((signature, index) => { + const { v, r, s } = signature; + const yParity: 0 | 1 = v - 27 === 0 ? 1 : 0; + return { + ...authorizationList[index], + signature: Signature.from({ + yParity, + r: `0x${r.toString("hex")}`, + s: `0x${s.toString("hex")}`, + }), + }; + }); + + return { ...txParams, authorizationList: signedAuthorizations }; +} + async function signTx( txParams: TransactionParams & { gas?: string }, sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }>, txFormatter: TransactionFormatter ): Promise { const { Transaction } = await import("ethers"); - const finalTxParams = await txFormatter.formatTransaction(txParams); + const formattedTxParams = await txFormatter.formatTransaction(txParams); + + // Sign EIP-7702 authorization list if present + const finalTxParams = await signAuthorizationList(formattedTxParams, sign); + const ethTx = Transaction.from({ ...finalTxParams, from: undefined, // from is already calculated inside Transaction.from and is not allowed to be passed in diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts new file mode 100644 index 000000000..ba4cfd235 --- /dev/null +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts @@ -0,0 +1,139 @@ +import { zeroAddress } from "@ethereumjs/util"; +import { + EIP_7702_METHODS, + type Eip7702Params, + type Eip7702WalletGetUpgradeStatusResponse, + getDelegationAddress, + type GetEthCodeFn, + getIsEip7702UpgradeSupported, + MetaMask_EIP7702_Stateless_Delegator, +} from "@toruslabs/ethereum-controllers"; +import { + createAsyncMiddleware, + createScaffoldMiddleware, + JRPCMiddleware, + JRPCRequest, + JRPCResponse, + rpcErrors, + SafeEventEmitterProvider, +} from "@web3auth/auth"; +import { Signature } from "ethers"; + +import type { TransactionParams } from "./interfaces"; + +export interface IEip7702MiddlewareOptions { + getProviderEngineProxy: () => SafeEventEmitterProvider | null; + processTransaction?: (txParams: TransactionParams, req: JRPCRequest) => Promise; +} + +/** + * Creates a `getEthCode` function that uses the provider engine proxy to call `eth_getCode`. + * Implements the `GetEthCodeFn` type from `@toruslabs/ethereum-controllers`. + */ +export function createGetEthCode(getProviderEngineProxy: () => SafeEventEmitterProvider | null): GetEthCodeFn { + return async (address: `0x${string}`, _chainId: `0x${string}`): Promise<`0x${string}`> => { + const provider = getProviderEngineProxy(); + if (!provider) { + throw rpcErrors.internal({ message: "Provider is not initialized" }); + } + const code = await provider.request<[string, string], string>({ + method: "eth_getCode", + params: [address, "latest"], + }); + return (code || "0x") as `0x${string}`; + }; +} + +/** + * Creates EIP-7702 middleware that handles: + * - `wallet_getAccountUpgradeStatus`: Checks if an account supports EIP-7702 upgrade and its delegation status. + * - `wallet_upgradeAccount`: Upgrades an EOA by sending a setCode (type 4) transaction with an authorization list. + * + * Uses utilities from `@toruslabs/ethereum-controllers` for delegation address detection and upgrade support checks. + */ +export function createEip7702Middleware({ getProviderEngineProxy, processTransaction }: IEip7702MiddlewareOptions): JRPCMiddleware { + const getEthCode = createGetEthCode(getProviderEngineProxy); + + async function getAccountUpgradeStatus(req: JRPCRequest, res: JRPCResponse): Promise { + const params = req.params?.[0]; + if (!params) { + throw rpcErrors.invalidParams({ message: "Missing params for wallet_getAccountUpgradeStatus" }); + } + + const { account, chainId } = params; + if (!account || !chainId) { + throw rpcErrors.invalidParams({ message: "Missing account or chainId" }); + } + + const result = await getIsEip7702UpgradeSupported(account, chainId, getEthCode); + + const delegationAddress = await getDelegationAddress(account, chainId, getEthCode); + + const response: Eip7702WalletGetUpgradeStatusResponse = { + isUpgraded: delegationAddress !== null, + implementation: delegationAddress || ("0x" as `0x${string}`), + }; + + res.result = { + ...result, + ...response, + }; + } + + async function upgradeAccount(req: JRPCRequest, res: JRPCResponse): Promise { + if (!processTransaction) { + throw rpcErrors.methodNotSupported(); + } + + const params = req.params?.[0]; + if (!params) { + throw rpcErrors.invalidParams({ message: "Missing params for wallet_upgradeAccount" }); + } + + const { account, chainId, implementation } = params; + if (!account || !chainId) { + throw rpcErrors.invalidParams({ message: "Missing account or chainId" }); + } + + // Use provided implementation or default to MetaMask EIP-7702 Stateless Delegator + const delegationTarget = implementation || MetaMask_EIP7702_Stateless_Delegator; + + // Check current delegation status + const delegationAddress = await getDelegationAddress(account, chainId, getEthCode); + if (delegationAddress && delegationAddress.toLowerCase() === delegationTarget.toLowerCase()) { + // Already delegated to the target + res.result = null; + return; + } + + const dummyAuthorizationSignature = Signature.from({ + r: zeroAddress(), + s: zeroAddress(), + yParity: 0, + }); + + // Build the setCode (type 4) transaction with authorization list + const txParams: TransactionParams = { + from: account, + to: account, // setCode transactions target the sender + data: "0x", + value: "0x0", + type: 4, + authorizationList: [ + { + address: delegationTarget, + chainId: BigInt(chainId), + nonce: BigInt(0), // Will be filled by the signing process + signature: dummyAuthorizationSignature, + }, + ], + }; + + res.result = await processTransaction(txParams, req); + } + + return createScaffoldMiddleware({ + [EIP_7702_METHODS.WALLET_GET_ACCOUNT_UPGRADE_STATUS]: createAsyncMiddleware(getAccountUpgradeStatus) as JRPCMiddleware, + [EIP_7702_METHODS.WALLET_UPGRADE_ACCOUNT]: createAsyncMiddleware(upgradeAccount) as JRPCMiddleware, + }); +} From f12c82e614ee604f50a29347b9e50616ca5e45cb Mon Sep 17 00:00:00 2001 From: lwin Date: Tue, 17 Feb 2026 20:13:51 +0800 Subject: [PATCH 02/13] fix: fixed some types errors --- .../providers/base-provider/baseProvider.ts | 26 ++++++++++++++----- .../signingProviders/signingUtils.ts | 6 ++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/no-modal/src/providers/base-provider/baseProvider.ts b/packages/no-modal/src/providers/base-provider/baseProvider.ts index 2f6c61524..805e33a9a 100644 --- a/packages/no-modal/src/providers/base-provider/baseProvider.ts +++ b/packages/no-modal/src/providers/base-provider/baseProvider.ts @@ -1,5 +1,5 @@ import { BaseConfig, BaseController, BaseState, createEventEmitterProxy } from "@toruslabs/base-controllers"; -import { JRPCRequest, JRPCResponse, ProviderEvents, rpcErrors, SendCallBack } from "@web3auth/auth"; +import { JRPCRequest, JRPCResponse, providerErrors, ProviderEvents, rpcErrors, SendCallBack } from "@web3auth/auth"; import { CustomChainConfig, @@ -54,10 +54,17 @@ export abstract class BaseProvider chain.chainId === this.state.chainId); + const currentChain = this.config.chains.find((chain) => chain.chainId === this.state.chainId); + if (!currentChain) { + throw providerErrors.custom({ message: "Chain not found", code: 4902 }); + } + return currentChain; } - get provider(): SafeEventEmitterProvider | null { + get provider(): SafeEventEmitterProvider { + if (!this._providerEngineProxy) { + throw providerErrors.custom({ message: "Provider is not initialized", code: 4902 }); + } return this._providerEngineProxy; } @@ -101,7 +108,7 @@ export abstract class BaseProvider(req: JRPCRequest, callback?: SendCallBack>): void | Promise> { if (callback) return this.send(req, callback); - return this.request(req); + return this.request(req) as Promise>; } send(req: JRPCRequest, callback: SendCallBack>): void { @@ -158,12 +165,19 @@ export abstract class BaseProvider chain.chainId === chainId); + const chain = this.config.chains.find((chain) => chain.chainId === chainId); + if (!chain) { + throw providerErrors.custom({ message: "Chain not found", code: 4902 }); + } + return chain; } abstract setupProvider(provider: P, chainId: string): Promise; diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts index a11cb6756..e4404f303 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts @@ -130,7 +130,7 @@ async function personalSign(sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise< return serialized; } -function validateVersion(version: string, allowedVersions: string[]) { +function validateVersion(version: string, allowedVersions?: string[]) { if (!Object.keys(SignTypedDataVersion).includes(version)) { throw new Error(`Invalid version: '${version}'`); } else if (allowedVersions && !allowedVersions.includes(version)) { @@ -198,7 +198,7 @@ export function getProviderHandlers({ method: "eth_sendRawTransaction", params: [serializedTxn], }); - return txHash; + return txHash as string; }, processSignTransaction: async (txParams: TransactionParams & { gas?: string }, _: JRPCRequest): Promise => { const providerEngineProxy = getProviderEngineProxy(); @@ -227,7 +227,7 @@ export function getProviderHandlers({ code: 4902, }); const chainId = await providerEngineProxy.request({ method: "eth_chainId" }); - await validateTypedSignMessageDataV4(msgParams, chainId); + await validateTypedSignMessageDataV4(msgParams, chainId as string); const data = typeof msgParams.data === "string" ? JSON.parse(msgParams.data) : msgParams.data; const sig = signTypedData(sign, data, SignTypedDataVersion.V4); return sig; From 7054cf4c0a57b262a58401f8e385f88a540bdb55 Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 18 Feb 2026 14:43:33 +0800 Subject: [PATCH 03/13] fix: fixed misc bugs --- .../providers/signingProviders/signingUtils.ts | 16 +++++++++------- .../TransactionFormatter/constants.ts | 1 + .../TransactionFormatter/formatter.ts | 10 +++++++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts index e4404f303..0c42ecca9 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts @@ -26,19 +26,20 @@ async function signAuthorizationList( sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }> ): Promise { const { authorizationList, nonce } = txParams; - if (!nonce) { - throw rpcErrors.invalidRequest({ - message: "Nonce is required", - }); - } if (!authorizationList || authorizationList.length === 0) { return txParams; } + if (nonce === null || nonce === undefined) { + throw rpcErrors.invalidRequest({ + message: "Nonce is required", + }); + } + const authorizationSignatures = await Promise.all( authorizationList.map((authorization: Authorization) => { - const authorizationNonce = authorization.nonce ? Number(authorization.nonce) : nonce + 1; + const authorizationNonce = authorization.nonce ?? Number(nonce) + 1; // EIP-7702 authorization hash: keccak256(0x05 || rlp([chainId, address, nonce])) const authorizationHash = hashAuthorization({ @@ -54,7 +55,8 @@ async function signAuthorizationList( const signedAuthorizations = authorizationSignatures.map((signature, index) => { const { v, r, s } = signature; - const yParity: 0 | 1 = v - 27 === 0 ? 1 : 0; + // mpc-core-kit workaround: v may be 0/1 or 27/28, normalize to 0/1 + const yParity: 0 | 1 = (v > 1 ? v - 27 : v) as 0 | 1; return { ...authorizationList[index], signature: Signature.from({ diff --git a/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.ts b/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.ts index cb738550e..006fa738d 100644 --- a/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.ts +++ b/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.ts @@ -6,6 +6,7 @@ export const TRANSACTION_ENVELOPE_TYPES: Record = { LEGACY: "0x0", ACCESS_LIST: "0x1", FEE_MARKET: "0x2", + SET_CODE: "0x4", }; export const TRANSACTION_TYPES = { diff --git a/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts b/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts index 031a42975..dc674bb50 100644 --- a/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts +++ b/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts @@ -142,7 +142,15 @@ export class TransactionFormatter { clonedTxParams.gasPrice = defaultGasPrice as never; } - clonedTxParams.type = Number.parseInt(this.isEIP1559Compatible ? TRANSACTION_ENVELOPE_TYPES.FEE_MARKET : TRANSACTION_ENVELOPE_TYPES.LEGACY, 16); + // Preserve EIP-7702 (type 4) if explicitly set by the caller; + // EIP-7702 uses the same gas model as EIP-1559 so the fields above are already correct. + const isEip7702 = + clonedTxParams.type === Number.parseInt(TRANSACTION_ENVELOPE_TYPES.SET_CODE, 16) && + clonedTxParams.authorizationList && + clonedTxParams.authorizationList.length > 0; + if (!isEip7702) { + clonedTxParams.type = Number.parseInt(this.isEIP1559Compatible ? TRANSACTION_ENVELOPE_TYPES.FEE_MARKET : TRANSACTION_ENVELOPE_TYPES.LEGACY, 16); + } clonedTxParams.chainId = this.chainConfig.chainId as PrefixedHexString; return clonedTxParams; } From c947345ad3053d1ce7860fc040298069dc40805c Mon Sep 17 00:00:00 2001 From: lwin Date: Wed, 18 Feb 2026 15:42:27 +0800 Subject: [PATCH 04/13] fix: fixed Authorization Signing --- .../signingProviders/signingUtils.ts | 44 +++++++++---------- .../rpc/eip7702Middleware.ts | 10 +++-- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts index 0c42ecca9..424710e4c 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts @@ -37,37 +37,37 @@ async function signAuthorizationList( }); } - const authorizationSignatures = await Promise.all( - authorizationList.map((authorization: Authorization) => { - const authorizationNonce = authorization.nonce ?? Number(nonce) + 1; - - // EIP-7702 authorization hash: keccak256(0x05 || rlp([chainId, address, nonce])) - const authorizationHash = hashAuthorization({ - ...authorization, - nonce: BigInt(authorizationNonce ?? 0), - address: addHexPrefix(authorization.address), - chainId: BigInt(authorization.chainId), - }); - - return sign(Buffer.from(stripHexPrefix(authorizationHash), "hex")); - }) - ); + const signedAuthorizationLists: Authorization[] = []; + + for (const authorization of authorizationList) { + const authorizationNonce = authorization.nonce ?? BigInt(Number(nonce) + 1); + const address = addHexPrefix(authorization.address); + const chainId = authorization.chainId; + + // EIP-7702 authorization hash: keccak256(0x05 || rlp([chainId, address, nonce])) + const authorizationHash = hashAuthorization({ + nonce: authorizationNonce, + address, + chainId, + }); - const signedAuthorizations = authorizationSignatures.map((signature, index) => { - const { v, r, s } = signature; + const { v, r, s } = await sign(Buffer.from(stripHexPrefix(authorizationHash), "hex")); // mpc-core-kit workaround: v may be 0/1 or 27/28, normalize to 0/1 const yParity: 0 | 1 = (v > 1 ? v - 27 : v) as 0 | 1; - return { - ...authorizationList[index], + + signedAuthorizationLists.push({ + address, + chainId, + nonce: authorizationNonce, signature: Signature.from({ yParity, r: `0x${r.toString("hex")}`, s: `0x${s.toString("hex")}`, }), - }; - }); + }); + } - return { ...txParams, authorizationList: signedAuthorizations }; + return { ...txParams, authorizationList: signedAuthorizationLists }; } async function signTx( diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts index ba4cfd235..6e40d197a 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts @@ -17,7 +17,7 @@ import { rpcErrors, SafeEventEmitterProvider, } from "@web3auth/auth"; -import { Signature } from "ethers"; +import { type Authorization, Signature } from "ethers"; import type { TransactionParams } from "./interfaces"; @@ -112,7 +112,10 @@ export function createEip7702Middleware({ getProviderEngineProxy, processTransac yParity: 0, }); - // Build the setCode (type 4) transaction with authorization list + // Build the setCode (type 4) transaction with authorization list. + // nonce is intentionally omitted so that signAuthorizationList's + // nullish-coalescing fallback (authorization.nonce ?? Number(nonce) + 1) computes + // the correct authorization nonce from the transaction nonce. const txParams: TransactionParams = { from: account, to: account, // setCode transactions target the sender @@ -123,9 +126,8 @@ export function createEip7702Middleware({ getProviderEngineProxy, processTransac { address: delegationTarget, chainId: BigInt(chainId), - nonce: BigInt(0), // Will be filled by the signing process signature: dummyAuthorizationSignature, - }, + } as Authorization, ], }; From f92091bec4edc449e7aa0aa2047ff5053f625671 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 19 Feb 2026 08:56:20 +0800 Subject: [PATCH 05/13] feat: EIP5792 middlewares --- .../EthereumSigningProvider.ts | 10 +- .../rpc/eip5792Middleware.ts | 132 ++++++++++++++++++ .../rpc/eip7702Middleware.ts | 20 +-- .../rpc/ethRpcMiddlewares.ts | 20 +++ .../providers/ethereum-provider/rpc/index.ts | 1 + 5 files changed, 163 insertions(+), 20 deletions(-) create mode 100644 packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts index ff37f5101..9d543bcce 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts @@ -4,6 +4,7 @@ import { JRPCEngine, JRPCMiddleware, providerErrors, providerFromEngine, rpcErro import { AddEthereumChainConfig, CHAIN_NAMESPACES, CustomChainConfig, WalletInitializationError } from "../../../../base"; import { BaseProvider, BaseProviderConfig, BaseProviderState } from "../../../../providers/base-provider"; import { + createEip5792Middleware, createEthChainSwitchMiddleware, createEthJsonRpcClient, createEthMiddleware, @@ -65,10 +66,12 @@ export class EthereumSigningProvider extends BaseProvider< }; public async enable(): Promise { + if (!this._providerEngineProxy) throw providerErrors.custom({ message: "Provider is not initialized", code: 4902 }); if (!this.state.signMethods) throw providerErrors.custom({ message: "signMethods are not found in state, plz pass it in constructor state param", code: 4902 }); await this.setupProvider(this.state.signMethods, this.chainId); - return this._providerEngineProxy.request({ method: "eth_accounts" }); + const accounts = await this._providerEngineProxy.request({ method: "eth_accounts" }); + return accounts as string[]; } public async setupProvider( @@ -97,12 +100,17 @@ export class EthereumSigningProvider extends BaseProvider< getProviderEngineProxy: this.getProviderEngineProxy.bind(this), processTransaction: providerHandlers.processTransaction, }); + const eip5792Middleware = createEip5792Middleware({ + getProviderEngineProxy: this.getProviderEngineProxy.bind(this), + processTransaction: providerHandlers.processTransaction, + }); const chainSwitchMiddleware = this.getChainSwitchMiddleware(); const engine = new JRPCEngine(); // Not a partial anymore because of checks in ctor const { networkMiddleware } = createEthJsonRpcClient(chain); engine.push(ethMiddleware); engine.push(eip7702Middleware); + engine.push(eip5792Middleware); engine.push(chainSwitchMiddleware); engine.push(this.getAccountMiddleware()); engine.push(networkMiddleware); diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts new file mode 100644 index 000000000..64524b026 --- /dev/null +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts @@ -0,0 +1,132 @@ +import { + EIP_5792_METHODS, + type Eip5792GetCallsStatusParams, + type Eip5792GetCallsStatusResponse, + type Eip5792GetCapabilitiesParams, + type Eip5792GetCapabilitiesResponse, + type Eip5792SendCallsParams, + type Eip5792ShowCallsStatusParams, + EthereumTransactionMeta, + type GetEthCodeFn, + walletGetCallsStatus, + walletGetCapabilities, + type WalletGetCapabilitiesContext, + walletSendCalls, + type WalletSendCallsContext, +} from "@toruslabs/ethereum-controllers"; +import { + createAsyncMiddleware, + createScaffoldMiddleware, + JRPCMiddleware, + JRPCRequest, + JRPCResponse, + rpcErrors, + SafeEventEmitterProvider, +} from "@web3auth/auth"; +import { Signature } from "ethers"; + +import { createGetEthCode } from "./ethRpcMiddlewares"; +import { TransactionParams } from "./interfaces"; + +export interface IEip5792MiddlewareOptions { + getProviderEngineProxy: () => SafeEventEmitterProvider | null; + processTransaction?: (txParams: TransactionParams, req: JRPCRequest) => Promise; + processTransactionBatch?: WalletSendCallsContext["processTransactionBatch"]; + getTransactionByBatchId?: (batchId: string) => EthereumTransactionMeta; + eip5792Config?: { + getSupportedChains: () => `0x${string}`[]; + getCachedDelegations?: () => Record; + updateDelegationCache?: (walletAddress: `0x${string}`, chainId: `0x${string}`, delegation: `0x${string}` | null) => void; + }; +} + +/** + * Creates EIP-5792 middleware that handles: + * - `wallet_sendCalls`: Sends a batch of calls (EIP-5792). + * - `wallet_getCallsStatus`: Returns the status of a batch of calls. + * - `wallet_showCallsStatus`: Shows the status of a batch of calls (no-op, returns null). + * - `wallet_getCapabilities`: Returns capabilities per chain for the wallet. + * + * Uses handler functions from `@toruslabs/ethereum-controllers` for validation, batch processing, + * status tracking, and capability reporting. + */ +export function createEip5792Middleware({ + getProviderEngineProxy, + processTransaction: processTransactionHandler, + processTransactionBatch, + getTransactionByBatchId, + eip5792Config, +}: IEip5792MiddlewareOptions): JRPCMiddleware { + const getEthCode: GetEthCodeFn = createGetEthCode(getProviderEngineProxy); + + // --- wallet_sendCalls --- + async function sendCalls(req: JRPCRequest, res: JRPCResponse): Promise { + if (!processTransactionHandler) { + throw rpcErrors.methodNotSupported(); + } + if (!processTransactionBatch) { + throw rpcErrors.methodNotSupported(); + } + + const context: WalletSendCallsContext = { + processTransaction: (txParams, req) => { + const formattedTxParams: TransactionParams = { + ...txParams, + type: txParams.type != null ? Number(txParams.type) : undefined, + nonce: txParams.nonce != null ? Number(txParams.nonce) : undefined, + authorizationList: txParams.authorizationList?.map(({ address, chainId, nonce, r, s, yParity }) => ({ + address, + chainId: BigInt(chainId), + nonce: nonce != null ? BigInt(nonce) : BigInt(0), + signature: Signature.from({ r: r ?? "0x0", s: s ?? "0x0", yParity: (yParity ? Number(yParity) : 0) as 0 | 1 }), + })), + }; + return processTransactionHandler(formattedTxParams, req); + }, + processTransactionBatch, + }; + + const result = await walletSendCalls(req, getEthCode, context); + res.result = result; + } + + // --- wallet_getCallsStatus --- + async function getCallsStatus(req: JRPCRequest<[Eip5792GetCallsStatusParams]>, res: JRPCResponse): Promise { + if (!getTransactionByBatchId) { + throw rpcErrors.methodNotSupported(); + } + + const result = walletGetCallsStatus(req, getTransactionByBatchId); + res.result = result; + } + + // --- wallet_showCallsStatus --- + async function showCallsStatus(_req: JRPCRequest<[Eip5792ShowCallsStatusParams]>, res: JRPCResponse): Promise { + // wallet_showCallsStatus is a display-only method that asks the wallet to show + // the status of a batch to the user. In an embedded/no-modal context, this is a no-op. + res.result = null; + } + + // --- wallet_getCapabilities --- + async function getCapabilities(req: JRPCRequest, res: JRPCResponse): Promise { + if (!eip5792Config) { + throw rpcErrors.methodNotSupported(); + } + + const context: WalletGetCapabilitiesContext = { + getSupportedChains: eip5792Config.getSupportedChains, + getCachedDelegations: eip5792Config.getCachedDelegations, + updateDelegationCache: eip5792Config.updateDelegationCache, + }; + + const result = await walletGetCapabilities(req, getEthCode, context); + res.result = result; + } + + return createScaffoldMiddleware({ + [EIP_5792_METHODS.WALLET_SEND_CALLS]: createAsyncMiddleware(sendCalls) as JRPCMiddleware, + [EIP_5792_METHODS.WALLET_GET_CALLS_STATUS]: createAsyncMiddleware(getCallsStatus) as JRPCMiddleware, + [EIP_5792_METHODS.WALLET_SHOW_CALLS_STATUS]: createAsyncMiddleware(showCallsStatus) as JRPCMiddleware, + [EIP_5792_METHODS.WALLET_GET_CAPABILITIES]: createAsyncMiddleware(getCapabilities) as JRPCMiddleware, + }); +} diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts index 6e40d197a..3c441fd8a 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts @@ -4,7 +4,6 @@ import { type Eip7702Params, type Eip7702WalletGetUpgradeStatusResponse, getDelegationAddress, - type GetEthCodeFn, getIsEip7702UpgradeSupported, MetaMask_EIP7702_Stateless_Delegator, } from "@toruslabs/ethereum-controllers"; @@ -19,6 +18,7 @@ import { } from "@web3auth/auth"; import { type Authorization, Signature } from "ethers"; +import { createGetEthCode } from "./ethRpcMiddlewares"; import type { TransactionParams } from "./interfaces"; export interface IEip7702MiddlewareOptions { @@ -26,24 +26,6 @@ export interface IEip7702MiddlewareOptions { processTransaction?: (txParams: TransactionParams, req: JRPCRequest) => Promise; } -/** - * Creates a `getEthCode` function that uses the provider engine proxy to call `eth_getCode`. - * Implements the `GetEthCodeFn` type from `@toruslabs/ethereum-controllers`. - */ -export function createGetEthCode(getProviderEngineProxy: () => SafeEventEmitterProvider | null): GetEthCodeFn { - return async (address: `0x${string}`, _chainId: `0x${string}`): Promise<`0x${string}`> => { - const provider = getProviderEngineProxy(); - if (!provider) { - throw rpcErrors.internal({ message: "Provider is not initialized" }); - } - const code = await provider.request<[string, string], string>({ - method: "eth_getCode", - params: [address, "latest"], - }); - return (code || "0x") as `0x${string}`; - }; -} - /** * Creates EIP-7702 middleware that handles: * - `wallet_getAccountUpgradeStatus`: Checks if an account supports EIP-7702 upgrade and its delegation status. diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/ethRpcMiddlewares.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/ethRpcMiddlewares.ts index 9f261d5c7..223199275 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/ethRpcMiddlewares.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/ethRpcMiddlewares.ts @@ -1,3 +1,4 @@ +import { type GetEthCodeFn } from "@toruslabs/ethereum-controllers"; import { createAsyncMiddleware, createScaffoldMiddleware, @@ -6,12 +7,31 @@ import { JRPCResponse, mergeMiddleware, rpcErrors, + SafeEventEmitterProvider, } from "@web3auth/auth"; import { AddEthereumChainConfig } from "../../../base"; import { IEthChainSwitchHandlers, IEthProviderHandlers } from "./interfaces"; import { createWalletMiddleware } from "./walletMidddleware"; +/** + * Creates a `getEthCode` function that uses the provider engine proxy to call `eth_getCode`. + * Implements the `GetEthCodeFn` type from `@toruslabs/ethereum-controllers`. + */ +export function createGetEthCode(getProviderEngineProxy: () => SafeEventEmitterProvider | null): GetEthCodeFn { + return async (address: `0x${string}`, _chainId: `0x${string}`): Promise<`0x${string}`> => { + const provider = getProviderEngineProxy(); + if (!provider) { + throw rpcErrors.internal({ message: "Provider is not initialized" }); + } + const code = await provider.request<[string, string], string>({ + method: "eth_getCode", + params: [address, "latest"], + }); + return (code || "0x") as `0x${string}`; + }; +} + export function createEthMiddleware(providerHandlers: IEthProviderHandlers): JRPCMiddleware { const { getAccounts, diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts index 2cab83eec..9bfeec4bb 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts @@ -1,3 +1,4 @@ +export * from "./eip5792Middleware"; export * from "./ethRpcMiddlewares"; export * from "./interfaces"; export * from "./jrpcClient"; From bcd4451eb9bf594b7628ae8f94c387fd464a58a7 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 19 Feb 2026 11:13:06 +0800 Subject: [PATCH 06/13] chore: refactoring --- .../TransactionFormatter/formatter.ts | 29 ++++++++++++++++++- .../rpc/eip5792Middleware.ts | 15 ++-------- .../rpc/eip7702Middleware.ts | 14 ++++----- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts b/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts index dc674bb50..976273df9 100644 --- a/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts +++ b/packages/no-modal/src/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.ts @@ -1,7 +1,8 @@ import { addHexPrefix, PrefixedHexString, stripHexPrefix } from "@ethereumjs/util"; +import { DUMMY_AUTHORIZATION_SIGNATURE, TransactionParams as ControllerTransactionParams } from "@toruslabs/ethereum-controllers"; import { Block } from "@web3auth/auth"; import { BigNumber } from "bignumber.js"; -import { AddressLike } from "ethers"; +import { AddressLike, Signature } from "ethers"; import { CustomChainConfig, log, SafeEventEmitterProvider } from "../../../../../base"; import { TransactionParams } from "../../../rpc/interfaces"; @@ -29,6 +30,32 @@ export class TransactionFormatter { return this.getProviderEngineProxy(); } + /** + * Converts transaction params from the `@toruslabs/ethereum-controllers` format + * to the local ethers-based `TransactionParams` format. + * + * Handles converting string-typed fields (`type`, `nonce`) to numbers and + * re-mapping the authorization list from separate `r`/`s`/`yParity` hex fields + * to ethers `Signature` objects. + */ + static formatControllerTransactionParams(txParams: ControllerTransactionParams): TransactionParams { + return { + ...txParams, + type: txParams.type != null ? Number(txParams.type) : undefined, + nonce: txParams.nonce != null ? Number(txParams.nonce) : undefined, + authorizationList: txParams.authorizationList?.map(({ address, chainId, nonce, r, s, yParity }) => ({ + address, + chainId: BigInt(chainId), + nonce: nonce != null ? BigInt(nonce) : BigInt(0), + signature: Signature.from({ + r: r ?? DUMMY_AUTHORIZATION_SIGNATURE, + s: s ?? DUMMY_AUTHORIZATION_SIGNATURE, + yParity: (yParity ? Number(yParity) : 0) as 0 | 1, + }), + })), + }; + } + async init(): Promise { this.chainConfig = (await this.providerProxy.request({ method: "eth_provider_config" })) as CustomChainConfig; this.isEIP1559Compatible = await this.getEIP1559Compatibility(); diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts index 64524b026..51a5ecee0 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip5792Middleware.ts @@ -23,8 +23,8 @@ import { rpcErrors, SafeEventEmitterProvider, } from "@web3auth/auth"; -import { Signature } from "ethers"; +import { TransactionFormatter } from "../providers/privateKeyProviders/TransactionFormatter/formatter"; import { createGetEthCode } from "./ethRpcMiddlewares"; import { TransactionParams } from "./interfaces"; @@ -70,18 +70,7 @@ export function createEip5792Middleware({ const context: WalletSendCallsContext = { processTransaction: (txParams, req) => { - const formattedTxParams: TransactionParams = { - ...txParams, - type: txParams.type != null ? Number(txParams.type) : undefined, - nonce: txParams.nonce != null ? Number(txParams.nonce) : undefined, - authorizationList: txParams.authorizationList?.map(({ address, chainId, nonce, r, s, yParity }) => ({ - address, - chainId: BigInt(chainId), - nonce: nonce != null ? BigInt(nonce) : BigInt(0), - signature: Signature.from({ r: r ?? "0x0", s: s ?? "0x0", yParity: (yParity ? Number(yParity) : 0) as 0 | 1 }), - })), - }; - return processTransactionHandler(formattedTxParams, req); + return processTransactionHandler(TransactionFormatter.formatControllerTransactionParams(txParams), req); }, processTransactionBatch, }; diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts index 3c441fd8a..5559acee7 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts @@ -1,5 +1,5 @@ -import { zeroAddress } from "@ethereumjs/util"; import { + DUMMY_AUTHORIZATION_SIGNATURE, EIP_7702_METHODS, type Eip7702Params, type Eip7702WalletGetUpgradeStatusResponse, @@ -88,12 +88,6 @@ export function createEip7702Middleware({ getProviderEngineProxy, processTransac return; } - const dummyAuthorizationSignature = Signature.from({ - r: zeroAddress(), - s: zeroAddress(), - yParity: 0, - }); - // Build the setCode (type 4) transaction with authorization list. // nonce is intentionally omitted so that signAuthorizationList's // nullish-coalescing fallback (authorization.nonce ?? Number(nonce) + 1) computes @@ -108,7 +102,11 @@ export function createEip7702Middleware({ getProviderEngineProxy, processTransac { address: delegationTarget, chainId: BigInt(chainId), - signature: dummyAuthorizationSignature, + signature: Signature.from({ + r: DUMMY_AUTHORIZATION_SIGNATURE, + s: DUMMY_AUTHORIZATION_SIGNATURE, + yParity: 0, + }), } as Authorization, ], }; From 24969e01e76edb4bade6b1fb6d6bb123d608a37d Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 19 Feb 2026 12:32:47 +0800 Subject: [PATCH 07/13] fix: dedupe viem and fixed build --- package-lock.json | 1941 ++++++++++++++++++++------------------------- 1 file changed, 866 insertions(+), 1075 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c1ac581c..b38c95947 100644 --- a/package-lock.json +++ b/package-lock.json @@ -414,13 +414,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "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.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1807,9 +1807,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "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": { @@ -1903,17 +1903,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@base-org/account/node_modules/preact": { - "version": "10.24.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.2.tgz", - "integrity": "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, "node_modules/@base-org/account/node_modules/zustand": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz", @@ -2400,15 +2389,15 @@ } }, "node_modules/@ethereumjs/rlp": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-10.1.0.tgz", - "integrity": "sha512-r67BJbwilammAqYI4B5okA66cNdTlFzeWxPNJOolKV52ZS/flo0tUBf4x4gxWXBgh48OgsdFV1Qp5pRoSe8IhQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-10.1.1.tgz", + "integrity": "sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg==", "license": "MPL-2.0", "bin": { "rlp": "bin/rlp.cjs" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@ethereumjs/tx": { @@ -2525,16 +2514,44 @@ } }, "node_modules/@ethereumjs/util": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-10.1.0.tgz", - "integrity": "sha512-GGTCkRu1kWXbz2JoUnIYtJBOoA9T5akzsYa91Bh+DZQ3Cj4qXj3hkNU0Rx6wZlbcmkmhQfrjZfVt52eJO/y2nA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-10.1.1.tgz", + "integrity": "sha512-r2EhaeEmLZXVs1dT2HJFQysAkr63ZWATu/9tgYSp1IlvjvwyC++DLg5kCDwMM49HBq3sOAhrPnXkoqf9DV2gbw==", "license": "MPL-2.0", "dependencies": { - "@ethereumjs/rlp": "^10.1.0", - "ethereum-cryptography": "^3.2.0" + "@ethereumjs/rlp": "^10.1.1", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=20" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "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": "2.0.1" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "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": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@floating-ui/core": { @@ -2606,9 +2623,9 @@ } }, "node_modules/@gemini-wallet/core/node_modules/@metamask/utils": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.8.1.tgz", - "integrity": "sha512-DIbsNUyqWLFgqJlZxi1OOCMYvI23GqFCvNJAtzv8/WXWzJfnJnvp1M24j7VvUe3URBi3S86UgQ7+7aWU9p/cnQ==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.10.0.tgz", + "integrity": "sha512-+bWmTOANx1MbBW6RFM8Se4ZoigFYGXiuIrkhjj4XnG5Aez8uWaTSZ76yn9srKKClv+PoEVoAuVtcUOogFEMUNA==", "dev": true, "license": "ISC", "dependencies": { @@ -2629,9 +2646,9 @@ } }, "node_modules/@gemini-wallet/core/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3234,9 +3251,9 @@ } }, "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -3293,29 +3310,6 @@ "url": "https://github.com/sponsors/kazupon" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -3725,9 +3719,9 @@ "license": "MIT" }, "node_modules/@lerna/create/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "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": { @@ -4011,9 +4005,9 @@ } }, "node_modules/@metamask/abi-utils/node_modules/@metamask/utils": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.9.0.tgz", - "integrity": "sha512-wRnoSDD9jTWOge/+reFviJQANhS+uy8Y+OEwRanp5mQeGTjBFmK1r2cTOnei2UCZRV1crXHzeJVSFEoDDcgRbA==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.10.0.tgz", + "integrity": "sha512-+bWmTOANx1MbBW6RFM8Se4ZoigFYGXiuIrkhjj4XnG5Aez8uWaTSZ76yn9srKKClv+PoEVoAuVtcUOogFEMUNA==", "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.2.0", @@ -4033,9 +4027,9 @@ } }, "node_modules/@metamask/abi-utils/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4081,9 +4075,9 @@ } }, "node_modules/@metamask/delegation-core/node_modules/@metamask/utils": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.9.0.tgz", - "integrity": "sha512-wRnoSDD9jTWOge/+reFviJQANhS+uy8Y+OEwRanp5mQeGTjBFmK1r2cTOnei2UCZRV1crXHzeJVSFEoDDcgRbA==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.10.0.tgz", + "integrity": "sha512-+bWmTOANx1MbBW6RFM8Se4ZoigFYGXiuIrkhjj4XnG5Aez8uWaTSZ76yn9srKKClv+PoEVoAuVtcUOogFEMUNA==", "license": "ISC", "dependencies": { "@ethereumjs/tx": "^4.2.0", @@ -4103,9 +4097,9 @@ } }, "node_modules/@metamask/delegation-core/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4204,9 +4198,9 @@ } }, "node_modules/@metamask/eth-json-rpc-provider/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4390,9 +4384,9 @@ } }, "node_modules/@metamask/rpc-errors/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4589,9 +4583,9 @@ } }, "node_modules/@metamask/utils/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4783,9 +4777,9 @@ } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -4840,6 +4834,29 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@npmcli/arborist/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/arborist/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@npmcli/arborist/node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -4851,9 +4868,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -4861,13 +4878,13 @@ } }, "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -4900,9 +4917,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/pacote": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.4.tgz", - "integrity": "sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA==", + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.3.1.tgz", + "integrity": "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==", "dev": true, "license": "ISC", "dependencies": { @@ -4959,9 +4976,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/ssri": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", - "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4972,9 +4989,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -4985,9 +5002,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -5025,9 +5042,9 @@ } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5068,19 +5085,19 @@ } }, "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": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=20" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -5098,9 +5115,9 @@ } }, "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5111,13 +5128,13 @@ } }, "node_modules/@npmcli/git/node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", "dependencies": { - "isexe": "^3.1.1" + "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" @@ -5169,14 +5186,37 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@npmcli/map-workspaces/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.5.tgz", + "integrity": "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", + "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" }, @@ -5188,9 +5228,9 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -5198,13 +5238,13 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -5258,9 +5298,9 @@ } }, "node_modules/@npmcli/metavuln-calculator/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5309,6 +5349,39 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@npmcli/package-json/node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@npmcli/package-json/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@npmcli/package-json/node_modules/glob": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", @@ -5334,13 +5407,13 @@ } }, "node_modules/@npmcli/package-json/node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@isaacs/cliui": "^9.0.0" }, "engines": { "node": "20 || >=22" @@ -5350,9 +5423,9 @@ } }, "node_modules/@npmcli/package-json/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -5360,13 +5433,13 @@ } }, "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -5403,9 +5476,9 @@ } }, "node_modules/@npmcli/package-json/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5429,23 +5502,23 @@ } }, "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": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=20" } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", "dependencies": { - "isexe": "^3.1.1" + "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" @@ -5506,13 +5579,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/proc-log": { @@ -5587,9 +5660,9 @@ } }, "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5684,9 +5757,9 @@ ] }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.3.3.tgz", - "integrity": "sha512-04TEbvgwRaB9ifr39YwJmWh3RuXb4Ry4m84SOJyjNXAfPrepcWgfIQn1VL2ul1Ybq+P023dLO9ME8uqFh6j1YQ==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.5.1.tgz", + "integrity": "sha512-BZ/i+KTplEJmE8ZHKgPGD513Zl86DuSGyRAvbDZ7Qf19Tei7Of6vxW+ypvVDIwmDbyXfe13u54M5gDt8iiqFGQ==", "cpu": [ "x64" ], @@ -7565,9 +7638,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", "cpu": [ "x64" ], @@ -7917,9 +7990,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" }, @@ -9178,9 +9251,9 @@ } }, "node_modules/@solana/rpc-subscriptions/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "dev": true, "license": "MIT", "peer": true, @@ -10256,9 +10329,9 @@ "license": "MIT" }, "node_modules/@toruslabs/base-controllers": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-8.15.0.tgz", - "integrity": "sha512-GPuiBSZ1QjQzzLKQoOmlD1mRWlWHMxwdOe1dvX3owFReJljInikzq37ifLg6I9YSKNHFbZ4pxmK+weKBwAp08Q==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-8.17.0.tgz", + "integrity": "sha512-AQwl7VANyIwXSCXNnSg5Is8L4W4rMd6LprYthzp5C9DimzGTIqj+rvjvh1dhaM+fbBCHrln75vveiVuW6pRRNA==", "license": "ISC", "dependencies": { "@ethereumjs/util": "^10.1.0", @@ -10831,9 +10904,9 @@ } }, "node_modules/@toruslabs/vue-components/node_modules/tailwind-merge": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", - "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", + "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", "dev": true, "license": "MIT", "funding": { @@ -11129,9 +11202,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.10.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.0.tgz", - "integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==", + "version": "24.10.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.13.tgz", + "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -11152,12 +11225,11 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -11435,9 +11507,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -11810,42 +11882,55 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz", - "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.28.tgz", + "integrity": "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.25", - "entities": "^4.5.0", + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.28", + "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/@vue/compiler-dom": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", - "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz", + "integrity": "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.25", - "@vue/shared": "3.5.25" + "@vue/compiler-core": "3.5.28", + "@vue/shared": "3.5.28" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz", - "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz", + "integrity": "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.25", - "@vue/compiler-dom": "3.5.25", - "@vue/compiler-ssr": "3.5.25", - "@vue/shared": "3.5.25", + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.28", + "@vue/compiler-dom": "3.5.28", + "@vue/compiler-ssr": "3.5.28", + "@vue/shared": "3.5.28", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", @@ -11853,14 +11938,14 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz", - "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz", + "integrity": "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.25", - "@vue/shared": "3.5.25" + "@vue/compiler-dom": "3.5.28", + "@vue/shared": "3.5.28" } }, "node_modules/@vue/devtools-api": { @@ -11898,57 +11983,57 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz", - "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.28.tgz", + "integrity": "sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.5.25" + "@vue/shared": "3.5.28" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz", - "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.28.tgz", + "integrity": "sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.25", - "@vue/shared": "3.5.25" + "@vue/reactivity": "3.5.28", + "@vue/shared": "3.5.28" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz", - "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.28.tgz", + "integrity": "sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.25", - "@vue/runtime-core": "3.5.25", - "@vue/shared": "3.5.25", - "csstype": "^3.1.3" + "@vue/reactivity": "3.5.28", + "@vue/runtime-core": "3.5.28", + "@vue/shared": "3.5.28", + "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz", - "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.28.tgz", + "integrity": "sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.25", - "@vue/shared": "3.5.25" + "@vue/compiler-ssr": "3.5.28", + "@vue/shared": "3.5.28" }, "peerDependencies": { - "vue": "3.5.25" + "vue": "3.5.28" } }, "node_modules/@vue/shared": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", - "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.28.tgz", + "integrity": "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==", "dev": true, "license": "MIT" }, @@ -12112,17 +12197,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@wagmi/connectors/node_modules/preact": { - "version": "10.24.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.2.tgz", - "integrity": "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, "node_modules/@wagmi/connectors/node_modules/zustand": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz", @@ -12353,9 +12427,9 @@ } }, "node_modules/@walletconnect/core/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -13027,9 +13101,9 @@ } }, "node_modules/@walletconnect/sign-client/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -13164,9 +13238,9 @@ } }, "node_modules/@walletconnect/types/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -13707,9 +13781,9 @@ } }, "node_modules/@walletconnect/utils/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -14112,9 +14186,9 @@ } }, "node_modules/@xrplf/isomorphic/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -14405,9 +14479,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", "dependencies": { @@ -14891,9 +14965,9 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true, "license": "MIT" }, @@ -15050,9 +15124,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", - "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", "dev": true, "funding": [ { @@ -15069,12 +15143,10 @@ } ], "license": "MIT", - "peer": true, "dependencies": { - "browserslist": "^4.27.0", - "caniuse-lite": "^1.0.30001754", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001766", "fraction.js": "^5.3.4", - "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -15309,9 +15381,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.25", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz", - "integrity": "sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -15576,9 +15648,9 @@ "license": "MIT" }, "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "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/boolbase": { @@ -15778,9 +15850,9 @@ } }, "node_modules/browserslist": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -15798,11 +15870,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", - "update-browserslist-db": "^1.1.4" + "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" @@ -15980,14 +16052,37 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/cacache/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/cacache/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.5.tgz", + "integrity": "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", + "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" }, @@ -15999,9 +16094,9 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -16009,13 +16104,13 @@ } }, "node_modules/cacache/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -16055,9 +16150,9 @@ } }, "node_modules/cacache/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -16068,9 +16163,9 @@ } }, "node_modules/cacache/node_modules/ssri": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", - "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", "dev": true, "license": "ISC", "dependencies": { @@ -16210,9 +16305,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001757", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", - "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", "dev": true, "funding": [ { @@ -16737,9 +16832,9 @@ } }, "node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "license": "MIT", "engines": { "node": ">=20" @@ -17013,9 +17108,9 @@ } }, "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -17197,9 +17292,9 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true, "license": "MIT" }, @@ -17375,9 +17470,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -18092,9 +18187,9 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true, "license": "MIT" }, @@ -18209,9 +18304,9 @@ } }, "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "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": { @@ -18356,9 +18451,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.245", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.245.tgz", - "integrity": "sha512-rdmGfW47ZhL/oWEJAY4qxRtdly2B98ooTJ0pdEI4jhVLZ6tNf8fPtov2wS1IRKwFJT92le3x4Knxiwzl7cPPpQ==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true, "license": "ISC" }, @@ -18378,9 +18473,9 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/emoji-regex": { @@ -18427,6 +18522,29 @@ "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==", + "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==", + "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.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -18937,9 +19055,9 @@ } }, "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -19289,19 +19407,25 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.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" } @@ -19391,9 +19515,9 @@ } }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -19658,9 +19782,9 @@ } }, "node_modules/eth-block-tracker/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -20655,9 +20779,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -20929,9 +21053,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "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": { @@ -21320,9 +21444,9 @@ } }, "node_modules/git-semver-tags/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -21482,13 +21606,13 @@ } }, "node_modules/global-prefix/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/global-prefix/node_modules/which": { @@ -21878,9 +22002,9 @@ } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -21938,26 +22062,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": { @@ -22042,9 +22170,9 @@ } }, "node_modules/i18next": { - "version": "25.7.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.7.1.tgz", - "integrity": "sha512-XbTnkh1yCZWSAZGnA9xcQfHcYNgZs2cNxm+c6v1Ma9UAUGCeJPplRe1ILia6xnDvXBjk0uXU+Z8FYWhA19SKFw==", + "version": "25.8.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.11.tgz", + "integrity": "sha512-LZ32llTLGludnddjLoijHV7TbmVubU5eJnsWf8taiuM3jmSfUuvBLuyDeubJKS1yBjLBgb7As124M4KWNcBvpw==", "funding": [ { "type": "individual", @@ -22060,7 +22188,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -22159,14 +22286,37 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/ignore-walk/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -22370,9 +22520,9 @@ } }, "node_modules/init-package-json/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -22591,9 +22741,9 @@ } }, "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -23829,9 +23979,9 @@ } }, "node_modules/jsonc-eslint-parser/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "peer": true, @@ -24222,9 +24372,9 @@ "license": "MIT" }, "node_modules/lerna/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "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": { @@ -24479,9 +24629,9 @@ } }, "node_modules/libnpmpublish/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "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": [ { @@ -24495,9 +24645,9 @@ } }, "node_modules/libnpmpublish/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -24634,14 +24784,14 @@ } }, "node_modules/lint-staged/node_modules/string-width": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "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.3.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { "node": ">=20" @@ -25783,9 +25933,9 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true, "license": "MIT" }, @@ -25909,11 +26059,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" } @@ -26505,6 +26655,25 @@ "dev": true, "license": "MIT" }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -26619,13 +26788,13 @@ } }, "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/lru-cache": { @@ -26672,9 +26841,9 @@ } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -26685,9 +26854,9 @@ } }, "node_modules/node-gyp/node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -26832,9 +27001,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -26860,17 +27029,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -26911,9 +27069,9 @@ } }, "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -26950,9 +27108,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -27026,9 +27184,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -27323,9 +27481,9 @@ } }, "node_modules/nx/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -27973,6 +28131,57 @@ "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==", + "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==", + "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==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -28188,9 +28397,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/package-json/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -28299,13 +28508,13 @@ } }, "node_modules/pacote/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/pacote/node_modules/lru-cache": { @@ -28348,9 +28557,9 @@ } }, "node_modules/pacote/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -28361,9 +28570,9 @@ } }, "node_modules/pacote/node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -28978,9 +29187,9 @@ } }, "node_modules/porto/node_modules/ox": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.14.tgz", - "integrity": "sha512-lxZYCzGH00WtIPPrqXCrbSW/ZiKjigfII6R0Vu1eH2GpobmcwVheiivbCvsBZzmVZcNpwkabSamPP+ZNtdnKIQ==", + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.17.tgz", + "integrity": "sha512-rKAnhzhRU3Xh3hiko+i1ZxywZ55eWQzeS/Q4HRKLx2PqfHOolisZHErSsJVipGlmQKHW5qwOED/GighEw9dbLg==", "dev": true, "funding": [ { @@ -29009,9 +29218,9 @@ } }, "node_modules/porto/node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", "funding": { @@ -29019,9 +29228,9 @@ } }, "node_modules/porto/node_modules/zustand": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz", - "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.11.tgz", + "integrity": "sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==", "dev": true, "license": "MIT", "engines": { @@ -29356,9 +29565,9 @@ } }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -29827,9 +30036,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -30034,9 +30243,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.27.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", - "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "version": "10.24.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.2.tgz", + "integrity": "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==", "dev": true, "license": "MIT", "funding": { @@ -30112,9 +30321,9 @@ } }, "node_modules/pretty-format/node_modules/@sinclair/typebox": { - "version": "0.34.41", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", - "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", "dev": true, "license": "MIT" }, @@ -30320,9 +30529,9 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true, "license": "MIT" }, @@ -30732,9 +30941,9 @@ } }, "node_modules/react": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", "peer": true, "engines": { @@ -30742,16 +30951,16 @@ } }, "node_modules/react-dom": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", "peer": true, "dependencies": { - "scheduler": "^0.26.0" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.1.1" + "react": "^19.2.0" } }, "node_modules/react-i18next": { @@ -31356,9 +31565,9 @@ } }, "node_modules/release-it/node_modules/@octokit/endpoint": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.2.tgz", - "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", + "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": { @@ -31471,9 +31680,9 @@ } }, "node_modules/release-it/node_modules/@octokit/request": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.6.tgz", - "integrity": "sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ==", + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.7.tgz", + "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", "dev": true, "license": "MIT", "dependencies": { @@ -31488,9 +31697,9 @@ } }, "node_modules/release-it/node_modules/@octokit/request-error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.2.tgz", - "integrity": "sha512-U8piOROoQQUyExw5c6dTkU3GKxts5/ERRThIauNL7yaRoeXW0q/5bgHWT7JfWBw1UyrbK8ERId2wVkcB32n0uQ==", + "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": { @@ -31534,9 +31743,9 @@ "license": "Apache-2.0" }, "node_modules/release-it/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "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": [ { @@ -31550,9 +31759,9 @@ } }, "node_modules/release-it/node_modules/cli-spinners": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz", - "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==", + "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": { @@ -31733,14 +31942,14 @@ } }, "node_modules/release-it/node_modules/string-width": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "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.3.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { "node": ">=20" @@ -31985,13 +32194,13 @@ "license": "MIT" }, "node_modules/rimraf": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.2.tgz", - "integrity": "sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^13.0.0", + "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { @@ -32004,14 +32213,37 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/rimraf/node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.5.tgz", + "integrity": "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.1.1", + "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" }, @@ -32023,9 +32255,9 @@ } }, "node_modules/rimraf/node_modules/lru-cache": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "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": "BlueOak-1.0.0", "engines": { @@ -32033,13 +32265,13 @@ } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" @@ -32341,9 +32573,9 @@ } }, "node_modules/rpc-websockets/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -32536,15 +32768,14 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT", - "peer": true + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" }, "node_modules/schema-utils": { "version": "4.3.3", @@ -32567,9 +32798,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", "dependencies": { @@ -32657,16 +32888,20 @@ } }, "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "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": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/send/node_modules/on-finished": { @@ -34185,9 +34420,9 @@ } }, "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "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": { @@ -34729,9 +34964,9 @@ } }, "node_modules/tiny-secp256k1/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "license": "MIT" }, "node_modules/tinyexec": { @@ -35024,9 +35259,9 @@ } }, "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -35096,9 +35331,9 @@ } }, "node_modules/ts-patch/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -35865,9 +36100,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "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": [ { @@ -35921,9 +36156,9 @@ } }, "node_modules/update-notifier/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -36196,9 +36431,9 @@ } }, "node_modules/viem": { - "version": "2.44.2", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.44.2.tgz", - "integrity": "sha512-nHY872t/T3flLpVsnvQT/89bwbrJwxaL917FDv7Oxy4E5FWIFkokRQOKXG3P+hgl30QYVZxi9o2SUHLnebycxw==", + "version": "2.46.2", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.46.2.tgz", + "integrity": "sha512-w8Qv5Vyo7TfXcH3vgmxRa1NRvzJCDy2aSGSRsJn3503nC/qVbgEQ+n3aj/CkqWXbloudZh97h5o5aQrQSVGy0w==", "funding": [ { "type": "github", @@ -36213,7 +36448,7 @@ "@scure/bip39": "1.6.0", "abitype": "1.2.3", "isows": "1.0.7", - "ox": "0.11.3", + "ox": "0.12.4", "ws": "8.18.3" }, "peerDependencies": { @@ -36225,12 +36460,6 @@ } } }, - "node_modules/viem/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==", - "license": "MIT" - }, "node_modules/viem/node_modules/@noble/curves": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", @@ -36246,36 +36475,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/viem/node_modules/ox": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.11.3.tgz", - "integrity": "sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw==", - "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/viem/node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -36307,17 +36506,17 @@ } }, "node_modules/vue": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", - "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", + "version": "3.5.28", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.28.tgz", + "integrity": "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.25", - "@vue/compiler-sfc": "3.5.25", - "@vue/runtime-dom": "3.5.25", - "@vue/server-renderer": "3.5.25", - "@vue/shared": "3.5.25" + "@vue/compiler-dom": "3.5.28", + "@vue/compiler-sfc": "3.5.28", + "@vue/runtime-dom": "3.5.28", + "@vue/server-renderer": "3.5.28", + "@vue/shared": "3.5.28" }, "peerDependencies": { "typescript": "*" @@ -36380,9 +36579,9 @@ } }, "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -36489,9 +36688,9 @@ } }, "node_modules/wagmi/node_modules/@metamask/utils": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.8.1.tgz", - "integrity": "sha512-DIbsNUyqWLFgqJlZxi1OOCMYvI23GqFCvNJAtzv8/WXWzJfnJnvp1M24j7VvUe3URBi3S86UgQ7+7aWU9p/cnQ==", + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-11.10.0.tgz", + "integrity": "sha512-+bWmTOANx1MbBW6RFM8Se4ZoigFYGXiuIrkhjj4XnG5Aez8uWaTSZ76yn9srKKClv+PoEVoAuVtcUOogFEMUNA==", "dev": true, "license": "ISC", "dependencies": { @@ -36707,9 +36906,9 @@ } }, "node_modules/wagmi/node_modules/porto/node_modules/ox": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.14.tgz", - "integrity": "sha512-lxZYCzGH00WtIPPrqXCrbSW/ZiKjigfII6R0Vu1eH2GpobmcwVheiivbCvsBZzmVZcNpwkabSamPP+ZNtdnKIQ==", + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.9.17.tgz", + "integrity": "sha512-rKAnhzhRU3Xh3hiko+i1ZxywZ55eWQzeS/Q4HRKLx2PqfHOolisZHErSsJVipGlmQKHW5qwOED/GighEw9dbLg==", "dev": true, "funding": [ { @@ -36737,21 +36936,10 @@ } } }, - "node_modules/wagmi/node_modules/preact": { - "version": "10.24.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.2.tgz", - "integrity": "sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, "node_modules/wagmi/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -36786,9 +36974,9 @@ } }, "node_modules/wagmi/node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", "funding": { @@ -37037,9 +37225,9 @@ } }, "node_modules/webpack-cli/node_modules/envinfo": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.20.0.tgz", - "integrity": "sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, "license": "MIT", "bin": { @@ -37820,9 +38008,9 @@ } }, "node_modules/wsl-utils/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==", + "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": { @@ -37951,9 +38139,9 @@ } }, "node_modules/xrpl/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -37999,9 +38187,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", "bin": { @@ -38009,6 +38197,9 @@ }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yaml-eslint-parser": { @@ -38397,282 +38588,10 @@ } } }, - "packages/modal/node_modules/@types/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", - "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.2.2" - } - }, - "packages/modal/node_modules/@vue/compiler-core": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", - "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.26", - "entities": "^7.0.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "packages/modal/node_modules/@vue/compiler-dom": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", - "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.26", - "@vue/shared": "3.5.26" - } - }, - "packages/modal/node_modules/@vue/compiler-sfc": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", - "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.26", - "@vue/compiler-dom": "3.5.26", - "@vue/compiler-ssr": "3.5.26", - "@vue/shared": "3.5.26", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "packages/modal/node_modules/@vue/compiler-ssr": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", - "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.26", - "@vue/shared": "3.5.26" - } - }, - "packages/modal/node_modules/@vue/reactivity": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", - "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.26" - } - }, - "packages/modal/node_modules/@vue/runtime-core": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", - "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.26", - "@vue/shared": "3.5.26" - } - }, - "packages/modal/node_modules/@vue/runtime-dom": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", - "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.26", - "@vue/runtime-core": "3.5.26", - "@vue/shared": "3.5.26", - "csstype": "^3.2.3" - } - }, - "packages/modal/node_modules/@vue/server-renderer": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", - "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.26", - "@vue/shared": "3.5.26" - }, - "peerDependencies": { - "vue": "3.5.26" - } - }, - "packages/modal/node_modules/@vue/shared": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", - "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", - "dev": true, - "license": "MIT" - }, - "packages/modal/node_modules/autoprefixer": { - "version": "10.4.23", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", - "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001760", - "fraction.js": "^5.3.4", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "packages/modal/node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "packages/modal/node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "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" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "packages/modal/node_modules/caniuse-lite": { - "version": "1.0.30001764", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", - "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "packages/modal/node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "dev": true, - "license": "ISC" - }, - "packages/modal/node_modules/entities": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", - "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "packages/modal/node_modules/i18next": { - "version": "25.7.4", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.7.4.tgz", - "integrity": "sha512-hRkpEblXXcXSNbw8mBNq9042OEetgyB/ahc/X17uV/khPwzV+uB8RHceHh3qavyrkPJvmXFKXME2Sy1E0KjAfw==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.28.4" - }, - "peerDependencies": { - "typescript": "^5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "packages/modal/node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "dev": true, "license": "MIT", "engines": { @@ -38680,76 +38599,16 @@ } }, "packages/modal/node_modules/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "dev": true, "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.3" - } - }, - "packages/modal/node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "dev": true, - "license": "MIT" - }, - "packages/modal/node_modules/update-browserslist-db": { - "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": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "packages/modal/node_modules/vue": { - "version": "3.5.26", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", - "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.26", - "@vue/compiler-sfc": "3.5.26", - "@vue/runtime-dom": "3.5.26", - "@vue/server-renderer": "3.5.26", - "@vue/shared": "3.5.26" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "react": "^19.2.4" } }, "packages/no-modal": { @@ -38849,17 +38708,11 @@ "eventemitter3": "^5.0.1" } }, - "packages/no-modal/node_modules/@ethereumjs/rlp": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-10.1.1.tgz", - "integrity": "sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg==", - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=20" - } + "packages/no-modal/node_modules/@ethereumjs/common/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" }, "packages/no-modal/node_modules/@ethereumjs/tx": { "version": "10.1.1", @@ -38889,32 +38742,6 @@ "url": "https://paulmillr.com/funding/" } }, - "packages/no-modal/node_modules/@ethereumjs/util": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-10.1.1.tgz", - "integrity": "sha512-r2EhaeEmLZXVs1dT2HJFQysAkr63ZWATu/9tgYSp1IlvjvwyC++DLg5kCDwMM49HBq3sOAhrPnXkoqf9DV2gbw==", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/rlp": "^10.1.1", - "@noble/curves": "^2.0.1", - "@noble/hashes": "^2.0.1" - }, - "engines": { - "node": ">=20" - } - }, - "packages/no-modal/node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "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": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "packages/no-modal/node_modules/@metamask/sdk": { "version": "0.34.0", "resolved": "https://registry.npmjs.org/@metamask/sdk/-/sdk-0.34.0.tgz", @@ -38989,32 +38816,6 @@ "url": "https://paulmillr.com/funding/" } }, - "packages/no-modal/node_modules/@toruslabs/base-controllers": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@toruslabs/base-controllers/-/base-controllers-8.17.0.tgz", - "integrity": "sha512-AQwl7VANyIwXSCXNnSg5Is8L4W4rMd6LprYthzp5C9DimzGTIqj+rvjvh1dhaM+fbBCHrln75vveiVuW6pRRNA==", - "license": "ISC", - "dependencies": { - "@ethereumjs/util": "^10.1.0", - "@toruslabs/broadcast-channel": "^12.0.0", - "@toruslabs/http-helpers": "^8.1.1", - "@web3auth/auth": "^10.8.0", - "async-mutex": "^0.5.0", - "bignumber.js": "^9.3.1", - "bowser": "^2.13.1", - "ethereum-cryptography": "^3.2.0", - "events": "^3.3.0", - "jwt-decode": "^4.0.0", - "loglevel": "^1.9.2" - }, - "engines": { - "node": ">=20.x", - "npm": ">=9.x" - }, - "peerDependencies": { - "@babel/runtime": "7.x" - } - }, "packages/no-modal/node_modules/@toruslabs/ethereum-controllers": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/@toruslabs/ethereum-controllers/-/ethereum-controllers-8.17.0.tgz", @@ -39051,16 +38852,6 @@ "viem": ">=2.45.0" } }, - "packages/no-modal/node_modules/@types/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", - "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.2.2" - } - }, "packages/no-modal/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -39149,9 +38940,9 @@ } }, "packages/no-modal/node_modules/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "dev": true, "license": "MIT", "engines": { From 3c4ea68cf62ee3e2e76ffc54066f33a443914c43 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 19 Feb 2026 16:15:56 +0800 Subject: [PATCH 08/13] feat: added process batch transactions --- .../EthereumSigningProvider.ts | 1 + .../signingProviders/signingUtils.ts | 97 ++++++++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts index 9d543bcce..02a486af1 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts @@ -103,6 +103,7 @@ export class EthereumSigningProvider extends BaseProvider< const eip5792Middleware = createEip5792Middleware({ getProviderEngineProxy: this.getProviderEngineProxy.bind(this), processTransaction: providerHandlers.processTransaction, + processTransactionBatch: providerHandlers.processBatchTransactions, }); const chainSwitchMiddleware = this.getChainSwitchMiddleware(); const engine = new JRPCEngine(); diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts index 424710e4c..627ae05d6 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts @@ -1,5 +1,12 @@ import { addHexPrefix, intToBytes, isHexString, PrefixedHexString, publicToAddress, stripHexPrefix, toBytes } from "@ethereumjs/util"; import { concatSig } from "@toruslabs/base-controllers"; +import { + DUMMY_AUTHORIZATION_SIGNATURE, + type Eip5792SendCallsParams, + generateBatchId, + generateEIP7702BatchTransaction, + type TransactionBatchRequest, +} from "@toruslabs/ethereum-controllers"; import { JRPCRequest, providerErrors, rpcErrors, SafeEventEmitterProvider } from "@web3auth/auth"; import { Authorization, hashAuthorization, hashMessage, Signature } from "ethers"; import { hashTypedData, hexToBytes, validateTypedData } from "viem"; @@ -172,7 +179,9 @@ export function getProviderHandlers({ sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }>; getPublic: () => Promise; getProviderEngineProxy: () => SafeEventEmitterProvider | null; -}): IEthProviderHandlers { +}): IEthProviderHandlers & { + processBatchTransactions: (batchRequest: TransactionBatchRequest, req: JRPCRequest) => Promise; +} { return { getAccounts: async (_: JRPCRequest) => { const pubKey = await getPublic(); @@ -234,5 +243,91 @@ export function getProviderHandlers({ const sig = signTypedData(sign, data, SignTypedDataVersion.V4); return sig; }, + + /** + * Processes a batch of transactions for EIP-5792 `wallet_sendCalls`. + * + * For a single call, it is unwrapped and sent as a normal transaction. + * For multiple calls, they are encoded into a single EIP-7821 `execute` call + * targeting the sender's own address (via a delegated EIP-7702 contract). + * + * If the account has not yet been upgraded to an EIP-7702 delegate, the + * transaction is sent as a type-4 (SET_CODE) tx with an authorization list + * so that the upgrade and batch execute happen atomically. + * + * @param batchRequest - The batch request containing transactions and optional upgrade info. + * @param req - The original JRPC request with EIP-5792 send calls parameters. + * @returns The batch ID identifying this batch of calls. + */ + processBatchTransactions: async (batchRequest: TransactionBatchRequest, req: JRPCRequest): Promise => { + const providerEngineProxy = getProviderEngineProxy(); + if (!providerEngineProxy) + throw providerErrors.custom({ + message: "Provider is not initialized", + code: 4902, + }); + + const sendCallsParams = Array.isArray(req.params) ? req.params[0] : req.params; + if (!sendCallsParams) { + throw rpcErrors.invalidParams("Missing send calls parameters"); + } + + const { from, chainId } = sendCallsParams; + const { transactions, requiredEip7702Upgrade, eip7702UpgradeContractAddress } = batchRequest; + const batchId = batchRequest.batchId ?? generateBatchId(); + + let txParams: TransactionParams & { gas?: string }; + + if (transactions.length === 1) { + // Single transaction: unwrap and process as a normal transaction + txParams = { + from, + to: transactions[0].params.to, + value: transactions[0].params.value || "0x0", + data: transactions[0].params.data || "0x", + chainId, + }; + } else { + // Multiple transactions: encode as a single EIP-7821 batch execute call + const nestedTxParams = transactions.map((tx) => tx.params); + const batchTransaction = generateEIP7702BatchTransaction(from as `0x${string}`, nestedTxParams); + + txParams = { + from, + to: batchTransaction.to, + data: batchTransaction.data, + value: batchTransaction.value || "0x0", + }; + + if (requiredEip7702Upgrade) { + if (!eip7702UpgradeContractAddress) { + throw rpcErrors.invalidParams("Delegation address is required for EIP-7702 upgrade"); + } + // Send as type-4 (SET_CODE) transaction with authorization list + // so the EIP-7702 upgrade and batch execute happen atomically. + txParams.type = 4; + txParams.authorizationList = [ + { + address: eip7702UpgradeContractAddress, + chainId: BigInt(chainId), + signature: Signature.from({ + r: DUMMY_AUTHORIZATION_SIGNATURE, + s: DUMMY_AUTHORIZATION_SIGNATURE, + yParity: 0, + }), + } as Authorization, + ]; + } + } + + // Sign and broadcast the transaction + const serializedTxn = await signTx(txParams, sign, txFormatter); + await providerEngineProxy.request({ + method: "eth_sendRawTransaction", + params: [serializedTxn], + }); + + return batchId; + }, }; } From a738fddd0fb6b5045d2bd94bda3a10c24ee9fa90 Mon Sep 17 00:00:00 2001 From: lwin Date: Thu, 19 Feb 2026 16:40:26 +0800 Subject: [PATCH 09/13] feat: updated demo --- demo/react-app-no-modal/package-lock.json | 56 ++++----- demo/react-app-no-modal/src/App.tsx | 137 ++++++++++++++++++++-- demo/react-app-no-modal/src/web3RPC.ts | 127 +++++++++++++++++++- 3 files changed, 281 insertions(+), 39 deletions(-) diff --git a/demo/react-app-no-modal/package-lock.json b/demo/react-app-no-modal/package-lock.json index 79709fc7b..15902f3c8 100644 --- a/demo/react-app-no-modal/package-lock.json +++ b/demo/react-app-no-modal/package-lock.json @@ -38,18 +38,19 @@ }, "../../packages/no-modal": { "name": "@web3auth/no-modal", - "version": "10.0.0-beta.9", + "version": "10.14.1", "license": "ISC", "dependencies": { - "@ethereumjs/util": "^9.1.0", - "@metamask/sdk": "^0.32.1", + "@ethereumjs/util": "^10.1.0", + "@metamask/sdk": "^0.34.0", + "@segment/analytics-next": "^1.81.1", "@solana/wallet-standard-features": "^1.3.0", - "@solana/web3.js": "^1.98.2", - "@toruslabs/base-controllers": "^8.4.3", + "@solana/web3.js": "^1.98.4", + "@toruslabs/base-controllers": "^8.15.0", "@toruslabs/bs58": "^1.0.0", "@toruslabs/constants": "^15.0.0", - "@toruslabs/eccrypto": "^6.1.0", - "@toruslabs/ethereum-controllers": "^8.4.3", + "@toruslabs/eccrypto": "^6.2.0", + "@toruslabs/ethereum-controllers": "^8.17.0", "@toruslabs/http-helpers": "^8.1.1", "@toruslabs/loglevel-sentry": "^8.1.0", "@toruslabs/secure-pub-sub": "3.0.2", @@ -57,37 +58,38 @@ "@wallet-standard/app": "^1.1.0", "@wallet-standard/base": "^1.1.0", "@wallet-standard/features": "^1.1.0", - "@walletconnect/sign-client": "^2.20.0", - "@walletconnect/types": "^2.20.0", - "@walletconnect/utils": "^2.20.0", - "@web3auth/auth": "^10.4.0", - "@web3auth/ws-embed": "^5.0.5", + "@walletconnect/sign-client": "^2.23.3", + "@walletconnect/types": "^2.23.3", + "@walletconnect/utils": "^2.23.3", + "@web3auth/auth": "^10.8.0", + "@web3auth/ws-embed": "^5.5.0", "assert": "^2.1.0", - "bignumber.js": "~9.2.1", + "bignumber.js": "~9.3.1", "bn.js": "^5.2.2", - "bowser": "^2.11.0", + "bowser": "^2.13.1", "deepmerge": "^4.3.1", - "ethers": "^6.13.7", + "ethers": "^6.16.0", "json-rpc-random-id": "^1.0.1", "jsonschema": "^1.5.0", "jwt-decode": "^4.0.0", "loglevel": "^1.9.2", "mipd": "^0.0.7", - "permissionless": "^0.2.43", + "permissionless": "^0.3.2", "ripple-keypairs": "^1.3.1", "ts-custom-error": "^3.3.1", "xrpl": "^2.14.0" }, "devDependencies": { - "@coinbase/wallet-sdk": "^4.3.2", + "@coinbase/wallet-sdk": "^4.3.7", "@types/elliptic": "6.4.18", "@types/json-rpc-random-id": "^1.0.3", - "@types/react": "^19.1.2", - "@wagmi/core": "^2.14.5", - "@wagmi/vue": "^0.1.16", - "react": "^19.1.0", - "viem": "^2.23.2", - "vue": "^3.x" + "@types/react": "^19.2.8", + "@wagmi/core": "^2.20.1", + "@wagmi/vue": "^0.2.2", + "react": "^19.2.3", + "viem": "^2.44.2", + "vue": "^3.x", + "wagmi": "^2.16.6" }, "engines": { "node": ">=20.x", @@ -97,16 +99,13 @@ "@babel/runtime": "^7.x", "@coinbase/wallet-sdk": "^4.3.x", "react": ">=18", - "viem": ">=2.23", + "viem": ">=2.29", "vue": "^3.x" }, "peerDependenciesMeta": { "@coinbase/wallet-sdk": { "optional": true }, - "@tanstack/react-query": { - "optional": true - }, "react": { "optional": true }, @@ -115,9 +114,6 @@ }, "vue": { "optional": true - }, - "wagmi": { - "optional": true } } }, diff --git a/demo/react-app-no-modal/src/App.tsx b/demo/react-app-no-modal/src/App.tsx index 9a82e0d2c..04fd2ac5f 100644 --- a/demo/react-app-no-modal/src/App.tsx +++ b/demo/react-app-no-modal/src/App.tsx @@ -1,7 +1,6 @@ import "./App.css"; -import { SafeEventEmitterProvider, WALLET_CONNECTORS } from "@web3auth/modal"; -import { Web3AuthNoModal } from "@web3auth/no-modal"; +import { SafeEventEmitterProvider, WALLET_CONNECTORS, Web3AuthNoModal } from "@web3auth/no-modal"; import { useEffect, useState } from "react"; import RPC from "./web3RPC"; // for using web3.js @@ -11,6 +10,7 @@ const clientId = "BEglQSgt4cUWcj6SKRdu5QkOXTsePmMcusG5EAoyjyOYKlVRjIF1iCNnMOTfpz function App() { const [web3auth, setWeb3auth] = useState(null); const [provider, setProvider] = useState(null); + const [lastBatchId, setLastBatchId] = useState(null); useEffect(() => { const init = async () => { @@ -19,6 +19,19 @@ function App() { clientId, web3AuthNetwork: "sapphire_mainnet", authBuildEnv: "testing", + chains: [ + { + chainNamespace: "eip155", + chainId: "0xaa36a7", // Sepolia – supports EIP-7702 + rpcTarget: "https://rpc.sepolia.org", + displayName: "Ethereum Sepolia", + ticker: "ETH", + tickerName: "Ethereum", + blockExplorerUrl: "https://sepolia.etherscan.io", + logo: "https://sepolia.etherscan.io/images/svg/brands/eth.svg", + }, + ], + defaultChainId: "0xaa36a7", }); setWeb3auth(web3auth); @@ -28,6 +41,7 @@ function App() { setProvider(web3auth.provider); } } catch (error) { + // eslint-disable-next-line no-console console.error(error); } }; @@ -69,6 +83,7 @@ function App() { } await web3auth.logout(); setProvider(null); + setLastBatchId(null); }; const getChainId = async () => { @@ -86,8 +101,8 @@ function App() { uiConsole("provider not initialized yet"); return; } - await web3auth?.switchChain({ chainId: "0x5" }); - uiConsole("Chain Switched"); + await web3auth?.switchChain({ chainId: "0xaa36a7" }); + uiConsole("Switched to Sepolia"); }; const getAccounts = async () => { @@ -140,6 +155,65 @@ function App() { uiConsole(privateKey); }; + // ─── EIP-7702 Handlers ────────────────────────────────────────────── + + const getAccountUpgradeStatus = async () => { + if (!provider) { + uiConsole("provider not initialized yet"); + return; + } + const rpc = new RPC(provider); + const result = await rpc.getAccountUpgradeStatus(); + uiConsole(result); + }; + + const upgradeAccount = async () => { + if (!provider) { + uiConsole("provider not initialized yet"); + return; + } + uiConsole("Upgrading account via EIP-7702..."); + const rpc = new RPC(provider); + const result = await rpc.upgradeAccount(); + uiConsole(result); + }; + + // ─── EIP-5792 Handlers ────────────────────────────────────────────── + + const getCapabilities = async () => { + if (!provider) { + uiConsole("provider not initialized yet"); + return; + } + const rpc = new RPC(provider); + const result = await rpc.getCapabilities(); + uiConsole(result); + }; + + const sendBatchCalls = async () => { + if (!provider) { + uiConsole("provider not initialized yet"); + return; + } + uiConsole("Sending batch calls via wallet_sendCalls (EIP-5792)..."); + const rpc = new RPC(provider); + const batchId = await rpc.sendBatchCalls(); + if (batchId && typeof batchId === "string") { + setLastBatchId(batchId); + } + uiConsole({ batchId }); + }; + + const getCallsStatus = async () => { + if (!provider || !lastBatchId) { + uiConsole("provider not initialized or no batch ID available"); + return; + } + const rpc = new RPC(provider); + const result = await rpc.getCallsStatus(lastBatchId); + uiConsole(result); + }; + function uiConsole(...args: any[]): void { const el = document.querySelector("#console>p"); if (el) { @@ -167,7 +241,7 @@ function App() {
@@ -195,12 +269,59 @@ function App() { Get Private Key
+ + + {/* ── EIP-7702 Section ─────────────────────────────────────── */} +

EIP-7702 (Account Upgrade)

+
+
+ +
+
+ +
+
+ + {/* ── EIP-5792 Section ─────────────────────────────────────── */} +

EIP-5792 (Batch Calls)

+
+
+ +
+
+ +
-
+ {lastBatchId && ( +

+ Last Batch ID: {lastBatchId} +

+ )} + +
+ +
+

Logged in Successfully!

@@ -219,7 +340,7 @@ function App() { Web3Auth{" "} - & ReactJS Example + & ReactJS (No Modal) — EIP-7702 / 5792 Demo
{provider ? loggedInView : unloggedInView}
diff --git a/demo/react-app-no-modal/src/web3RPC.ts b/demo/react-app-no-modal/src/web3RPC.ts index 84bc5461b..09cc96126 100644 --- a/demo/react-app-no-modal/src/web3RPC.ts +++ b/demo/react-app-no-modal/src/web3RPC.ts @@ -111,4 +111,129 @@ export default class EthereumRpc { return error as string; } } -} \ No newline at end of file + + // ─── EIP-7702 Methods ─────────────────────────────────────────────── + + /** + * Check the EIP-7702 upgrade status for the connected account. + * Calls `wallet_getAccountUpgradeStatus`. + */ + async getAccountUpgradeStatus(): Promise { + try { + const web3 = new Web3(this.provider as any); + const address = (await web3.eth.getAccounts())[0]; + const chainId = "0x" + (await web3.eth.getChainId()).toString(16); + + const result = await this.provider.request({ + method: "wallet_getAccountUpgradeStatus", + params: [{ account: address, chainId }], + }); + + return result; + } catch (error: any) { + return { error: error?.message || error }; + } + } + + /** + * Upgrade the connected EOA to an EIP-7702 delegated account. + * Calls `wallet_upgradeAccount`. + */ + async upgradeAccount(): Promise { + try { + const web3 = new Web3(this.provider as any); + const address = (await web3.eth.getAccounts())[0]; + const chainId = "0x" + (await web3.eth.getChainId()).toString(16); + + const result = await this.provider.request({ + method: "wallet_upgradeAccount", + params: [{ account: address, chainId }], + }); + + return result; + } catch (error: any) { + return { error: error?.message || error }; + } + } + + // ─── EIP-5792 Methods ─────────────────────────────────────────────── + + /** + * Get wallet capabilities for the connected account. + * Calls `wallet_getCapabilities`. + */ + async getCapabilities(): Promise { + try { + const web3 = new Web3(this.provider as any); + const address = (await web3.eth.getAccounts())[0]; + const chainId = "0x" + (await web3.eth.getChainId()).toString(16); + + const result = await this.provider.request({ + method: "wallet_getCapabilities", + params: [address, [chainId]], + }); + + return result; + } catch (error: any) { + return { error: error?.message || error }; + } + } + + /** + * Send a batch of calls using EIP-5792 `wallet_sendCalls`. + * Sends two small self-transfers as a batch. + * Returns the batch ID. + */ + async sendBatchCalls(): Promise { + try { + const web3 = new Web3(this.provider as any); + const address = (await web3.eth.getAccounts())[0]; + const chainId = "0x" + (await web3.eth.getChainId()).toString(16); + + // Two simple self-transfers as a batch + const result = await this.provider.request({ + method: "wallet_sendCalls", + params: [ + { + version: "2.0", + chainId, + from: address, + calls: [ + { + to: address, + value: "0x0", + data: "0x", + }, + { + to: address, + value: "0x0", + data: "0x", + }, + ], + }, + ], + }); + + return result; + } catch (error: any) { + return { error: error?.message || error }; + } + } + + /** + * Get the status of a batch of calls using EIP-5792 `wallet_getCallsStatus`. + * @param batchId - The batch ID returned from `wallet_sendCalls`. + */ + async getCallsStatus(batchId: string): Promise { + try { + const result = await this.provider.request({ + method: "wallet_getCallsStatus", + params: [batchId], + }); + + return result; + } catch (error: any) { + return { error: error?.message || error }; + } + } +} From 92885303f798d97439b972ed4a2791c6e576fe2a Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 20 Feb 2026 15:00:25 +0800 Subject: [PATCH 10/13] feat: add 7702/5792 middlewares to WalletConnectV2 provider --- .../WalletConnectV2Provider.ts | 13 ++ .../walletConnectV2Utils.ts | 41 +++++- .../EthereumSigningProvider.ts | 2 +- .../signingProviders/signingUtils.ts | 126 ++--------------- .../rpc/eip7702Middleware.ts | 133 +++++++++++++++++- .../providers/ethereum-provider/rpc/index.ts | 1 + .../ethereum-provider/rpc/interfaces.ts | 2 + 7 files changed, 193 insertions(+), 125 deletions(-) diff --git a/packages/no-modal/src/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.ts b/packages/no-modal/src/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.ts index 809928573..7763d058f 100644 --- a/packages/no-modal/src/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.ts +++ b/packages/no-modal/src/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.ts @@ -5,6 +5,8 @@ import { JRPCEngine, JRPCMiddleware, providerErrors, providerFromEngine } from " import { AddEthereumChainConfig, CHAIN_NAMESPACES, CustomChainConfig, log, WalletLoginError } from "../../base"; import { BaseProvider, BaseProviderConfig, BaseProviderState } from "../../providers/base-provider"; import { + createEip5792Middleware, + createEip7702Middleware, createEthChainSwitchMiddleware, createEthJsonRpcClient, createEthMiddleware, @@ -111,10 +113,21 @@ export class WalletConnectV2Provider extends BaseProvider { } export function getEthProviderHandlers({ connector, chainId }: { connector: ISignClient; chainId: number }): IEthProviderHandlers { + const processTransaction = async (txParams: TransactionParams, _: JRPCRequest): Promise => { + const methodRes = await sendJrpcRequest(connector, `eip155:${chainId}`, EVM_METHOD_TYPES.ETH_TRANSACTION, [ + txParams, + ]); + return methodRes; + }; + return { getPrivateKey: async () => { throw rpcErrors.methodNotSupported(); @@ -81,14 +90,20 @@ export function getEthProviderHandlers({ connector, chainId }: { connector: ISig getAccounts: async (_: JRPCRequest) => { return getAccounts(connector); }, - processTransaction: async (txParams: TransactionParams, _: JRPCRequest): Promise => { - const methodRes = await sendJrpcRequest(connector, `eip155:${chainId}`, EVM_METHOD_TYPES.ETH_TRANSACTION, [ - txParams, - ]); - return methodRes; - }, + processTransaction, processSignTransaction: async (txParams: TransactionParams, _: JRPCRequest): Promise => { - const methodRes = await sendJrpcRequest(connector, `eip155:${chainId}`, "eth_signTransaction", [txParams]); + // Sign EIP-7702 authorization list if present (replaces dummy signatures with real ones) + const txParamsWithSignedAuthorization = await signAuthorizationList(txParams, async (authorizationHash) => { + const signatureHex = await sendJrpcRequest(connector, `eip155:${chainId}`, EVM_METHOD_TYPES.ETH_SIGN, [ + txParams.from, + authorizationHash, + ]); + const sig = Signature.from(signatureHex); + return { v: sig.yParity, r: sig.r, s: sig.s }; + }); + const methodRes = await sendJrpcRequest(connector, `eip155:${chainId}`, "eth_signTransaction", [ + txParamsWithSignedAuthorization, + ]); return methodRes; }, processEthSignMessage: async (msgParams: MessageParams, _: JRPCRequest): Promise => { @@ -112,6 +127,18 @@ export function getEthProviderHandlers({ connector, chainId }: { connector: ISig ]); return methodRes; }, + processBatchTransactions: async (batchRequest, req) => { + const sendCallsParams = Array.isArray(req.params) ? req.params[0] : req.params; + if (!sendCallsParams) { + throw rpcErrors.invalidParams("Missing send calls parameters"); + } + + const { txParams, batchId } = createEIP7702BatchTransaction(batchRequest, sendCallsParams); + + // Send the transaction through WalletConnect + await processTransaction(txParams, req); + return batchId; + }, }; } diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts index 02a486af1..d7103153f 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.ts @@ -5,13 +5,13 @@ import { AddEthereumChainConfig, CHAIN_NAMESPACES, CustomChainConfig, WalletInit import { BaseProvider, BaseProviderConfig, BaseProviderState } from "../../../../providers/base-provider"; import { createEip5792Middleware, + createEip7702Middleware, createEthChainSwitchMiddleware, createEthJsonRpcClient, createEthMiddleware, IEthChainSwitchHandlers, TransactionFormatter, } from "../../../ethereum-provider"; -import { createEip7702Middleware } from "../../../ethereum-provider/rpc/eip7702Middleware"; import { createEthAccountMiddleware } from "../../rpc/ethRpcMiddlewares"; import { IAccountHandlers } from "../../rpc/interfaces"; import { getProviderHandlers } from "./signingUtils"; diff --git a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts index 627ae05d6..f2cb86104 100644 --- a/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts +++ b/packages/no-modal/src/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.ts @@ -1,20 +1,16 @@ -import { addHexPrefix, intToBytes, isHexString, PrefixedHexString, publicToAddress, stripHexPrefix, toBytes } from "@ethereumjs/util"; +import { intToBytes, isHexString, PrefixedHexString, publicToAddress, stripHexPrefix, toBytes } from "@ethereumjs/util"; import { concatSig } from "@toruslabs/base-controllers"; -import { - DUMMY_AUTHORIZATION_SIGNATURE, - type Eip5792SendCallsParams, - generateBatchId, - generateEIP7702BatchTransaction, - type TransactionBatchRequest, -} from "@toruslabs/ethereum-controllers"; +import { type Eip5792SendCallsParams, type TransactionBatchRequest } from "@toruslabs/ethereum-controllers"; import { JRPCRequest, providerErrors, rpcErrors, SafeEventEmitterProvider } from "@web3auth/auth"; -import { Authorization, hashAuthorization, hashMessage, Signature } from "ethers"; +import { hashMessage, Signature } from "ethers"; import { hashTypedData, hexToBytes, validateTypedData } from "viem"; import { log } from "../../../../base"; import { + createEIP7702BatchTransaction, IEthProviderHandlers, MessageParams, + signAuthorizationList, SignTypedDataVersion, TransactionFormatter, TransactionParams, @@ -22,61 +18,6 @@ import { validateTypedSignMessageDataV4, } from "../../../ethereum-provider"; -/** - * Signs EIP-7702 authorization entries from the transaction params using the MPC sign function. - * Extracts authorizationList from txParams, computes keccak256(0x05 || rlp([chainId, address, nonce])) - * for each unsigned authorization and signs the hash. - * Returns updated txParams with signed ethers-compatible Authorization objects ready for Transaction.from(). - */ -async function signAuthorizationList( - txParams: TransactionParams & { gas?: string }, - sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }> -): Promise { - const { authorizationList, nonce } = txParams; - - if (!authorizationList || authorizationList.length === 0) { - return txParams; - } - - if (nonce === null || nonce === undefined) { - throw rpcErrors.invalidRequest({ - message: "Nonce is required", - }); - } - - const signedAuthorizationLists: Authorization[] = []; - - for (const authorization of authorizationList) { - const authorizationNonce = authorization.nonce ?? BigInt(Number(nonce) + 1); - const address = addHexPrefix(authorization.address); - const chainId = authorization.chainId; - - // EIP-7702 authorization hash: keccak256(0x05 || rlp([chainId, address, nonce])) - const authorizationHash = hashAuthorization({ - nonce: authorizationNonce, - address, - chainId, - }); - - const { v, r, s } = await sign(Buffer.from(stripHexPrefix(authorizationHash), "hex")); - // mpc-core-kit workaround: v may be 0/1 or 27/28, normalize to 0/1 - const yParity: 0 | 1 = (v > 1 ? v - 27 : v) as 0 | 1; - - signedAuthorizationLists.push({ - address, - chainId, - nonce: authorizationNonce, - signature: Signature.from({ - yParity, - r: `0x${r.toString("hex")}`, - s: `0x${s.toString("hex")}`, - }), - }); - } - - return { ...txParams, authorizationList: signedAuthorizationLists }; -} - async function signTx( txParams: TransactionParams & { gas?: string }, sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }>, @@ -86,7 +27,10 @@ async function signTx( const formattedTxParams = await txFormatter.formatTransaction(txParams); // Sign EIP-7702 authorization list if present - const finalTxParams = await signAuthorizationList(formattedTxParams, sign); + const finalTxParams = await signAuthorizationList(formattedTxParams, async (authorizationHash) => { + const { v, r, s } = await sign(Buffer.from(stripHexPrefix(authorizationHash), "hex")); + return { v, r: `0x${r.toString("hex")}`, s: `0x${s.toString("hex")}` }; + }); const ethTx = Transaction.from({ ...finalTxParams, @@ -179,9 +123,7 @@ export function getProviderHandlers({ sign: (msgHash: Buffer, rawMsg?: Buffer) => Promise<{ v: number; r: Buffer; s: Buffer }>; getPublic: () => Promise; getProviderEngineProxy: () => SafeEventEmitterProvider | null; -}): IEthProviderHandlers & { - processBatchTransactions: (batchRequest: TransactionBatchRequest, req: JRPCRequest) => Promise; -} { +}): IEthProviderHandlers { return { getAccounts: async (_: JRPCRequest) => { const pubKey = await getPublic(); @@ -272,53 +214,7 @@ export function getProviderHandlers({ throw rpcErrors.invalidParams("Missing send calls parameters"); } - const { from, chainId } = sendCallsParams; - const { transactions, requiredEip7702Upgrade, eip7702UpgradeContractAddress } = batchRequest; - const batchId = batchRequest.batchId ?? generateBatchId(); - - let txParams: TransactionParams & { gas?: string }; - - if (transactions.length === 1) { - // Single transaction: unwrap and process as a normal transaction - txParams = { - from, - to: transactions[0].params.to, - value: transactions[0].params.value || "0x0", - data: transactions[0].params.data || "0x", - chainId, - }; - } else { - // Multiple transactions: encode as a single EIP-7821 batch execute call - const nestedTxParams = transactions.map((tx) => tx.params); - const batchTransaction = generateEIP7702BatchTransaction(from as `0x${string}`, nestedTxParams); - - txParams = { - from, - to: batchTransaction.to, - data: batchTransaction.data, - value: batchTransaction.value || "0x0", - }; - - if (requiredEip7702Upgrade) { - if (!eip7702UpgradeContractAddress) { - throw rpcErrors.invalidParams("Delegation address is required for EIP-7702 upgrade"); - } - // Send as type-4 (SET_CODE) transaction with authorization list - // so the EIP-7702 upgrade and batch execute happen atomically. - txParams.type = 4; - txParams.authorizationList = [ - { - address: eip7702UpgradeContractAddress, - chainId: BigInt(chainId), - signature: Signature.from({ - r: DUMMY_AUTHORIZATION_SIGNATURE, - s: DUMMY_AUTHORIZATION_SIGNATURE, - yParity: 0, - }), - } as Authorization, - ]; - } - } + const { txParams, batchId } = createEIP7702BatchTransaction(batchRequest, sendCallsParams); // Sign and broadcast the transaction const serializedTxn = await signTx(txParams, sign, txFormatter); diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts index 5559acee7..32fff3e8d 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/eip7702Middleware.ts @@ -1,11 +1,15 @@ import { DUMMY_AUTHORIZATION_SIGNATURE, EIP_7702_METHODS, + type Eip5792SendCallsParams, type Eip7702Params, type Eip7702WalletGetUpgradeStatusResponse, + generateBatchId, + generateEIP7702BatchTransaction, getDelegationAddress, getIsEip7702UpgradeSupported, MetaMask_EIP7702_Stateless_Delegator, + type TransactionBatchRequest, } from "@toruslabs/ethereum-controllers"; import { createAsyncMiddleware, @@ -16,11 +20,136 @@ import { rpcErrors, SafeEventEmitterProvider, } from "@web3auth/auth"; -import { type Authorization, Signature } from "ethers"; +import { type Authorization, getAddress, hashAuthorization, Signature } from "ethers"; +import { TRANSACTION_ENVELOPE_TYPES } from "../providers"; import { createGetEthCode } from "./ethRpcMiddlewares"; import type { TransactionParams } from "./interfaces"; +export type SignAuthorizationHashFn = (authorizationHash: string) => Promise<{ v: number; r: string; s: string }>; + +/** + * Signs EIP-7702 authorization entries in a transaction's authorizationList. + * For each authorization with a dummy (placeholder) signature, it computes the + * EIP-7702 authorization hash (keccak256(0x05 || rlp([chainId, address, nonce]))) + * and delegates actual signing to the provided `signHash` callback. + * Already-signed authorizations are kept as-is. + * + * @param txParams - Transaction params containing an optional `authorizationList`. + * @param signHash - Callback that signs a hex-encoded authorization hash and returns v, r, s. + * @returns Updated txParams with signed Authorization objects. + */ +export async function signAuthorizationList( + txParams: TransactionParams & { gas?: string }, + signHash: SignAuthorizationHashFn +): Promise { + const { authorizationList, nonce } = txParams; + + if (!authorizationList || authorizationList.length === 0) { + return txParams; + } + + const signedAuthorizationList: Authorization[] = []; + + for (const authorization of authorizationList) { + // Normalize authorization fields before hashing + const address = getAddress(authorization.address); + const chainId = BigInt(authorization.chainId); + const authorizationNonce = authorization.nonce != null ? BigInt(authorization.nonce) : nonce != null ? BigInt(Number(nonce) + 1) : undefined; + if (authorizationNonce === undefined) { + throw rpcErrors.invalidRequest({ message: "Nonce is required for signing EIP-7702 authorization" }); + } + + // EIP-7702 authorization hash: keccak256(0x05 || rlp([chainId, address, nonce])) + const authorizationHash = hashAuthorization({ + nonce: authorizationNonce, + address, + chainId, + }); + + const { v, r, s } = await signHash(authorizationHash); + // Normalize v: may be 0/1 or 27/28, convert to yParity 0/1 + const yParity: 0 | 1 = (v > 1 ? v - 27 : v) as 0 | 1; + + signedAuthorizationList.push({ + address, + chainId, + nonce: authorizationNonce, + signature: Signature.from({ yParity, r, s }), + }); + } + + return { ...txParams, authorizationList: signedAuthorizationList }; +} + +/** + * Builds a transaction from a batch request (EIP-5792 `wallet_sendCalls`). + * + * - Single call: unwrapped into a normal transaction. + * - Multiple calls: encoded into a single EIP-7821 batch execute call. + * - If an EIP-7702 upgrade is required, the transaction is built as a type-4 + * (SET_CODE) tx with an unsigned authorization list so the upgrade and + * batch execute happen atomically. + * + * @param batchRequest - The batch request containing transactions and optional upgrade info. + * @param sendCallsParams - The EIP-5792 send calls parameters (from, chainId, etc.). + * @returns The built txParams and the batchId. + */ +export function createEIP7702BatchTransaction( + batchRequest: TransactionBatchRequest, + sendCallsParams: Eip5792SendCallsParams +): { txParams: TransactionParams & { gas?: string }; batchId: string } { + const { from, chainId } = sendCallsParams; + const { transactions, requiredEip7702Upgrade, eip7702UpgradeContractAddress } = batchRequest; + const batchId = batchRequest.batchId ?? generateBatchId(); + + let txParams: TransactionParams & { gas?: string }; + + if (transactions.length === 1) { + // Single transaction: unwrap and process as a normal transaction + txParams = { + from, + to: transactions[0].params.to, + value: transactions[0].params.value || "0x0", + data: transactions[0].params.data || "0x", + chainId, + }; + } else { + // Multiple transactions: encode as a single EIP-7821 batch execute call + const nestedTxParams = transactions.map((tx) => tx.params); + const batchTransaction = generateEIP7702BatchTransaction(from as `0x${string}`, nestedTxParams); + + txParams = { + from, + to: batchTransaction.to, + data: batchTransaction.data, + value: batchTransaction.value || "0x0", + }; + + if (requiredEip7702Upgrade) { + if (!eip7702UpgradeContractAddress) { + throw rpcErrors.invalidParams("Delegation address is required for EIP-7702 upgrade"); + } + // Send as type-4 (SET_CODE) transaction with authorization list + // so the EIP-7702 upgrade and batch execute happen atomically. + txParams.type = 4; + txParams.authorizationList = [ + { + address: eip7702UpgradeContractAddress, + chainId: BigInt(chainId), + signature: Signature.from({ + r: DUMMY_AUTHORIZATION_SIGNATURE, + s: DUMMY_AUTHORIZATION_SIGNATURE, + yParity: 0, + }), + } as Authorization, + ]; + } + } + + return { txParams, batchId }; +} + export interface IEip7702MiddlewareOptions { getProviderEngineProxy: () => SafeEventEmitterProvider | null; processTransaction?: (txParams: TransactionParams, req: JRPCRequest) => Promise; @@ -97,7 +226,7 @@ export function createEip7702Middleware({ getProviderEngineProxy, processTransac to: account, // setCode transactions target the sender data: "0x", value: "0x0", - type: 4, + type: Number.parseInt(TRANSACTION_ENVELOPE_TYPES.SET_CODE, 16), authorizationList: [ { address: delegationTarget, diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts index 9bfeec4bb..e7b0897cb 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/index.ts @@ -1,4 +1,5 @@ export * from "./eip5792Middleware"; +export * from "./eip7702Middleware"; export * from "./ethRpcMiddlewares"; export * from "./interfaces"; export * from "./jrpcClient"; diff --git a/packages/no-modal/src/providers/ethereum-provider/rpc/interfaces.ts b/packages/no-modal/src/providers/ethereum-provider/rpc/interfaces.ts index e429fd196..53bde568e 100644 --- a/packages/no-modal/src/providers/ethereum-provider/rpc/interfaces.ts +++ b/packages/no-modal/src/providers/ethereum-provider/rpc/interfaces.ts @@ -1,3 +1,4 @@ +import type { Eip5792SendCallsParams, TransactionBatchRequest } from "@toruslabs/ethereum-controllers"; import type { JRPCRequest } from "@web3auth/auth"; import type { TransactionLike, TypedDataDomain, TypedDataField } from "ethers"; @@ -53,6 +54,7 @@ export interface WalletMiddlewareOptions { processTransaction?: (txParams: TransactionParams, req: JRPCRequest) => Promise; processSignTransaction?: (txParams: TransactionParams, req: JRPCRequest) => Promise; processTypedMessageV4?: (msgParams: TypedMessageParams, req: JRPCRequest) => Promise; + processBatchTransactions?: (batchRequest: TransactionBatchRequest, req: JRPCRequest) => Promise; } export type IEthProviderHandlers = WalletMiddlewareOptions; From 8bf62f93f11759482c6cc305a279146d7f51e1e7 Mon Sep 17 00:00:00 2001 From: lwin Date: Fri, 20 Feb 2026 15:01:21 +0800 Subject: [PATCH 11/13] feat: updated nextjs-ssr demo --- demo/nextjs-ssr-app/components/Main.tsx | 196 +- demo/nextjs-ssr-app/components/provider.tsx | 22 + demo/nextjs-ssr-app/next-env.d.ts | 2 +- demo/nextjs-ssr-app/package-lock.json | 44 +- demo/react-app-no-modal/src/App.tsx | 137 +- demo/react-app-no-modal/src/web3RPC.ts | 125 - package-lock.json | 6153 +------------------ 7 files changed, 440 insertions(+), 6239 deletions(-) diff --git a/demo/nextjs-ssr-app/components/Main.tsx b/demo/nextjs-ssr-app/components/Main.tsx index 53352b0a3..29965d1be 100644 --- a/demo/nextjs-ssr-app/components/Main.tsx +++ b/demo/nextjs-ssr-app/components/Main.tsx @@ -12,7 +12,8 @@ import { useWeb3AuthDisconnect, useWeb3AuthUser, } from "@web3auth/modal/react"; -import { useAccount, useBalance, useChainId, useSignMessage, useSignTypedData, useSwitchChain } from "wagmi"; +import { useState } from "react"; +import { useAccount, useBalance, useChainId, useSendTransaction, useSignMessage, useSignTypedData, useSwitchChain } from "wagmi"; const Main = () => { const { provider, isConnected } = useWeb3Auth(); @@ -25,6 +26,7 @@ const Main = () => { const { userInfo, isMFAEnabled } = useWeb3AuthUser(); const { data: balance } = useBalance({ address }); const { signTypedData, data: signedTypedDataData } = useSignTypedData(); + const { sendTransaction, data: txHash, isPending: isSendingTx, error: sendTxError } = useSendTransaction(); const { enableMFA, loading: isEnableMFALoading, error: enableMFAError } = useEnableMFA(); const { manageMFA, loading: isManageMFALoading, error: manageMFAError } = useManageMFA(); const { showCheckout, loading: isCheckoutLoading, error: checkoutError } = useCheckout(); @@ -32,8 +34,123 @@ const Main = () => { const { showWalletUI, loading: isWalletUILoading, error: walletUIError } = useWalletUI(); const { token, loading: isUserTokenLoading, error: userTokenError, getIdentityToken } = useIdentityToken(); + // ─── EIP-7702 / EIP-5792 State ────────────────────────────────────── + const [eipResult, setEipResult] = useState(""); + const [lastBatchId, setLastBatchId] = useState(null); + const [eipLoading, setEipLoading] = useState(null); + console.log("isConnected", isConnected, balance); + // ─── EIP-7702 Handlers ────────────────────────────────────────────── + + const getAccountUpgradeStatus = async () => { + if (!provider || !address) return; + setEipLoading("upgradeStatus"); + try { + const currentChainId = "0x" + chainId.toString(16); + const result = await provider.request({ + method: "wallet_getAccountUpgradeStatus", + params: [{ account: address, chainId: currentChainId }], + }); + setEipResult(JSON.stringify(result, null, 2)); + } catch (error: any) { + setEipResult(JSON.stringify({ error: error?.message || error }, null, 2)); + } finally { + setEipLoading(null); + } + }; + + const upgradeAccount = async () => { + if (!provider || !address) return; + setEipLoading("upgrade"); + try { + const currentChainId = "0x" + chainId.toString(16); + const result = await provider.request({ + method: "wallet_upgradeAccount", + params: [{ account: address, chainId: currentChainId }], + }); + setEipResult(JSON.stringify(result, null, 2)); + } catch (error: any) { + setEipResult(JSON.stringify({ error: error?.message || error }, null, 2)); + } finally { + setEipLoading(null); + } + }; + + // ─── EIP-5792 Handlers ────────────────────────────────────────────── + + const getCapabilities = async () => { + if (!provider || !address) return; + setEipLoading("capabilities"); + try { + const currentChainId = "0x" + chainId.toString(16); + const result = await provider.request({ + method: "wallet_getCapabilities", + params: [address, [currentChainId]], + }); + setEipResult(JSON.stringify(result, null, 2)); + } catch (error: any) { + setEipResult(JSON.stringify({ error: error?.message || error }, null, 2)); + } finally { + setEipLoading(null); + } + }; + + const sendBatchCalls = async () => { + if (!provider || !address) return; + setEipLoading("sendBatch"); + try { + const currentChainId = "0x" + chainId.toString(16); + // Two simple self-transfers as a batch + const batchId = await provider.request({ + method: "wallet_sendCalls", + params: [ + { + version: "2.0", + chainId: currentChainId, + from: address, + calls: [ + { + to: address, + value: "0x0", + data: "0x", + }, + { + to: address, + value: "0x0", + data: "0x", + }, + ], + }, + ], + }); + if (batchId && typeof batchId === "string") { + setLastBatchId(batchId); + } + setEipResult(JSON.stringify({ batchId }, null, 2)); + } catch (error: any) { + setEipResult(JSON.stringify({ error: error?.message || error }, null, 2)); + } finally { + setEipLoading(null); + } + }; + + const getCallsStatus = async () => { + if (!provider || !lastBatchId) return; + setEipLoading("callsStatus"); + try { + const result = await provider.request({ + method: "wallet_getCallsStatus", + params: [lastBatchId], + }); + setEipResult(JSON.stringify(result, null, 2)); + } catch (error: any) { + setEipResult(JSON.stringify({ error: error?.message || error }, null, 2)); + } finally { + setEipLoading(null); + } + }; + const loggedInView = ( <>
@@ -177,8 +294,85 @@ const Main = () => { Sign Typed Data {signedTypedDataData &&