From 1d0405d5f36cedd949570f841941068423233237 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Fri, 16 May 2025 15:39:37 +0300 Subject: [PATCH 1/9] refactor: replaces WCM with Appkit --- advanced/dapps/react-dapp-v2/package.json | 8 +- advanced/dapps/react-dapp-v2/pnpm-lock.yaml | 1703 ++++++++++++----- .../src/contexts/ClientContext.tsx | 141 +- .../src/contexts/JsonRpcContext.tsx | 4 +- .../react-dapp-v2/src/helpers/namespaces.ts | 2 +- .../react-dapp-v2/src/helpers/utilities.ts | 26 +- 6 files changed, 1342 insertions(+), 542 deletions(-) diff --git a/advanced/dapps/react-dapp-v2/package.json b/advanced/dapps/react-dapp-v2/package.json index d1f3e0c58..303d070ea 100644 --- a/advanced/dapps/react-dapp-v2/package.json +++ b/advanced/dapps/react-dapp-v2/package.json @@ -26,10 +26,10 @@ "@walletconnect/core": "^2.19.1", "@walletconnect/encoding": "^1.0.1", "@walletconnect/jsonrpc-utils": "^1.0.8", - "@walletconnect/sign-client": "2.20.1", + "@walletconnect/universal-provider": "2.20.1", "@walletconnect/types": "2.20.1", "@walletconnect/utils": "2.20.1", - "@web3modal/standalone": "2.4.3", + "@reown/appkit": "1.7.5", "axios": "^1.0.0", "bitcoinjs-lib": "^6.1.5", "bitcoinjs-message": "^2.2.0", @@ -62,13 +62,13 @@ "@types/react": "18.0.15", "@types/react-dom": "18.0.6", "@types/styled-components": "^5.1.34", - "eslint": "8.21.0", + "eslint": "9.26.0", "eslint-config-next": "14.2.25", "eslint-plugin-package-json": "^0.13.1", "jsonc-eslint-parser": "^2.4.0", "pino-pretty": "^13.0.0", "prettier": "^2.8.8", - "typescript": "^4.7.4" + "typescript": "5.8.3" }, "pnpm": { "overrides": { diff --git a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml index d96b9c249..4e55e004c 100644 --- a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml +++ b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml @@ -76,30 +76,30 @@ importers: '@polkadot/util-crypto': specifier: ^10.1.2 version: 10.4.2(@polkadot/util@10.4.2) + '@reown/appkit': + specifier: 1.7.5 + version: 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@solana/web3.js': specifier: ^1.36.0 version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/core': specifier: ^2.19.1 - version: 2.19.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + version: 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/encoding': specifier: ^1.0.1 version: 1.0.2 '@walletconnect/jsonrpc-utils': specifier: ^1.0.8 version: 1.0.8 - '@walletconnect/sign-client': - specifier: 2.20.1 - version: 2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) '@walletconnect/types': specifier: 2.20.1 version: 2.20.1 + '@walletconnect/universal-provider': + specifier: 2.20.1 + version: 2.20.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/utils': specifier: 2.20.1 - version: 2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) - '@web3modal/standalone': - specifier: 2.4.3 - version: 2.4.3(react@18.3.1) + version: 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) axios: specifier: '>=1.8.2' version: 1.8.3 @@ -150,7 +150,7 @@ importers: version: 2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-scripts: specifier: ^4.0.3 - version: 4.0.3(@types/webpack@4.41.40)(bufferutil@4.0.9)(eslint@8.21.0)(react@18.3.1)(sockjs-client@1.6.1)(typescript@4.9.5)(utf-8-validate@5.0.10) + version: 4.0.3(@types/webpack@4.41.40)(bufferutil@4.0.9)(eslint@9.26.0)(react@18.3.1)(sockjs-client@1.6.1)(typescript@5.8.3)(utf-8-validate@5.0.10) solana-wallet: specifier: ^1.0.1 version: 1.0.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -192,14 +192,14 @@ importers: specifier: ^5.1.34 version: 5.1.34 eslint: - specifier: 8.21.0 - version: 8.21.0 + specifier: 9.26.0 + version: 9.26.0 eslint-config-next: specifier: 14.2.25 - version: 14.2.25(eslint@8.21.0)(typescript@4.9.5) + version: 14.2.25(eslint@9.26.0)(typescript@5.8.3) eslint-plugin-package-json: specifier: ^0.13.1 - version: 0.13.1(eslint@8.21.0)(jsonc-eslint-parser@2.4.0) + version: 0.13.1(eslint@9.26.0)(jsonc-eslint-parser@2.4.0) jsonc-eslint-parser: specifier: ^2.4.0 version: 2.4.0 @@ -210,8 +210,8 @@ importers: specifier: ^2.8.8 version: 2.8.8 typescript: - specifier: ^4.7.4 - version: 4.9.5 + specifier: 5.8.3 + version: 5.8.3 packages: @@ -1009,9 +1009,33 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@1.4.1': - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.26.0': + resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.8': + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ethereumjs/common@2.6.5': resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==} @@ -1150,17 +1174,25 @@ packages: resolution: {integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==} deprecated: This version has been deprecated and is no longer supported or maintained - '@humanwhocodes/config-array@0.10.7': - resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} - '@humanwhocodes/gitignore-to-minimatch@1.0.2': - resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1284,33 +1316,12 @@ packages: '@lit-labs/ssr-dom-shim@1.3.0': resolution: {integrity: sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==} - '@lit/reactive-element@1.6.3': - resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} - - '@motionone/animation@10.18.0': - resolution: {integrity: sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw==} - - '@motionone/dom@10.18.0': - resolution: {integrity: sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A==} - - '@motionone/easing@10.18.0': - resolution: {integrity: sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==} - - '@motionone/generators@10.18.0': - resolution: {integrity: sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg==} - - '@motionone/svelte@10.16.4': - resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} + '@lit/reactive-element@2.1.0': + resolution: {integrity: sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA==} - '@motionone/types@10.17.1': - resolution: {integrity: sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==} - - '@motionone/utils@10.18.0': - resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} - - '@motionone/vue@10.16.4': - resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} - deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion + '@modelcontextprotocol/sdk@1.11.3': + resolution: {integrity: sha512-rmOWVRUbUJD7iSvJugjUbFZshTAuJ48MXoZ80Osx1GM0K/H1w7rSEvmw8m6vdWxNASgtaHIhAgre4H/E9GJiYQ==} + engines: {node: '>=18'} '@multiversx/sdk-bls-wasm@0.3.5': resolution: {integrity: sha512-c0tIdQUnbBLSt6NYU+OpeGPYdL0+GV547HeHT8Xc0BKQ7Cj0v82QUoA2QRtWrR1G4MNZmLsIacZSsf6DrIS2Bw==} @@ -1403,6 +1414,10 @@ packages: resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.8.2': + resolution: {integrity: sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==} + engines: {node: ^14.21.3 || >=16} + '@noble/ed25519@1.7.3': resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} @@ -1424,6 +1439,10 @@ packages: resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.7.2': + resolution: {integrity: sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -1587,6 +1606,35 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@reown/appkit-common@1.7.5': + resolution: {integrity: sha512-TyjOKRyRqNzTGwEikjkyDp2l3k0obgTuXKM0/VCF1FlZN48hMPOnd9gBnsI9TB7mK/wmJRHMs29JlolThlTOTw==} + + '@reown/appkit-controllers@1.7.5': + resolution: {integrity: sha512-MGEQpjMjobkFZIOy+Ti4BV9DZ90WAjJ4dbR91ZshrqvtytTxuUf3Tf65ALMpsUhGgnfwTeuXm2oHQ26S+NIx4g==} + + '@reown/appkit-pay@1.7.5': + resolution: {integrity: sha512-CR0EISQl6Q3bl5FQIaZRyN5DEHU0TEsDgoPuU0X1u9LB97tUedNIaCqrOXRPQatw0w/EsG29mDX5DRl1N4Yszg==} + + '@reown/appkit-polyfills@1.7.5': + resolution: {integrity: sha512-AoyVgfx30gLi9Lo+/UZ95BFwEL6zS0y9AsXrZylnBfvFIlSf8MvhJR8a8aH5BfQ0/7hYYbNKnJsWGbOCgAY5jg==} + + '@reown/appkit-scaffold-ui@1.7.5': + resolution: {integrity: sha512-WsB0mev3N95iKSlX9Bd9WYesvy2Svywk7nDmC37AmNwqXlpX62Xkf5i4CeJotv/ElzyDWWznRzP4MfDavyBadw==} + + '@reown/appkit-ui@1.7.5': + resolution: {integrity: sha512-nuK6f2vgde9ySKvAGrrsWVgg0pECtjpADp/t0iVCgxGsDgT8903cEUkOXKFsJuK18OHqwGsldwnTcoOG3oBs1A==} + + '@reown/appkit-utils@1.7.5': + resolution: {integrity: sha512-OjOpN0ulAAnf32nbIKUDb/MbMcK2lkXRtXJo8EX56bvp2BKvtG8Jcl7+uiWJxdb6yuUOSUMcP+5r0Yj/EKzM9g==} + peerDependencies: + valtio: 1.13.2 + + '@reown/appkit-wallet@1.7.5': + resolution: {integrity: sha512-46124X/0muD0RaNi+myF5OLWiCvJfq2+SqaopLRWKlCJLVjt5iBYwA/WsBZ5d8gy6izwzuhTMyHgP2oJc20SRg==} + + '@reown/appkit@1.7.5': + resolution: {integrity: sha512-CFJIhUuloBcu+neJBmeRIqXuPzdlCV9KN6/eovc6UIEf6KgXFrAagPKb+aDoQ1YMvW0dE5Q/vEuOrKZmjWHiCw==} + '@rollup/plugin-node-resolve@7.1.3': resolution: {integrity: sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==} engines: {node: '>= 8.0.0'} @@ -2270,14 +2318,14 @@ packages: cpu: [x64] os: [win32] - '@walletconnect/core@2.19.1': - resolution: {integrity: sha512-rMvpZS0tQXR/ivzOxN1GkHvw3jRRMlI/jRX5g7ZteLgg2L0ZcANsFvAU5IxILxIKcIkTCloF9TcfloKVbK3qmw==} - engines: {node: '>=18'} - '@walletconnect/core@2.20.1': resolution: {integrity: sha512-DxybNfznr7aE/U9tJqvpEorUW2f/6kR0S1Zk78NqKam1Ex+BQFDM5j2Az3WayfFDZz3adkxkLAszfdorvPxDlw==} engines: {node: '>=18'} + '@walletconnect/core@2.20.2': + resolution: {integrity: sha512-48XnarxQQrpJ0KZJOjit56DxuzfVRYUdL8XVMvUh/ZNUiX2FB5w6YuljUUeTLfYOf04Et6qhVGEUkmX3W+9/8w==} + engines: {node: '>=18'} + '@walletconnect/core@2.8.6': resolution: {integrity: sha512-rnSqm1KJLcww/v6+UH8JeibQkJ3EKgyUDPfEK0stSEkrIUIcXaFlq3Et8S+vgV8bPhI0MVUhAhFL5OJZ3t2ryg==} @@ -2296,6 +2344,9 @@ packages: '@walletconnect/heartbeat@1.2.2': resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} + '@walletconnect/jsonrpc-http-connection@1.0.8': + resolution: {integrity: sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==} + '@walletconnect/jsonrpc-provider@1.0.13': resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} @@ -2337,6 +2388,9 @@ packages: '@walletconnect/sign-client@2.20.1': resolution: {integrity: sha512-QXzIAHbyZZ52+97Bp/+/SBkN3hX0pam8l4lnA4P7g+aFPrVZUrMwZPIf+FV7UbEswqqwo3xmFI41TKgj8w8B9w==} + '@walletconnect/sign-client@2.20.2': + resolution: {integrity: sha512-KyeDToypZ1OjCbij4Jx0cAg46bMwZ6zCKt0HzCkqENcex3Zchs7xBp9r8GtfEMGw+PUnXwqrhzmLBH0x/43oIQ==} + '@walletconnect/sign-client@2.8.6': resolution: {integrity: sha512-rOFTKTHP7oJfXgYHX7+SdB8VbcsEE3ZFG/bMdmZboWaBim1mrY3vUyDdKrNr0VgI3AwBiEQezQDfKxBX0pMSQQ==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' @@ -2344,21 +2398,27 @@ packages: '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} - '@walletconnect/types@2.19.1': - resolution: {integrity: sha512-XWWGLioddH7MjxhyGhylL7VVariVON2XatJq/hy0kSGJ1hdp31z194nHN5ly9M495J9Hw8lcYjGXpsgeKvgxzw==} - '@walletconnect/types@2.20.1': resolution: {integrity: sha512-HM0YZxT+wNqskoZkuju5owbKTlqUXNKfGlJk/zh9pWaVWBR2QamvQ+47Cx09OoGPRQjQH0JmgRiUV4bOwWNeHg==} + '@walletconnect/types@2.20.2': + resolution: {integrity: sha512-XPPbJM/mGU05i6jUxhC3yI/YvhSF6TYJQ5SXTWM53lVe6hs6ukvlEhPctu9ZBTGwGFhwPXIjtK/eWx+v4WY5iw==} + '@walletconnect/types@2.8.6': resolution: {integrity: sha512-Z/PFa3W1XdxeTcCtdR6lUsFgZfU/69wWJBPyclPwn7cu1+eriuCr6XZXQpJjib3flU+HnwHiXeUuqZaheehPxw==} - '@walletconnect/utils@2.19.1': - resolution: {integrity: sha512-aOwcg+Hpph8niJSXLqkU25pmLR49B8ECXp5gFQDW5IeVgXHoOoK7w8a79GBhIBheMLlIt1322sTKQ7Rq5KzzFg==} + '@walletconnect/universal-provider@2.20.1': + resolution: {integrity: sha512-0WfO4Unb+8UMEUr65vrVjd/a/3tF5059KLP7gX2kaDFjXXOma1/cjq/9/STd3hbHB8LKfxpXvOty97vuD8xfWQ==} + + '@walletconnect/universal-provider@2.20.2': + resolution: {integrity: sha512-6uVu1E88tioaXEEJCbJKwCIQlOHif1nmfY092BznZEnBn2lli5ICzQh2bxtUDNmNNLKsMDI3FV1fODFeWMVJTQ==} '@walletconnect/utils@2.20.1': resolution: {integrity: sha512-u/uyJkVyxLLUbHbpMv7MmuOkGfElG08l6P2kMTAfN7nAVyTgpb8g6kWLMNqfmYXVz+h+finf5FSV4DgL2vOvPQ==} + '@walletconnect/utils@2.20.2': + resolution: {integrity: sha512-2uRUDvpYSIJFYcr1WIuiFy6CEszLF030o6W8aDMkGk9/MfAZYEJQHMJcjWyaNMPHLJT0POR5lPaqkYOpuyPIQQ==} + '@walletconnect/utils@2.8.6': resolution: {integrity: sha512-wcy6e5+COYo7tfNnW8YqidnATdJDIW6vDiWWE7A1F78Sl/VflkaevB9cIgyn8eLdxC1SxXgGoeC2oLP90nnHJg==} @@ -2368,18 +2428,6 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@web3modal/core@2.4.3': - resolution: {integrity: sha512-7Z/sDe9RIYQ2k9ITcxgEa/u7FvlI76vcVVZn9UY4ISivefqrH4JAS3GX4JmVNUUlovwuiZdyqBv4llAQOMK6Rg==} - deprecated: Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown - - '@web3modal/standalone@2.4.3': - resolution: {integrity: sha512-5ATXBoa4GGm+TIUSsKWsfWCJunv1XevOizpgTFhqyeGgRDmWhqsz9UIPzH/1mk+g0iJ/xqMKs5F6v9D2QeKxag==} - deprecated: This package has been deprecated in favor of @walletconnect/modal. Please read more at https://docs.walletconnect.com - - '@web3modal/ui@2.4.3': - resolution: {integrity: sha512-J989p8CdtEhI9gZHf/rZ/WFqYlrAHWw9GmAhFoiNODwjAp0BoG/uoaPiijJMchXdngihZOjLGCQwDXU16DHiKg==} - deprecated: Web3Modal is now Reown AppKit. Please follow the upgrade guide at https://docs.reown.com/appkit/upgrade/from-w3m-to-reown - '@webassemblyjs/ast@1.9.0': resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} @@ -2466,6 +2514,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-globals@6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -2870,6 +2922,9 @@ packages: big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + bigint-buffer@1.1.5: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} engines: {node: '>= 10.0.0'} @@ -2940,6 +2995,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + bonjour@3.5.0: resolution: {integrity: sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==} @@ -3295,6 +3354,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-hash@2.5.2: resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} @@ -3320,6 +3383,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.7.1: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} @@ -3548,6 +3615,9 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3654,6 +3724,11 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + derive-valtio@0.1.0: + resolution: {integrity: sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A==} + peerDependencies: + valtio: '*' + des.js@1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} @@ -3714,10 +3789,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} @@ -4082,9 +4153,9 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} @@ -4119,16 +4190,24 @@ packages: eslint: ^7.0.0 || ^8.0.0 webpack: ^4.0.0 || ^5.0.0 - eslint@8.21.0: - resolution: {integrity: sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint@9.26.0: + resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true esniff@2.0.1: resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} engines: {node: '>=0.10'} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4242,10 +4321,18 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.2: + resolution: {integrity: sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==} + engines: {node: '>=18.0.0'} + eventsource@2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -4268,10 +4355,20 @@ packages: resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} engines: {node: '>= 10.14.2'} + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} @@ -4337,9 +4434,9 @@ packages: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} deprecated: This module is no longer supported. - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-loader@6.1.1: resolution: {integrity: sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==} @@ -4369,6 +4466,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} @@ -4389,9 +4490,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -4466,6 +4567,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + from2@2.3.0: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} @@ -4602,9 +4707,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -4646,9 +4751,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -4733,9 +4835,6 @@ packages: hex-color-regex@1.1.0: resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} - hey-listen@1.0.8: - resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} - hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -5129,6 +5228,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -5586,14 +5688,14 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lit-element@3.3.3: - resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + lit-element@4.2.0: + resolution: {integrity: sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q==} - lit-html@2.8.0: - resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + lit-html@3.3.0: + resolution: {integrity: sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw==} - lit@2.7.5: - resolution: {integrity: sha512-i/cH7Ye6nBDUASMnfwcictBnsTN91+aBjXoTHF2xARghXScKxpD4F4WYI+VLXg9lqbMinDfvoI7VnZXjyHgdfQ==} + lit@3.3.0: + resolution: {integrity: sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw==} loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} @@ -5718,6 +5820,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs@4.17.0: resolution: {integrity: sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==} engines: {node: '>= 4.0.0'} @@ -5732,6 +5838,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5765,10 +5875,18 @@ packages: resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -5865,9 +5983,6 @@ packages: mock-fs@4.14.0: resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} - motion@10.16.2: - resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} - move-concurrently@1.0.1: resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} deprecated: This package is no longer supported. @@ -5935,6 +6050,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -6176,6 +6295,14 @@ packages: typescript: optional: true + ox@0.6.9: + resolution: {integrity: sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -6309,6 +6436,10 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -6378,6 +6509,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkce-challenge@5.0.0: + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + engines: {node: '>=16.20.0'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -6775,8 +6910,8 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-compare@2.5.1: - resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + proxy-compare@2.6.0: + resolution: {integrity: sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -6892,6 +7027,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + react-app-polyfill@2.0.0: resolution: {integrity: sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA==} engines: {node: '>=10'} @@ -7170,6 +7309,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rpc-websockets@9.1.1: resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} @@ -7302,6 +7445,10 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} @@ -7316,6 +7463,10 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + servify@0.1.12: resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} engines: {node: '>=6'} @@ -7929,10 +8080,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -7953,6 +8100,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + type@2.7.3: resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} @@ -7981,9 +8132,9 @@ packages: typeforce@1.18.0: resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} hasBin: true ufo@1.5.4: @@ -8205,9 +8356,6 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - v8-compile-cache@2.4.0: - resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} - v8-to-istanbul@7.1.2: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} @@ -8223,12 +8371,15 @@ packages: resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} engines: {node: '>= 0.10'} - valtio@1.10.5: - resolution: {integrity: sha512-jTp0k63VXf4r5hPoaC6a6LCG4POkVSh629WLi1+d5PlajLsbynTMd7qAgEiOSPxzoX5iNvbN7iZ/k/g29wrNiQ==} + valtio@1.13.2: + resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==} engines: {node: '>=12.20.0'} peerDependencies: + '@types/react': '>=16.8' react: '>=16.8' peerDependenciesMeta: + '@types/react': + optional: true react: optional: true @@ -8257,6 +8408,14 @@ packages: typescript: optional: true + viem@2.29.3: + resolution: {integrity: sha512-9D/nO+4S3Kk0P8vh6yXUA8OJ0mli9nzoY22qyh8iYHf1Q0GIejUnyq0QGjoDbkTcVzCVD5iA9KBkSxw9Tp3vUg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -8676,6 +8835,17 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod-to-json-schema@3.24.5: + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + peerDependencies: + zod: ^3.24.1 + + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + snapshots: '@adraffy/ens-normalize@1.11.0': {} @@ -10308,19 +10478,33 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@eslint-community/eslint-utils@4.5.1(eslint@8.21.0)': + '@eslint-community/eslint-utils@4.5.1(eslint@9.26.0)': dependencies: - eslint: 8.21.0 + eslint: 9.26.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/eslintrc@1.4.1': + '@eslint/config-array@0.20.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@6.1.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.2': {} + + '@eslint/core@0.13.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.4.0(supports-color@6.1.0) - espree: 9.6.1 - globals: 13.24.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.0 @@ -10329,6 +10513,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@9.26.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.8': + dependencies: + '@eslint/core': 0.13.0 + levn: 0.4.1 + '@ethereumjs/common@2.6.5': dependencies: crc-32: 1.2.2 @@ -10629,17 +10822,18 @@ snapshots: dependencies: '@hapi/hoek': 8.5.1 - '@humanwhocodes/config-array@0.10.7': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.4.0(supports-color@6.1.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/gitignore-to-minimatch@1.0.2': {} + '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/retry@0.4.3': {} '@isaacs/cliui@8.0.2': dependencies: @@ -10772,7 +10966,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 - '@jest/test-sequencer@26.6.3': + '@jest/test-sequencer@26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@jest/test-result': 26.6.2 graceful-fs: 4.2.11 @@ -10780,7 +10974,11 @@ snapshots: jest-runner: 26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest-runtime: 26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: + - bufferutil + - canvas - supports-color + - ts-node + - utf-8-validate '@jest/transform@26.6.2': dependencies: @@ -10922,54 +11120,24 @@ snapshots: '@lit-labs/ssr-dom-shim@1.3.0': {} - '@lit/reactive-element@1.6.3': + '@lit/reactive-element@2.1.0': dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 - '@motionone/animation@10.18.0': - dependencies: - '@motionone/easing': 10.18.0 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - tslib: 2.8.1 - - '@motionone/dom@10.18.0': - dependencies: - '@motionone/animation': 10.18.0 - '@motionone/generators': 10.18.0 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - hey-listen: 1.0.8 - tslib: 2.8.1 - - '@motionone/easing@10.18.0': - dependencies: - '@motionone/utils': 10.18.0 - tslib: 2.8.1 - - '@motionone/generators@10.18.0': - dependencies: - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - tslib: 2.8.1 - - '@motionone/svelte@10.16.4': - dependencies: - '@motionone/dom': 10.18.0 - tslib: 2.8.1 - - '@motionone/types@10.17.1': {} - - '@motionone/utils@10.18.0': - dependencies: - '@motionone/types': 10.17.1 - hey-listen: 1.0.8 - tslib: 2.8.1 - - '@motionone/vue@10.16.4': + '@modelcontextprotocol/sdk@1.11.3': dependencies: - '@motionone/dom': 10.18.0 - tslib: 2.8.1 + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.0 + zod: 3.24.4 + zod-to-json-schema: 3.24.5(zod@3.24.4) + transitivePeerDependencies: + - supports-color '@multiversx/sdk-bls-wasm@0.3.5': {} @@ -11057,6 +11225,10 @@ snapshots: dependencies: '@noble/hashes': 1.7.1 + '@noble/curves@1.8.2': + dependencies: + '@noble/hashes': 1.7.2 + '@noble/ed25519@1.7.3': {} '@noble/hashes@1.2.0': {} @@ -11069,6 +11241,8 @@ snapshots: '@noble/hashes@1.7.1': {} + '@noble/hashes@1.7.2': {} + '@noble/secp256k1@1.7.1': {} '@noble/secp256k1@2.2.3': {} @@ -11234,42 +11408,297 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@rollup/plugin-node-resolve@7.1.3(rollup@4.35.0)': + '@reown/appkit-common@1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.35.0) - '@types/resolve': 0.0.8 - builtin-modules: 3.3.0 - is-module: 1.0.0 - resolve: 1.22.10 - rollup: 4.35.0 + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod - '@rollup/plugin-replace@2.4.2(rollup@4.35.0)': + '@reown/appkit-common@1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.35.0) - magic-string: 0.25.9 - rollup: 4.35.0 + big.js: 6.2.2 + dayjs: 1.11.13 + viem: 2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod - '@rollup/pluginutils@3.1.0(rollup@4.35.0)': + '@reown/appkit-controllers@1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 4.35.0 - - '@rollup/rollup-android-arm-eabi@4.35.0': - optional: true - - '@rollup/rollup-android-arm64@4.35.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.35.0': - optional: true - - '@rollup/rollup-darwin-x64@4.35.0': - optional: true + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-wallet': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + valtio: 1.13.2(@types/react@18.0.15)(react@18.3.1) + viem: 2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod - '@rollup/rollup-freebsd-arm64@4.35.0': - optional: true + '@reown/appkit-pay@1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-controllers': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-ui': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-utils': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1))(zod@3.24.4) + lit: 3.3.0 + valtio: 1.13.2(@types/react@18.0.15)(react@18.3.1) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-polyfills@1.7.5': + dependencies: + buffer: 6.0.3 + + '@reown/appkit-scaffold-ui@1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1))(zod@3.24.4)': + dependencies: + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-controllers': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-ui': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-utils': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1))(zod@3.24.4) + '@reown/appkit-wallet': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - valtio + - zod + + '@reown/appkit-ui@1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-controllers': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-wallet': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + lit: 3.3.0 + qrcode: 1.5.3 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-utils@1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1))(zod@3.24.4)': + dependencies: + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-controllers': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-polyfills': 1.7.5 + '@reown/appkit-wallet': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/logger': 2.1.2 + '@walletconnect/universal-provider': 2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + valtio: 1.13.2(@types/react@18.0.15)(react@18.3.1) + viem: 2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@reown/appkit-wallet@1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.7.5 + '@walletconnect/logger': 2.1.2 + zod: 3.22.4 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + + '@reown/appkit@1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@reown/appkit-common': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-controllers': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-pay': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-polyfills': 1.7.5 + '@reown/appkit-scaffold-ui': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1))(zod@3.24.4) + '@reown/appkit-ui': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@reown/appkit-utils': 1.7.5(@types/react@18.0.15)(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1))(zod@3.24.4) + '@reown/appkit-wallet': 1.7.5(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.20.2 + '@walletconnect/universal-provider': 2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + bs58: 6.0.0 + valtio: 1.13.2(@types/react@18.0.15)(react@18.3.1) + viem: 2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - react + - typescript + - uploadthing + - utf-8-validate + - zod + + '@rollup/plugin-node-resolve@7.1.3(rollup@4.35.0)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@4.35.0) + '@types/resolve': 0.0.8 + builtin-modules: 3.3.0 + is-module: 1.0.0 + resolve: 1.22.10 + rollup: 4.35.0 + + '@rollup/plugin-replace@2.4.2(rollup@4.35.0)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@4.35.0) + magic-string: 0.25.9 + rollup: 4.35.0 + + '@rollup/pluginutils@3.1.0(rollup@4.35.0)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 4.35.0 + + '@rollup/rollup-android-arm-eabi@4.35.0': + optional: true + + '@rollup/rollup-android-arm64@4.35.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.35.0': + optional: true + + '@rollup/rollup-darwin-x64@4.35.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.35.0': + optional: true '@rollup/rollup-freebsd-x64@4.35.0': optional: true @@ -11337,8 +11766,8 @@ snapshots: '@scure/bip32@1.6.2': dependencies: - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 '@scure/base': 1.2.4 '@scure/bip39@1.1.1': @@ -11353,7 +11782,7 @@ snapshots: '@scure/bip39@1.5.4': dependencies: - '@noble/hashes': 1.7.1 + '@noble/hashes': 1.7.2 '@scure/base': 1.2.4 '@sindresorhus/is@4.6.0': {} @@ -11781,86 +12210,86 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.21.0)(typescript@4.9.5) - '@typescript-eslint/parser': 4.33.0(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/experimental-utils': 4.33.0(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/parser': 4.33.0(eslint@9.26.0)(typescript@5.8.3) '@typescript-eslint/scope-manager': 4.33.0 debug: 4.4.0(supports-color@6.1.0) - eslint: 8.21.0 + eslint: 9.26.0 functional-red-black-tree: 1.0.1 ignore: 5.3.2 regexpp: 3.2.0 semver: 7.7.1 - tsutils: 3.21.0(typescript@4.9.5) + tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.26.0)(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.28.0 - '@typescript-eslint/type-utils': 8.28.0(eslint@8.21.0)(typescript@4.9.5) - '@typescript-eslint/utils': 8.28.0(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/type-utils': 8.28.0(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.28.0(eslint@9.26.0)(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.28.0 - eslint: 8.21.0 + eslint: 9.26.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@4.9.5) - typescript: 4.9.5 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@3.10.1(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/experimental-utils@3.10.1(eslint@9.26.0)(typescript@5.8.3)': dependencies: '@types/json-schema': 7.0.15 '@typescript-eslint/types': 3.10.1 - '@typescript-eslint/typescript-estree': 3.10.1(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/typescript-estree': 3.10.1(typescript@5.8.3) + eslint: 9.26.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/experimental-utils@4.33.0(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/experimental-utils@4.33.0(eslint@9.26.0)(typescript@5.8.3)': dependencies: '@types/json-schema': 7.0.15 '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.8.3) + eslint: 9.26.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.21.0) + eslint-utils: 3.0.0(eslint@9.26.0) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 - '@typescript-eslint/typescript-estree': 4.33.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.8.3) debug: 4.4.0(supports-color@6.1.0) - eslint: 8.21.0 + eslint: 9.26.0 optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) debug: 4.4.0(supports-color@6.1.0) - eslint: 8.21.0 + eslint: 9.26.0 optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -11879,14 +12308,14 @@ snapshots: '@typescript-eslint/types': 8.28.0 '@typescript-eslint/visitor-keys': 8.28.0 - '@typescript-eslint/type-utils@8.28.0(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/type-utils@8.28.0(eslint@9.26.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.28.0(typescript@4.9.5) - '@typescript-eslint/utils': 8.28.0(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.28.0(eslint@9.26.0)(typescript@5.8.3) debug: 4.4.0(supports-color@6.1.0) - eslint: 8.21.0 - ts-api-utils: 2.1.0(typescript@4.9.5) - typescript: 4.9.5 + eslint: 9.26.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -11898,7 +12327,7 @@ snapshots: '@typescript-eslint/types@8.28.0': {} - '@typescript-eslint/typescript-estree@3.10.1(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@3.10.1(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 3.10.1 '@typescript-eslint/visitor-keys': 3.10.1 @@ -11907,13 +12336,13 @@ snapshots: is-glob: 4.0.3 lodash: 4.17.21 semver: 7.7.1 - tsutils: 3.21.0(typescript@4.9.5) + tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@4.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 @@ -11921,13 +12350,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.1 - tsutils: 3.21.0(typescript@4.9.5) + tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -11935,13 +12364,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.1 - tsutils: 3.21.0(typescript@4.9.5) + tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.28.0(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.28.0 '@typescript-eslint/visitor-keys': 8.28.0 @@ -11950,19 +12379,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@4.9.5) - typescript: 4.9.5 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.28.0(eslint@8.21.0)(typescript@4.9.5)': + '@typescript-eslint/utils@8.28.0(eslint@9.26.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@8.21.0) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0) '@typescript-eslint/scope-manager': 8.28.0 '@typescript-eslint/types': 8.28.0 - '@typescript-eslint/typescript-estree': 8.28.0(typescript@4.9.5) - eslint: 8.21.0 - typescript: 4.9.5 + '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.3) + eslint: 9.26.0 + typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -12020,7 +12449,7 @@ snapshots: '@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2': optional: true - '@walletconnect/core@2.19.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + '@walletconnect/core@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -12033,8 +12462,8 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.1 - '@walletconnect/utils': 2.19.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.20.1 + '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -12063,7 +12492,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + '@walletconnect/core@2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -12076,8 +12505,8 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 - '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.20.2 + '@walletconnect/utils': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -12173,6 +12602,15 @@ snapshots: '@walletconnect/time': 1.0.2 events: 3.3.0 + '@walletconnect/jsonrpc-http-connection@1.0.8(encoding@0.1.13)': + dependencies: + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/safe-json': 1.0.2 + cross-fetch: 3.1.8(encoding@0.1.13) + events: 3.3.0 + transitivePeerDependencies: + - encoding + '@walletconnect/jsonrpc-provider@1.0.13': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 @@ -12256,16 +12694,51 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + '@walletconnect/sign-client@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: - '@walletconnect/core': 2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@walletconnect/core': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.20.1 - '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/sign-client@2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@walletconnect/core': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.20.2 + '@walletconnect/utils': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -12328,7 +12801,7 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/types@2.19.1': + '@walletconnect/types@2.20.1': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 @@ -12356,7 +12829,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.20.1': + '@walletconnect/types@2.20.2': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 @@ -12412,7 +12885,85 @@ snapshots: - ioredis - uploadthing - '@walletconnect/utils@2.19.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + '@walletconnect/universal-provider@2.20.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/types': 2.20.1 + '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/universal-provider@2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/types': 2.20.2 + '@walletconnect/utils': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + es-toolkit: 1.33.0 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - encoding + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + + '@walletconnect/utils@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -12423,15 +12974,14 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.19.1 + '@walletconnect/types': 2.20.1 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 detect-browser: 5.3.0 - elliptic: 6.6.1 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12456,7 +13006,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.20.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + '@walletconnect/utils@2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -12467,14 +13017,14 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 + '@walletconnect/types': 2.20.2 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 bs58: 6.0.0 detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12544,29 +13094,6 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@web3modal/core@2.4.3(react@18.3.1)': - dependencies: - buffer: 6.0.3 - valtio: 1.10.5(react@18.3.1) - transitivePeerDependencies: - - react - - '@web3modal/standalone@2.4.3(react@18.3.1)': - dependencies: - '@web3modal/core': 2.4.3(react@18.3.1) - '@web3modal/ui': 2.4.3(react@18.3.1) - transitivePeerDependencies: - - react - - '@web3modal/ui@2.4.3(react@18.3.1)': - dependencies: - '@web3modal/core': 2.4.3(react@18.3.1) - lit: 2.7.5 - motion: 10.16.2 - qrcode: 1.5.3 - transitivePeerDependencies: - - react - '@webassemblyjs/ast@1.9.0': dependencies: '@webassemblyjs/helper-module-context': 1.9.0 @@ -12669,9 +13196,15 @@ snapshots: abab@2.0.6: {} - abitype@1.0.8(typescript@4.9.5): + abitype@1.0.8(typescript@5.8.3)(zod@3.22.4): + optionalDependencies: + typescript: 5.8.3 + zod: 3.22.4 + + abitype@1.0.8(typescript@5.8.3)(zod@3.24.4): optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 + zod: 3.24.4 abortcontroller-polyfill@1.7.8: {} @@ -12680,6 +13213,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-globals@6.0.0: dependencies: acorn: 7.4.1 @@ -12959,13 +13497,13 @@ snapshots: axobject-query@4.1.0: {} - babel-eslint@10.1.0(eslint@8.21.0): + babel-eslint@10.1.0(eslint@9.26.0): dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.10 '@babel/traverse': 7.26.10 '@babel/types': 7.26.10 - eslint: 8.21.0 + eslint: 9.26.0 eslint-visitor-keys: 1.3.0 resolve: 1.18.1 transitivePeerDependencies: @@ -13171,6 +13709,8 @@ snapshots: big.js@5.2.2: {} + big.js@6.2.2: {} + bigint-buffer@1.1.5: dependencies: bindings: 1.5.0 @@ -13199,7 +13739,7 @@ snapshots: bip39@3.1.0: dependencies: - '@noble/hashes': 1.7.1 + '@noble/hashes': 1.7.2 bip66@1.1.5: dependencies: @@ -13261,6 +13801,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.0(supports-color@6.1.0) + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + bonjour@3.5.0: dependencies: array-flatten: 2.1.2 @@ -13367,7 +13921,7 @@ snapshots: bs58check@3.0.1: dependencies: - '@noble/hashes': 1.7.1 + '@noble/hashes': 1.7.2 bs58: 5.0.0 bser@2.1.1: @@ -13712,6 +14266,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-hash@2.5.2: dependencies: cids: 0.7.5 @@ -13734,6 +14292,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.7.1: {} copy-concurrently@1.0.5: @@ -14044,6 +14604,8 @@ snapshots: dateformat@4.6.3: {} + dayjs@1.11.13: {} + debug@2.6.9(supports-color@6.1.0): dependencies: ms: 2.0.0 @@ -14134,6 +14696,10 @@ snapshots: depd@2.0.0: {} + derive-valtio@0.1.0(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1)): + dependencies: + valtio: 1.13.2(@types/react@18.0.15)(react@18.3.1) + des.js@1.1.0: dependencies: inherits: 2.0.4 @@ -14189,10 +14755,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-converter@0.2.0: dependencies: utila: 0.4.0 @@ -14508,42 +15070,42 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@14.2.25(eslint@8.21.0)(typescript@4.9.5): + eslint-config-next@14.2.25(eslint@9.26.0)(typescript@5.8.3): dependencies: '@next/eslint-plugin-next': 14.2.25 '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 8.28.0(@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.21.0)(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/eslint-plugin': 8.28.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/parser': 5.62.0(eslint@9.26.0)(typescript@5.8.3) + eslint: 9.26.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0))(eslint@8.21.0) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.21.0) - eslint-plugin-react: 7.37.4(eslint@8.21.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.21.0) + eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0))(eslint@9.26.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.26.0) + eslint-plugin-react: 7.37.4(eslint@9.26.0) + eslint-plugin-react-hooks: 4.6.2(eslint@9.26.0) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(babel-eslint@10.1.0(eslint@8.21.0))(eslint-plugin-flowtype@5.10.0(eslint@8.21.0))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.21.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.21.0))(eslint-plugin-react@7.37.4(eslint@8.21.0))(eslint-plugin-testing-library@3.10.2(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5): + eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(babel-eslint@10.1.0(eslint@9.26.0))(eslint-plugin-flowtype@5.10.0(eslint@9.26.0))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0))(eslint-plugin-react-hooks@4.6.2(eslint@9.26.0))(eslint-plugin-react@7.37.4(eslint@9.26.0))(eslint-plugin-testing-library@3.10.2(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) - '@typescript-eslint/parser': 4.33.0(eslint@8.21.0)(typescript@4.9.5) - babel-eslint: 10.1.0(eslint@8.21.0) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/parser': 4.33.0(eslint@9.26.0)(typescript@5.8.3) + babel-eslint: 10.1.0(eslint@9.26.0) confusing-browser-globals: 1.0.11 - eslint: 8.21.0 - eslint-plugin-flowtype: 5.10.0(eslint@8.21.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.21.0) - eslint-plugin-react: 7.37.4(eslint@8.21.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.21.0) + eslint: 9.26.0 + eslint-plugin-flowtype: 5.10.0(eslint@9.26.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.26.0) + eslint-plugin-react: 7.37.4(eslint@9.26.0) + eslint-plugin-react-hooks: 4.6.2(eslint@9.26.0) optionalDependencies: - eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) - eslint-plugin-testing-library: 3.10.2(eslint@8.21.0)(typescript@4.9.5) - typescript: 4.9.5 + eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) + eslint-plugin-testing-library: 3.10.2(eslint@9.26.0)(typescript@5.8.3) + typescript: 5.8.3 eslint-import-resolver-node@0.3.9: dependencies: @@ -14553,49 +15115,49 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0): + eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@6.1.0) - eslint: 8.21.0 + eslint: 9.26.0 get-tsconfig: 4.10.0 is-bun-module: 1.3.0 rspack-resolver: 1.2.2 stable-hash: 0.0.5 tinyglobby: 0.2.12 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.21.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.26.0): dependencies: debug: 3.2.7(supports-color@6.1.0) optionalDependencies: - '@typescript-eslint/parser': 4.33.0(eslint@8.21.0)(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/parser': 4.33.0(eslint@9.26.0)(typescript@5.8.3) + eslint: 9.26.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0))(eslint@8.21.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0))(eslint@9.26.0): dependencies: debug: 3.2.7(supports-color@6.1.0) optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.21.0)(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/parser': 5.62.0(eslint@9.26.0)(typescript@5.8.3) + eslint: 9.26.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0) + eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0) transitivePeerDependencies: - supports-color - eslint-plugin-flowtype@5.10.0(eslint@8.21.0): + eslint-plugin-flowtype@5.10.0(eslint@9.26.0): dependencies: - eslint: 8.21.0 + eslint: 9.26.0 lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -14604,9 +15166,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@6.1.0) doctrine: 2.1.0 - eslint: 8.21.0 + eslint: 9.26.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint@8.21.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.26.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14618,13 +15180,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 4.33.0(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/parser': 4.33.0(eslint@9.26.0)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0))(eslint@8.21.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0))(eslint@9.26.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -14633,9 +15195,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@6.1.0) doctrine: 2.1.0 - eslint: 8.21.0 + eslint: 9.26.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@8.21.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint@8.21.0))(eslint@8.21.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.26.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint@9.26.0))(eslint@9.26.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14647,23 +15209,23 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@9.26.0)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5): + eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.21.0)(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/experimental-utils': 4.33.0(eslint@9.26.0)(typescript@5.8.3) + eslint: 9.26.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsx-a11y@6.10.2(eslint@8.21.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -14673,7 +15235,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.21.0 + eslint: 9.26.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -14682,11 +15244,11 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-package-json@0.13.1(eslint@8.21.0)(jsonc-eslint-parser@2.4.0): + eslint-plugin-package-json@0.13.1(eslint@9.26.0)(jsonc-eslint-parser@2.4.0): dependencies: detect-indent: 6.1.0 detect-newline: 3.1.0 - eslint: 8.21.0 + eslint: 9.26.0 jsonc-eslint-parser: 2.4.0 package-json-validator: 0.6.8 semver: 7.7.1 @@ -14694,11 +15256,11 @@ snapshots: sort-package-json: 1.57.0 validate-npm-package-name: 5.0.1 - eslint-plugin-react-hooks@4.6.2(eslint@8.21.0): + eslint-plugin-react-hooks@4.6.2(eslint@9.26.0): dependencies: - eslint: 8.21.0 + eslint: 9.26.0 - eslint-plugin-react@7.37.4(eslint@8.21.0): + eslint-plugin-react@7.37.4(eslint@9.26.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -14706,7 +15268,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 8.21.0 + eslint: 9.26.0 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -14720,10 +15282,10 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-testing-library@3.10.2(eslint@8.21.0)(typescript@4.9.5): + eslint-plugin-testing-library@3.10.2(eslint@9.26.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/experimental-utils': 3.10.1(eslint@8.21.0)(typescript@4.9.5) - eslint: 8.21.0 + '@typescript-eslint/experimental-utils': 3.10.1(eslint@9.26.0)(typescript@5.8.3) + eslint: 9.26.0 transitivePeerDependencies: - supports-color - typescript @@ -14738,7 +15300,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -14747,9 +15309,9 @@ snapshots: dependencies: eslint-visitor-keys: 1.3.0 - eslint-utils@3.0.0(eslint@8.21.0): + eslint-utils@3.0.0(eslint@9.26.0): dependencies: - eslint: 8.21.0 + eslint: 9.26.0 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@1.3.0: {} @@ -14760,58 +15322,56 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint-webpack-plugin@2.7.0(eslint@8.21.0)(webpack@4.44.2): + eslint-webpack-plugin@2.7.0(eslint@9.26.0)(webpack@4.44.2): dependencies: '@types/eslint': 7.29.0 arrify: 2.0.1 - eslint: 8.21.0 + eslint: 9.26.0 jest-worker: 27.5.1 micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 3.3.0 webpack: 4.44.2 - eslint@8.21.0: + eslint@9.26.0: dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.10.7 - '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.13.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.26.0 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@modelcontextprotocol/sdk': 1.11.3 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.0(supports-color@6.1.0) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-utils: 3.0.0(eslint@8.21.0) - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 - functional-red-black-tree: 1.0.1 glob-parent: 6.0.2 - globals: 13.24.0 - globby: 11.1.0 - grapheme-splitter: 1.0.4 ignore: 5.3.2 - import-fresh: 3.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - v8-compile-cache: 2.4.0 + zod: 3.24.4 transitivePeerDependencies: - supports-color @@ -14822,6 +15382,12 @@ snapshots: event-emitter: 0.3.5 type: 2.7.3 + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + espree@9.6.1: dependencies: acorn: 8.14.1 @@ -14885,7 +15451,7 @@ snapshots: ethereum-bloom-filters@1.2.0: dependencies: - '@noble/hashes': 1.7.1 + '@noble/hashes': 1.7.2 ethereum-cryptography@0.1.3: dependencies: @@ -15013,8 +15579,14 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.2: {} + eventsource@2.0.2: {} + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.2 + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 @@ -15055,6 +15627,10 @@ snapshots: jest-message-util: 26.6.2 jest-regex-util: 26.0.0 + express-rate-limit@7.5.0(express@5.1.0): + dependencies: + express: 5.1.0 + express@4.21.2(supports-color@6.1.0): dependencies: accepts: 1.3.8 @@ -15091,6 +15667,38 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.2.2 + debug: 4.4.0(supports-color@6.1.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + ext@1.7.0: dependencies: type: 2.7.3 @@ -15143,9 +15751,9 @@ snapshots: figgy-pudding@3.5.2: {} - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-loader@6.1.1(webpack@4.44.2): dependencies: @@ -15179,6 +15787,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.0(supports-color@6.1.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 @@ -15205,11 +15824,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.3 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.3: {} @@ -15235,7 +15853,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@4.1.6(eslint@8.21.0)(typescript@4.9.5)(webpack@4.44.2): + fork-ts-checker-webpack-plugin@4.1.6(eslint@9.26.0)(typescript@5.8.3)(webpack@4.44.2): dependencies: '@babel/code-frame': 7.10.4 chalk: 2.4.2 @@ -15243,11 +15861,11 @@ snapshots: minimatch: 5.1.6 semver: 5.7.2 tapable: 1.1.3 - typescript: 4.9.5 + typescript: 5.8.3 webpack: 4.44.2 worker-rpc: 0.1.1 optionalDependencies: - eslint: 8.21.0 + eslint: 9.26.0 form-data-encoder@1.7.1: {} @@ -15279,6 +15897,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + from2@2.3.0: dependencies: inherits: 2.0.4 @@ -15445,9 +16065,7 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: dependencies: @@ -15529,8 +16147,6 @@ snapshots: graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - graphemer@1.4.0: {} growly@1.3.0: @@ -15612,8 +16228,6 @@ snapshots: hex-color-regex@1.1.0: {} - hey-listen@1.0.8: {} - hmac-drbg@1.0.1: dependencies: hash.js: 1.1.7 @@ -16009,6 +16623,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -16080,6 +16696,10 @@ snapshots: dependencies: ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isows@1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isstream@0.1.2: {} istanbul-lib-coverage@3.2.2: {} @@ -16223,7 +16843,7 @@ snapshots: jest-config@26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.12.3 - '@jest/test-sequencer': 26.6.3 + '@jest/test-sequencer': 26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@jest/types': 26.6.2 babel-jest: 26.6.3(@babel/core@7.12.3) chalk: 4.1.2 @@ -16756,21 +17376,21 @@ snapshots: lines-and-columns@1.2.4: {} - lit-element@3.3.3: + lit-element@4.2.0: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 - '@lit/reactive-element': 1.6.3 - lit-html: 2.8.0 + '@lit/reactive-element': 2.1.0 + lit-html: 3.3.0 - lit-html@2.8.0: + lit-html@3.3.0: dependencies: '@types/trusted-types': 2.0.7 - lit@2.7.5: + lit@3.3.0: dependencies: - '@lit/reactive-element': 1.6.3 - lit-element: 3.3.3 - lit-html: 2.8.0 + '@lit/reactive-element': 2.1.0 + lit-element: 4.2.0 + lit-html: 3.3.0 loader-runner@2.4.0: {} @@ -16885,6 +17505,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs@4.17.0: dependencies: '@jsonjoy.com/json-pack': 1.2.0(tslib@2.8.1) @@ -16904,6 +17526,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -16928,10 +17552,16 @@ snapshots: mime-db@1.53.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mimic-fn@2.1.0: {} @@ -17020,15 +17650,6 @@ snapshots: mock-fs@4.14.0: {} - motion@10.16.2: - dependencies: - '@motionone/animation': 10.18.0 - '@motionone/dom': 10.18.0 - '@motionone/svelte': 10.16.4 - '@motionone/types': 10.17.1 - '@motionone/utils': 10.18.0 - '@motionone/vue': 10.16.4 - move-concurrently@1.0.1: dependencies: aproba: 1.2.0 @@ -17094,6 +17715,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} next-tick@1.1.0: {} @@ -17375,17 +17998,45 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.7(typescript@4.9.5): + ox@0.6.7(typescript@5.8.3)(zod@3.24.4): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@4.9.5) + abitype: 1.0.8(typescript@5.8.3)(zod@3.24.4) eventemitter3: 5.0.1 optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 + transitivePeerDependencies: + - zod + + ox@0.6.9(typescript@5.8.3)(zod@3.22.4): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.8.3)(zod@3.22.4) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - zod + + ox@0.6.9(typescript@5.8.3)(zod@3.24.4): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.8.3)(zod@3.24.4) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.3 transitivePeerDependencies: - zod @@ -17507,6 +18158,8 @@ snapshots: path-to-regexp@0.1.12: {} + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} pbkdf2@3.1.2: @@ -17596,6 +18249,8 @@ snapshots: pirates@4.0.6: {} + pkce-challenge@5.0.0: {} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -17610,9 +18265,9 @@ snapshots: pngjs@5.0.0: {} - pnp-webpack-plugin@1.6.4(typescript@4.9.5): + pnp-webpack-plugin@1.6.4(typescript@5.8.3): dependencies: - ts-pnp: 1.2.0(typescript@4.9.5) + ts-pnp: 1.2.0(typescript@5.8.3) transitivePeerDependencies: - typescript @@ -18155,7 +18810,7 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-compare@2.5.1: {} + proxy-compare@2.6.0: {} proxy-from-env@1.1.0: {} @@ -18271,6 +18926,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + react-app-polyfill@2.0.0: dependencies: core-js: 3.41.0 @@ -18280,7 +18942,7 @@ snapshots: regenerator-runtime: 0.13.11 whatwg-fetch: 3.6.20 - react-dev-utils@11.0.4(eslint@8.21.0)(typescript@4.9.5)(webpack@4.44.2): + react-dev-utils@11.0.4(eslint@9.26.0)(typescript@5.8.3)(webpack@4.44.2): dependencies: '@babel/code-frame': 7.10.4 address: 1.1.2 @@ -18291,7 +18953,7 @@ snapshots: escape-string-regexp: 2.0.0 filesize: 6.1.0 find-up: 4.1.0 - fork-ts-checker-webpack-plugin: 4.1.6(eslint@8.21.0)(typescript@4.9.5)(webpack@4.44.2) + fork-ts-checker-webpack-plugin: 4.1.6(eslint@9.26.0)(typescript@5.8.3)(webpack@4.44.2) global-modules: 2.0.0 globby: 11.0.1 gzip-size: 5.1.1 @@ -18308,7 +18970,7 @@ snapshots: text-table: 0.2.0 webpack: 4.44.2 optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - eslint - supports-color @@ -18335,14 +18997,14 @@ snapshots: react-refresh@0.8.3: {} - react-scripts@4.0.3(@types/webpack@4.41.40)(bufferutil@4.0.9)(eslint@8.21.0)(react@18.3.1)(sockjs-client@1.6.1)(typescript@4.9.5)(utf-8-validate@5.0.10): + react-scripts@4.0.3(@types/webpack@4.41.40)(bufferutil@4.0.9)(eslint@9.26.0)(react@18.3.1)(sockjs-client@1.6.1)(typescript@5.8.3)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.12.3 '@pmmmwh/react-refresh-webpack-plugin': 0.4.3(@types/webpack@4.41.40)(react-refresh@0.8.3)(sockjs-client@1.6.1)(webpack-dev-server@3.11.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@4.44.2))(webpack@4.44.2) '@svgr/webpack': 5.5.0 - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) - '@typescript-eslint/parser': 4.33.0(eslint@8.21.0)(typescript@4.9.5) - babel-eslint: 10.1.0(eslint@8.21.0) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) + '@typescript-eslint/parser': 4.33.0(eslint@9.26.0)(typescript@5.8.3) + babel-eslint: 10.1.0(eslint@9.26.0) babel-jest: 26.6.3(@babel/core@7.12.3) babel-loader: 8.1.0(@babel/core@7.12.3)(webpack@4.44.2) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.12.3) @@ -18353,16 +19015,16 @@ snapshots: css-loader: 4.3.0(webpack@4.44.2) dotenv: 8.2.0 dotenv-expand: 5.1.0 - eslint: 8.21.0 - eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(babel-eslint@10.1.0(eslint@8.21.0))(eslint-plugin-flowtype@5.10.0(eslint@8.21.0))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0))(eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint-plugin-jsx-a11y@6.10.2(eslint@8.21.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.21.0))(eslint-plugin-react@7.37.4(eslint@8.21.0))(eslint-plugin-testing-library@3.10.2(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) - eslint-plugin-flowtype: 5.10.0(eslint@8.21.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0) - eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5))(eslint@8.21.0)(typescript@4.9.5) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.21.0) - eslint-plugin-react: 7.37.4(eslint@8.21.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.21.0) - eslint-plugin-testing-library: 3.10.2(eslint@8.21.0)(typescript@4.9.5) - eslint-webpack-plugin: 2.7.0(eslint@8.21.0)(webpack@4.44.2) + eslint: 9.26.0 + eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(babel-eslint@10.1.0(eslint@9.26.0))(eslint-plugin-flowtype@5.10.0(eslint@9.26.0))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0))(eslint-plugin-jest@24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.26.0))(eslint-plugin-react-hooks@4.6.2(eslint@9.26.0))(eslint-plugin-react@7.37.4(eslint@9.26.0))(eslint-plugin-testing-library@3.10.2(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) + eslint-plugin-flowtype: 5.10.0(eslint@9.26.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0) + eslint-plugin-jest: 24.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.26.0) + eslint-plugin-react: 7.37.4(eslint@9.26.0) + eslint-plugin-react-hooks: 4.6.2(eslint@9.26.0) + eslint-plugin-testing-library: 3.10.2(eslint@9.26.0)(typescript@5.8.3) + eslint-webpack-plugin: 2.7.0(eslint@9.26.0)(webpack@4.44.2) file-loader: 6.1.1(webpack@4.44.2) fs-extra: 9.1.0 html-webpack-plugin: 4.5.0(webpack@4.44.2) @@ -18373,7 +19035,7 @@ snapshots: jest-watch-typeahead: 0.6.1(jest@26.6.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) mini-css-extract-plugin: 0.11.3(webpack@4.44.2) optimize-css-assets-webpack-plugin: 5.0.4(webpack@4.44.2) - pnp-webpack-plugin: 1.6.4(typescript@4.9.5) + pnp-webpack-plugin: 1.6.4(typescript@5.8.3) postcss-flexbugs-fixes: 4.2.1 postcss-loader: 3.0.0 postcss-normalize: 8.0.1 @@ -18382,7 +19044,7 @@ snapshots: prompts: 2.4.0 react: 18.3.1 react-app-polyfill: 2.0.0 - react-dev-utils: 11.0.4(eslint@8.21.0)(typescript@4.9.5)(webpack@4.44.2) + react-dev-utils: 11.0.4(eslint@9.26.0)(typescript@5.8.3)(webpack@4.44.2) react-refresh: 0.8.3 resolve: 1.18.1 resolve-url-loader: 3.1.5 @@ -18390,7 +19052,7 @@ snapshots: semver: 7.7.1 style-loader: 1.3.0(webpack@4.44.2) terser-webpack-plugin: 4.2.3(webpack@4.44.2) - ts-pnp: 1.2.0(typescript@4.9.5) + ts-pnp: 1.2.0(typescript@5.8.3) url-loader: 4.1.1(file-loader@6.1.1(webpack@4.44.2))(webpack@4.44.2) webpack: 4.44.2 webpack-dev-server: 3.11.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@4.44.2) @@ -18398,7 +19060,7 @@ snapshots: workbox-webpack-plugin: 5.1.4(webpack@4.44.2) optionalDependencies: fsevents: 2.3.3 - typescript: 4.9.5 + typescript: 5.8.3 transitivePeerDependencies: - '@types/webpack' - bluebird @@ -18707,6 +19369,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.35.0 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.0(supports-color@6.1.0) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + rpc-websockets@9.1.1: dependencies: '@swc/helpers': 0.5.15 @@ -18882,6 +19554,22 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.0: + dependencies: + debug: 4.4.0(supports-color@6.1.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serialize-javascript@4.0.0: dependencies: randombytes: 2.1.0 @@ -18911,6 +19599,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + servify@0.1.12: dependencies: body-parser: 1.20.3(supports-color@6.1.0) @@ -19588,13 +20285,13 @@ snapshots: tryer@1.0.1: {} - ts-api-utils@2.1.0(typescript@4.9.5): + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: - typescript: 4.9.5 + typescript: 5.8.3 - ts-pnp@1.2.0(typescript@4.9.5): + ts-pnp@1.2.0(typescript@5.8.3): optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 tsconfig-paths@3.15.0: dependencies: @@ -19609,10 +20306,10 @@ snapshots: tslib@2.8.1: {} - tsutils@3.21.0(typescript@4.9.5): + tsutils@3.21.0(typescript@5.8.3): dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 5.8.3 tty-browserify@0.0.0: {} @@ -19636,8 +20333,6 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.3.1: {} @@ -19651,6 +20346,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + type@2.7.3: {} typed-array-buffer@1.0.3: @@ -19694,7 +20395,7 @@ snapshots: typeforce@1.18.0: {} - typescript@4.9.5: {} + typescript@5.8.3: {} ufo@1.5.4: {} @@ -19854,8 +20555,6 @@ snapshots: uuid@9.0.1: {} - v8-compile-cache@2.4.0: {} - v8-to-istanbul@7.1.2: dependencies: '@types/istanbul-lib-coverage': 2.0.6 @@ -19871,11 +20570,13 @@ snapshots: validator@13.12.0: {} - valtio@1.10.5(react@18.3.1): + valtio@1.13.2(@types/react@18.0.15)(react@18.3.1): dependencies: - proxy-compare: 2.5.1 + derive-valtio: 0.1.0(valtio@1.13.2(@types/react@18.0.15)(react@18.3.1)) + proxy-compare: 2.6.0 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: + '@types/react': 18.0.15 react: 18.3.1 varint@5.0.2: {} @@ -19894,18 +20595,52 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - viem@2.23.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10): + viem@2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4): dependencies: '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@4.9.5) + abitype: 1.0.8(typescript@5.8.3)(zod@3.24.4) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@4.9.5) + ox: 0.6.7(typescript@5.8.3)(zod@3.24.4) ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 4.9.5 + typescript: 5.8.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.22.4): + dependencies: + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.8.3)(zod@3.22.4) + isows: 1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.6.9(typescript@5.8.3)(zod@3.22.4) + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.29.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4): + dependencies: + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.8.3)(zod@3.24.4) + isows: 1.0.6(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.6.9(typescript@5.8.3)(zod@3.24.4) + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.3 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -20595,3 +21330,11 @@ snapshots: yargs-parser: 18.1.3 yocto-queue@0.1.0: {} + + zod-to-json-schema@3.24.5(zod@3.24.4): + dependencies: + zod: 3.24.4 + + zod@3.22.4: {} + + zod@3.24.4: {} diff --git a/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx index f82a8d1c9..02fd1c269 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/ClientContext.tsx @@ -1,6 +1,13 @@ -import Client from "@walletconnect/sign-client"; import { PairingTypes, SessionTypes } from "@walletconnect/types"; -import { Web3Modal } from "@web3modal/standalone"; +import { AppKit, CaipNetwork, CaipNetworkId } from "@reown/appkit"; +// @ts-expect-error - our "moduleResolution" doesn't like this +import { createAppKit } from "@reown/appkit/core"; +import { defineChain } from "@reown/appkit/networks"; +import { + IUniversalProvider, + NamespaceConfig, + UniversalProvider, +} from "@walletconnect/universal-provider"; import { RELAYER_EVENTS } from "@walletconnect/core"; import toast from "react-hot-toast"; @@ -18,21 +25,19 @@ import { import { getAppMetadata, getSdkError } from "@walletconnect/utils"; import { - DEFAULT_APP_METADATA, DEFAULT_LOGGER, DEFAULT_PROJECT_ID, DEFAULT_RELAY_URL, } from "../constants"; import { AccountBalances, apiGetAccountBalance } from "../helpers"; -import { - getOptionalNamespaces, - getRequiredNamespaces, -} from "../helpers/namespaces"; +import { getRequiredNamespaces } from "../helpers/namespaces"; import { getPublicKeysFromAccounts } from "../helpers/solana"; /** * Types */ + +type Client = IUniversalProvider["client"]; interface IContext { client: Client | undefined; session: SessionTypes.Struct | undefined; @@ -57,25 +62,8 @@ interface IContext { */ export const ClientContext = createContext({} as IContext); -/** - * Web3Modal Config - */ -const web3Modal = new Web3Modal({ - projectId: DEFAULT_PROJECT_ID, - themeMode: "light", - walletConnectVersion: 2, - mobileWallets: [ - { - id: "bifrost", - name: "Bifrost Wallet", - links: { - native: "bifrostwallet://", - universal: "https://bifrostwallet.com", - }, - }, - ], -}); - +let creatingClient: boolean = false; +let appkit: AppKit | undefined; /** * Provider */ @@ -85,6 +73,7 @@ export function ClientContextProvider({ children: ReactNode | ReactNode[]; }) { const [client, setClient] = useState(); + const [provider, setProvider] = useState(); const [pairings, setPairings] = useState([]); const [session, setSession] = useState(); @@ -155,31 +144,54 @@ export function ClientContextProvider({ [] ); + const mapCaipIdToAppKitCaipNetwork = (caipId: CaipNetworkId): CaipNetwork => { + const [namespace, chainId] = caipId.split(":"); + const chain = defineChain({ + id: chainId, + caipNetworkId: caipId, + chainNamespace: namespace as CaipNetwork["chainNamespace"], + name: "", + nativeCurrency: { + name: "", + symbol: "", + decimals: 8, + }, + rpcUrls: { + default: { http: ["https://rpc.walletconnect.org/v1"] }, + }, + }); + + return chain as CaipNetwork; + }; + const connect = useCallback( async (pairing: any) => { - if (typeof client === "undefined") { + if (typeof provider === "undefined" || typeof client === "undefined") { throw new Error("WalletConnect is not initialized"); } console.log("connect, pairing topic is:", pairing?.topic); try { const namespacesToRequest = getRequiredNamespaces(chains); - const { uri, approval } = await client.connect({ - pairingTopic: pairing?.topic, - requiredNamespaces: {}, - optionalNamespaces: namespacesToRequest, + + appkit?.open(); + + appkit?.subscribeState((state: { open: boolean }) => { + // the modal was closed so reject the promise + if (!state.open && !provider.session) { + throw new Error("Connection request reset. Please try again."); + } }); - // Open QRCode modal if a URI was returned (i.e. we're not connecting an existing pairing). - if (uri) { - // Create a flat array of all requested chains across namespaces. - const standaloneChains = Object.values(namespacesToRequest) - .map((namespace) => namespace.chains) - .flat() as string[]; + provider.namespaces = undefined; + const session = await provider.connect({ + pairingTopic: pairing?.topic, + optionalNamespaces: namespacesToRequest as NamespaceConfig, + }); - web3Modal.openModal({ uri, standaloneChains }); + if (!session) { + throw new Error("Session is not connected"); } - const session = await approval(); console.log("Established session:", session); await onSessionConnected(session); // Update known pairings after session is connected. @@ -192,10 +204,10 @@ export function ClientContextProvider({ throw e; } finally { // close modal in case it was open - web3Modal.closeModal(); + appkit?.close(); } }, - [chains, client, onSessionConnected] + [chains, client, onSessionConnected, provider] ); const disconnect = useCallback(async () => { @@ -288,12 +300,43 @@ export function ClientContextProvider({ } }, []); + const createModal = useCallback((provider: IUniversalProvider) => { + if (appkit) return; + const networks = ["eip155:1"].map((caipId) => + mapCaipIdToAppKitCaipNetwork(caipId as CaipNetworkId) + ); + appkit = createAppKit({ + projectId: DEFAULT_PROJECT_ID, + themeMode: "dark", + manualWCControl: true, + universalProvider: provider, + networks: [networks[0], ...networks], + metadata: { + name: "React App", + description: "App to test WalletConnect network", + url: location.origin, + icons: [], + }, + showWallets: true, + enableEIP6963: false, // Disable 6963 by default + enableInjected: false, // Disable injected by default + enableCoinbase: true, // Default to true + enableWalletConnect: true, // Default to true, + features: { + email: false, + socials: false, + }, + }); + }, []); + const createClient = useCallback(async () => { try { + if (creatingClient) return; + creatingClient = true; setIsInitializing(true); const claimedOrigin = localStorage.getItem("wallet_connect_dapp_origin") || origin; - const _client = await Client.init({ + const provider = await UniversalProvider.init({ logger: DEFAULT_LOGGER, relayUrl: relayerRegion, projectId: DEFAULT_PROJECT_ID, @@ -304,11 +347,17 @@ export function ClientContextProvider({ icons: [], }, }); + + createModal(provider); + + const _client = provider.client; + if (claimedOrigin === "unknown") { //@ts-expect-error - private property _client.core.verify.verifyUrlV3 = "0xdeafbeef"; console.log("verify", _client.core.verify); } + setProvider(provider); setClient(_client); setOrigin(_client.metadata.url); console.log("metadata url:", _client.metadata); @@ -320,14 +369,16 @@ export function ClientContextProvider({ } catch (err) { throw err; } finally { + creatingClient = false; setIsInitializing(false); } }, [ - _checkPersistedState, + origin, + relayerRegion, + createModal, _subscribeToEvents, + _checkPersistedState, _logClientId, - relayerRegion, - origin, ]); useEffect(() => { diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index 8891bdcb5..ae7952969 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -883,11 +883,11 @@ export function JsonRpcContextProvider({ ...key, pubkey: key.pubkey.toBase58(), })), - data: bs58.encode(instruction.data), + data: bs58.encode(new Uint8Array(instruction.data)), })), partialSignatures: transaction.signatures.map((sign) => ({ pubkey: sign.publicKey.toBase58(), - signature: bs58.encode(sign.signature!), + signature: bs58.encode(new Uint8Array(sign.signature!)), })), transaction: transaction .serialize({ verifySignatures: false }) diff --git a/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts b/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts index f5363c51b..e0d376cfd 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts @@ -114,7 +114,7 @@ export const getSupportedEventsByNamespace = (namespace: string) => { export const getRequiredNamespaces = ( chains: string[] -): ProposalTypes.RequiredNamespaces => { +): ProposalTypes.OptionalNamespaces => { const selectedNamespaces = getNamespacesFromChains(chains); console.log("selected required namespaces:", selectedNamespaces); diff --git a/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts b/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts index e25fa569d..aaa6916d3 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/utilities.ts @@ -85,11 +85,13 @@ export function isMobile(): boolean { export function encodePersonalMessage(msg: string): string { const data = encoding.utf8ToBuffer(msg); const buf = Buffer.concat([ - Buffer.from( - "\u0019Ethereum Signed Message:\n" + data.length.toString(), - "utf8" + new Uint8Array( + Buffer.from( + "\u0019Ethereum Signed Message:\n" + data.length.toString(), + "utf8" + ) ), - data, + new Uint8Array(data), ]); return ethUtil.bufferToHex(buf); } @@ -104,12 +106,16 @@ export function hashPersonalMessage(msg: string): string { export function encodeTypedDataMessage(msg: string): string { const data = TypedDataUtils.sanitizeData(JSON.parse(msg)); const buf = Buffer.concat([ - Buffer.from("1901", "hex"), - TypedDataUtils.hashStruct("EIP712Domain", data.domain, data.types), - TypedDataUtils.hashStruct( - data.primaryType as string, - data.message, - data.types + new Uint8Array(Buffer.from("1901", "hex")), + new Uint8Array( + TypedDataUtils.hashStruct("EIP712Domain", data.domain, data.types) + ), + new Uint8Array( + TypedDataUtils.hashStruct( + data.primaryType as string, + data.message, + data.types + ) ), ]); return ethUtil.bufferToHex(buf); From 24aedf8094974ccf94c329574423bccf88f33e54 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Mon, 19 May 2025 17:49:31 +0300 Subject: [PATCH 2/9] feat: sui + personal sign --- advanced/dapps/react-dapp-v2/package.json | 11 +- advanced/dapps/react-dapp-v2/pnpm-lock.yaml | 678 +++++------------- .../dapps/react-dapp-v2/public/assets/sui.png | Bin 0 -> 3301 bytes .../dapps/react-dapp-v2/src/chains/index.ts | 3 + .../dapps/react-dapp-v2/src/chains/sui.ts | 53 ++ .../react-dapp-v2/src/components/Button.tsx | 1 + .../react-dapp-v2/src/components/Column.tsx | 13 +- .../react-dapp-v2/src/constants/default.ts | 17 + .../src/contexts/ChainDataContext.tsx | 4 + .../src/contexts/JsonRpcContext.tsx | 113 +++ .../react-dapp-v2/src/helpers/namespaces.ts | 6 + .../dapps/react-dapp-v2/src/pages/index.tsx | 34 + advanced/wallets/react-wallet-v2/package.json | 3 +- .../public/chain-logos/sui.png | Bin 0 -> 3301 bytes .../react-wallet-v2/src/components/Modal.tsx | 3 + .../src/components/RequestDetalilsCard.tsx | 24 +- .../react-wallet-v2/src/data/SuiData.ts | 84 +++ .../react-wallet-v2/src/data/chainsUtil.ts | 4 +- .../src/hooks/useInitialization.ts | 3 + .../hooks/useWalletConnectEventsManager.ts | 6 + .../wallets/react-wallet-v2/src/lib/SuiLib.ts | 351 +++++++++ .../react-wallet-v2/src/pages/index.tsx | 25 + .../react-wallet-v2/src/store/ModalStore.ts | 1 + .../src/store/SettingsStore.ts | 5 + .../src/utils/SuiRequestHandlerUtil.ts | 59 ++ .../src/utils/SuiWalletUtil.ts | 31 + .../src/views/SessionProposalModal.tsx | 15 + .../SessionSignSuiPersonalMessageModal.tsx | 104 +++ advanced/wallets/react-wallet-v2/yarn.lock | 99 ++- 29 files changed, 1213 insertions(+), 537 deletions(-) create mode 100644 advanced/dapps/react-dapp-v2/public/assets/sui.png create mode 100644 advanced/dapps/react-dapp-v2/src/chains/sui.ts create mode 100644 advanced/wallets/react-wallet-v2/public/chain-logos/sui.png create mode 100644 advanced/wallets/react-wallet-v2/src/data/SuiData.ts create mode 100644 advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts create mode 100644 advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts create mode 100644 advanced/wallets/react-wallet-v2/src/utils/SuiWalletUtil.ts create mode 100644 advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx diff --git a/advanced/dapps/react-dapp-v2/package.json b/advanced/dapps/react-dapp-v2/package.json index 303d070ea..8193ca021 100644 --- a/advanced/dapps/react-dapp-v2/package.json +++ b/advanced/dapps/react-dapp-v2/package.json @@ -31,6 +31,7 @@ "@walletconnect/utils": "2.20.1", "@reown/appkit": "1.7.5", "axios": "^1.0.0", + "@mysten/sui": "^1.29.1", "bitcoinjs-lib": "^6.1.5", "bitcoinjs-message": "^2.2.0", "blockies-ts": "^1.0.0", @@ -104,7 +105,15 @@ "semver@>=7.0.0 <7.5.2": ">=7.5.2", "next@>=9.5.5 <14.2.15": ">=14.2.15", "ansi-html@<0.0.8": ">=0.0.8", - "axios@<1.8.2": ">=1.8.2" + "axios@<1.8.2": ">=1.8.2", + "@walletconnect/core@": ">=2.20.2", + "@walletconnect/encoding@": ">=1.0.1", + "@walletconnect/jsonrpc-utils@": ">=1.0.8", + "@walletconnect/types@": ">=2.20.2", + "@walletconnect/universal-provider@": ">=2.20.2", + "@walletconnect/sign-client@": ">=2.20.2", + "@walletconnect/utils@": ">=2.20.2", + "@walletconnect/ethereum-provider@": ">=2.20.2" } } } diff --git a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml index 4e55e004c..16ff33ce3 100644 --- a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml +++ b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml @@ -38,6 +38,13 @@ overrides: next@>=9.5.5 <14.2.15: '>=14.2.15' ansi-html@<0.0.8: '>=0.0.8' axios@<1.8.2: '>=1.8.2' + '@walletconnect/core@': '>=2.20.1' + '@walletconnect/encoding@': '>=1.0.1' + '@walletconnect/jsonrpc-utils@': '>=1.0.8' + '@walletconnect/types@': '>=2.20.1' + '@walletconnect/universal-provider@': '>=2.20.1' + '@walletconnect/sign-client@': '>=2.20.1' + '@walletconnect/utils@': '>=2.20.1' importers: @@ -51,7 +58,7 @@ importers: version: 3.5.2 '@kadena/client': specifier: ^0.5.0 - version: 0.5.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + version: 0.5.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@kadena/cryptography-utils': specifier: ^0.4.0 version: 0.4.4 @@ -67,6 +74,9 @@ importers: '@multiversx/sdk-wallet': specifier: 4.2.0 version: 4.2.0 + '@mysten/sui': + specifier: ^1.29.1 + version: 1.29.1(typescript@5.8.3) '@noble/curves': specifier: ^1.8.1 version: 1.8.1 @@ -83,23 +93,23 @@ importers: specifier: ^1.36.0 version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/core': - specifier: ^2.19.1 + specifier: '>=2.20.1' version: 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/encoding': - specifier: ^1.0.1 + specifier: '>=1.0.1' version: 1.0.2 '@walletconnect/jsonrpc-utils': - specifier: ^1.0.8 + specifier: '>=1.0.8' version: 1.0.8 '@walletconnect/types': - specifier: 2.20.1 - version: 2.20.1 + specifier: '>=2.20.1' + version: 2.20.2 '@walletconnect/universal-provider': - specifier: 2.20.1 - version: 2.20.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + specifier: '>=2.20.1' + version: 2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/utils': - specifier: 2.20.1 - version: 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + specifier: '>=2.20.1' + version: 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) axios: specifier: '>=1.8.2' version: 1.8.3 @@ -215,6 +225,20 @@ importers: packages: + '@0no-co/graphql.web@1.1.2': + resolution: {integrity: sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + + '@0no-co/graphqlsp@1.12.16': + resolution: {integrity: sha512-B5pyYVH93Etv7xjT6IfB7QtMBdaaC07yjbhN6v8H7KgFStMkPvi+oWYBTibMFRMY89qwc9H8YixXg8SXDVgYWw==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + '@adraffy/ens-normalize@1.11.0': resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} @@ -1154,6 +1178,31 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@gql.tada/cli-utils@1.6.3': + resolution: {integrity: sha512-jFFSY8OxYeBxdKi58UzeMXG1tdm4FVjXa8WHIi66Gzu9JWtCE6mqom3a8xkmSw+mVaybFW5EN2WXf1WztJVNyQ==} + peerDependencies: + '@0no-co/graphqlsp': ^1.12.13 + '@gql.tada/svelte-support': 1.0.1 + '@gql.tada/vue-support': 1.0.1 + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + peerDependenciesMeta: + '@gql.tada/svelte-support': + optional: true + '@gql.tada/vue-support': + optional: true + + '@gql.tada/internal@1.0.8': + resolution: {integrity: sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 + typescript: ^5.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@hapi/address@2.1.4': resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==} deprecated: Moved to 'npm install @sideway/address' @@ -1336,6 +1385,16 @@ packages: '@multiversx/sdk-wallet@4.2.0': resolution: {integrity: sha512-EjSb9AnqMcpmDjZ7ebkUpOzpTfxj1plTuVXwZ6AaqJsdpxMfrE2izbPy18+bg5xFlr8V27wYZcW8zOhkBR50BA==} + '@mysten/bcs@1.6.1': + resolution: {integrity: sha512-pywsl2+jxbib5CbteAjMpmJpnj1pcUco2ff+lXCK3hfppPbkyWEMbZDQn1jNngV6ADQ3IFIvPs0FaS7fKWPOLA==} + + '@mysten/sui@1.29.1': + resolution: {integrity: sha512-VkmaLIgXpuRMBFe47SC0swHemDx9qfhGQyxybFr2r3dTnh42gTFi0BlyW3aLr0Y2GxWbNlLphB5C3ELR7aqacw==} + engines: {node: '>=18'} + + '@mysten/utils@0.0.0': + resolution: {integrity: sha512-KRI57Qow3E7TGqczimazwGf7+fwukdOi+6a31igSCzz0kPjAXbyK1a1gXaxeLMF8xEZ07ouW3RnsWt+EaUuHUw==} + '@napi-rs/wasm-runtime@0.2.7': resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} @@ -1797,54 +1856,6 @@ packages: '@solana/web3.js@1.98.0': resolution: {integrity: sha512-nz3Q5OeyGFpFCR+erX2f6JPt3sKhzhYcSycBCSPkWjzSVDh/Rr1FqTVMRe58FKO16/ivTUcuJjeS5MyBvpkbzA==} - '@stablelib/aead@1.0.1': - resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} - - '@stablelib/binary@1.0.1': - resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} - - '@stablelib/bytes@1.0.1': - resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} - - '@stablelib/chacha20poly1305@1.0.1': - resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} - - '@stablelib/chacha@1.0.1': - resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} - - '@stablelib/constant-time@1.0.1': - resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} - - '@stablelib/hash@1.0.1': - resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} - - '@stablelib/hkdf@1.0.1': - resolution: {integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==} - - '@stablelib/hmac@1.0.1': - resolution: {integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==} - - '@stablelib/int@1.0.1': - resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} - - '@stablelib/keyagreement@1.0.1': - resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} - - '@stablelib/poly1305@1.0.1': - resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} - - '@stablelib/random@1.0.2': - resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} - - '@stablelib/sha256@1.0.1': - resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} - - '@stablelib/wipe@1.0.1': - resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} - - '@stablelib/x25519@1.0.3': - resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} - '@substrate/ss58-registry@1.51.0': resolution: {integrity: sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==} @@ -2318,17 +2329,10 @@ packages: cpu: [x64] os: [win32] - '@walletconnect/core@2.20.1': - resolution: {integrity: sha512-DxybNfznr7aE/U9tJqvpEorUW2f/6kR0S1Zk78NqKam1Ex+BQFDM5j2Az3WayfFDZz3adkxkLAszfdorvPxDlw==} - engines: {node: '>=18'} - '@walletconnect/core@2.20.2': resolution: {integrity: sha512-48XnarxQQrpJ0KZJOjit56DxuzfVRYUdL8XVMvUh/ZNUiX2FB5w6YuljUUeTLfYOf04Et6qhVGEUkmX3W+9/8w==} engines: {node: '>=18'} - '@walletconnect/core@2.8.6': - resolution: {integrity: sha512-rnSqm1KJLcww/v6+UH8JeibQkJ3EKgyUDPfEK0stSEkrIUIcXaFlq3Et8S+vgV8bPhI0MVUhAhFL5OJZ3t2ryg==} - '@walletconnect/encoding@1.0.2': resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} @@ -2338,24 +2342,15 @@ packages: '@walletconnect/events@1.0.1': resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} - '@walletconnect/heartbeat@1.2.1': - resolution: {integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==} - '@walletconnect/heartbeat@1.2.2': resolution: {integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw==} '@walletconnect/jsonrpc-http-connection@1.0.8': resolution: {integrity: sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw==} - '@walletconnect/jsonrpc-provider@1.0.13': - resolution: {integrity: sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==} - '@walletconnect/jsonrpc-provider@1.0.14': resolution: {integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow==} - '@walletconnect/jsonrpc-types@1.0.3': - resolution: {integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==} - '@walletconnect/jsonrpc-types@1.0.4': resolution: {integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==} @@ -2385,43 +2380,21 @@ packages: '@walletconnect/safe-json@1.0.2': resolution: {integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==} - '@walletconnect/sign-client@2.20.1': - resolution: {integrity: sha512-QXzIAHbyZZ52+97Bp/+/SBkN3hX0pam8l4lnA4P7g+aFPrVZUrMwZPIf+FV7UbEswqqwo3xmFI41TKgj8w8B9w==} - '@walletconnect/sign-client@2.20.2': resolution: {integrity: sha512-KyeDToypZ1OjCbij4Jx0cAg46bMwZ6zCKt0HzCkqENcex3Zchs7xBp9r8GtfEMGw+PUnXwqrhzmLBH0x/43oIQ==} - '@walletconnect/sign-client@2.8.6': - resolution: {integrity: sha512-rOFTKTHP7oJfXgYHX7+SdB8VbcsEE3ZFG/bMdmZboWaBim1mrY3vUyDdKrNr0VgI3AwBiEQezQDfKxBX0pMSQQ==} - deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' - '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} - '@walletconnect/types@2.20.1': - resolution: {integrity: sha512-HM0YZxT+wNqskoZkuju5owbKTlqUXNKfGlJk/zh9pWaVWBR2QamvQ+47Cx09OoGPRQjQH0JmgRiUV4bOwWNeHg==} - '@walletconnect/types@2.20.2': resolution: {integrity: sha512-XPPbJM/mGU05i6jUxhC3yI/YvhSF6TYJQ5SXTWM53lVe6hs6ukvlEhPctu9ZBTGwGFhwPXIjtK/eWx+v4WY5iw==} - '@walletconnect/types@2.8.6': - resolution: {integrity: sha512-Z/PFa3W1XdxeTcCtdR6lUsFgZfU/69wWJBPyclPwn7cu1+eriuCr6XZXQpJjib3flU+HnwHiXeUuqZaheehPxw==} - - '@walletconnect/universal-provider@2.20.1': - resolution: {integrity: sha512-0WfO4Unb+8UMEUr65vrVjd/a/3tF5059KLP7gX2kaDFjXXOma1/cjq/9/STd3hbHB8LKfxpXvOty97vuD8xfWQ==} - '@walletconnect/universal-provider@2.20.2': resolution: {integrity: sha512-6uVu1E88tioaXEEJCbJKwCIQlOHif1nmfY092BznZEnBn2lli5ICzQh2bxtUDNmNNLKsMDI3FV1fODFeWMVJTQ==} - '@walletconnect/utils@2.20.1': - resolution: {integrity: sha512-u/uyJkVyxLLUbHbpMv7MmuOkGfElG08l6P2kMTAfN7nAVyTgpb8g6kWLMNqfmYXVz+h+finf5FSV4DgL2vOvPQ==} - '@walletconnect/utils@2.20.2': resolution: {integrity: sha512-2uRUDvpYSIJFYcr1WIuiFy6CEszLF030o6W8aDMkGk9/MfAZYEJQHMJcjWyaNMPHLJT0POR5lPaqkYOpuyPIQQ==} - '@walletconnect/utils@2.8.6': - resolution: {integrity: sha512-wcy6e5+COYo7tfNnW8YqidnATdJDIW6vDiWWE7A1F78Sl/VflkaevB9cIgyn8eLdxC1SxXgGoeC2oLP90nnHJg==} - '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -4748,12 +4721,22 @@ packages: resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} engines: {node: '>=14.16'} + gql.tada@1.8.10: + resolution: {integrity: sha512-FrvSxgz838FYVPgZHGOSgbpOjhR+yq44rCzww3oOPJYi0OvBJjAgCiP6LEokZIYND2fUTXzQAyLgcvgw1yNP5A==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + growly@1.3.0: resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} @@ -5727,10 +5710,6 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -6537,6 +6516,9 @@ packages: resolution: {integrity: sha512-73JaFg4NwYNAufDtS5FsFu/PdM49ahJrO1i44aCRsDWju1z5wuGDaqyFUQWR6aJoK2JPDWlaYYAGFNIGTSUHSw==} engines: {node: '>= 10.12'} + poseidon-lite@0.2.1: + resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -8360,6 +8342,9 @@ packages: resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} engines: {node: '>=10.10.0'} + valibot@0.36.0: + resolution: {integrity: sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ==} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -8848,6 +8833,16 @@ packages: snapshots: + '@0no-co/graphql.web@1.1.2(graphql@16.11.0)': + optionalDependencies: + graphql: 16.11.0 + + '@0no-co/graphqlsp@1.12.16(graphql@16.11.0)(typescript@5.8.3)': + dependencies: + '@gql.tada/internal': 1.0.8(graphql@16.11.0)(typescript@5.8.3) + graphql: 16.11.0 + typescript: 5.8.3 + '@adraffy/ens-normalize@1.11.0': {} '@ampproject/remapping@2.3.0': @@ -10805,6 +10800,23 @@ snapshots: '@gar/promisify@1.1.3': {} + '@gql.tada/cli-utils@1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.11.0)(typescript@5.8.3))(graphql@16.11.0)(typescript@5.8.3)': + dependencies: + '@0no-co/graphqlsp': 1.12.16(graphql@16.11.0)(typescript@5.8.3) + '@gql.tada/internal': 1.0.8(graphql@16.11.0)(typescript@5.8.3) + graphql: 16.11.0 + typescript: 5.8.3 + + '@gql.tada/internal@1.0.8(graphql@16.11.0)(typescript@5.8.3)': + dependencies: + '@0no-co/graphql.web': 1.1.2(graphql@16.11.0) + graphql: 16.11.0 + typescript: 5.8.3 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + dependencies: + graphql: 16.11.0 + '@hapi/address@2.1.4': {} '@hapi/bourne@1.3.2': {} @@ -11057,14 +11069,14 @@ snapshots: transitivePeerDependencies: - encoding - '@kadena/client@0.5.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@kadena/client@0.5.0(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@kadena/chainweb-node-client': 0.3.3(encoding@0.1.13) '@kadena/cryptography-utils': 0.3.3 '@kadena/pactjs': 0.2.9 '@kadena/types': 0.3.3 - '@walletconnect/sign-client': 2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.8.6 + '@walletconnect/sign-client': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) + '@walletconnect/types': 2.20.2 cross-fetch: 3.1.8(encoding@0.1.13) debug: 4.3.7 encoding: 0.1.13 @@ -11089,8 +11101,10 @@ snapshots: - db0 - ioredis - supports-color + - typescript - uploadthing - utf-8-validate + - zod '@kadena/cryptography-utils@0.3.3': dependencies: @@ -11171,6 +11185,34 @@ snapshots: tweetnacl: 1.0.3 uuid: 8.3.2 + '@mysten/bcs@1.6.1': + dependencies: + '@mysten/utils': 0.0.0 + '@scure/base': 1.2.4 + + '@mysten/sui@1.29.1(typescript@5.8.3)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + '@mysten/bcs': 1.6.1 + '@mysten/utils': 0.0.0 + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + '@scure/base': 1.2.4 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + gql.tada: 1.8.10(graphql@16.11.0)(typescript@5.8.3) + graphql: 16.11.0 + poseidon-lite: 0.2.1 + valibot: 0.36.0 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - typescript + + '@mysten/utils@0.0.0': + dependencies: + '@scure/base': 1.2.4 + '@napi-rs/wasm-runtime@0.2.7': dependencies: '@emnapi/core': 1.3.1 @@ -11821,74 +11863,6 @@ snapshots: - encoding - utf-8-validate - '@stablelib/aead@1.0.1': {} - - '@stablelib/binary@1.0.1': - dependencies: - '@stablelib/int': 1.0.1 - - '@stablelib/bytes@1.0.1': {} - - '@stablelib/chacha20poly1305@1.0.1': - dependencies: - '@stablelib/aead': 1.0.1 - '@stablelib/binary': 1.0.1 - '@stablelib/chacha': 1.0.1 - '@stablelib/constant-time': 1.0.1 - '@stablelib/poly1305': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/chacha@1.0.1': - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/constant-time@1.0.1': {} - - '@stablelib/hash@1.0.1': {} - - '@stablelib/hkdf@1.0.1': - dependencies: - '@stablelib/hash': 1.0.1 - '@stablelib/hmac': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/hmac@1.0.1': - dependencies: - '@stablelib/constant-time': 1.0.1 - '@stablelib/hash': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/int@1.0.1': {} - - '@stablelib/keyagreement@1.0.1': - dependencies: - '@stablelib/bytes': 1.0.1 - - '@stablelib/poly1305@1.0.1': - dependencies: - '@stablelib/constant-time': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/random@1.0.2': - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/sha256@1.0.1': - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/hash': 1.0.1 - '@stablelib/wipe': 1.0.1 - - '@stablelib/wipe@1.0.1': {} - - '@stablelib/x25519@1.0.3': - dependencies: - '@stablelib/keyagreement': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/wipe': 1.0.1 - '@substrate/ss58-registry@1.51.0': {} '@surma/rollup-plugin-off-main-thread@1.4.2': @@ -12449,49 +12423,6 @@ snapshots: '@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2': optional: true - '@walletconnect/core@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': - dependencies: - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.1.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 - '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) - '@walletconnect/window-getters': 1.0.1 - es-toolkit: 1.33.0 - events: 3.3.0 - uint8arrays: 3.1.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - ioredis - - typescript - - uploadthing - - utf-8-validate - - zod - '@walletconnect/core@2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/heartbeat': 1.2.2 @@ -12535,46 +12466,6 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10)': - dependencies: - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-provider': 1.0.13 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.1.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.8.6 - '@walletconnect/utils': 2.8.6 - events: 3.3.0 - lodash.isequal: 4.5.0 - uint8arrays: 3.1.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - ioredis - - uploadthing - - utf-8-validate - '@walletconnect/encoding@1.0.2': dependencies: is-typedarray: 1.0.0 @@ -12590,12 +12481,6 @@ snapshots: keyvaluestorage-interface: 1.0.0 tslib: 1.14.1 - '@walletconnect/heartbeat@1.2.1': - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/time': 1.0.2 - tslib: 1.14.1 - '@walletconnect/heartbeat@1.2.2': dependencies: '@walletconnect/events': 1.0.1 @@ -12611,23 +12496,12 @@ snapshots: transitivePeerDependencies: - encoding - '@walletconnect/jsonrpc-provider@1.0.13': - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - tslib: 1.14.1 - '@walletconnect/jsonrpc-provider@1.0.14': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - '@walletconnect/jsonrpc-types@1.0.3': - dependencies: - keyvaluestorage-interface: 1.0.0 - tslib: 1.14.1 - '@walletconnect/jsonrpc-types@1.0.4': dependencies: events: 3.3.0 @@ -12694,41 +12568,6 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': - dependencies: - '@walletconnect/core': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.1.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 - '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - ioredis - - typescript - - uploadthing - - utf-8-validate - - zod - '@walletconnect/sign-client@2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/core': 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) @@ -12764,71 +12603,10 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10)': - dependencies: - '@walletconnect/core': 2.8.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.1.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.8.6 - '@walletconnect/utils': 2.8.6 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - ioredis - - uploadthing - - utf-8-validate - '@walletconnect/time@1.0.2': dependencies: tslib: 1.14.1 - '@walletconnect/types@2.20.1': - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - db0 - - ioredis - - uploadthing - '@walletconnect/types@2.20.2': dependencies: '@walletconnect/events': 1.0.1 @@ -12857,73 +12635,6 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.8.6': - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - db0 - - ioredis - - uploadthing - - '@walletconnect/universal-provider@2.20.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/jsonrpc-http-connection': 1.0.8(encoding@0.1.13) - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) - '@walletconnect/types': 2.20.1 - '@walletconnect/utils': 2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) - es-toolkit: 1.33.0 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - encoding - - ioredis - - typescript - - uploadthing - - utf-8-validate - - zod - '@walletconnect/universal-provider@2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@walletconnect/events': 1.0.1 @@ -12963,49 +12674,6 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.20.1(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': - dependencies: - '@noble/ciphers': 1.2.1 - '@noble/curves': 1.8.1 - '@noble/hashes': 1.7.1 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.1.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.20.1 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - bs58: 6.0.0 - detect-browser: 5.3.0 - query-string: 7.1.3 - uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - bufferutil - - db0 - - ioredis - - typescript - - uploadthing - - utf-8-validate - - zod - '@walletconnect/utils@2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4)': dependencies: '@noble/ciphers': 1.2.1 @@ -13049,42 +12717,6 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.8.6': - dependencies: - '@stablelib/chacha20poly1305': 1.0.1 - '@stablelib/hkdf': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/sha256': 1.0.1 - '@stablelib/x25519': 1.0.3 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.8.6 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 7.1.3 - uint8arrays: 3.1.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - db0 - - ioredis - - uploadthing - '@walletconnect/window-getters@1.0.1': dependencies: tslib: 1.14.1 @@ -16145,10 +15777,24 @@ snapshots: p-cancelable: 3.0.0 responselike: 2.0.1 + gql.tada@1.8.10(graphql@16.11.0)(typescript@5.8.3): + dependencies: + '@0no-co/graphql.web': 1.1.2(graphql@16.11.0) + '@0no-co/graphqlsp': 1.12.16(graphql@16.11.0)(typescript@5.8.3) + '@gql.tada/cli-utils': 1.6.3(@0no-co/graphqlsp@1.12.16(graphql@16.11.0)(typescript@5.8.3))(graphql@16.11.0)(typescript@5.8.3) + '@gql.tada/internal': 1.0.8(graphql@16.11.0)(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - '@gql.tada/svelte-support' + - '@gql.tada/vue-support' + - graphql + graceful-fs@4.2.11: {} graphemer@1.4.0: {} + graphql@16.11.0: {} + growly@1.3.0: optional: true @@ -17423,8 +17069,6 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.isequal@4.5.0: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -18278,6 +17922,8 @@ snapshots: transitivePeerDependencies: - supports-color + poseidon-lite@0.2.1: {} + possible-typed-array-names@1.1.0: {} postcss-attribute-case-insensitive@4.0.2: @@ -20561,6 +20207,8 @@ snapshots: convert-source-map: 1.9.0 source-map: 0.7.4 + valibot@0.36.0: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 diff --git a/advanced/dapps/react-dapp-v2/public/assets/sui.png b/advanced/dapps/react-dapp-v2/public/assets/sui.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e8dc545e4119254129402679552aca7bfdd84c GIT binary patch literal 3301 zcmVx!^P)L4zS-%ccmVT%i;t#Z@M#e z;P<(>;Q6cR?&#yw71yxuO?OBg19LM%Gika*+8Em67IxKimvk|8#Xa0l)1A`9x~vRv zD{W>?cS{d1Xn@;U{BP)6&%goxNAzt(M)=>*x6Qp6y%MPZ1$`UiO?cdj{{elwA!}81 zpT2!o72(}N?K*uMFe!6F*Xdh@tbs}FG<^ePt%@$wH%Qj1=q`ODWUY#>THhF1tD>v) zjgmDm#7@#T4_T|Ci}cM))~e_pef#i}wJN$s-}(|oc#DqFH%iuwp?~QVePd+JxZ!5x z$QZjs-xyi5i``0mWfR;T`o_qb86E!q&h$uE=o=+#rWbmm8}yBmwesTLeq*!T3Hrv! zTDiV@=#T8wF3>kd*4*^wu^|(vt*38{tl8n+gH)iloW3!#W(N09Qr6RM`bN9$J}b{s z=Gtod#+KgmFL?NeNt+haH%8XVF?^f}rS{S{rULAS{D3Kzw$eAM#z*WI?~EL@lfH$? zTEuVK=scxl%`5%8MBmt+vi?2Q9s0)PVo>xm`P(-7MlEa4!FXAwL(5jtH_lI(qPT$a zpt42uja$|nm!oHNfxc18T0qPk!IpS?=o@!~T3G{ar*BN)OQ-Ou?evW)?Og|@ZE(8K z0{Z50gW75M=b={0evN$>fs*IQ-nEy$dEB688PiZ(>6_0D>f-iLJLwxUL>#&n*;pIt zo7W8*{q0*w-~4V+hpbOtw2!_O-e8N^Mf%h}`nK>6(1cGFRkVw~ak6&k)LTlUZK7`; zvUccG5*cX`eGA8|DYyG*`bHhqCnRmd9jJ@^!SpQ{vnD<`Rlvd=9!uZCF>8^O?HX;M zZ(g!?K+d*lp1#clF>7T;`;9wKWie|xZ)lpn`N`S=nPQs^S%NN z=B!~WvQ21lEUZ(i=*8%p{#JaYk+D7amo!rw0FBcTLXih+f8JAHa^K)_B40{N2o_18GTD|8*q@w`omFX426NkQL`x^^i5Nq z&hS?}9!I}m2Y6IzJeF9XmUT<_5Tus^hcMhlU-U{1vob)SbEeWrMVSfkzp#69SWz==g`oMyMvRMMcv-e2urBtxLZ*%4-IYx z_YwXf#S(OzM9TQ$z4h$3=sV_k5TF^&kyXbdP>fL<;tXz^^!DCBr|Gd1GxWo6tlC0F z&1a}Yw6Qr&@;PqU#76_MrwoG)>ayot>k9?bQW|}@-BVlp03-B8ij+>RJjORZ>rxWtX9p<~0$SMPn?XnRsKazf^&h@{3ROj> zhXi%;nk|#(qF6>Zil(YikHxzWenB(Xj!5xkMTrY#tp0yNU5l4mNUz2&h4+ytsMtjc zLS#!wFa)8+9)Aq`7RC14NtC%UTSOcHtp(AoJk4Y)HLinb4&zA;B5f%y<@cc|I{Z0C zrXocaPv()*NpqUdOUX34h}d^9hY4q3y%9crE+o6r%44|d8)348;LS=%+(4?+>KkEt z99M56SgOXzlo~PuCX5hCnw&_ruTfay7#V3o+9E;Hz!7FeR=k<;QWZIjQB-|`wt)0D z(+@ZeFI9;P0@)K2G(L*Y$@Y=;!%|hSP@$nFx*859@cAyXbx^8?ed2Hf#UC^gfmewH z+yti4n9y!VKC#GS&ko4PqZ1uJqZhFphZqV~L$2u*gDLVn>9_!&R{m+M)Zo7ZiiAv| zTkzdU1F9lGRRe1UefyNKedJD73yJLyyaLC2>_^HXttu57p@!sPqzy2ara2IiUR4bj{bd(F?YqpE9TGH2Tma0(TfA$qn;AQk57|t!kwN zF5pFPfLy~t!l?@jrs333uYre%R}Dijj44@%;c5x0O8)>_e5x{uIBh~huSF>!KICHX=NrY^yxJ{HJ)j6`>3)N5Iw94yTgG9k! ziEg}-lPeY<04an@26Y8Q*jyMHtL>2KYJiQZ9~1Y$$%Pk5iIrydmLW2(j;o1T@rk1# zAvv7c1cYR1YgV5*11D*o(hG^O%{NlR14ccSQgOolQR(CQBO3dqPt2NitWzRNcJ4No zs*=NJP9OrHhNCda>fdX0JU*SX9IZu{r-u-*ZrUwGR#y}y&c}n*OQ_*~X@?+yPgH*?mII`ZGHa?VES`pa6s})gWyMNo3F?k2L#LTk*?E z_Mf0xa)Vz|sa%&iW`wG)KAsvHiYkaiFz@Yp3RQ~b#i%c`27c28d&zm&&B4M8Z z>Qe552Nsxtp3)#C8UYjwUmn5NX<@9I>cUWFmY?5V zriCxq^fJIY+9pS@h4BKu#n@%Li;0Yr(=hlbQD6N>O6@7ZCP+rgBjGlRioP}p+& zPiG^WC?0(w@I-tXSAiXA-<%W1D$aVF2d(pG9DX8hDa(U-+&#Is_zEPUX~C)#Tuj4K zE>qLd%nChWE}|kiFj`lwq~dc?ufTE3$IH-ri0UOI!kUIB@BmT0gcM{~Sk%MIqJ}XV zH>~+IABEXKc{>_6smUgqjJJWJSly1V6&vsl>xt4@%`)}Wi`h_kl=Z=u%i4`i8F>A3 zS&P*;JALpeDIV+XM5YbW*mBj@<#~(u`67Oh#+Ac)^ZZ4O-g;x@qufrO*{nM>ydz%5 zD-$%t?9Divd7E^59Qw1L)u1e$wbopnCb$3I{*No&Wc4%C4vuRA{ol9obhBEF_HK#6 jWVBdqrsMVRL!{` const Button = (props: ButtonProps) => ( { return ( {children} diff --git a/advanced/dapps/react-dapp-v2/src/constants/default.ts b/advanced/dapps/react-dapp-v2/src/constants/default.ts index 91139a41b..b2e879268 100644 --- a/advanced/dapps/react-dapp-v2/src/constants/default.ts +++ b/advanced/dapps/react-dapp-v2/src/constants/default.ts @@ -20,6 +20,7 @@ export const DEFAULT_MAIN_CHAINS = [ "tezos:mainnet", "kadena:mainnet01", "bip122:000000000019d6689c085ae165831e93", + "sui:mainnet", ]; export const DEFAULT_TEST_CHAINS = [ @@ -40,6 +41,8 @@ export const DEFAULT_TEST_CHAINS = [ "tezos:testnet", "kadena:testnet04", "bip122:000000000933ea01ad0ee984209779ba", + "sui:testnet", + "sui:devnet", ]; export const DEFAULT_CHAINS = [...DEFAULT_MAIN_CHAINS, ...DEFAULT_TEST_CHAINS]; @@ -287,6 +290,20 @@ export enum DEFAULT_BIP122_EVENTS { BIP122_ADDRESS_CHANGED = "bip122_addressesChanged", } +/** + * SUI + */ +export enum DEFAULT_SUI_METHODS { + SUI_SIGN_TRANSACTION = "sui_signTransaction", + SUI_SIGN_AND_EXECUTE_TRANSACTION = "sui_signAndExecuteTransaction", + SUI_SIGN_PERSONAL_MESSAGE = "sui_signPersonalMessage", +} + +export enum DEFAULT_SUI_EVENTS { + SUI_ACCOUNTS_CHANGED = "sui_accountsChanged", + SUI_CHAIN_CHANGED = "sui_chainChanged", +} + export const REGIONALIZED_RELAYER_ENDPOINTS: RelayerType[] = [ { value: DEFAULT_RELAY_URL, diff --git a/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx index 4c138451a..5d990de7c 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/ChainDataContext.tsx @@ -17,6 +17,7 @@ import { EIP155ChainData } from "../chains/eip155"; import { TezosChainData } from "../chains/tezos"; import { KadenaChainData } from "../chains/kadena"; import { BtcChainData } from "../chains/bip122"; +import { SuiChainData } from "../chains/sui"; /** * Types @@ -77,6 +78,9 @@ export function ChainDataContextProvider({ case "bip122": chains = BtcChainData; break; + case "sui": + chains = SuiChainData; + break; default: console.error("Unknown chain namespace: ", namespace); } diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index ae7952969..3cc800ecf 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -4,6 +4,7 @@ import * as encoding from "@walletconnect/encoding"; import { Transaction as EthTransaction } from "@ethereumjs/tx"; import { recoverTransaction } from "@celo/wallet-base"; import * as bitcoin from "bitcoinjs-lib"; +import { verifyPersonalMessageSignature } from "@mysten/sui/verify"; import { formatDirectSignDoc, @@ -61,6 +62,7 @@ import { DEFAULT_EIP7715_METHODS, WalletGrantPermissionsParameters, WalletGrantPermissionsReturnType, + DEFAULT_SUI_METHODS, } from "../constants"; import { useChainData } from "./ChainDataContext"; import { rpcProvidersByChainId } from "../../src/helpers/api"; @@ -156,6 +158,11 @@ interface IContext { testSendTransaction: TRpcRequestCallback; testSignPsbt: TRpcRequestCallback; }; + suiRpc: { + testSendSuiTransaction: TRpcRequestCallback; + testSignSuiTransaction: TRpcRequestCallback; + testSignSuiPersonalMessage: TRpcRequestCallback; + }; rpcResult?: IFormattedRpcResponse | null; isRpcRequestPending: boolean; isTestnet: boolean; @@ -1889,6 +1896,111 @@ export function JsonRpcContextProvider({ ), }; + const suiRpc = { + testSendSuiTransaction: _createJsonRpcRequestHandler( + async ( + chainId: string, + address: string + ): Promise => { + const method = DEFAULT_SUI_METHODS.SUI_SIGN_AND_EXECUTE_TRANSACTION; + const req = { + account: address, + recipientAddress: address, + amount: 1000000000000000000, + }; + const result = await client!.request<{ txid: string }>({ + topic: session!.topic, + chainId: chainId, + request: { + method, + params: req, + }, + }); + return { + method, + address: address, + valid: true, + result: result?.txid, + }; + } + ), + testSignSuiTransaction: _createJsonRpcRequestHandler( + async ( + chainId: string, + address: string + ): Promise => { + const method = DEFAULT_SUI_METHODS.SUI_SIGN_TRANSACTION; + const req = { + account: address, + }; + const result = await client!.request<{ txid: string }>({ + topic: session!.topic, + chainId: chainId, + request: { + method, + params: req, + }, + }); + return { + method, + address: address, + valid: true, + result: result?.txid, + }; + } + ), + testSignSuiPersonalMessage: _createJsonRpcRequestHandler( + async ( + chainId: string, + address: string + ): Promise => { + const method = DEFAULT_SUI_METHODS.SUI_SIGN_PERSONAL_MESSAGE; + const req = { + address: address, + message: Buffer.from( + "This is a message to be signed for SUI" + ).toString("base64"), + }; + const result = await client!.request<{ + signature: string; + publicKey: string; + }>({ + topic: session!.topic, + chainId: chainId, + request: { + method, + params: req, + }, + }); + + console.log("result", result); + try { + const publicKey = await verifyPersonalMessageSignature( + new TextEncoder().encode(req.message), + Buffer.from(result.signature, "base64").toString(), + { address } + ); + console.log("publicKey", publicKey.toSuiAddress(), address); + return { + method, + address: address, + valid: + publicKey.toSuiAddress().toLowerCase() === address.toLowerCase(), + result: result?.signature, + }; + } catch (error) { + console.error(error); + return { + method, + address: address, + valid: false, + result: (error as Error).message, + }; + } + } + ), + }; + return ( {children} diff --git a/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts b/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts index e0d376cfd..2f28c3718 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/namespaces.ts @@ -21,6 +21,8 @@ import { DEFAULT_OPTIONAL_METHODS, DEFAULT_BIP122_METHODS, DEFAULT_BIP122_EVENTS, + DEFAULT_SUI_METHODS, + DEFAULT_SUI_EVENTS, } from "../constants"; export const getNamespacesFromChains = (chains: string[]) => { @@ -57,6 +59,8 @@ export const getSupportedRequiredMethodsByNamespace = (namespace: string) => { return Object.values(DEFAULT_KADENA_METHODS); case "bip122": return Object.values(DEFAULT_BIP122_METHODS); + case "sui": + return Object.values(DEFAULT_SUI_METHODS); default: throw new Error( `No default required methods for namespace: ${namespace}` @@ -107,6 +111,8 @@ export const getSupportedEventsByNamespace = (namespace: string) => { return Object.values(DEFAULT_KADENA_EVENTS); case "bip122": return Object.values(DEFAULT_BIP122_EVENTS); + case "sui": + return Object.values(DEFAULT_SUI_EVENTS); default: throw new Error(`No default events for namespace: ${namespace}`); } diff --git a/advanced/dapps/react-dapp-v2/src/pages/index.tsx b/advanced/dapps/react-dapp-v2/src/pages/index.tsx index b8d844fed..dc790770e 100644 --- a/advanced/dapps/react-dapp-v2/src/pages/index.tsx +++ b/advanced/dapps/react-dapp-v2/src/pages/index.tsx @@ -25,6 +25,7 @@ import { GetCapabilitiesResult, DEFAULT_BIP122_METHODS, DEFAULT_EIP7715_METHODS, + DEFAULT_SUI_METHODS, } from "../constants"; import { AccountAction, setLocaleStorageTestnetFlag } from "../helpers"; import Toggle from "../components/Toggle"; @@ -96,6 +97,7 @@ const Home: NextPage = () => { tezosRpc, kadenaRpc, bip122Rpc, + suiRpc, isRpcRequestPending, rpcResult, isTestnet, @@ -516,6 +518,36 @@ const Home: NextPage = () => { ]; }; + const getSuiActions = (): AccountAction[] => { + const onSendTransaction = async (chainId: string, address: string) => { + openRequestModal(); + await suiRpc.testSendSuiTransaction(chainId, address); + }; + const onSignTransaction = async (chainId: string, address: string) => { + openRequestModal(); + await suiRpc.testSignSuiTransaction(chainId, address); + }; + const onSignPersonalMessage = async (chainId: string, address: string) => { + openRequestModal(); + await suiRpc.testSignSuiPersonalMessage(chainId, address); + }; + + return [ + { + method: DEFAULT_SUI_METHODS.SUI_SIGN_AND_EXECUTE_TRANSACTION, + callback: onSendTransaction, + }, + { + method: DEFAULT_SUI_METHODS.SUI_SIGN_TRANSACTION, + callback: onSignTransaction, + }, + { + method: DEFAULT_SUI_METHODS.SUI_SIGN_PERSONAL_MESSAGE, + callback: onSignPersonalMessage, + }, + ]; + }; + const getBlockchainActions = (account: string) => { const [namespace, chainId, address] = account.split(":"); switch (namespace) { @@ -539,6 +571,8 @@ const Home: NextPage = () => { return getKadenaActions(); case "bip122": return getBip122Actions(); + case "sui": + return getSuiActions(); default: break; } diff --git a/advanced/wallets/react-wallet-v2/package.json b/advanced/wallets/react-wallet-v2/package.json index cf59af34f..5bcbe2390 100644 --- a/advanced/wallets/react-wallet-v2/package.json +++ b/advanced/wallets/react-wallet-v2/package.json @@ -4,7 +4,7 @@ "scripts": { "dev": "next dev -p 3001", "build": "next build", - "start": "next start", + "start": "next start -p 3001", "lint": "next lint", "prettier": "prettier --check '**/*.{js,ts,jsx,tsx}'", "prettier:write": "prettier --write '**/*.{js,ts,jsx,tsx}'" @@ -24,6 +24,7 @@ "@mui/material": "^5.14.10", "@multiversx/sdk-core": "12.18.0", "@multiversx/sdk-wallet": "4.2.0", + "@mysten/sui": "^1.29.1", "@near-wallet-selector/wallet-utils": "^8.0.0", "@nextui-org/react": "1.0.8-beta.5", "@noble/curves": "^1.6.0", diff --git a/advanced/wallets/react-wallet-v2/public/chain-logos/sui.png b/advanced/wallets/react-wallet-v2/public/chain-logos/sui.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e8dc545e4119254129402679552aca7bfdd84c GIT binary patch literal 3301 zcmVx!^P)L4zS-%ccmVT%i;t#Z@M#e z;P<(>;Q6cR?&#yw71yxuO?OBg19LM%Gika*+8Em67IxKimvk|8#Xa0l)1A`9x~vRv zD{W>?cS{d1Xn@;U{BP)6&%goxNAzt(M)=>*x6Qp6y%MPZ1$`UiO?cdj{{elwA!}81 zpT2!o72(}N?K*uMFe!6F*Xdh@tbs}FG<^ePt%@$wH%Qj1=q`ODWUY#>THhF1tD>v) zjgmDm#7@#T4_T|Ci}cM))~e_pef#i}wJN$s-}(|oc#DqFH%iuwp?~QVePd+JxZ!5x z$QZjs-xyi5i``0mWfR;T`o_qb86E!q&h$uE=o=+#rWbmm8}yBmwesTLeq*!T3Hrv! zTDiV@=#T8wF3>kd*4*^wu^|(vt*38{tl8n+gH)iloW3!#W(N09Qr6RM`bN9$J}b{s z=Gtod#+KgmFL?NeNt+haH%8XVF?^f}rS{S{rULAS{D3Kzw$eAM#z*WI?~EL@lfH$? zTEuVK=scxl%`5%8MBmt+vi?2Q9s0)PVo>xm`P(-7MlEa4!FXAwL(5jtH_lI(qPT$a zpt42uja$|nm!oHNfxc18T0qPk!IpS?=o@!~T3G{ar*BN)OQ-Ou?evW)?Og|@ZE(8K z0{Z50gW75M=b={0evN$>fs*IQ-nEy$dEB688PiZ(>6_0D>f-iLJLwxUL>#&n*;pIt zo7W8*{q0*w-~4V+hpbOtw2!_O-e8N^Mf%h}`nK>6(1cGFRkVw~ak6&k)LTlUZK7`; zvUccG5*cX`eGA8|DYyG*`bHhqCnRmd9jJ@^!SpQ{vnD<`Rlvd=9!uZCF>8^O?HX;M zZ(g!?K+d*lp1#clF>7T;`;9wKWie|xZ)lpn`N`S=nPQs^S%NN z=B!~WvQ21lEUZ(i=*8%p{#JaYk+D7amo!rw0FBcTLXih+f8JAHa^K)_B40{N2o_18GTD|8*q@w`omFX426NkQL`x^^i5Nq z&hS?}9!I}m2Y6IzJeF9XmUT<_5Tus^hcMhlU-U{1vob)SbEeWrMVSfkzp#69SWz==g`oMyMvRMMcv-e2urBtxLZ*%4-IYx z_YwXf#S(OzM9TQ$z4h$3=sV_k5TF^&kyXbdP>fL<;tXz^^!DCBr|Gd1GxWo6tlC0F z&1a}Yw6Qr&@;PqU#76_MrwoG)>ayot>k9?bQW|}@-BVlp03-B8ij+>RJjORZ>rxWtX9p<~0$SMPn?XnRsKazf^&h@{3ROj> zhXi%;nk|#(qF6>Zil(YikHxzWenB(Xj!5xkMTrY#tp0yNU5l4mNUz2&h4+ytsMtjc zLS#!wFa)8+9)Aq`7RC14NtC%UTSOcHtp(AoJk4Y)HLinb4&zA;B5f%y<@cc|I{Z0C zrXocaPv()*NpqUdOUX34h}d^9hY4q3y%9crE+o6r%44|d8)348;LS=%+(4?+>KkEt z99M56SgOXzlo~PuCX5hCnw&_ruTfay7#V3o+9E;Hz!7FeR=k<;QWZIjQB-|`wt)0D z(+@ZeFI9;P0@)K2G(L*Y$@Y=;!%|hSP@$nFx*859@cAyXbx^8?ed2Hf#UC^gfmewH z+yti4n9y!VKC#GS&ko4PqZ1uJqZhFphZqV~L$2u*gDLVn>9_!&R{m+M)Zo7ZiiAv| zTkzdU1F9lGRRe1UefyNKedJD73yJLyyaLC2>_^HXttu57p@!sPqzy2ara2IiUR4bj{bd(F?YqpE9TGH2Tma0(TfA$qn;AQk57|t!kwN zF5pFPfLy~t!l?@jrs333uYre%R}Dijj44@%;c5x0O8)>_e5x{uIBh~huSF>!KICHX=NrY^yxJ{HJ)j6`>3)N5Iw94yTgG9k! ziEg}-lPeY<04an@26Y8Q*jyMHtL>2KYJiQZ9~1Y$$%Pk5iIrydmLW2(j;o1T@rk1# zAvv7c1cYR1YgV5*11D*o(hG^O%{NlR14ccSQgOolQR(CQBO3dqPt2NitWzRNcJ4No zs*=NJP9OrHhNCda>fdX0JU*SX9IZu{r-u-*ZrUwGR#y}y&c}n*OQ_*~X@?+yPgH*?mII`ZGHa?VES`pa6s})gWyMNo3F?k2L#LTk*?E z_Mf0xa)Vz|sa%&iW`wG)KAsvHiYkaiFz@Yp3RQ~b#i%c`27c28d&zm&&B4M8Z z>Qe552Nsxtp3)#C8UYjwUmn5NX<@9I>cUWFmY?5V zriCxq^fJIY+9pS@h4BKu#n@%Li;0Yr(=hlbQD6N>O6@7ZCP+rgBjGlRioP}p+& zPiG^WC?0(w@I-tXSAiXA-<%W1D$aVF2d(pG9DX8hDa(U-+&#Is_zEPUX~C)#Tuj4K zE>qLd%nChWE}|kiFj`lwq~dc?ufTE3$IH-ri0UOI!kUIB@BmT0gcM{~Sk%MIqJ}XV zH>~+IABEXKc{>_6smUgqjJJWJSly1V6&vsl>xt4@%`)}Wi`h_kl=Z=u%i4`i8F>A3 zS&P*;JALpeDIV+XM5YbW*mBj@<#~(u`67Oh#+Ac)^ZZ4O-g;x@qufrO*{nM>ydz%5 zD-$%t?9Divd7E^59Qw1L)u1e$wbopnCb$3I{*No&Wc4%C4vuRA{ol9obhBEF_HK#6 jWVBdqrsMVRL!{ case 'SessionCheckoutModal': return + case 'SessionSignSuiPersonalMessageModal': + return default: return null } diff --git a/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx b/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx index 13f4a1747..3ee1ae966 100644 --- a/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/RequestDetalilsCard.tsx @@ -13,7 +13,7 @@ import { Fragment } from 'react' */ interface IProps { chains: string[] - protocol: string + protocol?: string } /** @@ -43,16 +43,20 @@ export default function RequestDetailsCard({ chains, protocol }: IProps) { - + {protocol ? ( + + - - - Relay Protocol - - {protocol} - - - + + + Relay Protocol + + {protocol} + + + + + ) : null} ) } diff --git a/advanced/wallets/react-wallet-v2/src/data/SuiData.ts b/advanced/wallets/react-wallet-v2/src/data/SuiData.ts new file mode 100644 index 000000000..97f37cc30 --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/data/SuiData.ts @@ -0,0 +1,84 @@ +/** + * Chains + */ +export const SUI_NAMESPACE = 'sui' + +export const SUI_MAINNET_ID = 'mainnet' +export const SUI_TESTNET_ID = 'testnet' +export const SUI_DEVNET_ID = 'devnet' +export const SUI_MAINNET_CAIP2 = `${SUI_NAMESPACE}:${SUI_MAINNET_ID}` +export const SUI_TESTNET_CAIP2 = `${SUI_NAMESPACE}:${SUI_TESTNET_ID}` +export const SUI_DEVNET_CAIP2 = `${SUI_NAMESPACE}:${SUI_DEVNET_ID}` + +export type ISuiChainId = + | typeof SUI_MAINNET_CAIP2 + | typeof SUI_TESTNET_CAIP2 + | typeof SUI_DEVNET_CAIP2 + +export const SUI_MAINNET = { + [SUI_MAINNET_CAIP2]: { + chainId: SUI_MAINNET_ID, + name: 'SUI Mainnet', + logo: '/chain-logos/sui.png', + rgb: '6, 135, 245', + rpc: '', + caip2: SUI_MAINNET_CAIP2 as ISuiChainId, + namespace: SUI_NAMESPACE + } +} +export const SUI_TESTNET = { + [SUI_TESTNET_CAIP2]: { + chainId: SUI_TESTNET_ID, + name: 'SUI Testnet', + logo: '/chain-logos/sui.png', + rgb: '6, 135, 245', + rpc: '', + caip2: SUI_TESTNET_CAIP2 as ISuiChainId, + namespace: SUI_NAMESPACE + } +} +export const SUI_DEVNET = { + [SUI_DEVNET_CAIP2]: { + chainId: SUI_DEVNET_ID, + name: 'SUI Devnet', + logo: '/chain-logos/sui.png', + rgb: '6, 135, 245', + rpc: '', + caip2: SUI_DEVNET_CAIP2 as ISuiChainId, + namespace: SUI_NAMESPACE + } +} + +export const SUI_CHAINS = { ...SUI_MAINNET, ...SUI_TESTNET, ...SUI_DEVNET } as Record< + ISuiChainId, + typeof SUI_MAINNET[typeof SUI_MAINNET_CAIP2] & + typeof SUI_TESTNET[typeof SUI_TESTNET_CAIP2] & + typeof SUI_DEVNET[typeof SUI_DEVNET_CAIP2] +> +export const SUI_TESTNET_CHAINS = { ...SUI_TESTNET, ...SUI_DEVNET } as Record< + ISuiChainId, + typeof SUI_TESTNET[typeof SUI_TESTNET_CAIP2] & typeof SUI_DEVNET[typeof SUI_DEVNET_CAIP2] +> + +export const SUI_MAINNET_CHAINS = { ...SUI_MAINNET } as Record< + ISuiChainId, + typeof SUI_MAINNET[typeof SUI_MAINNET_CAIP2] +> + +/** + * Methods + */ +export const SUI_SIGNING_METHODS = { + SUI_SIGN_TRANSACTION: 'sui_signTransaction', + SUI_SIGN_AND_EXECUTE_TRANSACTION: 'sui_signAndExecuteTransaction', + SUI_SIGN_PERSONAL_MESSAGE: 'sui_signPersonalMessage' +} + +/** + * Events + */ + +export const SUI_EVENTS = { + SUI_ACCOUNTS_CHANGED: 'sui_accountsChanged', + SUI_CHAIN_CHANGED: 'sui_chainChanged' +} diff --git a/advanced/wallets/react-wallet-v2/src/data/chainsUtil.ts b/advanced/wallets/react-wallet-v2/src/data/chainsUtil.ts index f002f3d8f..395c72102 100644 --- a/advanced/wallets/react-wallet-v2/src/data/chainsUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/data/chainsUtil.ts @@ -9,6 +9,7 @@ import { POLKADOT_CHAINS } from './PolkadotData' import { SOLANA_CHAINS } from './SolanaData' import { TEZOS_CHAINS } from './TezosData' import { TRON_CHAINS } from './TronData' +import { SUI_CHAINS } from './SuiData' export const ALL_CHAINS = { ...EIP155_CHAINS, @@ -20,7 +21,8 @@ export const ALL_CHAINS = { ...SOLANA_CHAINS, ...TEZOS_CHAINS, ...TRON_CHAINS, - ...BIP122_CHAINS + ...BIP122_CHAINS, + ...SUI_CHAINS } export function getChainData(chainId?: string) { diff --git a/advanced/wallets/react-wallet-v2/src/hooks/useInitialization.ts b/advanced/wallets/react-wallet-v2/src/hooks/useInitialization.ts index ab3e8a8f9..380b6bb4a 100644 --- a/advanced/wallets/react-wallet-v2/src/hooks/useInitialization.ts +++ b/advanced/wallets/react-wallet-v2/src/hooks/useInitialization.ts @@ -13,6 +13,7 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { useSnapshot } from 'valtio' import useSmartAccounts from './useSmartAccounts' import { createOrRestoreBip122Wallet } from '@/utils/Bip122WalletUtil' +import { createOrRestoreSuiWallet } from '@/utils/SuiWalletUtil' // guard against multiple calls to createWalletKit while the wallet is initializing let startedInit = false @@ -38,6 +39,7 @@ export default function useInitialization() { const { tezosAddresses } = await createOrRestoreTezosWallet() const { kadenaAddresses } = await createOrRestoreKadenaWallet() const { bip122Addresses } = await createOrRestoreBip122Wallet() + const { suiAddresses } = await createOrRestoreSuiWallet() await initializeSmartAccounts(eip155Wallets[eip155Addresses[0]].getPrivateKey()) SettingsStore.setEIP155Address(eip155Addresses[0]) @@ -50,6 +52,7 @@ export default function useInitialization() { SettingsStore.setTezosAddress(tezosAddresses[0]) SettingsStore.setKadenaAddress(kadenaAddresses[0]) SettingsStore.setbip122Address(bip122Addresses[0]) + SettingsStore.setSuiAddress(suiAddresses[0]) await createWalletKit(relayerRegionURL) setInitialized(true) } catch (err: unknown) { diff --git a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts index 28bfdd32d..0ba99c034 100644 --- a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts +++ b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts @@ -25,6 +25,7 @@ import WalletCheckoutUtil from '@/utils/WalletCheckoutUtil' import WalletCheckoutCtrl from '@/store/WalletCheckoutCtrl' import { CheckoutErrorCode } from '@/types/wallet_checkout' import { createCheckoutError } from '@/types/wallet_checkout' +import { SUI_SIGNING_METHODS } from '@/data/SuiData' export default function useWalletConnectEventsManager(initialized: boolean) { /****************************************************************************** @@ -174,6 +175,11 @@ export default function useWalletConnectEventsManager(initialized: boolean) { requestEvent, requestSession }) + case SUI_SIGNING_METHODS.SUI_SIGN_PERSONAL_MESSAGE: + return ModalStore.open('SessionSignSuiPersonalMessageModal', { + requestEvent, + requestSession + }) default: return ModalStore.open('SessionUnsuportedMethodModal', { requestEvent, requestSession }) } diff --git a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts new file mode 100644 index 000000000..24f405b33 --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts @@ -0,0 +1,351 @@ +import * as bip39 from 'bip39' +import { mnemonicToSeedSync } from 'bip39' +import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519' +import { verifyPersonalMessageSignature, verifySignature } from '@mysten/sui/verify' +import { derivePath } from 'ed25519-hd-key' + +interface IInitArguments { + mnemonic?: string +} + +const SUI_PATH = "m/44'/784'/0'/0'/0'" + +/** + * Library + */ +export default class SuiLib { + private keypair: Ed25519Keypair + private mnemonic: string + private address: string + + constructor(mnemonic?: string) { + this.mnemonic = mnemonic ? mnemonic : bip39.generateMnemonic() + const seed = mnemonicToSeedSync(this.mnemonic) + const { key } = derivePath(SUI_PATH, seed.toString('hex')) + + this.keypair = Ed25519Keypair.fromSecretKey(new Uint8Array(key)) + this.address = this.keypair.getPublicKey().toSuiAddress() + console.log('Sui Address:', this.address) + } + + static async init({ mnemonic }: IInitArguments) { + return new SuiLib(mnemonic) + } + + public getAddress() { + return this.address + } + + // public getOrdinalsAddress(chainId: IBip122ChainId) { + // return Array.from(this.ordinals[chainId].values())[0].address + // } + public getMnemonic() { + return this.mnemonic + } + + // public getAddresses(chainId: IBip122ChainId, intentions?: string[]) { + // if (intentions && intentions[0] === 'ordinal') { + // return this.ordinals[chainId] + // } + // return this.addresses[chainId] + // } + + public async signMessage({ message }: { message: string }) { + // Message to sign + const messageToSign = new TextEncoder().encode(message) + + // Sign the message + const signature = await this.keypair.signPersonalMessage(messageToSign) + + const base64Signature = Buffer.from(signature.signature).toString('base64') + // Output + console.log('Signature (base64):', base64Signature) + console.log('Public Key:', this.keypair.getPublicKey().toBase64()) + + const verified = await verifyPersonalMessageSignature(messageToSign, signature.signature) + console.log('Verified:', verified, verified.equals(this.keypair.getPublicKey())) + + return { + signature: base64Signature, + publicKey: this.keypair.getPublicKey().toBase64() + } + } + + // public async sendTransfer(params: { + // account: string + // recipientAddress: string + // amount: string + // changeAddress?: string + // memo?: string + // chainId: IBip122ChainId + // }) { + // const { account, recipientAddress, amount, changeAddress, memo, chainId } = params + // const satoshis = parseInt(amount) + + // const addressData = this.getAddressData(account, chainId) + // if (!addressData) { + // throw new Error(`Unkown address: ${account}`) + // } + + // if (satoshis < 0) { + // throw new Error(`Invalid amount: ${amount}`) + // } + + // const utxos = (await this.getUTXOs(account, chainId)) as IUTXO[] + // if (!utxos || utxos.length === 0) { + // throw new Error(`No UTXOs found for address: ${account}`) + // } + + // let utxosValue = 0 + // const utxosToSpend: IUTXO[] = [] + // utxos.forEach(utxo => { + // utxosValue += utxo.value + // utxosToSpend.push(utxo) + // if (utxosValue >= satoshis) { + // return + // } + // }) + + // const keyData = this.keys[chainId].get(account)! + // const transaction = await this.createTransaction({ + // network: keyData.network, + // recipientAddress, + // amount: satoshis, + // changeAddress: changeAddress || account, + // utxos: utxosToSpend, + // privateKeyWIF: keyData.wif, + // memo, + // feeRate: await this.getFeeRate() + // }) + // return await this.broadcastTransaction(transaction, chainId) + // } + + // async getUTXOs(address: string, chainId: IBip122ChainId): Promise { + // const isTestnet = this.isTestnet(chainId) + // // make chain dynamic + // return await ( + // await fetch(`https://mempool.space${isTestnet ? '/testnet' : ''}/api/address/${address}/utxo`) + // ).json() + // } + + // async broadcastTransaction(transaction: string, chainId: IBip122ChainId) { + // const isTestnet = this.isTestnet(chainId) + // const result = await fetch(`https://mempool.space${isTestnet ? '/testnet' : ''}/api/tx`, { + // method: 'POST', + // body: transaction + // }) + + // if (result.ok) { + // return await result.text() + // } + // throw new Error('Error broadcasting transaction: ' + (await result.text())) + // } + + // getAvailableBalance(utxos: IUTXO[]) { + // return utxos.reduce((acc, { value }) => acc + value, 0) + // } + + // private async getFeeRate() { + // const defaultFeeRate = 2 + // try { + // const response = await fetch('https://mempool.space/api/v1/fees/recommended') + // if (response.ok) { + // const data = await response.json() + // return parseInt(data?.economyFee ?? defaultFeeRate) + // } + // } catch (e) { + // console.error('Error fetching fee rate', e) + // } + // return defaultFeeRate + // } + + // private generateAddress({ + // index, + // coinType, + // chainId, + // change = false, + // taproot = false + // }: { + // index: number + // coinType: string + // chainId: IBip122ChainId + // change?: boolean + // taproot?: boolean + // }) { + // const network = this.getNetwork(coinType) + // const path = `m/84'/${coinType}'/0'/${change ? 1 : 0}/${index}` + // const child = this.account.derivePath(path) + // let address + // if (taproot) { + // address = bitcoin.payments.p2tr({ + // pubkey: child.publicKey.slice(1), + // network + // }).address! + // } else { + // address = bitcoin.payments.p2wpkh({ + // pubkey: child.publicKey, + // network + // }).address! + // } + // const wif = child.toWIF() + // this.keys[chainId].set(address, { wif, network }) + // return { address, path, publicKey: child.publicKey.toString('hex') } + // } + + // private loadAddresses(startIndex = 0) { + // console.log('Loading addresses...') + // console.log('Keys:', this.keys) + // console.log('Addresses:', this.addresses) + // console.log('Ordinals:', this.ordinals) + // Object.keys(this.keys).forEach(chainId => { + // const data = BIP122_CHAINS[chainId as IBip122ChainId] + // const addressesToLoad = startIndex + 20 + + // for (let i = startIndex; i < addressesToLoad; i++) { + // const addressParams = { + // index: i, + // chainId: data.caip2, + // coinType: data.coinType + // } + // // payment addresses + // const addressData = this.generateAddress(addressParams) + // this.addresses[data.caip2].set(addressData.address, addressData) + // // ordinals + // const taprootAddress = this.generateAddress({ + // ...addressParams, + // taproot: true + // }) + // this.ordinals[data.caip2].set(taprootAddress.address, taprootAddress) + // } + // console.log('Loaded addresses:', this.addresses, this.ordinals) + // }) + // } + + // private getNetwork(coinType: string) { + // if (coinType === '0') { + // return bitcoin.networks.bitcoin + // } else if (coinType === '1') { + // return bitcoin.networks.testnet + // } + // throw new Error(`Unsupported coin type: ${coinType}`) + // } + + // private async createTransaction({ + // network, + // recipientAddress, + // amount, + // changeAddress, + // memo, + // utxos, + // privateKeyWIF, + // feeRate + // }: ICreateTransaction) { + // const psbt = new bitcoin.Psbt({ network }) + // const keyPair = ECPair.fromWIF(privateKeyWIF) + // const payment = bitcoin.payments.p2wpkh({ + // pubkey: keyPair.publicKey, + // network: bitcoin.networks.testnet + // }) + + // utxos.forEach(utxo => { + // psbt.addInput({ + // hash: utxo.txid, + // index: utxo.vout, + // witnessUtxo: { + // script: Buffer.from(payment.output?.toString('hex')!, 'hex'), + // value: utxo.value + // } + // }) + // }) + + // psbt.addOutput({ + // address: recipientAddress, + // value: amount + // }) + // const change = this.calculateChange(utxos, amount, feeRate) + + // if (change > 0) { + // psbt.addOutput({ + // address: changeAddress, + // value: change + // }) + // } + + // if (memo) { + // const data = Buffer.from(memo, 'utf8') + // const embed = bitcoin.payments.embed({ data: [data] }) + // psbt.addOutput({ + // script: embed.output!, + // value: 0 + // }) + // } + + // psbt.signAllInputs(keyPair) + + // psbt.validateSignaturesOfInput(0, validator) + + // psbt.finalizeAllInputs() + + // const tx = psbt.extractTransaction() + + // return tx.toHex() + // } + + // public async signPsbt({ account, psbt, signInputs, broadcast = false, chainId }: ISignPsbt) { + // const keyData = this.keys[chainId].get(account)! + // const keyPair = ECPair.fromWIF(keyData.wif) + // const transaction = bitcoin.Psbt.fromBase64(psbt, { network: keyData.network }) + // signInputs.forEach(({ address, index, sighashTypes }) => { + // let keyPairToSignWith = keyPair + // if (address !== account) { + // const keyData = this.keys[chainId].get(address)! + // keyPairToSignWith = ECPair.fromWIF(keyData.wif) + // } + // transaction.signInput(index, keyPairToSignWith, sighashTypes) + // }) + // transaction.validateSignaturesOfInput(0, validator) + // transaction.finalizeAllInputs() + + // if (!broadcast) { + // return { + // psbt: transaction.toBase64() + // } + // } + + // const tx = transaction.extractTransaction() + // const txId = await this.broadcastTransaction(tx.toHex(), chainId) + // return { + // psbt: transaction.toBase64(), + // txid: txId + // } + // } + + // // Helper function to calculate change + // private calculateChange(utxos: IUTXO[], amount: number, feeRate: number): number { + // const inputSum = utxos.reduce((sum, utxo) => sum + utxo.value, 0) + // /** + // * 10 bytes: This is an estimated fixed overhead for the transaction. + // * 148 bytes: This is the average size of each input (UTXO). + // * 34 bytes: This is the size of each output. + // * The multiplication by 2 indicates that there are usually two outputs in a typical transaction (one for the recipient and one for change) + // */ + // const estimatedSize = 10 + 148 * utxos.length + 34 * 2 + // const fee = estimatedSize * feeRate + // const change = inputSum - amount - fee + // return change + // } + + // private getAddressData(address: string, chainId: IBip122ChainId) { + // const addressData = this.addresses[chainId].get(address) + // if (addressData) return addressData + // return this.ordinals[chainId].get(address) + // } + + // private isOrdinal(address: string, chainId: IBip122ChainId) { + // return this.ordinals[chainId].has(address) + // } + + // private isTestnet(chainId: IBip122ChainId) { + // return chainId.includes(BIP122_TESTNET_ID) + // } +} diff --git a/advanced/wallets/react-wallet-v2/src/pages/index.tsx b/advanced/wallets/react-wallet-v2/src/pages/index.tsx index 5442640fa..592105575 100644 --- a/advanced/wallets/react-wallet-v2/src/pages/index.tsx +++ b/advanced/wallets/react-wallet-v2/src/pages/index.tsx @@ -18,6 +18,7 @@ import useSmartAccounts from '@/hooks/useSmartAccounts' import { BIP122_CHAINS } from '@/data/Bip122Data' import { useRouter } from 'next/router' import ChainAbstractionBalanceCard from '@/components/ChainAbstractionBalanceCard' +import { SUI_MAINNET, SUI_MAINNET_CHAINS, SUI_TESTNET_CHAINS } from '@/data/SuiData' export default function HomePage() { const { @@ -32,6 +33,7 @@ export default function HomePage() { tezosAddress, kadenaAddress, bip122Address, + suiAddress, smartAccountEnabled, chainAbstractionEnabled } = useSnapshot(SettingsStore.state) @@ -145,6 +147,17 @@ export default function HomePage() { data-testid={'chain-card-' + caip10.toString()} /> ))} + {Object.entries(SUI_MAINNET_CHAINS).map(([caip10, { name, logo, rgb }]) => ( + + ))} {testNets ? ( @@ -274,6 +287,18 @@ export default function HomePage() { data-testid={'chain-card-' + caip10.toString()} /> ))} + + {Object.entries(SUI_TESTNET_CHAINS).map(([caip10, { name, logo, rgb }]) => ( + + ))} ) : null} diff --git a/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts b/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts index bf1a95f3a..83bb5966c 100644 --- a/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts +++ b/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts @@ -36,6 +36,7 @@ interface State { | 'SessionGetBip122AddressesModal' | 'SessionSendTransactionBip122Modal' | 'SessionCheckoutModal' + | 'SessionSignSuiPersonalMessageModal' data?: ModalData } diff --git a/advanced/wallets/react-wallet-v2/src/store/SettingsStore.ts b/advanced/wallets/react-wallet-v2/src/store/SettingsStore.ts index 706cc9fe8..2667a1828 100644 --- a/advanced/wallets/react-wallet-v2/src/store/SettingsStore.ts +++ b/advanced/wallets/react-wallet-v2/src/store/SettingsStore.ts @@ -32,6 +32,7 @@ interface State { tezosAddress: string kadenaAddress: string bip122Address: string + suiAddress: string kernelSmartAccountAddress: string safeSmartAccountAddress: string biconomySmartAccountAddress: string @@ -68,6 +69,7 @@ const state = proxy({ tezosAddress: '', kadenaAddress: '', bip122Address: '', + suiAddress: '', kernelSmartAccountAddress: '', safeSmartAccountAddress: '', biconomySmartAccountAddress: '', @@ -132,6 +134,9 @@ const SettingsStore = { setbip122Address(bip122Address: string) { state.bip122Address = bip122Address }, + setSuiAddress(suiAddress: string) { + state.suiAddress = suiAddress + }, setRelayerRegionURL(relayerRegionURL: string) { state.relayerRegionURL = relayerRegionURL }, diff --git a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts new file mode 100644 index 000000000..76aeb0627 --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts @@ -0,0 +1,59 @@ +import { getWallet } from '@/utils/SuiWalletUtil' +import { getSignParamsMessage } from '@/utils/HelperUtil' +import { formatJsonRpcError, formatJsonRpcResult } from '@json-rpc-tools/utils' +import { SignClientTypes } from '@walletconnect/types' +import { getSdkError } from '@walletconnect/utils' +import SettingsStore from '@/store/SettingsStore' +import { SUI_SIGNING_METHODS } from '@/data/SuiData' + +type RequestEventArgs = Omit + +export async function approveSuiRequest(requestEvent: RequestEventArgs) { + const { params, id } = requestEvent + const { chainId, request } = params + + SettingsStore.setActiveChainId(chainId) + + const wallet = await getWallet() + + switch (request.method) { + case SUI_SIGNING_METHODS.SUI_SIGN_PERSONAL_MESSAGE: + try { + const message = request.params.message + const signedMessage = await wallet.signMessage({ message }) + return formatJsonRpcResult(id, signedMessage) + } catch (error: any) { + console.error(error) + alert(error.message) + return formatJsonRpcError(id, error.message) + } + case SUI_SIGNING_METHODS.SUI_SIGN_TRANSACTION: + try { + const transaction = getSignParamsMessage(request.params) + const signedTransaction = {} + return formatJsonRpcResult(id, signedTransaction) + } catch (error: any) { + console.error(error) + alert(error.message) + return formatJsonRpcError(id, error.message) + } + case SUI_SIGNING_METHODS.SUI_SIGN_AND_EXECUTE_TRANSACTION: + try { + const message = getSignParamsMessage(request.params) + const signedMessage = await wallet.signMessage({ message }) + return formatJsonRpcResult(id, signedMessage) + } catch (error: any) { + console.error(error) + alert(error.message) + return formatJsonRpcError(id, error.message) + } + default: + throw new Error(getSdkError('INVALID_METHOD').message) + } +} + +export function rejectSuiRequest(request: RequestEventArgs) { + const { id } = request + + return formatJsonRpcError(id, getSdkError('USER_REJECTED').message) +} diff --git a/advanced/wallets/react-wallet-v2/src/utils/SuiWalletUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/SuiWalletUtil.ts new file mode 100644 index 000000000..2b8fa1bf1 --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/utils/SuiWalletUtil.ts @@ -0,0 +1,31 @@ +import SuiLib from '@/lib/SuiLib' + +export let wallet1: SuiLib +export let suiAddresses: string[] + +/** + * Utilities + */ +export async function createOrRestoreSuiWallet() { + const mnemonic1 = localStorage.getItem('SUI_MNEMONIC_1') + + if (mnemonic1) { + wallet1 = await SuiLib.init({ mnemonic: mnemonic1 }) + } else { + wallet1 = await SuiLib.init({}) + // Don't store private keys in local storage in a production project! + localStorage.setItem('SUI_MNEMONIC_1', wallet1.getMnemonic()) + console.log('SUI_MNEMONIC_1', wallet1.getMnemonic()) + } + + suiAddresses = [wallet1.getAddress()] + + return { + suiWallet: wallet1, + suiAddresses + } +} + +export const getWallet = async () => { + return wallet1 +} diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx index 91a9e9596..48a9e0e2a 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx @@ -45,6 +45,8 @@ import { } from '@/data/Bip122Data' import { EIP7715_METHOD } from '@/data/EIP7715Data' import { useRouter } from 'next/router' +import { SUI_CHAINS, SUI_EVENTS, SUI_SIGNING_METHODS } from '@/data/SuiData' +import { suiAddresses } from '@/utils/SuiWalletUtil' const StyledText = styled(Text, { fontWeight: 400 @@ -117,6 +119,11 @@ export default function SessionProposalModal() { const bip122Methods = Object.values(BIP122_SIGNING_METHODS) const bip122Events = Object.values(BIP122_EVENTS) + // sui + const suiChains = Object.keys(SUI_CHAINS) + const suiMethods = Object.values(SUI_SIGNING_METHODS) + const suiEvents = Object.values(SUI_EVENTS) + return { eip155: { chains: eip155Chains, @@ -199,6 +206,12 @@ export default function SessionProposalModal() { methods: bip122Methods, events: bip122Events, accounts: bip122Addresses + }, + sui: { + chains: suiChains, + methods: suiMethods, + events: suiEvents, + accounts: suiChains.map(chain => suiAddresses.map(address => `${chain}:${address}`)).flat() } } }, [addressesToApprove]) @@ -279,6 +292,8 @@ export default function SessionProposalModal() { return tronAddresses[0] case 'bip122': return bip122Addresses[0] + case 'sui': + return suiAddresses[0] } }, []) diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx new file mode 100644 index 000000000..e7f36b55b --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx @@ -0,0 +1,104 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import { Col, Divider, Row, Text } from '@nextui-org/react' +import { useCallback, useState } from 'react' + +import RequesDetailsCard from '@/components/RequestDetalilsCard' +import ModalStore from '@/store/ModalStore' +import { approveEIP155Request, rejectEIP155Request } from '@/utils/EIP155RequestHandlerUtil' +import { styledToast } from '@/utils/HelperUtil' +import { walletkit } from '@/utils/WalletConnectUtil' +import RequestModal from '../components/RequestModal' +import { suiAddresses } from '@/utils/SuiWalletUtil' +import { approveSuiRequest } from '@/utils/SuiRequestHandlerUtil' + +export default function SessionSignSuiPersonalMessageModal() { + // Get request and wallet data from store + const requestEvent = ModalStore.state.data?.requestEvent + const requestSession = ModalStore.state.data?.requestSession + const [isLoadingApprove, setIsLoadingApprove] = useState(false) + const [isLoadingReject, setIsLoadingReject] = useState(false) + + // Ensure request and wallet are defined + if (!requestEvent || !requestSession) { + return Missing request data + } + + // Get required request data + const { topic, params } = requestEvent + const { request, chainId } = params + + // Get message, convert it to UTF8 string if it is valid hex + const message = request.params?.message + ? Buffer.from(request.params.message, 'base64').toString('utf8') + : '' + + // Handle approve action (logic varies based on request method) + const onApprove = useCallback(async () => { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveSuiRequest(requestEvent) + await walletkit.respondSessionRequest({ + topic, + response + }) + } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { + setIsLoadingApprove(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + // Handle reject action + const onReject = useCallback(async () => { + if (requestEvent) { + setIsLoadingReject(true) + const response = rejectEIP155Request(requestEvent) + try { + // await walletkit.respondSessionRequest({ + // topic, + // response + // }) + } catch (e) { + setIsLoadingReject(false) + styledToast((e as Error).message, 'error') + return + } + setIsLoadingReject(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + return ( + + + + Sign with Address + + {suiAddresses[0]} + + + + + + + + + Message + + {message} + + + + + ) +} diff --git a/advanced/wallets/react-wallet-v2/yarn.lock b/advanced/wallets/react-wallet-v2/yarn.lock index 4a62725fd..fca77e20e 100644 --- a/advanced/wallets/react-wallet-v2/yarn.lock +++ b/advanced/wallets/react-wallet-v2/yarn.lock @@ -2,6 +2,19 @@ # yarn lockfile v1 +"@0no-co/graphql.web@^1.0.5": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.1.2.tgz#9af8deaf3f236c1c6ee99cc5349051475e5dcc83" + integrity sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw== + +"@0no-co/graphqlsp@^1.12.13": + version "1.12.16" + resolved "https://registry.yarnpkg.com/@0no-co/graphqlsp/-/graphqlsp-1.12.16.tgz#58fe7bad53b3ad9fdf2d5f41ddeb9b418d289a03" + integrity sha512-B5pyYVH93Etv7xjT6IfB7QtMBdaaC07yjbhN6v8H7KgFStMkPvi+oWYBTibMFRMY89qwc9H8YixXg8SXDVgYWw== + dependencies: + "@gql.tada/internal" "^1.0.0" + graphql "^15.5.0 || ^16.0.0 || ^17.0.0" + "@adraffy/ens-normalize@1.10.0": version "1.10.0" resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" @@ -1147,6 +1160,27 @@ dependencies: tslib "^2.8.0" +"@gql.tada/cli-utils@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@gql.tada/cli-utils/-/cli-utils-1.6.3.tgz#b893cec74908da4df0602691e2e0b1497fda8cda" + integrity sha512-jFFSY8OxYeBxdKi58UzeMXG1tdm4FVjXa8WHIi66Gzu9JWtCE6mqom3a8xkmSw+mVaybFW5EN2WXf1WztJVNyQ== + dependencies: + "@0no-co/graphqlsp" "^1.12.13" + "@gql.tada/internal" "1.0.8" + graphql "^15.5.0 || ^16.0.0 || ^17.0.0" + +"@gql.tada/internal@1.0.8", "@gql.tada/internal@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@gql.tada/internal/-/internal-1.0.8.tgz#3ba9fa6534809788bbbe103492f70b8e9d754027" + integrity sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g== + dependencies: + "@0no-co/graphql.web" "^1.0.5" + +"@graphql-typed-document-node/core@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + "@humanwhocodes/config-array@^0.9.2": version "0.9.5" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" @@ -1648,6 +1682,39 @@ tweetnacl "1.0.3" uuid "8.3.2" +"@mysten/bcs@1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@mysten/bcs/-/bcs-1.6.1.tgz#2e0a2e3f5b4afdb678b2a874cec4c4f341565b1e" + integrity sha512-pywsl2+jxbib5CbteAjMpmJpnj1pcUco2ff+lXCK3hfppPbkyWEMbZDQn1jNngV6ADQ3IFIvPs0FaS7fKWPOLA== + dependencies: + "@mysten/utils" "0.0.0" + "@scure/base" "^1.2.4" + +"@mysten/sui@^1.29.1": + version "1.29.1" + resolved "https://registry.yarnpkg.com/@mysten/sui/-/sui-1.29.1.tgz#1b2af78ff2816b1b20ce2e1558a1d6d8149a24f4" + integrity sha512-VkmaLIgXpuRMBFe47SC0swHemDx9qfhGQyxybFr2r3dTnh42gTFi0BlyW3aLr0Y2GxWbNlLphB5C3ELR7aqacw== + dependencies: + "@graphql-typed-document-node/core" "^3.2.0" + "@mysten/bcs" "1.6.1" + "@mysten/utils" "0.0.0" + "@noble/curves" "^1.8.1" + "@noble/hashes" "^1.7.1" + "@scure/base" "^1.2.4" + "@scure/bip32" "^1.6.2" + "@scure/bip39" "^1.5.4" + gql.tada "^1.8.2" + graphql "^16.9.0" + poseidon-lite "^0.2.0" + valibot "^0.36.0" + +"@mysten/utils@0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@mysten/utils/-/utils-0.0.0.tgz#e088ddd10d2e99c9cecbf2bc93f999d299cc1b06" + integrity sha512-KRI57Qow3E7TGqczimazwGf7+fwukdOi+6a31igSCzz0kPjAXbyK1a1gXaxeLMF8xEZ07ouW3RnsWt+EaUuHUw== + dependencies: + "@scure/base" "^1.2.4" + "@napi-rs/wasm-runtime@^0.2.9": version "0.2.9" resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz#7278122cf94f3b36d8170a8eee7d85356dfa6a96" @@ -1792,7 +1859,7 @@ dependencies: "@noble/hashes" "1.7.2" -"@noble/curves@^1.4.0", "@noble/curves@^1.4.2", "@noble/curves@^1.6.0", "@noble/curves@~1.9.0": +"@noble/curves@^1.4.0", "@noble/curves@^1.4.2", "@noble/curves@^1.6.0", "@noble/curves@^1.8.1", "@noble/curves@~1.9.0": version "1.9.1" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA== @@ -1834,7 +1901,7 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== -"@noble/hashes@1.8.0", "@noble/hashes@^1", "@noble/hashes@^1.2.0", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.8.0": +"@noble/hashes@1.8.0", "@noble/hashes@^1", "@noble/hashes@^1.2.0", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@^1.7.1", "@noble/hashes@~1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== @@ -2777,7 +2844,7 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@scure/base@^1.1.1", "@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": +"@scure/base@^1.1.1", "@scure/base@^1.2.4", "@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.5.tgz#f9d1b232425b367d0dcb81c96611dcc651d58671" integrity sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw== @@ -2805,7 +2872,7 @@ "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.2" -"@scure/bip32@^1.5.0": +"@scure/bip32@^1.5.0", "@scure/bip32@^1.6.2": version "1.7.0" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== @@ -2830,7 +2897,7 @@ "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.4" -"@scure/bip39@^1.4.0": +"@scure/bip39@^1.4.0", "@scure/bip39@^1.5.4": version "1.6.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== @@ -5764,7 +5831,17 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graphql@^16.8.2: +gql.tada@^1.8.2: + version "1.8.10" + resolved "https://registry.yarnpkg.com/gql.tada/-/gql.tada-1.8.10.tgz#096a1b30d3c6fc74212fe07d507f01a4095f7f67" + integrity sha512-FrvSxgz838FYVPgZHGOSgbpOjhR+yq44rCzww3oOPJYi0OvBJjAgCiP6LEokZIYND2fUTXzQAyLgcvgw1yNP5A== + dependencies: + "@0no-co/graphql.web" "^1.0.5" + "@0no-co/graphqlsp" "^1.12.13" + "@gql.tada/cli-utils" "1.6.3" + "@gql.tada/internal" "1.0.8" + +"graphql@^15.5.0 || ^16.0.0 || ^17.0.0", graphql@^16.8.2, graphql@^16.9.0: version "16.11.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== @@ -7123,6 +7200,11 @@ popper.js@1.16.1-lts: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== +poseidon-lite@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/poseidon-lite/-/poseidon-lite-0.2.1.tgz#7ad98e3a3aa5b91a1fd3a61a87460e9e46fd76d6" + integrity sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog== + possible-typed-array-names@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" @@ -8373,6 +8455,11 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== +valibot@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/valibot/-/valibot-0.36.0.tgz#74e746694b1abcc1879e4393db551d4ce1e10578" + integrity sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ== + validate-npm-package-name@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" From 347da4016b5cc8b5afe4d470eec44376cca655ee Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Mon, 19 May 2025 17:52:53 +0300 Subject: [PATCH 3/9] chore: lock --- advanced/dapps/react-dapp-v2/pnpm-lock.yaml | 27 +++++++++------------ 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml index 16ff33ce3..bba6fd379 100644 --- a/advanced/dapps/react-dapp-v2/pnpm-lock.yaml +++ b/advanced/dapps/react-dapp-v2/pnpm-lock.yaml @@ -38,13 +38,14 @@ overrides: next@>=9.5.5 <14.2.15: '>=14.2.15' ansi-html@<0.0.8: '>=0.0.8' axios@<1.8.2: '>=1.8.2' - '@walletconnect/core@': '>=2.20.1' + '@walletconnect/core@': '>=2.20.2' '@walletconnect/encoding@': '>=1.0.1' '@walletconnect/jsonrpc-utils@': '>=1.0.8' - '@walletconnect/types@': '>=2.20.1' - '@walletconnect/universal-provider@': '>=2.20.1' - '@walletconnect/sign-client@': '>=2.20.1' - '@walletconnect/utils@': '>=2.20.1' + '@walletconnect/types@': '>=2.20.2' + '@walletconnect/universal-provider@': '>=2.20.2' + '@walletconnect/sign-client@': '>=2.20.2' + '@walletconnect/utils@': '>=2.20.2' + '@walletconnect/ethereum-provider@': '>=2.20.2' importers: @@ -93,7 +94,7 @@ importers: specifier: ^1.36.0 version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/core': - specifier: '>=2.20.1' + specifier: '>=2.20.2' version: 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/encoding': specifier: '>=1.0.1' @@ -102,13 +103,13 @@ importers: specifier: '>=1.0.8' version: 1.0.8 '@walletconnect/types': - specifier: '>=2.20.1' + specifier: '>=2.20.2' version: 2.20.2 '@walletconnect/universal-provider': - specifier: '>=2.20.1' + specifier: '>=2.20.2' version: 2.20.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) '@walletconnect/utils': - specifier: '>=2.20.1' + specifier: '>=2.20.2' version: 2.20.2(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.24.4) axios: specifier: '>=1.8.2' @@ -10978,7 +10979,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 - '@jest/test-sequencer@26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@jest/test-sequencer@26.6.3': dependencies: '@jest/test-result': 26.6.2 graceful-fs: 4.2.11 @@ -10986,11 +10987,7 @@ snapshots: jest-runner: 26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) jest-runtime: 26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - ts-node - - utf-8-validate '@jest/transform@26.6.2': dependencies: @@ -16489,7 +16486,7 @@ snapshots: jest-config@26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.12.3 - '@jest/test-sequencer': 26.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@jest/test-sequencer': 26.6.3 '@jest/types': 26.6.2 babel-jest: 26.6.3(@babel/core@7.12.3) chalk: 4.1.2 From 7ba76a16e13deb8f87d88d3df8e668c24648e6cf Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 20 May 2025 11:55:31 +0300 Subject: [PATCH 4/9] feat: sui sign & send txs --- .../react-dapp-v2/src/components/Column.tsx | 18 +- .../src/contexts/JsonRpcContext.tsx | 61 ++- .../dapps/react-dapp-v2/src/helpers/index.ts | 1 + .../dapps/react-dapp-v2/src/helpers/sui.ts | 26 ++ .../react-wallet-v2/src/components/Modal.tsx | 6 + .../hooks/useWalletConnectEventsManager.ts | 10 + .../wallets/react-wallet-v2/src/lib/SuiLib.ts | 348 +++--------------- .../react-wallet-v2/src/store/ModalStore.ts | 2 + .../src/utils/SuiRequestHandlerUtil.ts | 16 +- ...ssionSignAndExecuteSuiTransactionModal.tsx | 113 ++++++ .../SessionSignSuiPersonalMessageModal.tsx | 22 +- .../views/SessionSignSuiTransactionModal.tsx | 112 ++++++ 12 files changed, 408 insertions(+), 327 deletions(-) create mode 100644 advanced/dapps/react-dapp-v2/src/helpers/sui.ts create mode 100644 advanced/wallets/react-wallet-v2/src/views/SessionSignAndExecuteSuiTransactionModal.tsx create mode 100644 advanced/wallets/react-wallet-v2/src/views/SessionSignSuiTransactionModal.tsx diff --git a/advanced/dapps/react-dapp-v2/src/components/Column.tsx b/advanced/dapps/react-dapp-v2/src/components/Column.tsx index d1020eb70..40cfd04c6 100644 --- a/advanced/dapps/react-dapp-v2/src/components/Column.tsx +++ b/advanced/dapps/react-dapp-v2/src/components/Column.tsx @@ -27,23 +27,7 @@ const SColumn = styled.div` const Column = (props: ColumnProps) => { const { children, spanHeight, maxWidth, center } = props; - return ( - - {children} - - ); + return {children}; }; Column.propTypes = { diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index 3cc800ecf..1aa7b5470 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -4,7 +4,11 @@ import * as encoding from "@walletconnect/encoding"; import { Transaction as EthTransaction } from "@ethereumjs/tx"; import { recoverTransaction } from "@celo/wallet-base"; import * as bitcoin from "bitcoinjs-lib"; -import { verifyPersonalMessageSignature } from "@mysten/sui/verify"; +import { + verifyPersonalMessageSignature, + verifyTransactionSignature, +} from "@mysten/sui/verify"; +import { Transaction as SuiTransaction } from "@mysten/sui/transactions"; import { formatDirectSignDoc, @@ -38,6 +42,7 @@ import { formatTestTransaction, getLocalStorageTestnetFlag, getProviderUrl, + getSuiClient, hashPersonalMessage, hashTypedDataMessage, verifySignature, @@ -86,6 +91,7 @@ import { } from "../helpers/bip122"; import { getAddressFromAccount } from "@walletconnect/utils"; import { BIP122_DUST_LIMIT } from "../chains/bip122"; +import { SuiClient } from "@mysten/sui/client"; /** * Types @@ -1903,12 +1909,18 @@ export function JsonRpcContextProvider({ address: string ): Promise => { const method = DEFAULT_SUI_METHODS.SUI_SIGN_AND_EXECUTE_TRANSACTION; + + const tx = new SuiTransaction(); + const [coin] = tx.splitCoins(tx.gas, [100]); // 0.001 SUI + tx.setSender(address); + tx.transferObjects([coin], address); + + const serialized = await tx.toJSON(); const req = { - account: address, - recipientAddress: address, - amount: 1000000000000000000, + transaction: Buffer.from(serialized).toString("base64"), }; - const result = await client!.request<{ txid: string }>({ + + const result = await client!.request<{ digest: string }>({ topic: session!.topic, chainId: chainId, request: { @@ -1916,11 +1928,12 @@ export function JsonRpcContextProvider({ params: req, }, }); + console.log("result", result); return { method, address: address, valid: true, - result: result?.txid, + result: result?.digest, }; } ), @@ -1930,10 +1943,22 @@ export function JsonRpcContextProvider({ address: string ): Promise => { const method = DEFAULT_SUI_METHODS.SUI_SIGN_TRANSACTION; + + const tx = new SuiTransaction(); + + const [coin] = tx.splitCoins(tx.gas, [100]); // 0.001 SUI + + tx.setSender(address); + + tx.transferObjects([coin], address); + + const serialized = await tx.toJSON(); + console.log("serialized", serialized); const req = { - account: address, + transaction: Buffer.from(serialized).toString("base64"), }; - const result = await client!.request<{ txid: string }>({ + + const result = await client!.request<{ signature: string }>({ topic: session!.topic, chainId: chainId, request: { @@ -1941,11 +1966,28 @@ export function JsonRpcContextProvider({ params: req, }, }); + console.log("result", result); + + const suiClient = await getSuiClient(chainId); + + const txBytes = await tx.build({ client: suiClient }); + + const decodedSignature = Buffer.from( + result.signature, + "base64" + ).toString(); + const isValid = await verifyTransactionSignature( + txBytes, + decodedSignature + ); + + console.log("isValid", isValid); + return { method, address: address, valid: true, - result: result?.txid, + result: result?.signature, }; } ), @@ -1980,6 +2022,7 @@ export function JsonRpcContextProvider({ Buffer.from(result.signature, "base64").toString(), { address } ); + console.log("publicKey", publicKey.toSuiAddress(), address); return { method, diff --git a/advanced/dapps/react-dapp-v2/src/helpers/index.ts b/advanced/dapps/react-dapp-v2/src/helpers/index.ts index 24bf8454a..6dc16991a 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/index.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/index.ts @@ -4,3 +4,4 @@ export * from "./eip1271"; export * from "./tx"; export * from "./types"; export * from "./utilities"; +export * from "./sui"; diff --git a/advanced/dapps/react-dapp-v2/src/helpers/sui.ts b/advanced/dapps/react-dapp-v2/src/helpers/sui.ts new file mode 100644 index 000000000..a7d62d1cb --- /dev/null +++ b/advanced/dapps/react-dapp-v2/src/helpers/sui.ts @@ -0,0 +1,26 @@ +import { SuiClient } from "@mysten/sui/client"; + +// Cache clients +const clients = new Map(); + +export async function getSuiClient(chainId: string) { + if (clients.has(chainId)) { + return clients.get(chainId); + } + let client: SuiClient; + switch (chainId) { + case "sui:mainnet": + client = new SuiClient({ url: "https://fullnode.mainnet.sui.io/" }); + break; + case "sui:testnet": + client = new SuiClient({ url: "https://fullnode.testnet.sui.io/" }); + break; + case "sui:devnet": + client = new SuiClient({ url: "https://fullnode.devnet.sui.io/" }); + break; + default: + throw new Error(`Unknown chainId: ${chainId}`); + } + clients.set(chainId, client); + return client; +} diff --git a/advanced/wallets/react-wallet-v2/src/components/Modal.tsx b/advanced/wallets/react-wallet-v2/src/components/Modal.tsx index 93c309b42..a4b012a1e 100644 --- a/advanced/wallets/react-wallet-v2/src/components/Modal.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/Modal.tsx @@ -24,6 +24,8 @@ import SessionSendTransactionBip122Modal from '@/views/SessionSendTransactionBip import SessionGrantPermissionsModal from '@/views/SessionGrantPermissionsModal' import SessionGetBip122AddressesModal from '@/views/SessionGetBip122AddressesModal' import SessionSignSuiPersonalMessageModal from '@/views/SessionSignSuiPersonalMessageModal' +import SessionSignSuiTransactionModal from '@/views/SessionSignSuiTransactionModal' +import SessionSignSuiAndExecuteTransactionModal from '@/views/SessionSignAndExecuteSuiTransactionModal' export default function Modal() { const { open, view } = useSnapshot(ModalStore.state) @@ -80,6 +82,10 @@ export default function Modal() { return case 'SessionSignSuiPersonalMessageModal': return + case 'SessionSignSuiTransactionModal': + return + case 'SessionSignSuiAndExecuteTransactionModal': + return default: return null } diff --git a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts index 0ba99c034..dce391267 100644 --- a/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts +++ b/advanced/wallets/react-wallet-v2/src/hooks/useWalletConnectEventsManager.ts @@ -180,6 +180,16 @@ export default function useWalletConnectEventsManager(initialized: boolean) { requestEvent, requestSession }) + case SUI_SIGNING_METHODS.SUI_SIGN_TRANSACTION: + return ModalStore.open('SessionSignSuiTransactionModal', { + requestEvent, + requestSession + }) + case SUI_SIGNING_METHODS.SUI_SIGN_AND_EXECUTE_TRANSACTION: + return ModalStore.open('SessionSignSuiAndExecuteTransactionModal', { + requestEvent, + requestSession + }) default: return ModalStore.open('SessionUnsuportedMethodModal', { requestEvent, requestSession }) } diff --git a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts index 24f405b33..2f9d0934a 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts @@ -1,13 +1,29 @@ import * as bip39 from 'bip39' import { mnemonicToSeedSync } from 'bip39' import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519' -import { verifyPersonalMessageSignature, verifySignature } from '@mysten/sui/verify' +import { verifyPersonalMessageSignature } from '@mysten/sui/verify' import { derivePath } from 'ed25519-hd-key' +import { SerialTransactionExecutor, Transaction } from '@mysten/sui/transactions' +import { SuiClient } from '@mysten/sui/client' interface IInitArguments { mnemonic?: string } +interface ISignMessageArguments { + message: string +} + +interface ISignTransactionArguments { + transaction: string + chainId: string +} + +interface ISignAndExecuteTransactionArguments { + transaction: string + chainId: string +} + const SUI_PATH = "m/44'/784'/0'/0'/0'" /** @@ -17,6 +33,7 @@ export default class SuiLib { private keypair: Ed25519Keypair private mnemonic: string private address: string + private suiClients: Record = {} constructor(mnemonic?: string) { this.mnemonic = mnemonic ? mnemonic : bip39.generateMnemonic() @@ -36,25 +53,13 @@ export default class SuiLib { return this.address } - // public getOrdinalsAddress(chainId: IBip122ChainId) { - // return Array.from(this.ordinals[chainId].values())[0].address - // } public getMnemonic() { return this.mnemonic } - // public getAddresses(chainId: IBip122ChainId, intentions?: string[]) { - // if (intentions && intentions[0] === 'ordinal') { - // return this.ordinals[chainId] - // } - // return this.addresses[chainId] - // } - - public async signMessage({ message }: { message: string }) { - // Message to sign + public async signMessage({ message }: ISignMessageArguments) { const messageToSign = new TextEncoder().encode(message) - // Sign the message const signature = await this.keypair.signPersonalMessage(messageToSign) const base64Signature = Buffer.from(signature.signature).toString('base64') @@ -71,281 +76,48 @@ export default class SuiLib { } } - // public async sendTransfer(params: { - // account: string - // recipientAddress: string - // amount: string - // changeAddress?: string - // memo?: string - // chainId: IBip122ChainId - // }) { - // const { account, recipientAddress, amount, changeAddress, memo, chainId } = params - // const satoshis = parseInt(amount) - - // const addressData = this.getAddressData(account, chainId) - // if (!addressData) { - // throw new Error(`Unkown address: ${account}`) - // } - - // if (satoshis < 0) { - // throw new Error(`Invalid amount: ${amount}`) - // } - - // const utxos = (await this.getUTXOs(account, chainId)) as IUTXO[] - // if (!utxos || utxos.length === 0) { - // throw new Error(`No UTXOs found for address: ${account}`) - // } - - // let utxosValue = 0 - // const utxosToSpend: IUTXO[] = [] - // utxos.forEach(utxo => { - // utxosValue += utxo.value - // utxosToSpend.push(utxo) - // if (utxosValue >= satoshis) { - // return - // } - // }) - - // const keyData = this.keys[chainId].get(account)! - // const transaction = await this.createTransaction({ - // network: keyData.network, - // recipientAddress, - // amount: satoshis, - // changeAddress: changeAddress || account, - // utxos: utxosToSpend, - // privateKeyWIF: keyData.wif, - // memo, - // feeRate: await this.getFeeRate() - // }) - // return await this.broadcastTransaction(transaction, chainId) - // } - - // async getUTXOs(address: string, chainId: IBip122ChainId): Promise { - // const isTestnet = this.isTestnet(chainId) - // // make chain dynamic - // return await ( - // await fetch(`https://mempool.space${isTestnet ? '/testnet' : ''}/api/address/${address}/utxo`) - // ).json() - // } - - // async broadcastTransaction(transaction: string, chainId: IBip122ChainId) { - // const isTestnet = this.isTestnet(chainId) - // const result = await fetch(`https://mempool.space${isTestnet ? '/testnet' : ''}/api/tx`, { - // method: 'POST', - // body: transaction - // }) - - // if (result.ok) { - // return await result.text() - // } - // throw new Error('Error broadcasting transaction: ' + (await result.text())) - // } - - // getAvailableBalance(utxos: IUTXO[]) { - // return utxos.reduce((acc, { value }) => acc + value, 0) - // } - - // private async getFeeRate() { - // const defaultFeeRate = 2 - // try { - // const response = await fetch('https://mempool.space/api/v1/fees/recommended') - // if (response.ok) { - // const data = await response.json() - // return parseInt(data?.economyFee ?? defaultFeeRate) - // } - // } catch (e) { - // console.error('Error fetching fee rate', e) - // } - // return defaultFeeRate - // } - - // private generateAddress({ - // index, - // coinType, - // chainId, - // change = false, - // taproot = false - // }: { - // index: number - // coinType: string - // chainId: IBip122ChainId - // change?: boolean - // taproot?: boolean - // }) { - // const network = this.getNetwork(coinType) - // const path = `m/84'/${coinType}'/0'/${change ? 1 : 0}/${index}` - // const child = this.account.derivePath(path) - // let address - // if (taproot) { - // address = bitcoin.payments.p2tr({ - // pubkey: child.publicKey.slice(1), - // network - // }).address! - // } else { - // address = bitcoin.payments.p2wpkh({ - // pubkey: child.publicKey, - // network - // }).address! - // } - // const wif = child.toWIF() - // this.keys[chainId].set(address, { wif, network }) - // return { address, path, publicKey: child.publicKey.toString('hex') } - // } - - // private loadAddresses(startIndex = 0) { - // console.log('Loading addresses...') - // console.log('Keys:', this.keys) - // console.log('Addresses:', this.addresses) - // console.log('Ordinals:', this.ordinals) - // Object.keys(this.keys).forEach(chainId => { - // const data = BIP122_CHAINS[chainId as IBip122ChainId] - // const addressesToLoad = startIndex + 20 - - // for (let i = startIndex; i < addressesToLoad; i++) { - // const addressParams = { - // index: i, - // chainId: data.caip2, - // coinType: data.coinType - // } - // // payment addresses - // const addressData = this.generateAddress(addressParams) - // this.addresses[data.caip2].set(addressData.address, addressData) - // // ordinals - // const taprootAddress = this.generateAddress({ - // ...addressParams, - // taproot: true - // }) - // this.ordinals[data.caip2].set(taprootAddress.address, taprootAddress) - // } - // console.log('Loaded addresses:', this.addresses, this.ordinals) - // }) - // } - - // private getNetwork(coinType: string) { - // if (coinType === '0') { - // return bitcoin.networks.bitcoin - // } else if (coinType === '1') { - // return bitcoin.networks.testnet - // } - // throw new Error(`Unsupported coin type: ${coinType}`) - // } - - // private async createTransaction({ - // network, - // recipientAddress, - // amount, - // changeAddress, - // memo, - // utxos, - // privateKeyWIF, - // feeRate - // }: ICreateTransaction) { - // const psbt = new bitcoin.Psbt({ network }) - // const keyPair = ECPair.fromWIF(privateKeyWIF) - // const payment = bitcoin.payments.p2wpkh({ - // pubkey: keyPair.publicKey, - // network: bitcoin.networks.testnet - // }) - - // utxos.forEach(utxo => { - // psbt.addInput({ - // hash: utxo.txid, - // index: utxo.vout, - // witnessUtxo: { - // script: Buffer.from(payment.output?.toString('hex')!, 'hex'), - // value: utxo.value - // } - // }) - // }) - - // psbt.addOutput({ - // address: recipientAddress, - // value: amount - // }) - // const change = this.calculateChange(utxos, amount, feeRate) - - // if (change > 0) { - // psbt.addOutput({ - // address: changeAddress, - // value: change - // }) - // } - - // if (memo) { - // const data = Buffer.from(memo, 'utf8') - // const embed = bitcoin.payments.embed({ data: [data] }) - // psbt.addOutput({ - // script: embed.output!, - // value: 0 - // }) - // } - - // psbt.signAllInputs(keyPair) - - // psbt.validateSignaturesOfInput(0, validator) - - // psbt.finalizeAllInputs() - - // const tx = psbt.extractTransaction() - - // return tx.toHex() - // } - - // public async signPsbt({ account, psbt, signInputs, broadcast = false, chainId }: ISignPsbt) { - // const keyData = this.keys[chainId].get(account)! - // const keyPair = ECPair.fromWIF(keyData.wif) - // const transaction = bitcoin.Psbt.fromBase64(psbt, { network: keyData.network }) - // signInputs.forEach(({ address, index, sighashTypes }) => { - // let keyPairToSignWith = keyPair - // if (address !== account) { - // const keyData = this.keys[chainId].get(address)! - // keyPairToSignWith = ECPair.fromWIF(keyData.wif) - // } - // transaction.signInput(index, keyPairToSignWith, sighashTypes) - // }) - // transaction.validateSignaturesOfInput(0, validator) - // transaction.finalizeAllInputs() - - // if (!broadcast) { - // return { - // psbt: transaction.toBase64() - // } - // } - - // const tx = transaction.extractTransaction() - // const txId = await this.broadcastTransaction(tx.toHex(), chainId) - // return { - // psbt: transaction.toBase64(), - // txid: txId - // } - // } - - // // Helper function to calculate change - // private calculateChange(utxos: IUTXO[], amount: number, feeRate: number): number { - // const inputSum = utxos.reduce((sum, utxo) => sum + utxo.value, 0) - // /** - // * 10 bytes: This is an estimated fixed overhead for the transaction. - // * 148 bytes: This is the average size of each input (UTXO). - // * 34 bytes: This is the size of each output. - // * The multiplication by 2 indicates that there are usually two outputs in a typical transaction (one for the recipient and one for change) - // */ - // const estimatedSize = 10 + 148 * utxos.length + 34 * 2 - // const fee = estimatedSize * feeRate - // const change = inputSum - amount - fee - // return change - // } + public async signTransaction({ transaction, chainId }: ISignTransactionArguments) { + const tx = Transaction.from(Buffer.from(transaction, 'base64').toString('utf8')) + const client = this.getSuiClient(chainId) + console.log('tx', tx) + const signature = await tx.sign({ signer: this.keypair, client }) + console.log('signature', signature) + const base64Signature = Buffer.from(signature.signature).toString('base64') + return { + signature: base64Signature + } + } - // private getAddressData(address: string, chainId: IBip122ChainId) { - // const addressData = this.addresses[chainId].get(address) - // if (addressData) return addressData - // return this.ordinals[chainId].get(address) - // } + public async signAndExecuteTransaction({ + transaction, + chainId + }: ISignAndExecuteTransactionArguments) { + const tx = Transaction.from(Buffer.from(transaction, 'base64').toString('utf8')) + const client = this.getSuiClient(chainId) + const executor = new SerialTransactionExecutor({ signer: this.keypair, client }) + const result = await executor.executeTransaction(tx) + console.log('result', result) + return result + } - // private isOrdinal(address: string, chainId: IBip122ChainId) { - // return this.ordinals[chainId].has(address) - // } + private getSuiClient(chainId: string) { + if (this.suiClients[chainId]) { + return this.suiClients[chainId] + } - // private isTestnet(chainId: IBip122ChainId) { - // return chainId.includes(BIP122_TESTNET_ID) - // } + switch (chainId) { + case 'sui:mainnet': + this.suiClients[chainId] = new SuiClient({ url: 'https://fullnode.mainnet.sui.io/' }) + break + case 'sui:testnet': + this.suiClients[chainId] = new SuiClient({ url: 'https://fullnode.testnet.sui.io/' }) + break + case 'sui:devnet': + this.suiClients[chainId] = new SuiClient({ url: 'https://fullnode.devnet.sui.io/' }) + break + default: + throw new Error(`Unknown chainId: ${chainId}`) + } + return this.suiClients[chainId] + } } diff --git a/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts b/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts index 83bb5966c..af7b34d6a 100644 --- a/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts +++ b/advanced/wallets/react-wallet-v2/src/store/ModalStore.ts @@ -37,6 +37,8 @@ interface State { | 'SessionSendTransactionBip122Modal' | 'SessionCheckoutModal' | 'SessionSignSuiPersonalMessageModal' + | 'SessionSignSuiTransactionModal' + | 'SessionSignSuiAndExecuteTransactionModal' data?: ModalData } diff --git a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts index 76aeb0627..e2c217ff3 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/SuiRequestHandlerUtil.ts @@ -29,9 +29,11 @@ export async function approveSuiRequest(requestEvent: RequestEventArgs) { } case SUI_SIGNING_METHODS.SUI_SIGN_TRANSACTION: try { - const transaction = getSignParamsMessage(request.params) - const signedTransaction = {} - return formatJsonRpcResult(id, signedTransaction) + const result = await wallet.signTransaction({ + transaction: request.params.transaction, + chainId + }) + return formatJsonRpcResult(id, result) } catch (error: any) { console.error(error) alert(error.message) @@ -39,9 +41,11 @@ export async function approveSuiRequest(requestEvent: RequestEventArgs) { } case SUI_SIGNING_METHODS.SUI_SIGN_AND_EXECUTE_TRANSACTION: try { - const message = getSignParamsMessage(request.params) - const signedMessage = await wallet.signMessage({ message }) - return formatJsonRpcResult(id, signedMessage) + const result = await wallet.signAndExecuteTransaction({ + transaction: request.params.transaction, + chainId + }) + return formatJsonRpcResult(id, result) } catch (error: any) { console.error(error) alert(error.message) diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignAndExecuteSuiTransactionModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignAndExecuteSuiTransactionModal.tsx new file mode 100644 index 000000000..b9f2e35f5 --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignAndExecuteSuiTransactionModal.tsx @@ -0,0 +1,113 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import { Col, Divider, Row, Text } from '@nextui-org/react' +import { useCallback, useState } from 'react' + +import RequesDetailsCard from '@/components/RequestDetalilsCard' +import ModalStore from '@/store/ModalStore' +import { approveEIP155Request, rejectEIP155Request } from '@/utils/EIP155RequestHandlerUtil' +import { styledToast } from '@/utils/HelperUtil' +import { walletkit } from '@/utils/WalletConnectUtil' +import RequestModal from '../components/RequestModal' +import { suiAddresses } from '@/utils/SuiWalletUtil' +import { approveSuiRequest, rejectSuiRequest } from '@/utils/SuiRequestHandlerUtil' + +export default function SessionSignSuiAndExecuteTransactionModal() { + // Get request and wallet data from store + const requestEvent = ModalStore.state.data?.requestEvent + const requestSession = ModalStore.state.data?.requestSession + const [isLoadingApprove, setIsLoadingApprove] = useState(false) + const [isLoadingReject, setIsLoadingReject] = useState(false) + + // Ensure request and wallet are defined + if (!requestEvent || !requestSession) { + return Missing request data + } + + // Get required request data + const { topic, params } = requestEvent + const { request, chainId } = params + + // Get message, convert it to UTF8 string if it is valid hex + const transaction = request.params?.transaction + ? Buffer.from(request.params.transaction, 'base64').toString('utf8') + : '' + + // Handle approve action (logic varies based on request method) + const onApprove = useCallback(async () => { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveSuiRequest(requestEvent) + await walletkit.respondSessionRequest({ + topic, + response + }) + } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { + setIsLoadingApprove(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + // Handle reject action + const onReject = useCallback(async () => { + if (requestEvent) { + setIsLoadingReject(true) + const response = rejectSuiRequest(requestEvent) + try { + await walletkit.respondSessionRequest({ + topic, + response + }) + } catch (e) { + setIsLoadingReject(false) + styledToast((e as Error).message, 'error') + return + } + setIsLoadingReject(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + return ( + + + + Sign with Address + + {suiAddresses[0]} + + + + + + + Method + + {request.method} + + + + + + + + + Transaction details + + {transaction} + + + + + ) +} diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx index e7f36b55b..b951da352 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiPersonalMessageModal.tsx @@ -4,12 +4,11 @@ import { useCallback, useState } from 'react' import RequesDetailsCard from '@/components/RequestDetalilsCard' import ModalStore from '@/store/ModalStore' -import { approveEIP155Request, rejectEIP155Request } from '@/utils/EIP155RequestHandlerUtil' import { styledToast } from '@/utils/HelperUtil' import { walletkit } from '@/utils/WalletConnectUtil' import RequestModal from '../components/RequestModal' import { suiAddresses } from '@/utils/SuiWalletUtil' -import { approveSuiRequest } from '@/utils/SuiRequestHandlerUtil' +import { approveSuiRequest, rejectSuiRequest } from '@/utils/SuiRequestHandlerUtil' export default function SessionSignSuiPersonalMessageModal() { // Get request and wallet data from store @@ -55,12 +54,12 @@ export default function SessionSignSuiPersonalMessageModal() { const onReject = useCallback(async () => { if (requestEvent) { setIsLoadingReject(true) - const response = rejectEIP155Request(requestEvent) + const response = rejectSuiRequest(requestEvent) try { - // await walletkit.respondSessionRequest({ - // topic, - // response - // }) + await walletkit.respondSessionRequest({ + topic, + response + }) } catch (e) { setIsLoadingReject(false) styledToast((e as Error).message, 'error') @@ -89,6 +88,15 @@ export default function SessionSignSuiPersonalMessageModal() { + + + Method + + {request.method} + + + + diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiTransactionModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiTransactionModal.tsx new file mode 100644 index 000000000..ec13e538c --- /dev/null +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignSuiTransactionModal.tsx @@ -0,0 +1,112 @@ +/* eslint-disable react-hooks/rules-of-hooks */ +import { Col, Divider, Row, Text } from '@nextui-org/react' +import { useCallback, useState } from 'react' + +import RequesDetailsCard from '@/components/RequestDetalilsCard' +import ModalStore from '@/store/ModalStore' +import { styledToast } from '@/utils/HelperUtil' +import { walletkit } from '@/utils/WalletConnectUtil' +import RequestModal from '../components/RequestModal' +import { suiAddresses } from '@/utils/SuiWalletUtil' +import { approveSuiRequest, rejectSuiRequest } from '@/utils/SuiRequestHandlerUtil' + +export default function SessionSignSuiTransactionModal() { + // Get request and wallet data from store + const requestEvent = ModalStore.state.data?.requestEvent + const requestSession = ModalStore.state.data?.requestSession + const [isLoadingApprove, setIsLoadingApprove] = useState(false) + const [isLoadingReject, setIsLoadingReject] = useState(false) + + // Ensure request and wallet are defined + if (!requestEvent || !requestSession) { + return Missing request data + } + + // Get required request data + const { topic, params } = requestEvent + const { request, chainId } = params + + // Get message, convert it to UTF8 string if it is valid hex + const transaction = request.params?.transaction + ? Buffer.from(request.params.transaction, 'base64').toString('utf8') + : '' + + // Handle approve action (logic varies based on request method) + const onApprove = useCallback(async () => { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveSuiRequest(requestEvent) + await walletkit.respondSessionRequest({ + topic, + response + }) + } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { + setIsLoadingApprove(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + // Handle reject action + const onReject = useCallback(async () => { + if (requestEvent) { + setIsLoadingReject(true) + const response = rejectSuiRequest(requestEvent) + try { + await walletkit.respondSessionRequest({ + topic, + response + }) + } catch (e) { + setIsLoadingReject(false) + styledToast((e as Error).message, 'error') + return + } + setIsLoadingReject(false) + ModalStore.close() + } + }, [requestEvent, topic]) + + return ( + + + + Sign with Address + + {suiAddresses[0]} + + + + + + + Method + + {request.method} + + + + + + + + + Transaction details + + {transaction} + + + + + ) +} From 6c48d7fe8e4e7c65b5a1e4c68b1df83be7588c6c Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 20 May 2025 13:21:24 +0300 Subject: [PATCH 5/9] fix: remove double base64 encoding --- .../src/contexts/JsonRpcContext.tsx | 22 ++++++++++--------- .../wallets/react-wallet-v2/src/lib/SuiLib.ts | 8 +++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index 1aa7b5470..3ac51fc3a 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -1918,8 +1918,9 @@ export function JsonRpcContextProvider({ const serialized = await tx.toJSON(); const req = { transaction: Buffer.from(serialized).toString("base64"), + address, }; - + console.log("req", req, serialized); const result = await client!.request<{ digest: string }>({ topic: session!.topic, chainId: chainId, @@ -1953,11 +1954,11 @@ export function JsonRpcContextProvider({ tx.transferObjects([coin], address); const serialized = await tx.toJSON(); - console.log("serialized", serialized); const req = { transaction: Buffer.from(serialized).toString("base64"), + address, }; - + console.log("req", req, serialized); const result = await client!.request<{ signature: string }>({ topic: session!.topic, chainId: chainId, @@ -1972,13 +1973,9 @@ export function JsonRpcContextProvider({ const txBytes = await tx.build({ client: suiClient }); - const decodedSignature = Buffer.from( - result.signature, - "base64" - ).toString(); const isValid = await verifyTransactionSignature( txBytes, - decodedSignature + result.signature ); console.log("isValid", isValid); @@ -2003,6 +2000,7 @@ export function JsonRpcContextProvider({ "This is a message to be signed for SUI" ).toString("base64"), }; + console.log("req", req); const result = await client!.request<{ signature: string; publicKey: string; @@ -2015,11 +2013,15 @@ export function JsonRpcContextProvider({ }, }); - console.log("result", result); + console.log( + "result", + result, + Buffer.from(result.signature, "base64").toString("hex") + ); try { const publicKey = await verifyPersonalMessageSignature( new TextEncoder().encode(req.message), - Buffer.from(result.signature, "base64").toString(), + result.signature, { address } ); diff --git a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts index 2f9d0934a..54a364d9b 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts @@ -62,16 +62,15 @@ export default class SuiLib { const signature = await this.keypair.signPersonalMessage(messageToSign) - const base64Signature = Buffer.from(signature.signature).toString('base64') // Output - console.log('Signature (base64):', base64Signature) + console.log('Signature:', signature) console.log('Public Key:', this.keypair.getPublicKey().toBase64()) const verified = await verifyPersonalMessageSignature(messageToSign, signature.signature) console.log('Verified:', verified, verified.equals(this.keypair.getPublicKey())) return { - signature: base64Signature, + signature: signature.signature, publicKey: this.keypair.getPublicKey().toBase64() } } @@ -82,9 +81,8 @@ export default class SuiLib { console.log('tx', tx) const signature = await tx.sign({ signer: this.keypair, client }) console.log('signature', signature) - const base64Signature = Buffer.from(signature.signature).toString('base64') return { - signature: base64Signature + signature: signature.signature } } From e09cf1494b126a8603346b765e9eefbece76e96c Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 20 May 2025 13:32:24 +0300 Subject: [PATCH 6/9] chore: adds cosmos logs --- .../dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index 3ac51fc3a..bbe553767 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -766,6 +766,8 @@ export function JsonRpcContextProvider({ signDoc: stringifySignDocValues(signDoc), }; + console.log("cosmos_signDirect params", params); + // send message const result = await client!.request<{ signature: string }>({ topic: session!.topic, @@ -776,6 +778,7 @@ export function JsonRpcContextProvider({ }, }); + console.log("cosmos_signDirect result", result); const targetChainData = chainData[namespace][reference]; if (typeof targetChainData === "undefined") { @@ -815,6 +818,8 @@ export function JsonRpcContextProvider({ // cosmos_signAmino params const params = { signerAddress: address, signDoc }; + console.log("cosmos_signAmino params", params); + // send message const result = await client!.request<{ signature: string }>({ topic: session!.topic, @@ -825,6 +830,8 @@ export function JsonRpcContextProvider({ }, }); + console.log("cosmos_signAmino result", result); + const targetChainData = chainData[namespace][reference]; if (typeof targetChainData === "undefined") { From 208dae01d9c6f3b44cb146a8250e097fadaa8db9 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 20 May 2025 14:00:55 +0300 Subject: [PATCH 7/9] feat: returns tx bytes --- advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts index 54a364d9b..549b0dc53 100644 --- a/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts +++ b/advanced/wallets/react-wallet-v2/src/lib/SuiLib.ts @@ -81,7 +81,10 @@ export default class SuiLib { console.log('tx', tx) const signature = await tx.sign({ signer: this.keypair, client }) console.log('signature', signature) + const transactionBytes = Buffer.from(await tx.build({ client })).toString('base64') + console.log('transactionBytes', transactionBytes) return { + transactionBytes, signature: signature.signature } } From e043d2df03cb36696cdbeb27e1c88ce1641a95ee Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Tue, 20 May 2025 14:17:29 +0300 Subject: [PATCH 8/9] refactor: returns cosmos signature + signed --- .../src/contexts/JsonRpcContext.tsx | 16 ++++++++++------ .../src/utils/CosmosRequestHandler.ts | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx index bbe553767..2bd3dfd88 100644 --- a/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx +++ b/advanced/dapps/react-dapp-v2/src/contexts/JsonRpcContext.tsx @@ -769,7 +769,9 @@ export function JsonRpcContextProvider({ console.log("cosmos_signDirect params", params); // send message - const result = await client!.request<{ signature: string }>({ + const result = await client!.request<{ + signature: { signature: string }; + }>({ topic: session!.topic, chainId, request: { @@ -787,7 +789,7 @@ export function JsonRpcContextProvider({ const valid = await verifyDirectSignature( address, - result.signature, + result.signature.signature, signDoc ); @@ -796,7 +798,7 @@ export function JsonRpcContextProvider({ method: DEFAULT_COSMOS_METHODS.COSMOS_SIGN_DIRECT, address, valid, - result: result.signature, + result: result.signature.signature, }; } ), @@ -821,7 +823,9 @@ export function JsonRpcContextProvider({ console.log("cosmos_signAmino params", params); // send message - const result = await client!.request<{ signature: string }>({ + const result = await client!.request<{ + signature: { signature: string }; + }>({ topic: session!.topic, chainId, request: { @@ -840,7 +844,7 @@ export function JsonRpcContextProvider({ const valid = await verifyAminoSignature( address, - result.signature, + result.signature.signature, signDoc ); @@ -849,7 +853,7 @@ export function JsonRpcContextProvider({ method: DEFAULT_COSMOS_METHODS.COSMOS_SIGN_AMINO, address, valid, - result: result.signature, + result: result.signature.signature, }; } ), diff --git a/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts b/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts index 4612c498b..4b98e4574 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/CosmosRequestHandler.ts @@ -19,14 +19,14 @@ export async function approveCosmosRequest( request.params.signerAddress, parseSignDocValues(request.params.signDoc) ) - return formatJsonRpcResult(id, signedDirect.signature) + return formatJsonRpcResult(id, signedDirect) case COSMOS_SIGNING_METHODS.COSMOS_SIGN_AMINO: const signedAmino = await wallet.signAmino( request.params.signerAddress, request.params.signDoc ) - return formatJsonRpcResult(id, signedAmino.signature) + return formatJsonRpcResult(id, signedAmino) default: throw new Error(getSdkError('INVALID_METHOD').message) From 652f20427a4ee418ff54641fd96e5fbeb45bf837 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 21 May 2025 11:02:37 +0300 Subject: [PATCH 9/9] feat: sui balance --- .../react-dapp-v2/src/components/Asset.tsx | 6 +++-- .../dapps/react-dapp-v2/src/helpers/api.ts | 27 +++++++++++++++++++ .../dapps/react-dapp-v2/src/helpers/types.ts | 1 + 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/advanced/dapps/react-dapp-v2/src/components/Asset.tsx b/advanced/dapps/react-dapp-v2/src/components/Asset.tsx index c74990211..1bf917338 100644 --- a/advanced/dapps/react-dapp-v2/src/components/Asset.tsx +++ b/advanced/dapps/react-dapp-v2/src/components/Asset.tsx @@ -13,7 +13,7 @@ const kadenaLogo = getChainMetadata("kadena:testnet04").logo; const btcLogo = getChainMetadata( "bip122:000000000933ea01ad0ee984209779ba" ).logo; - +const suiLogo = getChainMetadata("sui:mainnet").logo; const SAsset = styled.div` width: 100%; padding: 20px; @@ -53,6 +53,8 @@ function getAssetIcon(asset: AssetData): JSX.Element { return ; case "btc": return ; + case "sui": + return ; default: return ; } @@ -72,7 +74,7 @@ const Asset = (props: AssetProps) => { - {fromWad(asset.balance || "0")} {asset.symbol} + {fromWad(asset.balance || "0", asset.decimals)} {asset.symbol} diff --git a/advanced/dapps/react-dapp-v2/src/helpers/api.ts b/advanced/dapps/react-dapp-v2/src/helpers/api.ts index ad3b4e6a7..f64f51446 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/api.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/api.ts @@ -4,6 +4,7 @@ import { apiGetKadenaAccountBalance } from "./kadena"; import { AssetData } from "./types"; import { PactCommand } from "@kadena/client"; import { apiGetBip122AccountBalance } from "./bip122"; +import { getSuiClient } from "./sui"; export type RpcProvidersByChainId = Record< number, @@ -160,6 +161,10 @@ export async function apiGetAccountBalance( return apiGetBip122AccountBalance(address, networkId as string); } + if (namespace === "sui") { + return apiGetSuiAccountBalance(address, chainId); + } + if (namespace !== "eip155") { return { balance: "", symbol: "", name: "" }; } @@ -181,6 +186,28 @@ export async function apiGetAccountBalance( return { balance, ...token }; } +export const apiGetSuiAccountBalance = async ( + address: string, + chainId: string +): Promise => { + const client = await getSuiClient(chainId); + if (!client) { + console.error( + "No sui client found for chainId and no balance can be fetched", + chainId + ); + return { balance: "", symbol: "", name: "" }; + } + const balance = await client.getBalance({ + owner: address, + }); + return { + balance: (parseInt(balance.totalBalance) / 10 ** 9).toString(), + symbol: "SUI", + name: "SUI", + }; +}; + export const apiGetAccountNonce = async ( address: string, chainId: string diff --git a/advanced/dapps/react-dapp-v2/src/helpers/types.ts b/advanced/dapps/react-dapp-v2/src/helpers/types.ts index 5c4f54f9f..dfd1890f0 100644 --- a/advanced/dapps/react-dapp-v2/src/helpers/types.ts +++ b/advanced/dapps/react-dapp-v2/src/helpers/types.ts @@ -6,6 +6,7 @@ export interface AssetData { name: string; contractAddress?: string; balance?: string; + decimals?: number; } export interface ChainData {