From 132bd0986b73a5cff8948e2fb4cc84129a3ba48a Mon Sep 17 00:00:00 2001 From: Uncle Fatso Date: Thu, 5 Nov 2026 21:59:19 +0300 Subject: [PATCH] migrate to PAPI and integrate weaver protocol Signed-off-by: Uncle Fatso --- .papi/descriptors/.gitignore | 3 + .papi/descriptors/package.json | 25 + .papi/polkadot-api.json | 9 + metadatas/casper_runtime.scale | Bin 0 -> 204270 bytes package.json | 7 + pnpm-lock.yaml | 1420 +++++++++++++++-- src/App.jsx | 8 +- src/abi/GhostGatekeeper.json | 2 +- src/components/NavItem/NavItem.jsx | 3 +- src/components/Sidebar/NavContent.jsx | 22 +- src/components/Sidebar/NavDrawer.jsx | 4 +- src/components/Sidebar/Sidebar.jsx | 4 +- .../TopBar/Wallet/InitialWalletView.tsx | 35 +- src/containers/Breakout/BreakoutModal.jsx | 1 + src/containers/Bridge/BridgeGhostAddress.jsx | 50 + src/containers/Bridge/BridgeIn.jsx | 461 ++++++ src/containers/Bridge/BridgeSettingsModal.jsx | 48 + src/containers/Dex/Dex.jsx | 41 +- src/containers/Dex/PoolContainer.jsx | 11 +- src/containers/Dex/SwapContainer.jsx | 11 +- src/containers/History/BridgeInModal.jsx | 531 ++++++ src/containers/History/DexViewModal.jsx | 5 +- src/containers/History/History.jsx | 131 +- src/containers/History/StakingViewModal.jsx | 5 +- .../components/StakeConfirmationModal.jsx | 9 +- .../Stake/components/StakeInputArea.jsx | 33 +- src/hooks/ghost/UnstableProvider.jsx | 154 +- src/hooks/localstorage/index.jsx | 116 +- src/hooks/staking/index.js | 61 +- src/themes/darkPalette.js | 4 +- 30 files changed, 2877 insertions(+), 337 deletions(-) create mode 100644 .papi/descriptors/.gitignore create mode 100644 .papi/descriptors/package.json create mode 100644 .papi/polkadot-api.json create mode 100644 metadatas/casper_runtime.scale create mode 100644 src/containers/Bridge/BridgeGhostAddress.jsx create mode 100644 src/containers/Bridge/BridgeIn.jsx create mode 100644 src/containers/Bridge/BridgeSettingsModal.jsx create mode 100644 src/containers/History/BridgeInModal.jsx diff --git a/.papi/descriptors/.gitignore b/.papi/descriptors/.gitignore new file mode 100644 index 0000000..557cc81 --- /dev/null +++ b/.papi/descriptors/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore +!package.json diff --git a/.papi/descriptors/package.json b/.papi/descriptors/package.json new file mode 100644 index 0000000..aa2887d --- /dev/null +++ b/.papi/descriptors/package.json @@ -0,0 +1,25 @@ +{ + "version": "0.1.0-autogenerated.3461409763779961730", + "name": "@polkadot-api/descriptors", + "files": [ + "dist" + ], + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "module": "./dist/index.js", + "import": "./dist/index.js", + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, + "main": "./dist/index.js", + "module": "./dist/index.js", + "browser": "./dist/index.js", + "types": "./dist/index.d.ts", + "sideEffects": false, + "peerDependencies": { + "polkadot-api": ">=2.0.0" + } +} diff --git a/.papi/polkadot-api.json b/.papi/polkadot-api.json new file mode 100644 index 0000000..8820e5a --- /dev/null +++ b/.papi/polkadot-api.json @@ -0,0 +1,9 @@ +{ + "version": 0, + "descriptorPath": ".papi\\descriptors", + "entries": { + "casper": { + "metadata": "metadatas/casper_runtime.scale" + } + } +} diff --git a/metadatas/casper_runtime.scale b/metadatas/casper_runtime.scale new file mode 100644 index 0000000000000000000000000000000000000000..bda52f55ea40cbaa8f480bcdb9bcae5b32789923 GIT binary patch literal 204270 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%0DK+^pE*ymgW<6T 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', deno: '>=2', node: '>=16'} @@ -880,12 +894,43 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@2.4.0': + resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==} + engines: {node: '>= 20.19.0'} + '@paulmillr/qr@0.2.1': resolution: {integrity: sha512-IHnV6A+zxU7XwmKFinmYjUcwlyK9+xkG3/s9KcQhI9BjQKycrJ1JRO+FbNYPwZiPKW3je/DR0k7w8/gLa5eaxQ==} deprecated: 'The package is now available as "qr": npm install qr' - '@polkadot-api/json-rpc-provider@0.0.4': - resolution: {integrity: sha512-9cDijLIxzHOBuq6yHqpqjJ9jBmXrctjc1OFqU+tQrS96adQze3mTIH6DTgfb/0LMrqxzxffz1HQGrIlEH00WrA==} + '@polkadot-api/cli@0.22.5': + resolution: {integrity: sha512-kMzV11SNhY+F5c+seMS8ieEnq3r8azbS81AgJZL8a8gKU7Q2W5E/sG/hetTd7NZCeLnYvDWpbat1GCZzxita0A==} + hasBin: true + + '@polkadot-api/codegen@0.23.2': + resolution: {integrity: sha512-vV7UybrNMCtB79phMBFVWoVaYO8ApVE/5fE5uw7TBUMFTcDZZ3VwVM2qVnNCK/X4jH/FAnMSGoOrdjRVQyeSFA==} + + '@polkadot-api/descriptors@file:.papi/descriptors': + resolution: {directory: .papi/descriptors, type: directory} + peerDependencies: + polkadot-api: '>=2.0.0' + + '@polkadot-api/ink-contracts@0.7.2': + resolution: {integrity: sha512-ipKLbaboWImnjO0TuqLJNDdzoC0tLUTvJ+XNKW0wWm1OM2cXX8X0nXfAfTGy14PdUkyKjLncoPNoqgbEhmAh/Q==} + + '@polkadot-api/json-rpc-provider-proxy@0.4.1': + resolution: {integrity: sha512-F1Hw01C60jn98KQ0vBbgcwAvEcMcKLsJ5kFzq600sgjc6Rnbn1VF/XjTdrjcIqvfpR9sXyGIrpImrov2Usbrsw==} + + '@polkadot-api/json-rpc-provider@0.2.0': + resolution: {integrity: sha512-lhkuBS/x06i3djQIN7p8jVkMnYuGsUAEMS6RhdWeEpz7X/8/APER4Wdih7MEBovCuwVSCTjOxl8f+alH7AZHZg==} + + '@polkadot-api/known-chains@0.12.5': + resolution: {integrity: sha512-odoCGRMKTMEq5wS851aw4qwEExvEX4j57sUI3R09+GW4RACnDqgbYxu8GKdqkXtrnHWAUr8lKMaN6RXaHfkTdQ==} + + '@polkadot-api/logs-provider@0.2.0': + resolution: {integrity: sha512-BH9YdxZu+ZBPPAUwGrvqHPn1hQStL2Im3MmTwYkwXOWW2HlGHULcF65QKvyK+T6/mj2vDvl3MgivnGkUw4pVxg==} + + '@polkadot-api/merkleize-metadata@1.3.2': + resolution: {integrity: sha512-M/ja1A+Hec16oGSiP8qvDuELe0JyxxEBwrfYjg/rE66yM/FiQ+29RrrmHQ8N20AtTlKn4RTaE3gbqQ02K6n1+w==} '@polkadot-api/metadata-builders@0.10.2': resolution: {integrity: sha512-rtdihBFd25oT9/71Q+EOR9q6E6mCl1pPe/2He/LtlY0TyHiYqO2KpMZNXkoGcw1RHvrV+CAtDFMvK1j3n8aW8w==} @@ -893,27 +938,89 @@ packages: '@polkadot-api/metadata-builders@0.13.0': resolution: {integrity: sha512-z8AT0mbOniHmiI0sNjQSUtOXGLHTqFNV8bqdyes1WAMbpBEIcnTlQxhIrJkpPEQCh7kLNTHqa3OQjSIrOH7X1Q==} + '@polkadot-api/metadata-builders@0.15.2': + resolution: {integrity: sha512-V8drZbzvu6Aa1EKQs4x/jOLFO05uATuEZagSqQ76ZF4skb0T8qhFmFrXnYpIiwkPndxo0mbY73cfz7rRdpshvw==} + + '@polkadot-api/metadata-compatibility@0.7.2': + resolution: {integrity: sha512-sDIbIZHNbf6bm1k56RZf+vUakwni7p8OpO8UUr+7k2KVeQ6K+z1lWmY+Y23IwcgvUI8Lh+2SxH7vPtAsggevSw==} + + '@polkadot-api/observable-client@0.19.4': + resolution: {integrity: sha512-xGzTQwdFfy7SYjS4n6op99rVJwCU0ghAHAEYLTfs3K1bO9dNZcgfduN/6imvdaZCOhZ2SPLBKjJvcEBUIzHW1Q==} + peerDependencies: + rxjs: '>=7.8.0' + '@polkadot-api/observable-client@0.8.6': resolution: {integrity: sha512-ci5HC8TYjGxoTG/QM+LLuGrfIsn+dtR7BBQz483c/ML8K/Hxl9v+evgZzPi9xNMwZ25mytn9lhA5dovYSEauSA==} peerDependencies: '@polkadot-api/substrate-client': 0.3.0 rxjs: '>=7.8.0' + '@polkadot-api/pjs-signer@0.9.0': + resolution: {integrity: sha512-FMVMh5Gqmx0SFrsRJZgYwk44wfNz8N9vqz8zquj6eQYk+XB8KNEds15YCxsCFuyYVzKQ9CRnLSpOUkh24jY6BA==} + + '@polkadot-api/raw-client@0.3.0': + resolution: {integrity: sha512-u/wM9W7ugIXxBSOEV8+zvQI43b5vgSI0pvE0Rg8PV0G65BTLK0SMc2o2SQL0HtS5+bi5sw/gg4reBJ/0a4U0cw==} + + '@polkadot-api/raw-tx-creator@0.5.0': + resolution: {integrity: sha512-NVI7rFc+4x6fjKumR0W6CWA8EbSF8YnPI0zns8wL4qmC/FS1VfwCW4zP3EcGZGcxP8lOc7V0pS7Ky/OpbAIAFw==} + peerDependencies: + rxjs: '>=7.8.0' + + '@polkadot-api/signers-common@0.4.0': + resolution: {integrity: sha512-jMSZxMcfzPqgU+wVT75H7a5cHBS59ppoGghG3L7Ef9FguFa4p6LvH4pK2xjEQ2i21HIZ7KKKojWSSklnQzUUrg==} + peerDependencies: + rxjs: '>=7.8.0' + + '@polkadot-api/sm-provider@0.3.10': + resolution: {integrity: sha512-TsuUf81ej0zIeSsSo8c0MEJO5Z3iO7ZMBlv5A6JPcmCx9bZhS/Vjj+DWQW7V+M05KYWdlbS//2tpOg69xgb7sA==} + peerDependencies: + '@polkadot-api/smoldot': '>=0.3' + + '@polkadot-api/smoldot@0.4.9': + resolution: {integrity: sha512-UbebkD0DOH3UIUAQAhto8UhyVaG3zmiquts4n7BDhZ2x8JSGpskHZv1VJT7GsCJcYBfHy2L5btZpgYrgpKU1CA==} + '@polkadot-api/substrate-bindings@0.11.1': resolution: {integrity: sha512-+oqAZB7y18KrP/DqKmU2P3nNmRzjCY7edtW7tyA1g1jPouF7HhRr/Q13lJseDX9sdE2FZGrKZtivzsw8XeXBng==} '@polkadot-api/substrate-bindings@0.15.0': resolution: {integrity: sha512-w/GSQeEYfFqyM50s2c3KDfl/qumtLnk7EUALXER/eFWSawXYVeL3PCg95GZfDFrc7MODVmq+XeXUoZBFGHvodA==} + '@polkadot-api/substrate-bindings@0.21.2': + resolution: {integrity: sha512-YjQnmS1dfoQky3Qoddm59CCK+5jxl57uvXtGt0qwbgJ7y0zHHznBCDPv8lU4iUzQKS4dn7aSwIi5j7CE3DGAbQ==} + '@polkadot-api/substrate-client@0.3.0': resolution: {integrity: sha512-0hEvQLKH2zhaFzE8DPkWehvJilec8u2O2wbIEUStm0OJ8jIFtJ40MFjXQfB01dXBWUz1KaVBqS6xd3sZA90Dpw==} + '@polkadot-api/substrate-client@0.7.0': + resolution: {integrity: sha512-TWCc4MAMa5SLVQXmomLHknbj+bztQ/Yclgwm8ENBhz8hR7c9rw9FBAkCa02jMBMCAygPhp3ayGRq+UFcF8KIxQ==} + + '@polkadot-api/tx-creator@0.2.0': + resolution: {integrity: sha512-xac4Lx/8bB7+glcU/HG8uzPYdRFcs0MkSni07xrTtOizWt6j07Q9XEPxtqmT7aL5Ne93uCl0bhvk+VhezHbf0w==} + peerDependencies: + rxjs: ^7.8.2 + '@polkadot-api/utils@0.1.2': resolution: {integrity: sha512-yhs5k2a8N1SBJcz7EthZoazzLQUkZxbf+0271Xzu42C5AEM9K9uFLbsB+ojzHEM72O5X8lPtSwGKNmS7WQyDyg==} '@polkadot-api/utils@0.2.0': resolution: {integrity: sha512-nY3i5fQJoAxU4n3bD7Fs208/KR2J95SGfVc58kDjbRYN5a84kWaGEqzjBNtP9oqht49POM8Bm9mbIrkvC1Bzuw==} + '@polkadot-api/utils@0.4.0': + resolution: {integrity: sha512-9b/hwRM0UloLWV7SfpNaSD/4k8UQAHoaACAk7Xe+1MlfAm2JtnmPiB1GfGrfTyBlsrJVUIBCZpEmbmxVMaIqBA==} + + '@polkadot-api/wasm-executor@0.2.3': + resolution: {integrity: sha512-B2h1o+Qlo9idpASaHvMSoViB2I5ko5OAfwfhYF8LQDkTADK0B+SeStzNj1Qn+FG34wqTuv7HzBCdjaUgzYINJQ==} + + '@polkadot-api/ws-middleware@0.4.2': + resolution: {integrity: sha512-UostyJupfCk5jh+MUOjBBZ6qRYwQ2UhPWGnv25sVc0thRzBO9tV93sMg+jsfGLyNOSBmW8F9UlzXYut1/vEfIA==} + peerDependencies: + rxjs: '>=7.8.0' + + '@polkadot-api/ws-provider@0.9.2': + resolution: {integrity: sha512-FWISrSF4op3WayDUtxjLGDtq/KfhnrbseJRp7UxuMNccwCHaGpwkFvO5meVLN71BaHyFv9gCFA3rV6tPDxcVdg==} + peerDependencies: + rxjs: '>=7.8.0' + '@polkadot-labs/hdkd-helpers@0.0.20': resolution: {integrity: sha512-P3o1FpPqLACaHhDT/J6O3xYQIBdOs0FDJtZQI8/LGotgIGp85mKDnH/cSSK3QC2i67ZY/d/POs8K0jEspLMiGg==} @@ -1039,51 +1146,116 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.67.5': + resolution: {integrity: sha512-FdWPeulkH+FH+rBzyKBD59tuVN4tRKvmVilSJm0OcnoYsQTpd9UhD78OaPcsYqo2fX6hCwAG0YIjrDLoQ3pR3g==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.34.9': resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.67.5': + resolution: {integrity: sha512-bmkDuBGnF+Ji8atWlXcNjxIC52ShCbdXPbW7Nz0lRoCFi1lrvsO0XobJY36kTj7duc1vOmGJeQ9vtVuGjnzihA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-android-x64@4.67.5': + resolution: {integrity: sha512-6KvVfnqPTqmbQ5YobMl9HYiSymAsCt8HlNeriDshwJQcveXwT+vIMW6wGL1RcJbXH9+r3BAJvjab5+rIgtSEqA==} + cpu: [x64] + os: [android] + '@rollup/rollup-darwin-arm64@4.34.9': resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.67.5': + resolution: {integrity: sha512-SNamgdrY69oPdBrQV9fKGo6PSmKcVhyn0D0jnDmcqgRJvrxQGGBhtekOHTUJ7TCgkW0nE8XMH9v2CwXmjNIzVA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.34.9': resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.67.5': + resolution: {integrity: sha512-HNdl34thiJtHDSglogjmAlQ296L8cc8zA7ODH65nnmY7E+jPP55WEbh8J5583rWFLMjxyYywxZuwPOwRvEi5tA==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.34.9': resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.67.5': + resolution: {integrity: sha512-WvZYtANNswfHzSNHaJAoG6Ipfc4SyZIDYuIjFdHv07xXxhHl+Xx8o+bNDWsxpOADFT2mKXcXVrfOG4OlWTLo8Q==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.34.9': resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.67.5': + resolution: {integrity: sha512-EUU+Wgf9NyHekceC+DxAdm42f6bq2ezH/7DEb/JnCb8SAUhG2xph5BiVukxplWal2m5pP8CzJZE+FLwRopywjQ==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.67.5': + resolution: {integrity: sha512-dgU1CvUuE2IkaJBAeuAbxpDdMHAdZBT5oth5u22DtuoMg4gXXYr2+Sm30RigPJG1F2VEoiGJUziGLuIh9+jPxA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.34.9': resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.67.5': + resolution: {integrity: sha512-rdgJcJig2VngYlcTCRQw2BA8kLWM6QwDFe9uLFo81lya0jPC1r8wZu92sAvTUIv48GWlkRVi6/fpsa5CoFSKoQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.34.9': resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.67.5': + resolution: {integrity: sha512-+jtCiQnrEFHWAUAcUpP7wppb1p6HKOgBP3mXx75cEYpDF2Y5MEqBky2HNz+osFuVx5uX44gnMTmbe5RJauzn6A==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.34.9': resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.67.5': + resolution: {integrity: sha512-heflX7ENhL8eHmLcUxDEHCSK8CKLyPprysb2JGoSTh5Ip7nHrzIRc+2USyxul3nxi98H8pGxJIEDEpURlS1X5A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.67.5': + resolution: {integrity: sha512-rRtNU0zBfRHkJ8pscHN9qRtUYLq8Rao4EX7aVWvKcFmJUANkCCXFRU7ovNBEMhpEONyUEB/3DRVDXwDDguSfHA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.67.5': + resolution: {integrity: sha512-/6auyi9yj8MD/Q+8P+f2ay57jQ7a0j7Yp1JK86pecH6ZnRViQZ5GOjoRSjGArFeTSHFznRbM2QPQcBgDPyNMfQ==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} cpu: [loong64] @@ -1094,41 +1266,111 @@ packages: cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-ppc64-gnu@4.67.5': + resolution: {integrity: sha512-Hsc0vlt+vPvqzUkHKffWKf3YE/yexrY+yeFf7IsUvDC6PV7YGCsA/gJvPa+WJdgxGJnwuoO1HmLkbahaLKabYQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.67.5': + resolution: {integrity: sha512-Jx5TMMSPJwHY7F/JwPdS6nuBwny2ECRK+EsAJV5HZrfiddeSS6ZrohkLkFZm3rjqBUuQ4FPX5gGMtakUuQO6fQ==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.34.9': resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.67.5': + resolution: {integrity: sha512-fGWcq2lo/XCqAkBLOokg66D/z+MUouryB8i+QdU9RR6O5knG7rucc0WFPqWYL1Wk/wuiJouDfmyBxmZKRM9bag==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.67.5': + resolution: {integrity: sha512-JwO/Ys3jybc0UW3V5XO2CMnp0RhvoczDDQTgAEE1IctT+HRY3W5parIIWLUpmAK4gHSeeYJofm2iQPFA62K6ag==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.34.9': resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.67.5': + resolution: {integrity: sha512-vVD4iqel6J6A1xAJlb4mxEO9i1wOJ4/SkcKoDKAuK/wqEBPOA7/P5dDyZvNx46ocHwOUwzo3WjhTdKqET9kEAg==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.34.9': resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.67.5': + resolution: {integrity: sha512-HmEfNh5Cdd/NHxgqwMzKnjlvicQQA+D+w+vQXDJSV0x/aHiQSjVwh1Th5RoA7QsMieIaxibt/5iJq68BraTSUg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.34.9': resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.67.5': + resolution: {integrity: sha512-NfmALpbe009nYzZ2QqlSW6nzbGddXpqk3nwualrIr+4QflQCTGMzt3QKK20yARiAnSV9fJdM5WNwIYUf31x3uA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.67.5': + resolution: {integrity: sha512-ngcE7Udpy/iJ3lexVhYcbpUV2OJIakRGus3snc6K52BnAAJetDBG1Ku5Eh3CECtnW3mpBYWg5VCD4tTaOXKOVQ==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.67.5': + resolution: {integrity: sha512-DZ01A2EdTYX8xVeGoGiWkJBRWDh+/BOflwGPVsBay43PDxcq8ez0xuovZnPnk1xjE3CdI0pdZXxsJp/Xjmf7uQ==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.34.9': resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.67.5': + resolution: {integrity: sha512-nJKiMKDO140DUCEcQZl+f4HiGPMBxrW2webjuWJ2E3qPeoruHf2zByml4TP52lA1zDi6L4I92D/5stxeA/6pig==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.34.9': resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.67.5': + resolution: {integrity: sha512-ykLkBCf+Kls24QmqM3IRf1T4sGMh0rXPyymtj+hXlWKPJnXbXraHqUUsKtOIxqLasjT1i7DhfQGAaZYeiHbSOw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.67.5': + resolution: {integrity: sha512-NiFPUFw8cHhkmBlL1k1eaz+5AXXm89rztj+DQdDuQ7VGPM0+ADFhezQ2KcBMF50UEFzGUr0+DVjVND743XwKWQ==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.34.9': resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.67.5': + resolution: {integrity: sha512-Khj/vrKCpdbiAWYbJAeSy4D5iep+qwW/86lNoKvdleJYGxgbRE7h87+5d5T9D7gt8NcqhNFpreRgIg8T4bLzKQ==} + cpu: [x64] + os: [win32] + + '@rx-state/core@0.1.4': + resolution: {integrity: sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ==} + peerDependencies: + rxjs: '>=7' + '@safe-global/safe-apps-provider@0.18.6': resolution: {integrity: sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q==} @@ -1145,6 +1387,9 @@ packages: '@scure/base@1.2.6': resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + '@scure/base@2.4.0': + resolution: {integrity: sha512-thZ1TuJwFwBblOhgsjDKvvGirBxNp+wSvY/DR6tJBJOTDhdAAcHJ8Vbr2eFnqaxeca4+t0i9KBf+uHYGWwZORg==} + '@scure/bip32@1.4.0': resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} @@ -1166,6 +1411,13 @@ packages: '@scure/sr25519@0.2.0': resolution: {integrity: sha512-uUuLP7Z126XdSizKtrCGqYyR3b3hYtJ6Fg/XFUXmc2//k2aXHDLqZwFeXxL97gg4XydPROPVnuaHGF2+xriSKg==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -1284,6 +1536,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/estree@1.0.10': + resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -1296,6 +1551,12 @@ packages: '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + '@types/node@26.6.6': + resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1462,6 +1723,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.5.0: + resolution: {integrity: sha512-zhvbbbdt1kbw7EJ9OQoxmQcuaNR9P5kTj7e/YdmOSU10aHWbycofJxA6jKfoEy3vlLdctOF9ZHaxLtmSm998wQ==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1561,10 +1826,22 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -1589,6 +1866,10 @@ packages: colorjs.io@0.5.2: resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + commander@15.0.0: + resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==} + engines: {node: '>=22.12.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1687,6 +1968,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge-ts@7.1.6: + resolution: {integrity: sha512-gQhL1ksGBLQbHeAo47YU6cs2ahd3Pv+8PFYoWogNZbQnNwQyOh9Ad5kbeHFiWwbKdeWQJ5Z7Y7mwb9ew2hXBLw==} + engines: {node: '>=16.0.0'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -1705,6 +1990,10 @@ packages: detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -1759,6 +2048,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -1862,6 +2154,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + execa@10.2.1: + resolution: {integrity: sha512-/Bofl3ZBh2Q4/PG0W63qFzP5vDAypi8Zc90UWTBzaDNIYiX7apPOd0N6L8hG8CojUdq4V51adu8BObP+iVsSTw==} + engines: {node: '>=22'} + extension-port-stream@3.0.0: resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} engines: {node: '>=12.0.0'} @@ -1882,6 +2178,10 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1912,6 +2212,9 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + fs.promises.exists@1.1.4: + resolution: {integrity: sha512-lJzUGWbZn8vhGWBedA+RYjB/BeJ+3458ljUfmplqhIeb6ewzTFWNPCR1HCiYCkXV9zxcHz9zXkJzMsEgDLzh3Q==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1928,6 +2231,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.7.0: + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -1936,6 +2243,13 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-tsconfig@4.14.3: + resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -1986,6 +2300,18 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@9.0.3: + resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} + engines: {node: ^20.17.0 || >=22.9.0} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + idb-keyval@6.2.2: resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==} @@ -2010,6 +2336,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2047,6 +2377,14 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -2055,10 +2393,18 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -2151,6 +2497,10 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2161,6 +2511,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.3: + resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -2171,6 +2525,10 @@ packages: micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2224,10 +2582,22 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-package-data@8.0.0: + resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} + engines: {node: ^20.17.0 || >=22.9.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + obj-multiplex@1.0.0: resolution: {integrity: sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA==} @@ -2248,10 +2618,18 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@9.4.1: + resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} + engines: {node: '>=20'} + ox@0.6.7: resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} peerDependencies: @@ -2296,6 +2674,14 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2304,6 +2690,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -2311,6 +2701,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2322,6 +2715,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} @@ -2344,6 +2741,12 @@ packages: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} + polkadot-api@3.3.0: + resolution: {integrity: sha512-GZqdSZ/6BqyJro7LFo4JTlyATHJLdoCRWCLagurgLzowZRWYX/rlCWN7y5oFBFrMKRdfeGy5sAJzK3+5nkOdDA==} + hasBin: true + peerDependencies: + rxjs: '>=7.8.0' + pony-cause@2.1.11: resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} engines: {node: '>=12.0.0'} @@ -2363,6 +2766,10 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + pretty-ms@9.3.1: + resolution: {integrity: sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==} + engines: {node: '>=18'} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -2462,6 +2869,14 @@ packages: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} + read-pkg@10.1.0: + resolution: {integrity: sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==} + engines: {node: '>=20'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -2491,19 +2906,41 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} hasBin: true + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + rollup-plugin-esbuild@6.2.1: + resolution: {integrity: sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==} + engines: {node: '>=14.18.0'} + peerDependencies: + esbuild: '>=0.18.0' + rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 + rollup@4.34.9: resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.67.5: + resolution: {integrity: sha512-3Ve5VH1hacCVutdpbmu/htg4kz+JCOIWgy4Q3hjHPYGHeHeIElNHJ0LcJ3rCfIsd5G7qOl5k5mwpzGMj9kdHPA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -2684,6 +3121,13 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + smoldot@3.7.0: + resolution: {integrity: sha512-49/jSn4hVysTu6SL8wTk6JRedG1GhxgDkxQ9hEC9gKMadZvWIoxgBVS2N8OQn4UTpWAd3hpifiBh8tRYPh8EkQ==} + snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -2698,6 +3142,10 @@ packages: sonic-boom@2.8.0: resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} + sort-keys@5.1.0: + resolution: {integrity: sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==} + engines: {node: '>=12'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2706,6 +3154,18 @@ packages: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.24: + resolution: {integrity: sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==} + split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} @@ -2714,6 +3174,10 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -2725,6 +3189,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@8.3.0: + resolution: {integrity: sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==} + engines: {node: '>=20'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -2735,6 +3203,14 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2774,12 +3250,22 @@ packages: resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} engines: {node: '>=16.0.0'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tsc-prog@2.3.0: + resolution: {integrity: sha512-ycET2d75EgcX7y8EmG4KiZkLAwUzbY4xRhA6NU0uVbHkY4ZjrAAuzTMxXI85kOwATqPnBI5C/7y7rlpY0xdqHA==} + engines: {node: '>=12'} + peerDependencies: + typescript: '>=4' + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -2793,6 +3279,19 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-fest@5.10.0: + resolution: {integrity: sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==} + engines: {node: '>=20'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -2805,6 +3304,25 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unicorn-magic@0.4.1: + resolution: {integrity: sha512-lzlXPoVB0Uy/FvTaUgX39RbixYiSKoc3JSoSf01+0c2B6FR3qdYIPN7Qjo/AV7n6sqLCk0509cT3LRj1oSZ1+A==} + engines: {node: '>=20'} + + unplugin-utils@0.2.5: + resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==} + engines: {node: '>=18.12.0'} + unstorage@1.16.0: resolution: {integrity: sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==} peerDependencies: @@ -2901,6 +3419,9 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + valtio@1.13.2: resolution: {integrity: sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A==} engines: {node: '>=12.20.0'} @@ -2997,6 +3518,11 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-command@0.1.0: + resolution: {integrity: sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==} + engines: {node: '>=22'} + hasBin: true + which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -3020,6 +3546,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + write-json-file@6.0.0: + resolution: {integrity: sha512-MNHcU3f9WxnNyR6MxsYSj64Jz0+dwIpisWKWq9gqLj/GwmA9INg3BZ3vt70/HB3GEwrnDQWr4RPrywnhNzmUFA==} + engines: {node: '>=18'} + + write-package@7.2.0: + resolution: {integrity: sha512-uMQTubF/vcu+Wd0b5BGtDmiXePd/+44hUWQz2nZPbs92/BnxRo74tqs+hqDo12RLiEd+CXFKUwxvvIZvtt34Jw==} + engines: {node: '>=18'} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -3098,6 +3636,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} + engines: {node: '>=18'} + zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} @@ -3267,6 +3809,10 @@ snapshots: eventemitter3: 5.0.1 preact: 10.26.8 + '@commander-js/extra-typings@15.0.0(commander@15.0.0)': + dependencies: + commander: 15.0.0 + '@ecies/ciphers@0.2.3(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 @@ -3942,9 +4488,78 @@ snapshots: '@noble/hashes@1.8.0': {} + '@noble/hashes@2.4.0': {} + '@paulmillr/qr@0.2.1': {} - '@polkadot-api/json-rpc-provider@0.0.4': {} + '@polkadot-api/cli@0.22.5(bufferutil@4.0.9)(esbuild@0.25.0)(utf-8-validate@5.0.10)': + dependencies: + '@commander-js/extra-typings': 15.0.0(commander@15.0.0) + '@polkadot-api/codegen': 0.23.2 + '@polkadot-api/ink-contracts': 0.7.2 + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/known-chains': 0.12.5 + '@polkadot-api/metadata-compatibility': 0.7.2 + '@polkadot-api/observable-client': 0.19.4(rxjs@7.8.2) + '@polkadot-api/sm-provider': 0.3.10(@polkadot-api/smoldot@0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@polkadot-api/smoldot': 0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/substrate-client': 0.7.0 + '@polkadot-api/utils': 0.4.0 + '@polkadot-api/wasm-executor': 0.2.3 + '@polkadot-api/ws-middleware': 0.4.2(rxjs@7.8.2) + '@polkadot-api/ws-provider': 0.9.2(rxjs@7.8.2) + '@types/node': 26.6.6 + commander: 15.0.0 + execa: 10.2.1 + fs.promises.exists: 1.1.4 + ora: 9.4.1 + read-pkg: 10.1.0 + rollup: 4.67.5 + rollup-plugin-esbuild: 6.2.1(esbuild@0.25.0)(rollup@4.67.5) + rxjs: 7.8.2 + tsc-prog: 2.3.0(typescript@6.0.3) + typescript: 6.0.3 + write-package: 7.2.0 + transitivePeerDependencies: + - bufferutil + - esbuild + - supports-color + - utf-8-validate + + '@polkadot-api/codegen@0.23.2': + dependencies: + '@polkadot-api/ink-contracts': 0.7.2 + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/metadata-compatibility': 0.7.2 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/utils': 0.4.0 + + '@polkadot-api/descriptors@file:.papi/descriptors(polkadot-api@3.3.0(bufferutil@4.0.9)(esbuild@0.25.0)(rxjs@7.8.1)(utf-8-validate@5.0.10))': + dependencies: + polkadot-api: 3.3.0(bufferutil@4.0.9)(esbuild@0.25.0)(rxjs@7.8.1)(utf-8-validate@5.0.10) + + '@polkadot-api/ink-contracts@0.7.2': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/utils': 0.4.0 + + '@polkadot-api/json-rpc-provider-proxy@0.4.1': {} + + '@polkadot-api/json-rpc-provider@0.2.0': {} + + '@polkadot-api/known-chains@0.12.5': {} + + '@polkadot-api/logs-provider@0.2.0': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + + '@polkadot-api/merkleize-metadata@1.3.2': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/utils': 0.4.0 '@polkadot-api/metadata-builders@0.10.2': dependencies: @@ -3956,6 +4571,32 @@ snapshots: '@polkadot-api/substrate-bindings': 0.15.0 '@polkadot-api/utils': 0.2.0 + '@polkadot-api/metadata-builders@0.15.2': + dependencies: + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/utils': 0.4.0 + + '@polkadot-api/metadata-compatibility@0.7.2': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/substrate-bindings': 0.21.2 + + '@polkadot-api/observable-client@0.19.4(rxjs@7.8.1)': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/substrate-client': 0.7.0 + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.1 + + '@polkadot-api/observable-client@0.19.4(rxjs@7.8.2)': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/substrate-client': 0.7.0 + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.2 + '@polkadot-api/observable-client@0.8.6(@polkadot-api/substrate-client@0.3.0)(rxjs@7.8.1)': dependencies: '@polkadot-api/metadata-builders': 0.10.2 @@ -3964,6 +4605,54 @@ snapshots: '@polkadot-api/utils': 0.1.2 rxjs: 7.8.1 + '@polkadot-api/pjs-signer@0.9.0(rxjs@7.8.1)': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/raw-tx-creator': 0.5.0(rxjs@7.8.1) + '@polkadot-api/signers-common': 0.4.0(rxjs@7.8.1) + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/tx-creator': 0.2.0(rxjs@7.8.1) + '@polkadot-api/utils': 0.4.0 + transitivePeerDependencies: + - rxjs + + '@polkadot-api/raw-client@0.3.0': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + + '@polkadot-api/raw-tx-creator@0.5.0(rxjs@7.8.1)': + dependencies: + '@noble/hashes': 2.4.0 + '@polkadot-api/merkleize-metadata': 1.3.2 + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/signers-common': 0.4.0(rxjs@7.8.1) + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/tx-creator': 0.2.0(rxjs@7.8.1) + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.1 + + '@polkadot-api/signers-common@0.4.0(rxjs@7.8.1)': + dependencies: + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/tx-creator': 0.2.0(rxjs@7.8.1) + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.1 + + '@polkadot-api/sm-provider@0.3.10(@polkadot-api/smoldot@0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/json-rpc-provider-proxy': 0.4.1 + '@polkadot-api/smoldot': 0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + '@polkadot-api/smoldot@0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@types/node': 26.6.6 + smoldot: 3.7.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@polkadot-api/substrate-bindings@0.11.1': dependencies: '@noble/hashes': 1.8.0 @@ -3978,15 +4667,68 @@ snapshots: '@scure/base': 1.2.6 scale-ts: 1.6.1 + '@polkadot-api/substrate-bindings@0.21.2': + dependencies: + '@noble/hashes': 2.4.0 + '@polkadot-api/utils': 0.4.0 + '@scure/base': 2.4.0 + scale-ts: 1.6.1 + '@polkadot-api/substrate-client@0.3.0': dependencies: - '@polkadot-api/json-rpc-provider': 0.0.4 + '@polkadot-api/json-rpc-provider': 0.2.0 '@polkadot-api/utils': 0.1.2 + '@polkadot-api/substrate-client@0.7.0': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/raw-client': 0.3.0 + '@polkadot-api/utils': 0.4.0 + + '@polkadot-api/tx-creator@0.2.0(rxjs@7.8.1)': + dependencies: + rxjs: 7.8.1 + '@polkadot-api/utils@0.1.2': {} '@polkadot-api/utils@0.2.0': {} + '@polkadot-api/utils@0.4.0': {} + + '@polkadot-api/wasm-executor@0.2.3': {} + + '@polkadot-api/ws-middleware@0.4.2(rxjs@7.8.1)': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/json-rpc-provider-proxy': 0.4.1 + '@polkadot-api/raw-client': 0.3.0 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.1 + + '@polkadot-api/ws-middleware@0.4.2(rxjs@7.8.2)': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/json-rpc-provider-proxy': 0.4.1 + '@polkadot-api/raw-client': 0.3.0 + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.2 + + '@polkadot-api/ws-provider@0.9.2(rxjs@7.8.1)': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/json-rpc-provider-proxy': 0.4.1 + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.1 + + '@polkadot-api/ws-provider@0.9.2(rxjs@7.8.2)': + dependencies: + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/json-rpc-provider-proxy': 0.4.1 + '@polkadot-api/utils': 0.4.0 + rxjs: 7.8.2 + '@polkadot-labs/hdkd-helpers@0.0.20': dependencies: '@noble/curves': 1.9.6 @@ -4096,24 +4838,24 @@ snapshots: '@popperjs/core@2.11.8': {} - '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-controllers@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-controllers@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) valtio: 1.13.2(@types/react@19.0.10)(react@19.0.0) - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4141,12 +4883,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-pay@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-utils': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-utils': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) lit: 3.3.0 valtio: 1.13.2(@types/react@19.0.10)(react@19.0.0) transitivePeerDependencies: @@ -4180,13 +4922,13 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4)': + '@reown/appkit-scaffold-ui@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-utils': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-utils': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -4216,11 +4958,11 @@ snapshots: - valtio - zod - '@reown/appkit-ui@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-ui@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 transitivePeerDependencies: @@ -4250,16 +4992,16 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4)': + '@reown/appkit-utils@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10) '@walletconnect/logger': 2.1.2 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) valtio: 1.13.2(@types/react@19.0.10)(react@19.0.0) - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4287,9 +5029,9 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@reown/appkit-wallet@1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@reown/appkit-polyfills': 1.7.8 '@walletconnect/logger': 2.1.2 zod: 3.22.4 @@ -4298,21 +5040,21 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit@1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-pay': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-common': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-controllers': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-pay': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@reown/appkit-polyfills': 1.7.8 - '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) - '@reown/appkit-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-utils': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) - '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@reown/appkit-scaffold-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) + '@reown/appkit-ui': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-utils': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0))(zod@3.22.4) + '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10) '@walletconnect/types': 2.21.0 - '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.0.10)(react@19.0.0) - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4340,74 +5082,156 @@ snapshots: - utf-8-validate - zod - '@rollup/pluginutils@5.1.4(rollup@4.34.9)': + '@rollup/pluginutils@5.1.4(rollup@4.67.5)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.9 + rollup: 4.67.5 '@rollup/rollup-android-arm-eabi@4.34.9': optional: true + '@rollup/rollup-android-arm-eabi@4.67.5': + optional: true + '@rollup/rollup-android-arm64@4.34.9': optional: true + '@rollup/rollup-android-arm64@4.67.5': + optional: true + + '@rollup/rollup-android-x64@4.67.5': + optional: true + '@rollup/rollup-darwin-arm64@4.34.9': optional: true + '@rollup/rollup-darwin-arm64@4.67.5': + optional: true + '@rollup/rollup-darwin-x64@4.34.9': optional: true + '@rollup/rollup-darwin-x64@4.67.5': + optional: true + '@rollup/rollup-freebsd-arm64@4.34.9': optional: true + '@rollup/rollup-freebsd-arm64@4.67.5': + optional: true + '@rollup/rollup-freebsd-x64@4.34.9': optional: true + '@rollup/rollup-freebsd-x64@4.67.5': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.67.5': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.34.9': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.67.5': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.34.9': optional: true + '@rollup/rollup-linux-arm64-gnu@4.67.5': + optional: true + '@rollup/rollup-linux-arm64-musl@4.34.9': optional: true + '@rollup/rollup-linux-arm64-musl@4.67.5': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.67.5': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.67.5': + optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': optional: true '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.67.5': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.67.5': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.34.9': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.67.5': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.67.5': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.34.9': optional: true + '@rollup/rollup-linux-s390x-gnu@4.67.5': + optional: true + '@rollup/rollup-linux-x64-gnu@4.34.9': optional: true + '@rollup/rollup-linux-x64-gnu@4.67.5': + optional: true + '@rollup/rollup-linux-x64-musl@4.34.9': optional: true + '@rollup/rollup-linux-x64-musl@4.67.5': + optional: true + + '@rollup/rollup-openbsd-x64@4.67.5': + optional: true + + '@rollup/rollup-openharmony-arm64@4.67.5': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.34.9': optional: true + '@rollup/rollup-win32-arm64-msvc@4.67.5': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.34.9': optional: true + '@rollup/rollup-win32-ia32-msvc@4.67.5': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.67.5': + optional: true + '@rollup/rollup-win32-x64-msvc@4.34.9': optional: true - '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@rollup/rollup-win32-x64-msvc@4.67.5': + optional: true + + '@rx-state/core@0.1.4(rxjs@7.8.1)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + rxjs: 7.8.1 + + '@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + dependencies: + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -4415,10 +5239,10 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript @@ -4431,6 +5255,8 @@ snapshots: '@scure/base@1.2.6': {} + '@scure/base@2.4.0': {} + '@scure/bip32@1.4.0': dependencies: '@noble/curves': 1.4.2 @@ -4469,6 +5295,10 @@ snapshots: '@noble/curves': 1.9.6 '@noble/hashes': 1.8.0 + '@sec-ant/readable-stream@0.4.1': {} + + '@sindresorhus/merge-streams@4.0.0': {} + '@socket.io/component-emitter@3.1.2': {} '@substrate/connect-discovery@0.2.2': @@ -4523,12 +5353,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.9) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.9) - '@svgr/core@8.1.0': + '@svgr/core@8.1.0(typescript@6.0.3)': dependencies: '@babel/core': 7.26.9 '@svgr/babel-preset': 8.1.0(@babel/core@7.26.9) camelcase: 6.3.0 - cosmiconfig: 8.3.6 + cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -4539,11 +5369,11 @@ snapshots: '@babel/types': 7.26.9 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': dependencies: '@babel/core': 7.26.9 '@svgr/babel-preset': 8.1.0(@babel/core@7.26.9) - '@svgr/core': 8.1.0 + '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: @@ -4595,6 +5425,8 @@ snapshots: dependencies: '@types/ms': 2.1.0 + '@types/estree@1.0.10': {} + '@types/estree@1.0.6': {} '@types/json-schema@7.0.15': {} @@ -4605,6 +5437,12 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@26.6.6': + dependencies: + undici-types: 8.9.0 + + '@types/normalize-package-data@2.4.4': {} + '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.14': {} @@ -4623,27 +5461,29 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@vitejs/plugin-react@4.3.4(vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1))': + '@vitejs/plugin-react@4.3.4(vite@6.2.1(@types/node@26.6.6)(sass-embedded@1.85.1))': dependencies: '@babel/core': 7.26.9 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1) + vite: 6.2.1(@types/node@26.6.6)(sass-embedded@1.85.1) transitivePeerDependencies: - supports-color - '@wagmi/connectors@5.8.5(@types/react@19.0.10)(@wagmi/core@2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)))(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)': + '@wagmi/connectors@5.8.5(@types/react@19.0.10)(@wagmi/core@2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)))(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4)': dependencies: '@coinbase/wallet-sdk': 4.3.3 '@metamask/sdk': 0.32.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@wagmi/core': 2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)) - '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@wagmi/core': 2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)) + '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4671,21 +5511,22 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4))': + '@wagmi/core@2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4))': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.7 - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + mipd: 0.0.7(typescript@6.0.3) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) zustand: 5.0.0(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)) optionalDependencies: '@tanstack/query-core': 5.67.2 + typescript: 6.0.3 transitivePeerDependencies: - '@types/react' - immer - react - use-sync-external-store - '@walletconnect/core@2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -4699,7 +5540,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -4728,7 +5569,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -4742,7 +5583,7 @@ snapshots: '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@walletconnect/window-getters': 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -4775,18 +5616,18 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.21.1(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/ethereum-provider@2.21.1(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@reown/appkit': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit': 1.7.8(@types/react@19.0.10)(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@walletconnect/types': 2.21.1 - '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/universal-provider': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -4907,16 +5748,16 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@walletconnect/core': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/core': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.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.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -4942,16 +5783,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: - '@walletconnect/core': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/core': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.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.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -5037,7 +5878,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -5046,9 +5887,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/sign-client': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@walletconnect/types': 2.21.0 - '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -5076,7 +5917,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -5085,9 +5926,9 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/sign-client': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) '@walletconnect/types': 2.21.1 - '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + '@walletconnect/utils': 2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -5115,7 +5956,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -5133,7 +5974,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.23.2(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -5158,7 +5999,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.21.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.8.1 @@ -5176,7 +6017,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.23.2(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -5210,8 +6051,9 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - abitype@1.0.8(zod@3.22.4): + abitype@1.0.8(typescript@6.0.3)(zod@3.22.4): optionalDependencies: + typescript: 6.0.3 zod: 3.22.4 acorn-jsx@5.3.2(acorn@8.14.1): @@ -5229,6 +6071,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.5.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -5327,10 +6171,18 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@3.4.0: {} + client-only@0.0.1: {} cliui@6.0.0: @@ -5351,6 +6203,8 @@ snapshots: colorjs.io@0.5.2: {} + commander@15.0.0: {} + concat-map@0.0.1: {} convert-source-map@1.9.0: {} @@ -5371,12 +6225,14 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6: + cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: + typescript: 6.0.3 crc-32@1.2.2: {} @@ -5428,6 +6284,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge-ts@7.1.6: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -5444,6 +6302,8 @@ snapshots: detect-browser@5.3.0: {} + detect-indent@7.0.2: {} + dijkstrajs@1.0.3: {} dom-helpers@5.2.1: @@ -5510,6 +6370,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -5664,6 +6526,21 @@ snapshots: events@3.3.0: {} + execa@10.2.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.1 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + which-command: 0.1.0 + yoctocolors: 2.2.0 + extension-port-stream@3.0.0: dependencies: readable-stream: 3.6.2 @@ -5679,6 +6556,10 @@ snapshots: fast-safe-stringify@2.1.1: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -5708,6 +6589,8 @@ snapshots: dependencies: is-callable: 1.2.7 + fs.promises.exists@1.1.4: {} + fsevents@2.3.3: optional: true @@ -5717,6 +6600,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.7.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -5735,6 +6620,15 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-tsconfig@4.14.3: + dependencies: + resolve-pkg-maps: 1.0.0 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -5783,6 +6677,16 @@ snapshots: dependencies: react-is: 16.13.1 + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@9.0.3: + dependencies: + lru-cache: 11.5.3 + + human-signals@8.0.1: {} + idb-keyval@6.2.2: {} ieee754@1.2.1: {} @@ -5801,6 +6705,8 @@ snapshots: imurmurhash@0.1.4: {} + index-to-position@1.2.0: {} + inherits@2.0.4: {} iron-webcrypto@1.2.1: {} @@ -5833,6 +6739,10 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-interactive@2.0.0: {} + + is-plain-obj@4.1.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -5842,10 +6752,14 @@ snapshots: is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.19 + is-unicode-supported@2.1.0: {} + isarray@1.0.0: {} isexe@2.0.0: {} @@ -5930,6 +6844,11 @@ snapshots: lodash.merge@4.6.2: {} + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.2.0 + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -5940,6 +6859,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.5.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -5948,11 +6869,15 @@ snapshots: micro-ftch@0.3.1: {} + mimic-function@5.0.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - mipd@0.0.7: {} + mipd@0.0.7(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 ms@2.1.3: {} @@ -5981,8 +6906,25 @@ snapshots: node-releases@2.0.19: {} + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + + normalize-package-data@8.0.0: + dependencies: + hosted-git-info: 9.0.3 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + obj-multiplex@1.0.0: dependencies: end-of-stream: 1.4.4 @@ -6005,6 +6947,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -6014,19 +6960,32 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ox@0.6.7(zod@3.22.4): + ora@9.4.1: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.3.0 + + ox@0.6.7(typescript@6.0.3)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.9.6 '@noble/hashes': 1.8.0 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(zod@3.22.4) + abitype: 1.0.8(typescript@6.0.3)(zod@3.22.4) eventemitter3: 5.0.1 + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - zod - ox@0.7.1(zod@3.22.4): + ox@0.7.1(typescript@6.0.3)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -6034,8 +6993,10 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.0.8(zod@3.22.4) + abitype: 1.0.8(typescript@6.0.3)(zod@3.22.4) eventemitter3: 5.0.1 + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - zod @@ -6068,20 +7029,34 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.26.2 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + path-exists@4.0.0: {} path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-type@4.0.0: {} + pathe@2.0.3: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@4.0.2: {} + picomatch@4.0.7: {} + pify@3.0.0: {} pify@5.0.0: {} @@ -6109,6 +7084,35 @@ snapshots: pngjs@5.0.0: {} + polkadot-api@3.3.0(bufferutil@4.0.9)(esbuild@0.25.0)(rxjs@7.8.1)(utf-8-validate@5.0.10): + dependencies: + '@polkadot-api/cli': 0.22.5(bufferutil@4.0.9)(esbuild@0.25.0)(utf-8-validate@5.0.10) + '@polkadot-api/ink-contracts': 0.7.2 + '@polkadot-api/json-rpc-provider': 0.2.0 + '@polkadot-api/known-chains': 0.12.5 + '@polkadot-api/logs-provider': 0.2.0 + '@polkadot-api/metadata-builders': 0.15.2 + '@polkadot-api/metadata-compatibility': 0.7.2 + '@polkadot-api/observable-client': 0.19.4(rxjs@7.8.1) + '@polkadot-api/pjs-signer': 0.9.0(rxjs@7.8.1) + '@polkadot-api/raw-tx-creator': 0.5.0(rxjs@7.8.1) + '@polkadot-api/signers-common': 0.4.0(rxjs@7.8.1) + '@polkadot-api/sm-provider': 0.3.10(@polkadot-api/smoldot@0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@polkadot-api/smoldot': 0.4.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@polkadot-api/substrate-bindings': 0.21.2 + '@polkadot-api/substrate-client': 0.7.0 + '@polkadot-api/tx-creator': 0.2.0(rxjs@7.8.1) + '@polkadot-api/utils': 0.4.0 + '@polkadot-api/ws-middleware': 0.4.2(rxjs@7.8.1) + '@polkadot-api/ws-provider': 0.9.2(rxjs@7.8.1) + '@rx-state/core': 0.1.4(rxjs@7.8.1) + rxjs: 7.8.1 + transitivePeerDependencies: + - bufferutil + - esbuild + - supports-color + - utf-8-validate + pony-cause@2.1.11: {} possible-typed-array-names@1.1.0: {} @@ -6123,6 +7127,10 @@ snapshots: prelude-ls@1.2.1: {} + pretty-ms@9.3.1: + dependencies: + parse-ms: 4.0.0 + process-nextick-args@2.0.1: {} process-warning@1.0.0: {} @@ -6221,6 +7229,22 @@ snapshots: react@19.0.0: {} + read-pkg@10.1.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 8.0.0 + parse-json: 8.3.0 + type-fest: 5.10.0 + unicorn-magic: 0.4.1 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -6249,12 +7273,30 @@ snapshots: resolve-from@4.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + rollup-plugin-esbuild@6.2.1(esbuild@0.25.0)(rollup@4.67.5): + dependencies: + debug: 4.4.1 + es-module-lexer: 1.7.0 + esbuild: 0.25.0 + get-tsconfig: 4.14.3 + rollup: 4.67.5 + unplugin-utils: 0.2.5 + transitivePeerDependencies: + - supports-color + rollup@4.34.9: dependencies: '@types/estree': 1.0.6 @@ -6280,10 +7322,46 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.9 fsevents: 2.3.3 + rollup@4.67.5: + dependencies: + '@types/estree': 1.0.10 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.67.5 + '@rollup/rollup-android-arm64': 4.67.5 + '@rollup/rollup-android-x64': 4.67.5 + '@rollup/rollup-darwin-arm64': 4.67.5 + '@rollup/rollup-darwin-x64': 4.67.5 + '@rollup/rollup-freebsd-arm64': 4.67.5 + '@rollup/rollup-freebsd-x64': 4.67.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.67.5 + '@rollup/rollup-linux-arm-musleabihf': 4.67.5 + '@rollup/rollup-linux-arm64-gnu': 4.67.5 + '@rollup/rollup-linux-arm64-musl': 4.67.5 + '@rollup/rollup-linux-loong64-gnu': 4.67.5 + '@rollup/rollup-linux-loong64-musl': 4.67.5 + '@rollup/rollup-linux-ppc64-gnu': 4.67.5 + '@rollup/rollup-linux-ppc64-musl': 4.67.5 + '@rollup/rollup-linux-riscv64-gnu': 4.67.5 + '@rollup/rollup-linux-riscv64-musl': 4.67.5 + '@rollup/rollup-linux-s390x-gnu': 4.67.5 + '@rollup/rollup-linux-x64-gnu': 4.67.5 + '@rollup/rollup-linux-x64-musl': 4.67.5 + '@rollup/rollup-openbsd-x64': 4.67.5 + '@rollup/rollup-openharmony-arm64': 4.67.5 + '@rollup/rollup-win32-arm64-msvc': 4.67.5 + '@rollup/rollup-win32-ia32-msvc': 4.67.5 + '@rollup/rollup-win32-x64-gnu': 4.67.5 + '@rollup/rollup-win32-x64-msvc': 4.67.5 + fsevents: 2.3.3 + rxjs@7.8.1: dependencies: tslib: 2.8.1 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -6424,6 +7502,15 @@ snapshots: shebang-regex@3.0.0: {} + signal-exit@4.1.0: {} + + smoldot@3.7.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -6451,14 +7538,34 @@ snapshots: dependencies: atomic-sleep: 1.0.0 + sort-keys@5.1.0: + dependencies: + is-plain-obj: 4.1.0 + source-map-js@1.2.1: {} source-map@0.5.7: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.24 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.24 + + spdx-license-ids@3.0.24: {} + split-on-first@1.1.0: {} split2@4.2.0: {} + stdin-discarder@0.3.2: {} + stream-shift@1.0.3: {} strict-uri-encode@2.0.0: {} @@ -6469,6 +7576,11 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@8.3.0: + dependencies: + get-east-asian-width: 1.7.0 + strip-ansi: 7.2.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -6481,6 +7593,12 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.5.0 + + strip-final-newline@4.0.0: {} + strip-json-comments@3.1.1: {} stylis@4.2.0: {} @@ -6511,12 +7629,18 @@ snapshots: sync-message-port@1.1.3: {} + tagged-tag@1.0.0: {} + thread-stream@0.15.2: dependencies: real-require: 0.1.0 tr46@0.0.3: {} + tsc-prog@2.3.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + tslib@1.14.1: {} tslib@2.8.1: {} @@ -6527,6 +7651,14 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@4.41.0: {} + + type-fest@5.10.0: + dependencies: + tagged-tag: 1.0.0 + + typescript@6.0.3: {} + ufo@1.6.1: {} uint8arrays@3.1.0: @@ -6537,6 +7669,19 @@ snapshots: undici-types@6.19.8: {} + undici-types@8.9.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unicorn-magic@0.4.1: {} + + unplugin-utils@0.2.5: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.7 + unstorage@1.16.0(idb-keyval@6.2.2): dependencies: anymatch: 3.1.3 @@ -6586,6 +7731,11 @@ snapshots: uuid@9.0.1: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + valtio@1.13.2(@types/react@19.0.10)(react@19.0.0): dependencies: derive-valtio: 0.1.0(valtio@1.13.2(@types/react@19.0.10)(react@19.0.0)) @@ -6597,65 +7747,71 @@ snapshots: varint@6.0.0: {} - viem@2.23.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.23.2(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.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(zod@3.22.4) + abitype: 1.0.8(typescript@6.0.3)(zod@3.22.4) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.7(zod@3.22.4) + ox: 0.6.7(typescript@6.0.3)(zod@3.22.4) ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.0.8(zod@3.22.4) + abitype: 1.0.8(typescript@6.0.3)(zod@3.22.4) isows: 1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.7.1(zod@3.22.4) + ox: 0.7.1(typescript@6.0.3)(zod@3.22.4) ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-plugin-svgr@4.3.0(rollup@4.34.9)(vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1)): + vite-plugin-svgr@4.3.0(rollup@4.67.5)(typescript@6.0.3)(vite@6.2.1(@types/node@26.6.6)(sass-embedded@1.85.1)): dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.9) - '@svgr/core': 8.1.0 - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) - vite: 6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1) + '@rollup/pluginutils': 5.1.4(rollup@4.67.5) + '@svgr/core': 8.1.0(typescript@6.0.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + vite: 6.2.1(@types/node@26.6.6)(sass-embedded@1.85.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite@6.2.1(@types/node@22.7.5)(sass-embedded@1.85.1): + vite@6.2.1(@types/node@26.6.6)(sass-embedded@1.85.1): dependencies: esbuild: 0.25.0 postcss: 8.5.3 rollup: 4.34.9 optionalDependencies: - '@types/node': 22.7.5 + '@types/node': 26.6.6 fsevents: 2.3.3 sass-embedded: 1.85.1 - wagmi@2.15.6(@tanstack/query-core@5.67.2)(@tanstack/react-query@5.67.2(react@19.0.0))(@types/react@19.0.10)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4): + wagmi@2.15.6(@tanstack/query-core@5.67.2)(@tanstack/react-query@5.67.2(react@19.0.0))(@types/react@19.0.10)(bufferutil@4.0.9)(immer@10.1.1)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4): dependencies: '@tanstack/react-query': 5.67.2(react@19.0.0) - '@wagmi/connectors': 5.8.5(@types/react@19.0.10)(@wagmi/core@2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)))(bufferutil@4.0.9)(react@19.0.0)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) - '@wagmi/core': 2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4)) + '@wagmi/connectors': 5.8.5(@types/react@19.0.10)(@wagmi/core@2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)))(bufferutil@4.0.9)(react@19.0.0)(typescript@6.0.3)(utf-8-validate@5.0.10)(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4))(zod@3.22.4) + '@wagmi/core': 2.17.3(@tanstack/query-core@5.67.2)(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(typescript@6.0.3)(use-sync-external-store@1.4.0(react@19.0.0))(viem@2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4)) react: 19.0.0 use-sync-external-store: 1.4.0(react@19.0.0) - viem: 2.31.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.31.0(bufferutil@4.0.9)(typescript@6.0.3)(utf-8-validate@5.0.10)(zod@3.22.4) + optionalDependencies: + typescript: 6.0.3 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -6693,6 +7849,8 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-command@0.1.0: {} + which-module@2.0.1: {} which-typed-array@1.1.19: @@ -6719,6 +7877,26 @@ snapshots: wrappy@1.0.2: {} + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + write-json-file@6.0.0: + dependencies: + detect-indent: 7.0.2 + is-plain-obj: 4.1.0 + sort-keys: 5.1.0 + write-file-atomic: 5.0.1 + + write-package@7.2.0: + dependencies: + deepmerge-ts: 7.1.6 + read-pkg: 9.0.1 + sort-keys: 5.1.0 + type-fest: 4.41.0 + write-json-file: 6.0.0 + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.0.9 @@ -6770,6 +7948,8 @@ snapshots: yocto-queue@0.1.0: {} + yoctocolors@2.2.0: {} + zod@3.22.4: {} zustand@5.0.0(@types/react@19.0.10)(immer@10.1.1)(react@19.0.0)(use-sync-external-store@1.4.0(react@19.0.0)): diff --git a/src/App.jsx b/src/App.jsx index d0924c1..8a365e9 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -36,7 +36,7 @@ const BondModalContainer = lazy(() => import("./containers/Bond/BondModal")); const StakeContainer = lazy(() => import("./containers/Stake/StakeContainer")); const TreasuryDashboard = lazy(() => import("./containers/TreasuryDashboard/TreasuryDashboard")); const Dex = lazy(() => import("./containers/Dex/Dex")); -const Bridge = lazy(() => import("./containers/Bridge/Bridge")); +const BridgeIn = lazy(() => import("./containers/Bridge/BridgeIn")); const NotFound = lazy(() => import("./containers/NotFound/NotFound")); const Governance = lazy(() => import("./containers/Governance/Governance")); const ProposalDetails = lazy(() => import("./containers/Governance/ProposalDetails")); @@ -183,9 +183,9 @@ function App() { /> @@ -200,7 +200,7 @@ function App() { } /> } /> } /> - } /> + } /> } /> } /> } /> diff --git a/src/abi/GhostGatekeeper.json b/src/abi/GhostGatekeeper.json index a518ae8..3320171 100644 --- a/src/abi/GhostGatekeeper.json +++ b/src/abi/GhostGatekeeper.json @@ -1 +1 @@ -{"abi":[{"inputs":[{"internalType":"address","name":"_staking","type":"address"},{"internalType":"uint256","name":"_ghostedSupply","type":"uint256"},{"internalType":"uint256","name":"_existential","type":"uint256"},{"internalType":"uint48","name":"_deployedAt","type":"uint48"},{"internalType":"uint104","name":"_amountIn","type":"uint104"},{"internalType":"uint104","name":"_amountOut","type":"uint104"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExecuted","type":"error"},{"inputs":[],"name":"NonExistentAmount","type":"error"},{"inputs":[],"name":"NotStaking","type":"error"},{"inputs":[],"name":"WrongSignature","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"receiver","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Ghosted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Materialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"aggregatedPublicKey","type":"uint256"}],"name":"Rotated","type":"event"},{"inputs":[],"name":"DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"existentialDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ghost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ghostedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rx","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"name":"materialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"components":[{"internalType":"uint48","name":"deployedAt","type":"uint48"},{"internalType":"uint104","name":"amountIn","type":"uint104"},{"internalType":"uint104","name":"amountOut","type":"uint104"}],"internalType":"struct IGatekeeperMetadata.GatekeeperMetadata","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aggregatedPublicKey","type":"uint256"},{"internalType":"uint256","name":"rx","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"name":"rotate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]} +{"abi":[{"inputs":[{"internalType":"address","name":"_storageHistory","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExecuted","type":"error"},{"inputs":[],"name":"BadSignature","type":"error"},{"inputs":[],"name":"CheckpointUnorderedInsertion","type":"error"},{"inputs":[],"name":"ExecutionReverted","type":"error"},{"inputs":[],"name":"HistoricalRotation","type":"error"},{"inputs":[],"name":"InactiveSlotForChainId","type":"error"},{"inputs":[],"name":"InsufficientValue","type":"error"},{"inputs":[],"name":"InvalidCalldata","type":"error"},{"inputs":[],"name":"InvalidPayloadSize","type":"error"},{"inputs":[],"name":"InvalidPublicKey","type":"error"},{"inputs":[],"name":"InvalidSelector","type":"error"},{"inputs":[],"name":"MalleableExodusSession","type":"error"},{"inputs":[],"name":"NonExistentAmount","type":"error"},{"inputs":[],"name":"NotGatekeeper","type":"error"},{"inputs":[],"name":"NotStaking","type":"error"},{"inputs":[],"name":"OutOfBoundsSessions","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SendFailed","type":"error"},{"inputs":[],"name":"WrongChainId","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"exodusSession","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"ret","type":"bytes"}],"name":"GovernanceExecutionFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"aggregatedPublicKey","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"session","type":"uint256"}],"name":"Rotated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"session","type":"uint256"}],"name":"ThreadInserted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"gasSpent","type":"uint256"}],"name":"VoluntaryVerification","type":"event"},{"inputs":[],"name":"BOUNTY_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENTRIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXISTENTIAL_DEPOSIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FULL_GAS_RESTORATION_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_EXECUTION_BUFFER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ALLOWED_GAS_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PHANTOM_EXPIRY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REGISTRY_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SLOTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentWeavingSession","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentGasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"globalIndex","type":"uint256"},{"internalType":"uint256","name":"session","type":"uint256"},{"internalType":"uint256","name":"atBlock","type":"uint256"}],"name":"getProof","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"session","type":"uint256"},{"internalType":"uint256","name":"atBlock","type":"uint256"}],"name":"getRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"atExodusSession","type":"uint256"}],"name":"getRotationInfoAt","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"globalIndex","type":"uint256"},{"internalType":"uint256","name":"session","type":"uint256"},{"internalType":"uint256","name":"atBlock","type":"uint256"}],"name":"getSlotValues","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"receiver","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ghost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ghostedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"exodusSession","type":"uint256"},{"internalType":"uint256","name":"packed","type":"uint256"},{"internalType":"bytes","name":"call","type":"bytes"}],"name":"govern","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_previousGatekeeperAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"latestPublicKeyInfo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"exodusSession","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"packed","type":"uint256"}],"name":"recall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"commonExodusSession","type":"uint256"},{"internalType":"bytes32","name":"newPublicKey","type":"bytes32"},{"internalType":"uint256","name":"packedBits","type":"uint256"},{"internalType":"bytes","name":"sessions","type":"bytes"}],"name":"rotate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startWeavingSession","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"storageHistory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"publicKey","type":"bytes32"}],"name":"updatePublicKeyMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"call","type":"bytes"},{"internalType":"uint256","name":"rx","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"name":"verify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]} diff --git a/src/components/NavItem/NavItem.jsx b/src/components/NavItem/NavItem.jsx index 981bf01..ca3bd00 100644 --- a/src/components/NavItem/NavItem.jsx +++ b/src/components/NavItem/NavItem.jsx @@ -150,7 +150,8 @@ const NavItem = ({ component={ArrowUpIcon} />} - {chip && } + + {chip && } ); diff --git a/src/components/Sidebar/NavContent.jsx b/src/components/Sidebar/NavContent.jsx index f7a6288..bf74d73 100644 --- a/src/components/Sidebar/NavContent.jsx +++ b/src/components/Sidebar/NavContent.jsx @@ -56,6 +56,7 @@ import WifiProtectedSetupIcon from '@mui/icons-material/WifiProtectedSetup'; import { useTokenSymbol } from "../../hooks/tokens"; import { useLiveBonds } from "../../hooks/bonds/index"; +import { useLocalStorage } from "../../hooks/localstorage"; import pckg from "../../../package.json" const PREFIX = "NavContent"; @@ -70,16 +71,26 @@ const StyledBox = styled(Box)(({ theme }) => ({ }, })); -const NavContent = ({ chainId, addressChainId }) => { +const NavContent = ({ chainId, addressChainId, address }) => { const { chains } = useSwitchChain(); const chainName = useMemo(() => { return chains.find(chain => chain.id === chainId).name.toLowerCase(); - }, [chains, chainId, addressChainId]) + }, [chains, chainId, addressChainId]); + + const { useStorageValue, CONSTANTS } = useLocalStorage(); const { liveBonds: ghostBonds } = useLiveBonds(chainId); const { symbol: ftsoSymbol } = useTokenSymbol(chainId, "FTSO"); const { symbol: ghstSymbol } = useTokenSymbol(chainId, "GHST"); + const { data: pendingHistory } = useStorageValue(chainId, address, CONSTANTS.pendingHistoryPrefix, {}) + + const pendingTransactions = useMemo(() => { + if (!pendingHistory) return null; + const count = Object.values(pendingHistory).reduce((sum, count) => sum + count, 0); + return count > 0 ? count: null; + }, [pendingHistory]); + const sortedGhostBonds = useMemo(() => sortBondsByDiscount(ghostBonds), [ghostBonds]); const bridgeNumbers = useMemo(() => { const connectedNetworks = Object.keys(GATEKEEPER_ADDRESSES).length; @@ -179,8 +190,10 @@ const NavContent = ({ chainId, addressChainId }) => { } /> - - + + {/* */} + + @@ -192,7 +205,6 @@ const NavContent = ({ chainId, addressChainId }) => { - diff --git a/src/components/Sidebar/NavDrawer.jsx b/src/components/Sidebar/NavDrawer.jsx index 688d1ad..e7c1cd5 100644 --- a/src/components/Sidebar/NavDrawer.jsx +++ b/src/components/Sidebar/NavDrawer.jsx @@ -27,7 +27,7 @@ const StyledSwipeableDrawer = styled(SwipeableDrawer)(({ theme }) => ({ const drawerWidth = 280; -const NavDrawer = ({ chainId, addressChainId, mobileOpen, handleDrawerToggle }) => { +const NavDrawer = ({ chainId, address, addressChainId, mobileOpen, handleDrawerToggle }) => { const location = useLocation(); const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); @@ -53,7 +53,7 @@ const NavDrawer = ({ chainId, addressChainId, mobileOpen, handleDrawerToggle }) disableBackdropTransition={!isIOS} disableDiscovery={isIOS} > - + ); }; diff --git a/src/components/Sidebar/Sidebar.jsx b/src/components/Sidebar/Sidebar.jsx index 01ec605..b714939 100644 --- a/src/components/Sidebar/Sidebar.jsx +++ b/src/components/Sidebar/Sidebar.jsx @@ -4,10 +4,10 @@ import { Drawer } from "@mui/material"; import React from "react"; import NavContent from "./NavContent"; -const Sidebar = ({ chainId, addressChainId }) => ( +const Sidebar = ({ chainId, addressChainId, address }) => (
- +
); diff --git a/src/components/TopBar/Wallet/InitialWalletView.tsx b/src/components/TopBar/Wallet/InitialWalletView.tsx index 7f0ce4a..dcc78fb 100644 --- a/src/components/TopBar/Wallet/InitialWalletView.tsx +++ b/src/components/TopBar/Wallet/InitialWalletView.tsx @@ -1,3 +1,4 @@ +import useSWR from 'swr'; import { useMemo } from "react"; import { Box, @@ -25,7 +26,7 @@ import ArrowUpIcon from "../../../assets/icons/arrow-up.svg?react"; import { formatCurrency, shorten } from "../../../helpers"; import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; import { RESERVE_ADDRESSES, FTSO_ADDRESSES } from "../../../constants/addresses"; -import { useUnstableProvider, useSystemAccount, useChainSpec } from "../../../hooks/ghost" +import { useUnstableProvider } from "../../../hooks/ghost" import { useAccount, useDisconnect, useSwitchChain } from "wagmi"; @@ -113,28 +114,44 @@ function InitialWalletView({ isWalletOpen, address, chainId, onClose }) { const location = useLocation(); const tokens = useWallet(chainId, address); - const [currency, setCurrency] = useState("USD"); - const { account, isExtensionMissing } = useUnstableProvider(); + const { client, casperApi, account, isExtensionMissing } = useUnstableProvider(); const { chains } = useSwitchChain(); + const [currency, setCurrency] = useState("USD"); + const [accountIndex, setAccountIndex] = useState(0); + const chainName = useMemo(() => { const chain = chains.find(chain => chain.id === chainId) if (!chain) return null return chain.name.toLowerCase() - }, [chains, chainId]) + }, [chains, chainId]); - const chainSpec = useChainSpec(); - const accountBalanceRaw = useSystemAccount({ account }); + const { data: chainProperties } = useSWR( + client ? ['chainProperties', client] : null, + () => client.getChainSpecData(), + { + revalidateOnFocus: false + } + ); + + const { data: accountBalanceRaw } = useSWR( + client ? ['accountBalance', client] : null, + () => casperApi.query.System.Account.getValue(account), + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); const accountBalance = useMemo(() => { - const decimals = chainSpec ? chainSpec.properties.tokenDecimals : 18; + const decimals = chainProperties ? chainProperties.properties.tokenDecimals : 18; if (!accountBalanceRaw) return new DecimalBigNumber(0n, decimals); const balance = accountBalanceRaw.data.free + accountBalanceRaw.data.frozen + accountBalanceRaw.data.reserved; return new DecimalBigNumber(balance, decimals); - }, [accountBalanceRaw, chainSpec]) + }, [accountBalanceRaw, chainProperties]); const nativeGhst = useMemo(() => { return { @@ -201,7 +218,7 @@ function InitialWalletView({ isWalletOpen, address, chainId, onClose }) { diff --git a/src/containers/Breakout/BreakoutModal.jsx b/src/containers/Breakout/BreakoutModal.jsx index 490a359..fe0c491 100644 --- a/src/containers/Breakout/BreakoutModal.jsx +++ b/src/containers/Breakout/BreakoutModal.jsx @@ -75,6 +75,7 @@ const BreakoutModal = ({ chainId, address }) => { if (isClaimBondOpened && warmupPeriod > 0) return "Bond in Warm-up" }, [isStakingOpened, isClaimBondOpened, warmupPeriod]); + // TODO: make it global helpers const bridgeNumbers = useMemo(() => { const connectedNetworks = Object.keys(GATEKEEPER_ADDRESSES).length; const number = 1 + connectedNetworks * 3; diff --git a/src/containers/Bridge/BridgeGhostAddress.jsx b/src/containers/Bridge/BridgeGhostAddress.jsx new file mode 100644 index 0000000..80975ee --- /dev/null +++ b/src/containers/Bridge/BridgeGhostAddress.jsx @@ -0,0 +1,50 @@ +import { useState, useEffect } from "react"; +import { ss58Decode } from "@polkadot-labs/hdkd-helpers"; + +import CheckIcon from '@mui/icons-material/CheckCircle'; +import CancelIcon from '@mui/icons-material/Cancel'; + +import SwapCard from "../../components/Swap/SwapCard"; +import GhostStyledIcon from "../../components/Icon/GhostIcon"; + +import { shorten } from "../../helpers"; + +export const BridgeGhostAddressCard = ({ receiver, setReceiver }) => { + const [inputFocused, setInputFocused] = useState(false); + const [innerReceiver, setInnerReceiver] = useState(receiver); + + useEffect(() => { + try { + const [publicKey, prefix] = ss58Decode(innerReceiver); + if (prefix !== 1995 && prefix !== 1996) { + throw new Error("bad prefix"); + } + setReceiver(innerReceiver); + } catch (err) { + setReceiver(undefined) + } + }, [innerReceiver]); + + return ( + setInputFocused(true)} + onFocus={() => setInputFocused(false)} + onMouseLeave={() => setInputFocused(true)} + onMouseEnter={() => setInputFocused(false)} + onChange={event => setInnerReceiver(event.currentTarget.value)} + placeholder={receiver ? shorten(receiver, 15, -10) : "GHOST address (sf prefixed)"} + value={receiver ? "" : innerReceiver} + inputProps={{ "data-testid": "fromInput" }} + endString={receiver + ? + : inputFocused && !receiver + ? + : undefined + } + type="text" + maxWidth="100%" + /> + ) +} diff --git a/src/containers/Bridge/BridgeIn.jsx b/src/containers/Bridge/BridgeIn.jsx new file mode 100644 index 0000000..c81a565 --- /dev/null +++ b/src/containers/Bridge/BridgeIn.jsx @@ -0,0 +1,461 @@ +import { useEffect, useState, useMemo, useCallback } from "react"; +import { useLocation } from "react-router-dom"; +import { ss58Decode } from "@polkadot-labs/hdkd-helpers"; +import { toHex } from "@polkadot-api/utils"; +import ReactGA from "react-ga4"; +import useSWR from 'swr'; + +import { + Box, + Container, + Typography, + Skeleton, + useMediaQuery, + useTheme, +} from "@mui/material"; +import SettingsIcon from '@mui/icons-material/Settings'; + +import Paper from "../../components/Paper/Paper"; +import Metric from "../../components/Metric/Metric"; +import PageTitle from "../../components/PageTitle/PageTitle"; +import GhostStyledIcon from "../../components/Icon/GhostIcon"; +import MetricCollection from "../../components/Metric/MetricCollection"; +import LinearProgressBar from "../../components/Progress/LinearProgressBar"; +import SwapCard from "../../components/Swap/SwapCard"; +import SwapCollection from "../../components/Swap/SwapCollection"; +import TokenStack from "../../components/TokenStack/TokenStack"; +import DataRow from "../../components/DataRow/DataRow"; +import { PrimaryButton } from "../../components/Button"; + +import { BridgeInSettingsModal } from "./BridgeSettingsModal"; + +import { + ghost, + useGatekeeperApy, + useGatekeeperAddress, + useGatekeeperMinimum, +} from "../../hooks/staking"; + +import { useTokenSymbol, useBalance } from "../../hooks/tokens"; +import { useUnstableProvider } from "../../hooks/ghost"; +import { useLocalStorage } from "../../hooks/localstorage"; +import { prettifySeconds } from "../../helpers/timeUtil"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { formatNumber, formatCurrency } from "../../helpers"; +import { GATEKEEPER_ADDRESSES } from "../../constants/addresses"; +import { networkAvgBlockSpeed } from "../../constants"; + +const DECIMALS_PREFIX = "bridge-in-decimals"; + +const BridgeStatusCard = ({ totalValidators, pendingValidators, tapestryDraft }) => { + const theme = useTheme(); + const progressPercent = totalValidators > 0 + ? (pendingValidators / totalValidators) * 100 + : 0; + + return ( + + + + {tapestryDraft ? "Round 2: Merkle Root Verification" : "Round 1: Block Consensus"} + + + {tapestryDraft + ? `Block: ${formatNumber(tapestryDraft.median)} (${pendingValidators} out of ${totalValidators} validators)` + : `Blocks Pending... (${pendingValidators} out of ${totalValidators} validators)` + } + + + + + + ); +}; + +const BridgeIn = ({ chainId, address, config, connect }) => { + const location = useLocation(); + const { useStorageValue, setStorageValue, tryStoreInHistory, CONSTANTS } = useLocalStorage(); + + const isSmallScreen = useMediaQuery("(max-width: 650px)"); + const isSemiSmallScreen = useMediaQuery("(max-width: 480px)"); + const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); + + const { casperApi, client, account } = useUnstableProvider(); + const { gatekeepedApy } = useGatekeeperApy(chainId); + + const [nextEraIn, setNextEraIn] = useState(null); + const [settingsOpen, setSettingsOpen] = useState(false); + const [isPending, setIsPending] = useState(false); + const [amount, setAmount] = useState(""); + const [receiver, setReceiver] = useState(account); + const [customReceiver, setCustomReceiver] = useState(account); + + const { symbol: ghstSymbol } = useTokenSymbol(chainId, "GHST"); + const { balance: ghstBalance, refetch: ghstBalanceRefetch } = useBalance(chainId, "GHST", address); + const { gatekeeperAddress } = useGatekeeperAddress(chainId); + const { existentialDeposit } = useGatekeeperMinimum(chainId); + + const { data: formatDecimals } = useStorageValue(chainId, address, DECIMALS_PREFIX, "5"); + + useEffect(() => { + ReactGA.send({ hitType: "pageview", page: location.pathname }); + }, [location]); + + const bridgeNumbers = useMemo(() => { + const connectedNetworks = Object.keys(GATEKEEPER_ADDRESSES).length; + const number = 1 + connectedNetworks * 3; + return `(${number}, ${number})`; + }, [chainId]); + + const { data: chainProperties } = useSWR( + client ? ['chainProperties', client] : null, + () => client.getChainSpecData(), + { + revalidateOnFocus: true + } + ); + + const { data: activeEraStart } = useSWR( + casperApi ? ['activeEra', casperApi] : null, + () => casperApi.query.Staking.ActiveEra.getValue(), + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const { data: weaverAuthorities } = useSWR( + casperApi ? ['weaverAuthorities', casperApi] : null, + () => casperApi.query.GhostWeaver.Authorities.getValue(), + { + revalidateOnFocus: true + } + ); + + const { data: networkData } = useSWR( + casperApi ? ['networkData', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostNetworks.Networks.getValue(key); + return res; + }, + { + revalidateOnFocus: true + } + ); + + const { data: totalStaked } = useSWR( + casperApi && activeEraStart && chainProperties ? ['erasTotalStake', casperApi, activeEraStart, chainProperties] : null, + async () => { + const decimals = chainProperties.properties.tokenDecimals; + const total = await casperApi.query.Staking.ErasTotalStake.getValue(activeEraStart.index); + return new DecimalBigNumber(total, decimals); + }, + { + revalidateOnFocus: true + } + ); + + const { data: networkAttestations } = useSWR( + casperApi ? ['networkAttestations', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostWeaver.NetworkAttestations.getValue(key); + return res; + }, + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const { data: tapestryDraft } = useSWR( + casperApi ? ['tapestryDraft', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostWeaver.TapestryDrafts.getValue(key); + return res; + }, + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const { data: tapestryStrand } = useSWR( + casperApi ? ['tapestryStrand', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostWeaver.TapestryStrands.getValue(key); + return res; + }, + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const tapestryParticipants = useMemo(() => { + if (!tapestryStrand) return { element: "", onesCount: 0 }; + + let maxOnesCount = 0; + let bestElement = null; + + tapestryStrand.forEach(item => { + const dataArray = item[1]?.data || []; + const totalOnes = dataArray.reduce((sum, num) => { + const onesInNumber = num.toString(2).split('1').length - 1; + return sum + onesInNumber; + }, 0); + + if (totalOnes > maxOnesCount) { + maxOnesCount = totalOnes; + bestElement = item[0]; + } + }); + + return { + element: bestElement, + onesCount: maxOnesCount + }; + }, [tapestryStrand]); + + useEffect(() => { + if (!activeEraStart || !activeEraStart.start) return; + + const calculateTime = () => { + const nowMs = Date.now(); + const diffMs = nowMs - Number(activeEraStart.start); + return prettifySeconds(Math.max(0, diffMs / 1000)); + }; + + setNextEraIn(calculateTime()); + + const intervalId = setInterval(() => { + setNextEraIn(calculateTime()); + }, 1000); + + return () => clearInterval(intervalId); + }, [activeEraStart]); + + const blockDelayMetric = useMemo(() => { + if (!networkData) return null; + const blockSpeed = networkAvgBlockSpeed(chainId); + const finalityDelay = networkData.finality_delay; + const estimatedMins = (blockSpeed * finalityDelay) / 60n; + return { finalityDelay, text: `~${estimatedMins} mins` } + }, [chainId, networkData]); + + const nativeSymbol = useMemo(() => { + const client = config?.getClient(); + return client?.chain?.nativeCurrency?.symbol; + }, [config]); + + const estimatedOutAmount = useMemo(() => { + const hundredPercent = 1000000000; + const incomingShare = networkData ? networkData.incoming_share : 0; + const result = hundredPercent - incomingShare; + + return amount * result / hundredPercent + }, [amount, networkData]); + + const gatekeepersDifferent = useMemo(() => { + if (!networkData) return false; + return gatekeeperAddress.toUpperCase() == toHex(networkData.gatekeeper).toUpperCase(); + }, [gatekeeperAddress, networkData]); + + const preparedAmount = useMemo(() => { + return new DecimalBigNumber(amount, ghstBalance._decimals); + }, [amount, ghstBalance]); + + const receiverHex = useMemo(() => { + const finalReceiver = customReceiver ? customReceiver : receiver; + try { + const [publicKey, prefix] = ss58Decode(finalReceiver); + if (prefix !== 1995 && prefix !== 1996) return undefined; + return toHex(publicKey); + } catch { + return undefined; + } + }, [receiver, customReceiver]); + + const actionDisabled = useMemo(() => { + if (!networkData) return true; + const differentGatekeepers = gatekeeperAddress.toUpperCase() !== toHex(networkData.gatekeeper).toUpperCase(); + const smallAmount = existentialDeposit.gt(preparedAmount); + const insufficientAmount = preparedAmount.gt(ghstBalance); + + return isPending || differentGatekeepers || smallAmount || insufficientAmount || !receiverHex + }, [isPending, networkData, gatekeeperAddress, existentialDeposit, preparedAmount, ghstBalance, receiverHex]); + + const setFormatDecimals = useCallback((value) => { + if (Number(value) <= 17) { + setStorageValue(chainId, address, DECIMALS_PREFIX, value); + } + }, [chainId, address]); + + const startGhostBridge = async () => { + setIsPending(true); + try { + const txHash = await ghost(chainId, address, receiverHex, preparedAmount._value); + if (txHash) tryStoreInHistory(chainId, address, CONSTANTS.bridgeIn.key, txHash, CONSTANTS.bridgeIn.name); + } finally { + await ghstBalanceRefetch(); + setAmount(""); + setIsPending(false); + } + } + + return ( + + + + setSettingsOpen(false)} + decimals={formatDecimals} + setDecimals={setFormatDecimals} + receiver={customReceiver} + setReceiver={setCustomReceiver} + /> + + + Next Era in + {nextEraIn + ? {nextEraIn} + : + } + + } + > + + + + + + + + + v !== undefined).length : 0 + } + /> + + + + setSettingsOpen(true)} + /> + } + headerContent={ + Bridge-In + } + > + + + } + tokenName={ghstSymbol} + info={formatCurrency(ghstBalance.toString(), formatDecimals, ghstSymbol)} + endString="Max" + value={amount} + endStringOnClick={() => setAmount(ghstBalance.toString())} + onChange={event => setAmount(event.currentTarget.value)} + inputProps={{ "data-testid": "fromInput" }} + />} + LowerSwapCard={ + + } + tokenName={"GHST"} + value={estimatedOutAmount} + inputProps={{ "data-testid": "toInput" }} + /> + } + /> + + {formatCurrency(existentialDeposit.toString(), formatDecimals, ghstSymbol)}} + /> + + + Bond + + + + + + +
+ ) +} + +export default BridgeIn; diff --git a/src/containers/Bridge/BridgeSettingsModal.jsx b/src/containers/Bridge/BridgeSettingsModal.jsx new file mode 100644 index 0000000..8ecd3dd --- /dev/null +++ b/src/containers/Bridge/BridgeSettingsModal.jsx @@ -0,0 +1,48 @@ +import { useState, useEffect } from "react"; +import { Box, Typography, FormControl, OutlinedInput, InputLabel } from "@mui/material"; +import { BridgeGhostAddressCard } from "./BridgeGhostAddress"; +import Modal from "../../components/Modal/Modal"; + +export const BridgeInSettingsModal = ({ isOpen, onClose, decimals, setDecimals, receiver, setReceiver }) => { + return ( + Bridge-In Settings} + open={isOpen} + onClose={onClose} + minHeight={"100px"} + > + + Decimal representation + + + setDecimals(event.currentTarget.value)} + endAdornment="decimals" + /> + + + + + Number of decimals to be shown in token balances + + + + + + Destination address + + + + Recipient address of swapped assets and liquidity tokens + + + + + ) +} diff --git a/src/containers/Dex/Dex.jsx b/src/containers/Dex/Dex.jsx index 8056e26..f067d52 100644 --- a/src/containers/Dex/Dex.jsx +++ b/src/containers/Dex/Dex.jsx @@ -41,12 +41,17 @@ import PoolContainer from "./PoolContainer"; import SwapContainer from "./SwapContainer"; import TokenModal from "./TokenModal"; +const DEADLINE_PREFIX = "dex-deadline"; +const SLIPPAGE_PREFIX = "dex-slippage"; +const DECIMALS_PREFIX = "dex-decimals"; +const DESTINATION_PREFIX = "dex-destination"; + const Dex = ({ chainId, address, connect, config }) => { const location = useLocation(); const pathname = useParams(); const theme = useTheme(); - const { getStorageValue, setStorageValue } = useLocalStorage(); + const { useStorageValue, setStorageValue, CONSTANTS } = useLocalStorage(); const isSmallScreen = useMediaQuery("(max-width: 650px)"); const isVerySmallScreen = useMediaQuery("(max-width: 379px)"); @@ -59,12 +64,12 @@ const Dex = ({ chainId, address, connect, config }) => { const [topTokenListOpen, setTopTokenListOpen] = useState(false); const [bottomTokenListOpen, setBottomTokenListOpen] = useState(false); - const [secondsToWait, setSecondsToWait] = useState(() => getStorageValue(chainId, address, "dex-deadline", "60")); - const [slippage, setSlippage] = useState(() => getStorageValue(chainId, address, "dex-slippage", "5")); - const [formatDecimals, setFormatDecimals] = useState(() => getStorageValue(chainId, address, "dex-decimals", "5")); - const [actualDestinationAddress, setActualDestinationAddress] = useState(() => getStorageValue(chainId, address, "dex-destination", address)); - const [destinationAddress, setDestinationAddress] = useState(actualDestinationAddress); + const { data: secondsToWait } = useStorageValue(chainId, address, DEADLINE_PREFIX, "60"); + const { data: slippage } = useStorageValue(chainId, address, SLIPPAGE_PREFIX, "5"); + const { data: formatDecimals } = useStorageValue(chainId, address, DECIMALS_PREFIX, "5"); + const { data: actualDestinationAddress } = useStorageValue(chainId, address, DECIMALS_PREFIX, address); + const [destinationAddress, setDestinationAddress] = useState(actualDestinationAddress); const [tokenAddressTop, setTokenAddressTop] = useState(EMPTY_ADDRESS); const [tokenAddressBottom, setTokenAddressBottom] = useState(FTSO_ADDRESSES[chainId]); @@ -192,23 +197,20 @@ const Dex = ({ chainId, address, connect, config }) => { return dexInfo ? dexInfo.isFork : false; }, [chainId, pathname]) - const setSlippageInner = useCallback((value) => { + const setSlippage = useCallback((value) => { const maybeValue = parseFloat(value); if (!maybeValue || parseFloat(value) <= 100) { - setSlippage(value); - setStorageValue(chainId, address, "dex-slippage", value); + setStorageValue(chainId, address, SLIPPAGE_PREFIX, value); } }, [chainId, address]); - const setSecondsToWaitInner = useCallback((value) => { - setSecondsToWait(value); - setStorageValue(chainId, address, "dex-deadline", value); + const setSecondsToWait = useCallback((value) => { + setStorageValue(chainId, address, DEADLINE_PREFIX, value); }, [chainId, address]); - const setFormatDecimalsInner = useCallback((value) => { + const setFormatDecimals = useCallback((value) => { if (Number(value) <= 17) { - setFormatDecimals(value); - setStorageValue(chainId, address, "dex-decimals", value); + setStorageValue(chainId, address, DECIMALS_PREFIX, value); } }, [chainId, address]); @@ -216,8 +218,7 @@ const Dex = ({ chainId, address, connect, config }) => { const cleanedValue = value.trim(); setDestinationAddress(value); if (isAddress(cleanedValue)) { - setActualDestinationAddress(value); - setStorageValue(chainId, address, "dex-destination", value); + setStorageValue(chainId, address, DECIMALS_PREFIX, value); } }, [chainId, address]); @@ -278,7 +279,7 @@ const Dex = ({ chainId, address, connect, config }) => { type="text" id="slippage-dex" value={slippage} - onChange={event => setSlippageInner(event.currentTarget.value)} + onChange={event => setSlippage(event.currentTarget.value)} endAdornment="%" /> @@ -299,7 +300,7 @@ const Dex = ({ chainId, address, connect, config }) => { type="number" id="seconds-to-wait" value={secondsToWait} - onChange={event => setSecondsToWaitInner(event.currentTarget.value)} + onChange={event => setSecondsToWait(event.currentTarget.value)} endAdornment="seconds" /> @@ -320,7 +321,7 @@ const Dex = ({ chainId, address, connect, config }) => { type="number" id="decimals-to-wait" value={formatDecimals} - onChange={event => setFormatDecimalsInner(event.currentTarget.value)} + onChange={event => setFormatDecimals(event.currentTarget.value)} endAdornment="decimals" /> diff --git a/src/containers/Dex/PoolContainer.jsx b/src/containers/Dex/PoolContainer.jsx index e2289a6..8f41ebe 100644 --- a/src/containers/Dex/PoolContainer.jsx +++ b/src/containers/Dex/PoolContainer.jsx @@ -38,7 +38,7 @@ const PoolContainer = ({ }) => { const theme = useTheme(); const isSmallScreen = useMediaQuery("(max-width: 456px)"); - const { tryStoreDexInHistory } = useLocalStorage(); + const { tryStoreInHistory, CONSTANTS } = useLocalStorage(); const [isPending, setIsPending] = useState(false); const [amountTop, setAmountTop] = useState(""); @@ -167,7 +167,12 @@ const PoolContainer = ({ const addLiquidityInner = async () => { setIsPending(true); - const deadline = Math.floor(Date.now() / 1000) + secondsToWait; + const numericSecondsToWait = parseInt(secondsToWait, 10); + const safeSecondsToWait = (!isNaN(numericSecondsToWait) && numericSecondsToWait > 0) + ? numericSecondsToWait + : 0; + + const deadline = Math.floor(Date.now() / 1000) + safeSecondsToWait; const shares = 100000; const one = BigInt(shares * 100); const floatSlippage = slippage === "" ? 0 : parseFloat(slippage); @@ -201,7 +206,7 @@ const PoolContainer = ({ txHash = await addLiquidity(params); } - if (txHash) tryStoreDexInHistory(chainId, address, txHash); + if (txHash) tryStoreInHistory(chainId, address, CONSTANTS.dex.key, txHash, CONSTANTS.dex.add); await balanceRefetchTop(); await balanceRefetchBottom(); diff --git a/src/containers/Dex/SwapContainer.jsx b/src/containers/Dex/SwapContainer.jsx index 4a90579..e5df51f 100644 --- a/src/containers/Dex/SwapContainer.jsx +++ b/src/containers/Dex/SwapContainer.jsx @@ -46,7 +46,7 @@ const SwapContainer = ({ }) => { const theme = useTheme(); const isSmallScreen = useMediaQuery("(max-width: 456px)"); - const { tryStoreDexInHistory } = useLocalStorage(); + const { tryStoreInHistory, CONSTANTS } = useLocalStorage(); const [isPending, setIsPending] = useState(false); const [amountBottom, setAmountBottom] = useState(""); @@ -163,7 +163,12 @@ const SwapContainer = ({ const swapTokens = async () => { setIsPending(true); - const deadline = Math.floor(Date.now() / 1000) + secondsToWait; + const numericSecondsToWait = parseInt(secondsToWait, 10); + const safeSecondsToWait = (!isNaN(numericSecondsToWait) && numericSecondsToWait > 0) + ? numericSecondsToWait + : 0; + + const deadline = Math.floor(Date.now() / 1000) + safeSecondsToWait; const shares = 100000; const one = BigInt(shares * 100); const floatSlippage = slippage === "" ? 0 : parseFloat(slippage); @@ -202,7 +207,7 @@ const SwapContainer = ({ } } - if (txHash) tryStoreDexInHistory(chainId, address, txHash); + if (txHash) tryStoreInHistory(chainId, address, CONSTANTS.dex.key, txHash, CONSTANTS.dex.swap); await balanceRefetchTop(); await balanceRefetchBottom(); diff --git a/src/containers/History/BridgeInModal.jsx b/src/containers/History/BridgeInModal.jsx new file mode 100644 index 0000000..96b32b1 --- /dev/null +++ b/src/containers/History/BridgeInModal.jsx @@ -0,0 +1,531 @@ +import useSWR from 'swr'; +import { useMemo, useState } from "react"; +import { useTransactionReceipt, useBlockNumber, useTransaction } from 'wagmi'; +import { decodeEventLog, decodeFunctionData } from 'viem'; +import { Box, Typography, Link, Skeleton, useTheme } from "@mui/material"; + +import CheckIcon from '@mui/icons-material/Check'; +import SyncIcon from '@mui/icons-material/Sync'; +import FingerprintIcon from '@mui/icons-material/Fingerprint'; +import ContentPasteIcon from '@mui/icons-material/ContentPaste'; +import HourglassBottomIcon from '@mui/icons-material/HourglassBottom'; +import PendingIcon from '@mui/icons-material/Pending'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; + +import Modal from "../../components/Modal/Modal"; +import DataRow from "../../components/DataRow/DataRow"; +import GhostStyledIcon from "../../components/Icon/GhostIcon"; +import { PrimaryButton } from "../../components/Button"; +import { abi as GatekeeperAbi } from "../../abi/GhostGatekeeper.json"; + +import { useWeaverState } from "../../hooks/staking" +import { useUnstableProvider } from "../../hooks/ghost"; +import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; +import { shorten, formatNumber, formatCurrency } from "../../helpers"; + +const BridgeInModal = ({ chainId, isOpen, close, config, historyRecord }) => { + if (historyRecord === null) return null; + + const [copiedIndex, setCopiedIndex] = useState(null); + const { casperApi, client, account } = useUnstableProvider(); + const { data: blockNumber } = useBlockNumber({ watch: true }); + + const { data: txData } = useTransaction({ + chainId, + hash: historyRecord.txHash, + }); + + const functionData = useMemo(() => { + if (!txData) return null; + return decodeFunctionData({ abi: GatekeeperAbi, data: txData.input }) + }, [txData]); + + const copyToClipboard = (text, index) => { + navigator.clipboard.writeText(text).then(() => { + setCopiedIndex(index); + setTimeout(() => setCopiedIndex(null) , 800); + }); + }; + + const { data: chainProperties } = useSWR( + client ? ['chainProperties', client] : null, + () => client.getChainSpecData(), + { + revalidateOnFocus: true + } + ); + + const { data: networkData } = useSWR( + casperApi ? ['networkData', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostNetworks.Networks.getValue(key); + return res; + }, + { + revalidateOnFocus: true + } + ); + + const chainInfo = useMemo(() => { + const client = config?.getClient(); + return { + url: client?.chain?.blockExplorers?.default?.url, + symbol: client?.chain?.nativeCurrency?.symbol, + }; + }, [config]); + + const { data: receipt, isLoading, error } = useTransactionReceipt({ + hash: historyRecord?.txHash, + query: { + enabled: !!historyRecord?.txHash && isOpen, + } + }); + + const allDecodedLogs = useMemo(() => { + if (!receipt?.logs) return []; + + return receipt.logs.map((log) => { + try { + const decoded = decodeEventLog({ + abi: GatekeeperAbi, + data: log.data, + topics: log.topics, + }); + + return { + eventName: decoded.eventName, + args: decoded.args, + address: log.address + }; + } catch (e) { + return null; + } + }).filter(Boolean); + }, [receipt]); + + const bridgeInInfo = useMemo(() => { + return allDecodedLogs.find(l => l.eventName === 'ThreadInserted'); + }, [allDecodedLogs]); + + // TODO: revisit, we need other block to be used here + // TODO: how to verify the fact that merkle root is correct??? + // const xxxx = useWeaverState(chainId, receipt.blockNumber, bridgeInInfo?.args); + + // TODO: functionData could be here + const localString = new Date(historyRecord.submitted).toLocaleString(); + const receiver = "sfKCC7CEfJLTgGopghSPB5EtNfLVUu34nMtiW3Taf1GuwVz3Z"; + + const rawAmount = 1000000000000000000n; + const bridgedAmount = new DecimalBigNumber( + rawAmount, + chainProperties?.properties.tokenDecimals ?? 18 + ); + + const estimatedFee = useMemo(() => { + if (!networkData) return null + return networkData.incoming_share / 10000000; + }, [networkData]); + + const estimatedReceived = useMemo(() => { + const hundredPercent = 1000000000; + const incomingShare = networkData ? networkData.incoming_share : 0; + const result = hundredPercent - incomingShare; + + const value = Number(rawAmount) * result / hundredPercent; + return new DecimalBigNumber(value, chainProperties?.properties.tokenDecimals ?? 18) + }, [networkData, chainProperties]); + + const finalization = useMemo(() => { + if (!receipt || !blockNumber || !networkData) return null; + const finalityDelay = networkData.finality_delay; + return Math.max(0, Number(finalityDelay + receipt.blockNumber - blockNumber)); + }, [receipt, blockNumber, networkData]); + + // TODO: networkId, session, + // TODO: EvmThreadProof: slotIndex global % SLOTS, proofIndex % SLOTS, receiver sf, amount raw + + // TODO: compute locally the arguments + // https://git.ghostchain.io/ghostchain/ghost-node/src/commit/cc7721e3899f9740e35f65f3feb4cdc621926166/pallets/weaver/src/types.rs#L400 + + return ( + + {bridgeInInfo && "Bridge-In"} + {!bridgeInInfo && "Parsing Transaction Hash"} + + } + onClose={() => close()} + > + + + + + + {localString}} + tooltip="some description to be added." + /> + + copyToClipboard(receiver, 0)} + > + + {bridgeInInfo ? shorten(receiver, 11, -8) : } + + + + } + /> + + {formatNumber(receipt.blockNumber)} + : + } + /> + + + + {bridgeInInfo ? shorten(historyRecord.txHash, 11, -8) : } + + + : + } + /> + + +
+ + + {formatCurrency(bridgedAmount, 5, chainProperties?.properties.tokenSymbol ?? "")}} + /> + + {formatNumber(estimatedFee, 2)}%} + /> + + {formatCurrency(estimatedReceived.toString(), 5, chainProperties?.properties.tokenSymbol ?? "")}} + /> + + + Claim Bridge-In +
+
+
+ ) +} + +const BridgeInProgress = ({ chainId, casperApi, finalization, blockNumber }) => { + const theme = useTheme(); + + const { data: weaverAuthorities } = useSWR( + casperApi ? ['weaverAuthorities', casperApi] : null, + () => casperApi.query.GhostWeaver.Authorities.getValue(), + { + revalidateOnFocus: true + } + ); + + const { data: tapestryDraft } = useSWR( + casperApi ? ['tapestryDraft', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostWeaver.TapestryDrafts.getValue(key); + return res; + }, + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const { data: tapestryStrand } = useSWR( + casperApi ? ['tapestryStrand', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostWeaver.TapestryStrands.getValue(key); + return res; + }, + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const { data: loomState } = useSWR( + casperApi ? ['loomState', casperApi, chainId] : null, + async () => { + const key = BigInt(chainId); + const res = await casperApi.query.GhostWeaver.LoomStates.getValue(key, 0n); + return res; + }, + { + refreshInterval: 12000, + revalidateOnFocus: true + } + ); + + const rootIncluded = useMemo(() => { + if (!loomState || !blockNumber) return false; + if (blockNumber >= loomState.at_block) return true; + return false; + }); + + return ( + + {finalization === null || finalization > 0 + ? + : + } + + + + ) +} + +const ProofSubmission = ({ theme, claimed, rootIncluded }) => { + return ( + + + Bridge Status + + {rootIncluded + ? claimed ? "Success" : "Claim Ready" + : "Pending..." + } + + + ) +} + +const RootVerification = ({ theme, tapestryDraft, rootIncluded, totalAuthorities, tapestryStrand }) => { + const rootVerificationText = useMemo(() => { + if (rootIncluded) return "Synced"; + if (!tapestryStrand) return "Pending..."; + + let maxOnesCount = 0; + + tapestryStrand.forEach(item => { + const dataArray = item[1]?.data || []; + const totalOnes = dataArray.reduce((sum, num) => { + const onesInNumber = num.toString(2).split('1').length - 1; + return sum + onesInNumber; + }, 0); + + if (totalOnes > maxOnesCount) { + maxOnesCount = totalOnes; + } + }); + + return `${maxOnesCount} / ${totalAuthorities}`; + }, [rootIncluded, tapestryStrand, totalAuthorities]); + + return ( + + + Root Verification + {rootVerificationText} + + ) +} + +const SyncTarget = ({ tapestryDraft, loomState, rootIncluded, blockNumber, theme }) => { + const syncTargetText = useMemo(() => { + if (rootIncluded) return "Synced"; + if (!tapestryDraft || !loomState) return "Pending..."; + if (blockNumber >= loomState.at_block) return "Synced" + + return `${formatNumber(Number(blockNumber - loomState.at_block))} block behind`; + }, [rootIncluded, tapestryDraft, loomState, blockNumber]); + + return ( + + + Sync Target + {syncTargetText} + + ) +} + +const BlockFinalization = ({ finalization, theme }) => { + return ( + 0 && "scale(1.2)", + color: finalization === 0 && theme.colors.primary[300] + }} + maxWidth="120px" + display="flex" + flexDirection="column" + justifyContent="start" + alignItems="center" + > + 0 && 'rotateHourGlass 2s ease-in-out infinite', + '@keyframes rotateHourGlass': { + '0%': { transform: 'rotate(0deg)' }, + '15%': { transform: 'rotate(0deg)' }, + '85%': { transform: 'rotate(180deg)' }, + '100%': { transform: 'rotate(180deg)' }, + }, + }} + viewBox="0 0 25 25" + component={HourglassBottomIcon} + /> + Finalization + + {(finalization ?? 0).toString()} blocks left + + + ) +} + +export default BridgeInModal; diff --git a/src/containers/History/DexViewModal.jsx b/src/containers/History/DexViewModal.jsx index 8370d5f..c8bb64d 100644 --- a/src/containers/History/DexViewModal.jsx +++ b/src/containers/History/DexViewModal.jsx @@ -127,11 +127,12 @@ const DexViewModal = ({ chainId, isOpen, close, config, historyRecord }) => { headerText={ <> {swapInfo && "DEX Swap"} + {!swapInfo && "Parsing Transaction Hash"} } onClose={() => close()} > - + {swapInfo && {tokenIn ? tokenIn.symbol : "Unknown"} Sender @@ -183,7 +184,7 @@ const DexViewModal = ({ chainId, isOpen, close, config, historyRecord }) => { > View Transaction Details - + } ) } diff --git a/src/containers/History/History.jsx b/src/containers/History/History.jsx index 701d623..98ec6e3 100644 --- a/src/containers/History/History.jsx +++ b/src/containers/History/History.jsx @@ -39,6 +39,7 @@ import EraseModal from "./EraseModal"; import SettingsModal from "./SettingsModal"; import DexViewModal from "./DexViewModal"; import StakingViewModal from "./StakingViewModal"; +import BridgeInModal from "./BridgeInModal"; const HistoryItem = ({ item, chainId, config, currentTime, eraseRecord, setViewModalOpen, isSmallScreen }) => { const theme = useTheme(); @@ -57,7 +58,7 @@ const HistoryItem = ({ item, chainId, config, currentTime, eraseRecord, setViewM const chipStatus = useMemo(() => { const delay = 3600000; // useEvmNetwork({ evmChainId: chainId }) - const width = isVerySmallScreen ? "21px" : "120px" + const width = isVerySmallScreen ? "21px" : "100px" if (item.submitted + delay > currentTime) { return @@ -94,7 +95,10 @@ const HistoryItem = ({ item, chainId, config, currentTime, eraseRecord, setViewM - {chipStatus} + + {item?.name ?? "Unknown"} + {chipStatus} + @@ -111,14 +115,16 @@ const HistoryItem = ({ item, chainId, config, currentTime, eraseRecord, setViewM - - {shorten(item.txHash, 9, -7)} - + + {item?.name ?? "Unknown"} + + {shorten(item.txHash, 7, -5)} + + @@ -146,13 +152,7 @@ const HistoryList = ({ chainId, storedTransactions, historyType, config, eraseRe const [currentTime, setCurrentTime] = useState(Date.now()); const [viewModalOpen, setViewModalOpen] = useState(null); - const { - BRIDGE_IN, - BRIDGE_OUT, - DEX_ACTION, - STAKE_ACTION, - BOND_ACTION - } = useLocalStorage(); + const { CONSTANTS } = useLocalStorage(); useEffect(() => { const intervalId = setInterval(() => { @@ -216,7 +216,7 @@ const HistoryList = ({ chainId, storedTransactions, historyType, config, eraseRe return ( <> - {viewModalOpen !== null && historyType === DEX_ACTION && ( + {viewModalOpen !== null && historyType === CONSTANTS.dex.key && ( )} - {viewModalOpen !== null && historyType === STAKE_ACTION && ( - setViewModalOpen(null)} - isOpen={true} - historyRecord={storedTransactions.at(viewModalOpen)} - /> - )} + {viewModalOpen !== null && historyType === CONSTANTS.stake.key && ( + setViewModalOpen(null)} + isOpen={true} + historyRecord={storedTransactions.at(viewModalOpen)} + /> + )} + + {viewModalOpen !== null && historyType === CONSTANTS.bridgeIn.key && ( + setViewModalOpen(null)} + isOpen={true} + historyRecord={storedTransactions.at(viewModalOpen)} + /> + )} {historyContainer} @@ -258,41 +268,35 @@ const History = ({ chainId, config, tryConnectInjected, address }) => { }, [location]); const { - POSSIBLE_HISTORY_TYPES, - getHistoryTypes, - setHistoryTypes, - getStorageValue, - setStorageValue + CONSTANTS, + useStorageValue, + setStorageValue, + clearPendingHistory } = useLocalStorage(); - const [storedHistoryTypes, setStoredHistoryTypes] = useState(() => - getHistoryTypes(chainId, address) - ) - const [storedTransactions, setStoredTransactions] = useState(() => - getStorageValue(chainId, address, storedHistoryTypes[historyTypeIndex], []) - ); + const { data: storedHistoryTypes } = useStorageValue(chainId, address, CONSTANTS.historyPrefix, CONSTANTS.defaultHistoryTypes); + const { data: storedTransactions } = useStorageValue(chainId, address, storedHistoryTypes[historyTypeIndex], []); - useEffect(() => { - setStoredTransactions(getStorageValue(chainId, address, storedHistoryTypes[historyTypeIndex], [])); - }, [chainId, address, historyTypeIndex]); + const { data: pendingHistory } = useStorageValue(chainId, address, CONSTANTS.pendingHistoryPrefix, {}); const handleHistoryTypesChange = useCallback((values) => { - setHistoryTypes(chainId, address, values); - setStoredHistoryTypes(getHistoryTypes(chainId, address)); + setStorageValue(chainId, address, CONSTANTS.historyPrefix, values); }, [chainId, address]); const handleConfirmErase = useCallback(() => { if (erasingIndex !== null) { const updated = storedTransactions.filter((_, index) => index !== erasingIndex); - setStoredTransactions(updated); setStorageValue(chainId, address, storedHistoryTypes[historyTypeIndex], updated); } else { setStorageValue(chainId, address, storedHistoryTypes[historyTypeIndex], []); - setStoredTransactions([]) } setErasingOpen(false); setErasingIndex(null); - }, [storedTransactions, erasingIndex, chainId, address, historyTypeIndex]) + }, [storedTransactions, erasingIndex, chainId, address, historyTypeIndex]); + + useEffect(() => { + clearPendingHistory(chainId, address, storedHistoryTypes.at(historyTypeIndex)); + }, [storedHistoryTypes, historyTypeIndex]) return ( @@ -320,7 +324,7 @@ const History = ({ chainId, config, tryConnectInjected, address }) => { close={() => setSettingsOpen(false)} onChange={handleHistoryTypesChange} selectedValues={storedHistoryTypes} - possibleValues={POSSIBLE_HISTORY_TYPES} + possibleValues={CONSTANTS.possibleHistoryTypes} /> @@ -347,7 +351,8 @@ const History = ({ chainId, config, tryConnectInjected, address }) => { gap="15px" > { key={i} value={type} aria-label={`history-${i}-button`} - label={type} style={{ fontSize: "1.2rem" }} + label={ + + {type} + {pendingHistory && pendingHistory[type] > 0 && ( + + )} + + } /> ) })} diff --git a/src/containers/History/StakingViewModal.jsx b/src/containers/History/StakingViewModal.jsx index 1a32f87..87d1974 100644 --- a/src/containers/History/StakingViewModal.jsx +++ b/src/containers/History/StakingViewModal.jsx @@ -101,11 +101,12 @@ const StakingViewModal = ({ chainId, isOpen, close, config, historyRecord }) => headerText={ <> {stakeInfo && "Staked"} + {!stakeInfo && "Parsing Transaction Hash"} } onClose={() => close()} > - + {stakeInfo && > View Transaction Details - + } ) } diff --git a/src/containers/Stake/components/StakeConfirmationModal.jsx b/src/containers/Stake/components/StakeConfirmationModal.jsx index dc3052f..a52c2cc 100644 --- a/src/containers/Stake/components/StakeConfirmationModal.jsx +++ b/src/containers/Stake/components/StakeConfirmationModal.jsx @@ -23,7 +23,7 @@ const StakeConfirmationModal = (props) => { const [acknowledgedWarmup, setAcknowledgedWarmup] = useState(false); const [isPending, setIsPending] = useState(false); - const { tryStoreStakeInHistory } = useLocalStorage(); + const { tryStoreInHistory, CONSTANTS } = useLocalStorage(); useEffect(() => setAcknowledgedWarmup(acknowledgedWarmup || !needsWarmup), [acknowledgedWarmup, needsWarmup]) @@ -77,6 +77,7 @@ const StakeConfirmationModal = (props) => { const actionAmount = new DecimalBigNumber(props.amount, props.spendDecimals); let isRebase = false; let txHash = null; + let txName = null; switch (props.action.toUpperCase()) { case "STAKE": @@ -91,6 +92,7 @@ const StakeConfirmationModal = (props) => { props.stnkSymbol, props.ghstSymbol ); + txName = CONSTANTS.stake.stake; break; case "UNSTAKE": isRebase = props.upperToken === props.stnkSymbol; @@ -104,6 +106,7 @@ const StakeConfirmationModal = (props) => { props.stnkSymbol, props.ghstSymbol ); + txName = CONSTANTS.stake.unstake; break; case "WRAP": txHash = await wrap( @@ -112,6 +115,7 @@ const StakeConfirmationModal = (props) => { actionAmount._value.toBigInt(), props.ghstSymbol ); + txName = CONSTANTS.stake.wrap; break; case "UNWRAP": txHash = await unwrap( @@ -120,12 +124,13 @@ const StakeConfirmationModal = (props) => { actionAmount._value.toBigInt(), props.stnkSymbol ); + txName = CONSTANTS.stake.unwrap; break; default: console.log("Wrong action to be executed!"); } - if (txHash) tryStoreStakeInHistory(props.chainId, props.address, txHash) + if (txHash && txName) tryStoreInHistory(props.chainId, props.address, CONSTANTS.stake.key, txHash, txName); setIsPending(false); props.onClose(); diff --git a/src/containers/Stake/components/StakeInputArea.jsx b/src/containers/Stake/components/StakeInputArea.jsx index e3bd19a..28be176 100644 --- a/src/containers/Stake/components/StakeInputArea.jsx +++ b/src/containers/Stake/components/StakeInputArea.jsx @@ -67,6 +67,10 @@ const StyledBox = styled(Box)(({ theme }) => ({ }, })); +const DECIMALS_PREFIX = "stake-decimals"; +const IS_CLAIM_PREFIX = "stake-isClaim"; +const IS_TRIGGER_PREFIX = "stake-isTrigger"; + export const StakeInputArea = ({ chainSymbol, upperToken, @@ -84,11 +88,11 @@ export const StakeInputArea = ({ const [bottomTokenModalOpen, setBottomTokenModalOpen] = useState(false); const [confirmationModalOpen, setConfirmationModalOpen] = useState(false); - const { getStorageValue, setStorageValue } = useLocalStorage(); + const { useStorageValue, setStorageValue } = useLocalStorage(); - const [formatDecimals, setFormatDecimals] = useState(() => getStorageValue(chainId, address, "stake-decimals", "5")); - const [isClaim, setIsClaim] = useState(() => getStorageValue(chainId, address, "stake-isClaim", true)); - const [isTrigger, setIsTrigger] = useState(() => getStorageValue(chainId, address, "stake-isTrigger", true)); + const { data: formatDecimals } = useStorageValue(chainId, address, DECIMALS_PREFIX, "5"); + const { data: isClaim } = useStorageValue(chainId, address, IS_CLAIM_PREFIX, true); + const { data: isTrigger } = useStorageValue(chainId, address, IS_TRIGGER_PREFIX, true); const [amount, setAmount] = useState(""); const [receiveAmount, setReceiveAmount] = useState(""); @@ -103,20 +107,17 @@ export const StakeInputArea = ({ const { symbol: stnkSymbol } = useTokenSymbol(chainId, "STNK"); const { symbol: ghstSymbol } = useTokenSymbol(chainId, "GHST"); - const setIsClaimInner = useCallback((value) => { - setIsClaim(value); - setStorageValue(chainId, address, "stake-isClaim", value); + const setIsClaim = useCallback((value) => { + setStorageValue(chainId, address, IS_CLAIM_PREFIX, value); }, [chainId, address]); - const setIsTriggerInner = useCallback((value) => { - setIsTrigger(value); - setStorageValue(chainId, address, "stake-isTrigger", value); + const setIsTrigger = useCallback((value) => { + setStorageValue(chainId, address, IS_TRIGGER_PREFIX, value); }, [chainId, address]); - const setFormatDecimalsInner = useCallback((value) => { + const setFormatDecimals = useCallback((value) => { if (Number(value) <= 17) { - setFormatDecimals(value); - setStorageValue(chainId, address, "stake-decimals", value); + setStorageValue(chainId, address, DECIMALS_PREFIX, value); } }, [chainId, address]); @@ -251,11 +252,11 @@ export const StakeInputArea = ({ open={settingsModalOpen} onClose={closeSettingModal} formatDecimals={formatDecimals} - onFormatDecimalsChange={event => setFormatDecimalsInner(event.currentTarget.value)} + onFormatDecimalsChange={event => setFormatDecimals(event.currentTarget.value)} isClaim={isClaim} - onIsClaimChanged={setIsClaimInner} + onIsClaimChanged={setIsClaim} isTrigger={isTrigger} - onTriggerRebaseChange={setIsTriggerInner} + onTriggerRebaseChange={setIsTrigger} /> useContext(UnstableProvider) export const UnstableProviderProvider = ({ children }) => { - const [chainId, setChainId] = useState(DEFAULT_CHAIN_ID); - const [providerIndex, setProviderIndex] = useState(0); + const [client, setClient] = useState(undefined); + const [status, setStatus] = useState("loading"); - const { data: providerDetails } = useSWR("getGhostProviders", () => - Unstable.getSubstrateConnectExtensionProviders() - ); + const [selectedExtension, setSelectedExtension] = useState(null); + const [selectedAccountIndex, setSelectedAccountIndex] = useState(0); + const [accounts, setAccounts] = useState([]); - const providerDetail = useMemo(() => providerDetails?.at(providerIndex), [providerDetails, providerIndex]); + useEffect(() => { + let isMounted = true; + let provider = null; - const { data: provider } = useSWR( - () => providerDetail ? `ghostProviderDetail.${providerDetail.info.uuid}.provider` : null, - () => providerDetail ? providerDetail.provider : null - ); + try { + const smoldot = startFromWorker(new SmWorker()); + provider = createClientOther( + getSmProvider(() => smoldot.addChain({ chainSpec })), + ) - const { data: accounts } = useSWR( - () => providerDetail ? `providerDetail.${providerDetail.info.uuid}.provider.getAccounts(${chainId})` : null, - async () => { - if (!providerDetail) return [] - const activeProvider = await providerDetail.provider; - return activeProvider.getAccounts(chainId); - }, - ) + if (isMounted) { + setClient(provider); + setStatus("connected"); + } - const account = useMemo(() => { - if (Array.isArray(accounts)) return accounts?.at(0)?.address; - if (typeof accounts === 'string') return accounts?.address; - return undefined - }, [accounts]) + } catch (error) { + console.error("Smoldot initialization failed:", error); + if (isMounted) setStatus("error"); + } - const connectionState = useMemo(async () => { - if (!providerDetail) return 'no-extension'; - if (!provider) return 'loading'; + return () => { + isMounted = false; + if (provider) provider.destroy(); + }; + }, []); - const chains = await provider.getChains(); - if (chains[chainId]) return 'connected'; + useEffect(() => { + if (status !== "connected") return; - return 'wrong-network'; - }, [providerDetail, provider, chainId]); + let isMounted = true; + (async () => { + const extensions = getInjectedExtensions(); + const targetExt = extensions.find(ext => ext === GHOST_CONNECT_EXTENSION); - const client = useMemo(() => { - if (!provider || !chainId) return undefined; + if (!targetExt) { + console.warn("Ghost Connect extension not found in window.injectedWeb3"); + return; + } - const chain = provider.getChains()[chainId]; - if (!chain) return undefined; + const ext = await connectInjectedExtension(targetExt); + if (isMounted) setSelectedExtension(ext); + })(); - return createClient(chain.connect) - }, [provider, chainId]); + return () => { isMounted = false; }; + }, [status]); - const observableClient = useMemo(() => client ? getObservableClient(client) : undefined, [client]); - const chainHead$ = useMemo(() => observableClient?.chainHead$(), [observableClient]); + useEffect(() => { + if (!selectedExtension) return; + + const unsubscribe = selectedExtension.subscribe((updatedAccounts) => { + setAccounts(updatedAccounts); + }); + + return unsubscribe; + }, [selectedExtension]); + + const account = useMemo(() => accounts?.at(selectedAccountIndex)?.address, [accounts, selectedAccountIndex]); + const casperApi = useMemo(() => client?.getTypedApi(casperMetadata), [client]); + const finalizedBlock$ = useMemo(() => client?.finalizedBlock$, [client]); const value = useMemo(() => ({ - isExtensionMissing: connectionState === "no-extension", - providerDetails, - providerDetail, - connectProviderByIndex: setProviderIndex, - chainId, - account, + status, client, - setChainId, - chainHead$ - }), [providerDetails, providerDetail, chainId, client, account, chainHead$]); + account, + accounts, + casperApi, + finalizedBlock$, + }), [accounts, status, client, finalizedBlock$]); return ( diff --git a/src/hooks/localstorage/index.jsx b/src/hooks/localstorage/index.jsx index cb6dec8..2b5114d 100644 --- a/src/hooks/localstorage/index.jsx +++ b/src/hooks/localstorage/index.jsx @@ -1,7 +1,5 @@ import { createContext, useContext, useState, useEffect } from "react"; - -const LocalStorageContext = createContext(); -export const useLocalStorage = () => useContext(LocalStorageContext); +import useSWR, { mutate } from "swr"; const BRIDGE_IN = "Bridge-In"; const BRIDGE_OUT = "Bridge-Out"; @@ -9,77 +7,109 @@ const DEX_ACTION = "DEX"; const STAKE_ACTION = "Stake"; const BOND_ACTION = "Bond"; -const POSSIBLE_HISTORY_TYPES = [BRIDGE_IN, BRIDGE_OUT, DEX_ACTION, STAKE_ACTION, BOND_ACTION]; +const DEX_ACTION_SWAP = "Swap"; +const DEX_ACTION_ADD = "Add Liquidity"; + +const STAKE_ACTION_STAKE = "Stake"; +const UNSTAKE_ACTION_STAKE = "Unstake"; +const WRAP_ACTION_STAKE = "Wrap"; +const UNWRAP_ACTION_STAKE = "Unwrap"; + +// TODO: add bond later +const POSSIBLE_HISTORY_TYPES = [BRIDGE_IN, BRIDGE_OUT, DEX_ACTION, STAKE_ACTION]; const DEFAULT_HISTORY_TYPES = [BRIDGE_IN, BRIDGE_OUT]; -const HISTORY_PREFIX = "history" +const HISTORY_PREFIX = "history"; +const PENDING_HISTORY_PREIFX = "pending"; + +const LocalStorageContext = createContext(); +export const useLocalStorage = () => useContext(LocalStorageContext); + +const CONSTANTS = { + possibleHistoryTypes: POSSIBLE_HISTORY_TYPES, + defaultHistoryTypes: DEFAULT_HISTORY_TYPES, + historyPrefix: HISTORY_PREFIX, + pendingHistoryPrefix: PENDING_HISTORY_PREIFX, + + bridgeIn: { key: BRIDGE_IN, name: BRIDGE_IN }, + bridgeOut: { key: BRIDGE_OUT, name: BRIDGE_OUT }, + dex: { key: DEX_ACTION, swap: DEX_ACTION_SWAP, add: DEX_ACTION_ADD }, + stake: { + key: STAKE_ACTION, + stake: STAKE_ACTION_STAKE, + unstake: UNSTAKE_ACTION_STAKE, + wrap: WRAP_ACTION_STAKE, + unwrap: UNWRAP_ACTION_STAKE, + }, +}; export const LocalStorageProvider = ({ children }) => { const getStorageKey = (chainId, address, target) => { return `${chainId}:${address}:${target}`; } - const getStorageValue = (chainId, address, target, defaultValue) => { - const key = getStorageKey(chainId, address, target); - const stored = localStorage.getItem(key); - return stored ? JSON.parse(stored) : defaultValue; - } + const useStorageValue = (chainId, address, target, defaultValue) => { + return useSWR( + chainId && address ? ["local", chainId, address, target] : null, + ([_, chainId, address, target]) => { + const key = getStorageKey(chainId, address, target); + const stored = localStorage.getItem(key); + return stored ? JSON.parse(stored) : defaultValue; + }, + { revalidateOnFocus: false, fallbackData: defaultValue } + ); + }; - const setStorageValue = (chainId, address, target, value) => { + const setStorageValue = async (chainId, address, target, value) => { const key = getStorageKey(chainId, address, target); localStorage.setItem(key, JSON.stringify(value)); + await mutate(["local", chainId, address, target]); } - const getHistoryTypes = (chainId, address) => { - const key = getStorageKey(chainId, address, HISTORY_PREFIX); + const clearPendingHistory = async (chainId, address, target) => { + const key = getStorageKey(chainId, address, PENDING_HISTORY_PREIFX); const stored = localStorage.getItem(key); - return stored ? JSON.parse(stored) : DEFAULT_HISTORY_TYPES; + if (!stored) return + + const pendingValues = JSON.parse(stored); + if (target in pendingValues) { + delete pendingValues[target]; + localStorage.setItem(key, JSON.stringify(pendingValues)); + await mutate(["local", chainId, address, PENDING_HISTORY_PREIFX]); + } } - const setHistoryTypes = (chainId, address, value) => { - const key = getStorageKey(chainId, address, HISTORY_PREFIX); - localStorage.setItem(key, JSON.stringify(value)); - } - - const tryStoreInHistory = (chainId, address, target, txHash) => { - const historyTypes = getHistoryTypes(chainId, address); + const tryStoreInHistory = async (chainId, address, target, txHash, name) => { + const historyKey = getStorageKey(chainId, address, HISTORY_PREFIX); + const storedHistoryTypes = localStorage.getItem(historyKey); + const historyTypes = storedHistoryTypes ? JSON.parse(storedHistoryTypes) : []; if (!historyTypes.includes(target)) return; const key = getStorageKey(chainId, address, target); const stored = localStorage.getItem(key); const values = stored ? JSON.parse(stored) : []; - const value = { txHash, submitted: Date.now() }; + const value = { name, txHash, submitted: Date.now() }; const newValues = [value, ...values]; localStorage.setItem(key, JSON.stringify(newValues)); - } - const tryStoreBondInHistory = (chainId, address, txHash) => { - tryStoreInHistory(chainId, address, BOND_ACTION, txHash); - } + const pendingKey = getStorageKey(chainId, address, PENDING_HISTORY_PREIFX); + const pendingItems = localStorage.getItem(pendingKey); + const pendingValues = pendingItems ? JSON.parse(pendingItems) : {}; - const tryStoreStakeInHistory = (chainId, address, txHash) => { - tryStoreInHistory(chainId, address, STAKE_ACTION, txHash); - } + const currentCount = pendingValues[target] || 0; + pendingValues[target] = currentCount + 1; + localStorage.setItem(pendingKey, JSON.stringify(pendingValues)); - const tryStoreDexInHistory = (chainId, address, txHash) => { - tryStoreInHistory(chainId, address, DEX_ACTION, txHash); + await mutate(["local", chainId, address, PENDING_HISTORY_PREIFX]); } return ( {children} diff --git a/src/hooks/staking/index.js b/src/hooks/staking/index.js index ecbbc2e..e5ae28b 100644 --- a/src/hooks/staking/index.js +++ b/src/hooks/staking/index.js @@ -14,9 +14,62 @@ import { abi as GatekeeperAbi } from "../../abi/GhostGatekeeper.json"; import { shorten } from "../../helpers"; import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; -import { executeOnChainTransaction } from "../helpers"; +import { executeOnChainTransaction, getTokenDecimals } from "../helpers"; import { useCirculatingSupply } from "../tokens"; +export const useWeaverState = (chainId, blockNumber, context) => { + const { session, index } = context; + const { gatekeeperAddress } = useGatekeeperAddress(chainId); + + const { data: merkleRoot } = useReadContract({ + abi: GatekeeperAbi, + address: gatekeeperAddress, + functionName: "getRoot", + args: [index, blockNumber], + scopeKey: `getRoot-${chainId}-${session}-${gatekeeperAddress}`, + chainId: chainId, + }); + + const { data: merkleProof } = useReadContract({ + abi: GatekeeperAbi, + address: gatekeeperAddress, + functionName: "getProof", + args: [index, session, blockNumber], + scopeKey: `getProof-${chainId}-${session}-${gatekeeperAddress}`, + chainId: chainId, + }); + + const { data: slotValues } = useReadContract({ + abi: GatekeeperAbi, + address: gatekeeperAddress, + functionName: "getSlotValues", + args: [index, session, blockNumber], + scopeKey: `getSlotValues-${chainId}-${session}-${gatekeeperAddress}`, + chainId: chainId, + }); + + return null +} + +export const useGatekeeperMinimum = (chainId) => { + const { gatekeeperAddress } = useGatekeeperAddress(chainId); + + const { data: minimum, error } = useReadContract({ + abi: GatekeeperAbi, + address: gatekeeperAddress, + functionName: "EXISTENTIAL_DEPOSIT", + scopeKey: `existentialDeposit-${chainId}-${gatekeeperAddress}`, + chainId: chainId, + }); + + const existentialDeposit = new DecimalBigNumber( + minimum ? minimum : 0n, + getTokenDecimals("GHST"), + ); + + return { existentialDeposit}; +} + export const useGatekeeperApy = (chainId) => { const circulatingSupply = useCirculatingSupply(chainId, "STNK"); const { gatekeeperAddress } = useGatekeeperAddress(chainId); @@ -32,11 +85,11 @@ export const useGatekeeperApy = (chainId) => { const amountIn = new DecimalBigNumber( (metadata?.amountIn ?? 0n) + (amountInHistory[chainId] ?? 0n), - 18, + getTokenDecimals("GHST"), ); const amountOut = new DecimalBigNumber( (metadata?.amountOut ?? 0n) + (amountOutHistory[chainId] ?? 0n), - 18, + getTokenDecimals("GHST"), ); const deployedAt = metadata?.deployedAt ?? 0; @@ -310,7 +363,7 @@ export const ghost = async (chainId, account, receiver, amount) => { const args = [receiver, amount]; const messages = { replacedMsg: "Bridge transaction was replaced. Wait for inclusion please.", - successMsg: `Amount successfully bridged! Check tx hash status or wait for slow clap finalization.`, + successMsg: `Amount successfully bridged! Check Transaction History to trace the progress.`, errorMsg: "Bridge transaction failed. Check logs for error detalization.", }; const txHash = await executeOnChainTransaction({ diff --git a/src/themes/darkPalette.js b/src/themes/darkPalette.js index 09df1aa..1d1fcdb 100644 --- a/src/themes/darkPalette.js +++ b/src/themes/darkPalette.js @@ -18,12 +18,12 @@ export const darkPalette = { success: "#60C45B", // idk where this is - done userFeedback: "#49A1F2", // idk where this is error: "#F06F73", // red negative % - done - warning: "#ed6c02", // idk where this is - done + warning: "#F2E370", // idk where this is - done pnlGain: "#60C45B", // green positive % - done }, bridgeProgress: { error: "#F06F73", - warning: "#ed6c02", + warning: "#F2E370", success: "#60C45B", }, validatorsColor: {