From b4f72d9df1af8d1cf8b70dabdbab9a42d8d5d598 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Fri, 29 Nov 2024 13:22:19 +0300 Subject: [PATCH 01/15] updated npm package --- packages/networks/tron/package.json | 4 ++-- packages/networks/tron/pnpm-lock.yaml | 12 ++++++------ .../networks/tron/src/models/ContractTransaction.ts | 3 +-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/networks/tron/package.json b/packages/networks/tron/package.json index 76abdfa..6192007 100644 --- a/packages/networks/tron/package.json +++ b/packages/networks/tron/package.json @@ -1,6 +1,6 @@ { "name": "@multiplechain/tron", - "version": "0.4.15", + "version": "0.4.16", "type": "module", "main": "dist/index.cjs", "module": "dist/index.es.js", @@ -72,7 +72,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@beycandeveloper/tron-tx-decoder": "^2.0.5", + "@beycan/tron-tx-decoder": "^2.0.7", "@multiplechain/tron-walletconnect": "^0.1.0", "@multiplechain/types": "^0.1.70", "@multiplechain/utils": "^0.1.21", diff --git a/packages/networks/tron/pnpm-lock.yaml b/packages/networks/tron/pnpm-lock.yaml index d30c56e..d6118a7 100644 --- a/packages/networks/tron/pnpm-lock.yaml +++ b/packages/networks/tron/pnpm-lock.yaml @@ -8,9 +8,9 @@ importers: .: dependencies: - '@beycandeveloper/tron-tx-decoder': - specifier: ^2.0.5 - version: 2.0.5 + '@beycan/tron-tx-decoder': + specifier: ^2.0.7 + version: 2.0.7 '@multiplechain/tron-walletconnect': specifier: ^0.1.0 version: 0.1.0(@types/node@20.12.7)(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10) @@ -69,8 +69,8 @@ packages: resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} - '@beycandeveloper/tron-tx-decoder@2.0.5': - resolution: {integrity: sha512-/ohZkz/WMTkCFMSmBm3cTABW2CfcgEnEP6gi9+CexuxGApDvhDigSP0dCRk0bz8FH0rLyalWPhDnA325KBEsww==} + '@beycan/tron-tx-decoder@2.0.7': + resolution: {integrity: sha512-m2XMsZQyPMghpgV4h1fVXPIpbN+W2Dquo74FsYmup0U2PF9f8wRhLnaPnS8W4x7MRU57N3emVFImMiVcXOhBKg==} '@bitget-wallet/web3-sdk@0.0.8': resolution: {integrity: sha512-WFk6URUxTCukKrU3YpTdWTCScrj6/wwd/0O7eSANeQl1KDbDs+yj/fAkN1Wy6ebI3NMcW6sqN9mrmfwz53dPMQ==} @@ -1731,7 +1731,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 - '@beycandeveloper/tron-tx-decoder@2.0.5': + '@beycan/tron-tx-decoder@2.0.7': dependencies: axios: 0.21.4 ethers: 4.0.49 diff --git a/packages/networks/tron/src/models/ContractTransaction.ts b/packages/networks/tron/src/models/ContractTransaction.ts index 28caae8..2a7180f 100644 --- a/packages/networks/tron/src/models/ContractTransaction.ts +++ b/packages/networks/tron/src/models/ContractTransaction.ts @@ -1,5 +1,4 @@ -// @ts-expect-error no need type -import TxDecoder from '@beycandeveloper/tron-tx-decoder' +import TxDecoder from '@beycan/tron-tx-decoder' import { Transaction, type TransactionData } from './Transaction' import type { ContractAddress, ContractTransactionInterface } from '@multiplechain/types' From 27c43a00b841cc027f36586ad385959ecc857ade Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Sat, 21 Dec 2024 15:32:21 +0300 Subject: [PATCH 02/15] updated rpc --- packages/networks/evm-chains/index.example.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/networks/evm-chains/index.example.html b/packages/networks/evm-chains/index.example.html index 5cf953e..530928a 100644 --- a/packages/networks/evm-chains/index.example.html +++ b/packages/networks/evm-chains/index.example.html @@ -198,8 +198,8 @@ id: 11155111, hexId: '0xaa36a7', mainnetId: 1, - rpcUrl: 'https://sepolia.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', - wsUrl: 'wss://sepolia.infura.io/ws/v3/9aa3d95b3bc440fa88ea12eaa4456161', + rpcUrl: 'https://ethereum-sepolia-rpc.publicnode.com', + wsUrl: 'wss://ethereum-sepolia-rpc.publicnode.com', name: 'Ethereum Sepolia Testnet (QR)', explorerUrl: 'https://sepolia.etherscan.io/', nativeCurrency: { From e2d98a3e1885fa8885919abab42c46535392b6dd Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Sat, 21 Dec 2024 16:16:13 +0300 Subject: [PATCH 03/15] fixed bitcore not exported problem --- packages/networks/bitcoin/package.json | 2 +- packages/networks/bitcoin/pnpm-lock.yaml | 1611 +++++++---------- packages/networks/bitcoin/src/assets/Coin.ts | 10 +- packages/networks/bitcoin/src/index.ts | 8 +- .../bitcoin/src/services/TransactionSigner.ts | 4 +- 5 files changed, 662 insertions(+), 973 deletions(-) diff --git a/packages/networks/bitcoin/package.json b/packages/networks/bitcoin/package.json index 2c05db1..269743e 100644 --- a/packages/networks/bitcoin/package.json +++ b/packages/networks/bitcoin/package.json @@ -86,4 +86,4 @@ "@types/lodash": "^4.17.7", "@types/ws": "^8.5.10" } -} +} \ No newline at end of file diff --git a/packages/networks/bitcoin/pnpm-lock.yaml b/packages/networks/bitcoin/pnpm-lock.yaml index 061dbe6..ecb481f 100644 --- a/packages/networks/bitcoin/pnpm-lock.yaml +++ b/packages/networks/bitcoin/pnpm-lock.yaml @@ -1,1025 +1,714 @@ lockfileVersion: '9.0' settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + autoInstallPeers: true + excludeLinksFromLockfile: false importers: - .: - dependencies: - '@multiplechain/types': - specifier: ^0.1.70 - version: 0.1.70 - '@multiplechain/utils': - specifier: ^0.1.21 - version: 0.1.21 - axios: - specifier: ^1.6.8 - version: 1.6.8 - bitcore-lib: - specifier: ^10.0.28 - version: 10.0.28 - isomorphic-ws: - specifier: ^5.0.0 - version: 5.0.0(ws@8.17.0) - lodash: - specifier: ^4.17.21 - version: 4.17.21 - sats-connect: - specifier: ^2.3.1 - version: 2.3.1(typescript@5.4.4) - ws: - specifier: ^8.17.0 - version: 8.17.0 - devDependencies: - '@types/bitcore-lib': - specifier: ^0.15.6 - version: 0.15.6 - '@types/lodash': - specifier: ^4.17.7 - version: 4.17.7 - '@types/ws': - specifier: ^8.5.10 - version: 8.5.10 + + .: + dependencies: + '@multiplechain/types': + specifier: ^0.1.70 + version: 0.1.70 + '@multiplechain/utils': + specifier: ^0.1.21 + version: 0.1.21 + axios: + specifier: ^1.6.8 + version: 1.6.8 + bitcore-lib: + specifier: ^10.0.28 + version: 10.7.0 + isomorphic-ws: + specifier: ^5.0.0 + version: 5.0.0(ws@8.17.0) + lodash: + specifier: ^4.17.21 + version: 4.17.21 + sats-connect: + specifier: ^2.3.1 + version: 2.3.1(typescript@5.4.4) + ws: + specifier: ^8.17.0 + version: 8.17.0 + devDependencies: + '@types/bitcore-lib': + specifier: ^0.15.6 + version: 0.15.6 + '@types/lodash': + specifier: ^4.17.7 + version: 4.17.7 + '@types/ws': + specifier: ^8.5.10 + version: 8.5.10 packages: - '@multiplechain/types@0.1.70': - resolution: - { - integrity: sha512-o9ovdaefDHE5gorb83avugCjeixfBXrfJkIgSEEcT549yGF8CkmG/jgZIlqXKJf8Lh0tbg4zMAAanUSxUqV1FQ== - } - - '@multiplechain/utils@0.1.21': - resolution: - { - integrity: sha512-4mRlnhvXcS+7Hb1By5s2eoCH02kqOSQzV8qj0DHqZK20FtxtduaoGCtcClrFgEjN/HAXnHgdDc1pxTpveIkvRQ== - } - - '@noble/curves@1.3.0': - resolution: - { - integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - } - - '@noble/hashes@1.3.3': - resolution: - { - integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - } - engines: { node: '>= 16' } - - '@noble/secp256k1@1.7.1': - resolution: - { - integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - } - - '@sats-connect/core@0.0.7': - resolution: - { - integrity: sha512-4m5amq+orHDbqLqCRWojvDQigKAys33Ntwc7U5xNtFeib4j+DpYz6lVAL/s3cay1kq03WUZ+Gil3l5rv+5bQWQ== - } - - '@sats-connect/core@0.0.8': - resolution: - { - integrity: sha512-vb7drnd8lFfO4ahCzaVAFkX1eHF1J7jheJl2V/JuuJd5f1sy6nHeNzKMp1zmiuql8uNwe0Sx1WrK1I+4tUmDHg== - } - - '@sats-connect/make-default-provider-config@0.0.4': - resolution: - { - integrity: sha512-PsLzg1hV3FxMXUp9XrOUmDJgbuyR4VDHq/7mh1O1CtC3dDZQnJFa+Ue43duPMmUaRGinuVKtS2hnMhPLyURdGA== - } - peerDependencies: - typescript: 5.4.4 - - '@sats-connect/ui@0.0.5-c661c02': - resolution: - { - integrity: sha512-6MUXFDGTapBhZAxb6deAdqKuB64GOe6k927gGww5JYwVnOUCaHGDcfaZ/lwexzYL45u8RJof12I4np7MgS+Bwg== - } - - '@sats-connect/ui@0.0.6': - resolution: - { - integrity: sha512-H3bFFhr9CcY1oNosNi/QJszmMHSht4U19bUWfM3vzayAKgV4ebY6iUnRK5g3p2rVLLWVzlpaw1J9m+7JWwyBfA== - } - - '@scure/base@1.1.6': - resolution: - { - integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - } - - '@scure/bip32@1.3.3': - resolution: - { - integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - } - - '@scure/bip39@1.2.2': - resolution: - { - integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - } - - '@types/bitcore-lib@0.15.6': - resolution: - { - integrity: sha512-CtKDBgSBubPXZ0wFeCiUCSdzH+cuy6nFya3FboOqf44evi+OmkQPqEg3ASMpmPDYE8vkcxV302Iu8lZqCjYieg== - } - - '@types/lodash@4.17.7': - resolution: - { - integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== - } - - '@types/node@20.12.7': - resolution: - { - integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - } - - '@types/ws@8.5.10': - resolution: - { - integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - } - - asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - } - - available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - } - engines: { node: '>= 0.4' } - - axios@1.6.8: - resolution: - { - integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== - } - - base-x@3.0.9: - resolution: - { - integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - } - - base58-js@1.0.5: - resolution: - { - integrity: sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA== - } - engines: { node: '>= 8' } - - base64-js@1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - } - - bech32@2.0.0: - resolution: - { - integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== - } - - bigi@1.4.2: - resolution: - { - integrity: sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw== - } - - bignumber.js@9.1.2: - resolution: - { - integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - } - - bip-schnorr@0.6.4: - resolution: - { - integrity: sha512-dNKw7Lea8B0wMIN4OjEmOk/Z5qUGqoPDY0P2QttLqGk1hmDPytLWW8PR5Pb6Vxy6CprcdEgfJpOjUu+ONQveyg== - } - engines: { node: '>=8.0.0' } - - bitcoin-address-validation@2.2.3: - resolution: - { - integrity: sha512-1uGCGl26Ye8JG5qcExtFLQfuib6qEZWNDo1ZlLlwp/z7ygUFby3IxolgEfgMGaC+LG9csbVASLcH8fRLv7DIOg== - } - - bitcore-lib@10.0.28: - resolution: - { - integrity: sha512-uOWHpWbUxEj411p+tp6DCb9NfZdsCAHl6Z/rs96mquQMsef29fOqWUyk4Bl7yLf+KwzU5ZKy0HIPnjGFlmpXpg== - } - - bn.js@4.11.8: - resolution: - { - integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - } - - bn.js@4.12.0: - resolution: - { - integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - } - - bowser@2.11.0: - resolution: - { - integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - } - - brorand@1.1.0: - resolution: - { - integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - } - - bs58@4.0.1: - resolution: - { - integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - } - - buffer-compare@1.1.1: - resolution: - { - integrity: sha512-O6NvNiHZMd3mlIeMDjP6t/gPG75OqGPeiRZXoMQZJ6iy9GofCls4Ijs5YkPZZwoysizLiedhticmdyx/GyHghA== - } - - buffer@6.0.3: - resolution: - { - integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - } - - call-bind@1.0.7: - resolution: - { - integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - } - engines: { node: '>= 0.4' } - - combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - } - engines: { node: '>= 0.8' } - - define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - } - engines: { node: '>= 0.4' } - - delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - } - engines: { node: '>=0.4.0' } - - ecurve@1.0.6: - resolution: - { - integrity: sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w== - } - - elliptic@6.5.5: - resolution: - { - integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== - } - - es-define-property@1.0.0: - resolution: - { - integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - } - engines: { node: '>= 0.4' } - - es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - } - engines: { node: '>= 0.4' } - - ethereum-cryptography@2.1.3: - resolution: - { - integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - } - - eventemitter3@5.0.1: - resolution: - { - integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - } - - follow-redirects@1.15.6: - resolution: - { - integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - } - engines: { node: '>=4.0' } - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - } - - form-data@4.0.0: - resolution: - { - integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - } - engines: { node: '>= 6' } - - function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - } - - get-intrinsic@1.2.4: - resolution: - { - integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - } - engines: { node: '>= 0.4' } - - gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - } - - has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - } - - has-proto@1.0.3: - resolution: - { - integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - } - engines: { node: '>= 0.4' } - - has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - } - engines: { node: '>= 0.4' } - - has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - } - engines: { node: '>= 0.4' } - - hash.js@1.1.7: - resolution: - { - integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - } - - hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - } - engines: { node: '>= 0.4' } - - hmac-drbg@1.0.1: - resolution: - { - integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - } - - ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - } - - inherits@2.0.1: - resolution: - { - integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== - } - - inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - } - - is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - } - engines: { node: '>= 0.4' } - - is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - } - engines: { node: '>= 0.4' } - - is-generator-function@1.0.10: - resolution: - { - integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - } - engines: { node: '>= 0.4' } - - is-typed-array@1.1.13: - resolution: - { - integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - } - engines: { node: '>= 0.4' } - - isomorphic-ws@5.0.0: - resolution: - { - integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== - } - peerDependencies: - ws: '*' - - js-sha256@0.9.0: - resolution: - { - integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - } - - jsontokens@4.0.1: - resolution: - { - integrity: sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q== - } - - lodash.omit@4.5.0: - resolution: - { - integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== - } - - lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - } - - mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - } - engines: { node: '>= 0.6' } - - mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - } - engines: { node: '>= 0.6' } - - minimalistic-assert@1.0.1: - resolution: - { - integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - } - - minimalistic-crypto-utils@1.0.1: - resolution: - { - integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - } - - possible-typed-array-names@1.0.0: - resolution: - { - integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - } - engines: { node: '>= 0.4' } - - proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - } - - randombytes@2.1.0: - resolution: - { - integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - } - - safe-buffer@5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - } - - sats-connect@2.3.1: - resolution: - { - integrity: sha512-3KzqRO5KVBlge7Q4a/L828SfCkFD+M4MVdtgJZS+L+oHiDYoXlLkvnu3almh9Ynhcm0HnsGmVH1pKVL0lonjyQ== - } - - set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - } - engines: { node: '>= 0.4' } - - sha256-uint8array@0.10.7: - resolution: - { - integrity: sha512-1Q6JQU4tX9NqsDGodej6pkrUVQVNapLZnvkwIhddH/JqzBZF1fSaxSWNY6sziXBE8aEa2twtGkXUrwzGeZCMpQ== - } - - typescript@5.4.4: - resolution: - { - integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== - } - engines: { node: '>=14.17' } - hasBin: true - - undici-types@5.26.5: - resolution: - { - integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - } - - util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - } - - web3-errors@1.1.4: - resolution: - { - integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== - } - engines: { node: '>=14', npm: '>=6.12.0' } - - web3-types@1.5.0: - resolution: - { - integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw== - } - engines: { node: '>=14', npm: '>=6.12.0' } - - web3-utils@4.2.1: - resolution: - { - integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A== - } - engines: { node: '>=14', npm: '>=6.12.0' } - - web3-validator@2.0.4: - resolution: - { - integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== - } - engines: { node: '>=14', npm: '>=6.12.0' } - - which-typed-array@1.1.15: - resolution: - { - integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - } - engines: { node: '>= 0.4' } - - ws@8.17.0: - resolution: - { - integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== - } - engines: { node: '>=10.0.0' } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - zod@3.22.4: - resolution: - { - integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - } -snapshots: - '@multiplechain/types@0.1.70': {} - - '@multiplechain/utils@0.1.21': - dependencies: - '@types/ws': 8.5.10 - bignumber.js: 9.1.2 - web3-utils: 4.2.1 - ws: 8.17.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@noble/curves@1.3.0': - dependencies: - '@noble/hashes': 1.3.3 - - '@noble/hashes@1.3.3': {} - - '@noble/secp256k1@1.7.1': {} - - '@sats-connect/core@0.0.7': - dependencies: - axios: 1.6.8 - bitcoin-address-validation: 2.2.3 - buffer: 6.0.3 - jsontokens: 4.0.1 - lodash.omit: 4.5.0 - transitivePeerDependencies: - - debug - - '@sats-connect/core@0.0.8': - dependencies: - axios: 1.6.8 - bitcoin-address-validation: 2.2.3 - buffer: 6.0.3 - jsontokens: 4.0.1 - lodash.omit: 4.5.0 - transitivePeerDependencies: - - debug - - '@sats-connect/make-default-provider-config@0.0.4(typescript@5.4.4)': - dependencies: - '@sats-connect/core': 0.0.7 - '@sats-connect/ui': 0.0.5-c661c02 - bowser: 2.11.0 - typescript: 5.4.4 - transitivePeerDependencies: - - debug - - '@sats-connect/ui@0.0.5-c661c02': {} - - '@sats-connect/ui@0.0.6': {} - - '@scure/base@1.1.6': {} - - '@scure/bip32@1.3.3': - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - - '@scure/bip39@1.2.2': - dependencies: - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - - '@types/bitcore-lib@0.15.6': - dependencies: - '@types/node': 20.12.7 - - '@types/lodash@4.17.7': {} - - '@types/node@20.12.7': - dependencies: - undici-types: 5.26.5 - - '@types/ws@8.5.10': - dependencies: - '@types/node': 20.12.7 - - asynckit@0.4.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.0.0 - - axios@1.6.8: - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - base-x@3.0.9: - dependencies: - safe-buffer: 5.2.1 - - base58-js@1.0.5: {} - - base64-js@1.5.1: {} - - bech32@2.0.0: {} - - bigi@1.4.2: {} - - bignumber.js@9.1.2: {} - - bip-schnorr@0.6.4: - dependencies: - bigi: 1.4.2 - ecurve: 1.0.6 - js-sha256: 0.9.0 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - - bitcoin-address-validation@2.2.3: - dependencies: - base58-js: 1.0.5 - bech32: 2.0.0 - sha256-uint8array: 0.10.7 - - bitcore-lib@10.0.28: - dependencies: - bech32: 2.0.0 - bip-schnorr: 0.6.4 - bn.js: 4.11.8 - bs58: 4.0.1 - buffer-compare: 1.1.1 - elliptic: 6.5.5 - inherits: 2.0.1 - lodash: 4.17.21 - - bn.js@4.11.8: {} - - bn.js@4.12.0: {} - - bowser@2.11.0: {} - - brorand@1.1.0: {} - - bs58@4.0.1: - dependencies: - base-x: 3.0.9 + '@multiplechain/types@0.1.70': + resolution: {integrity: sha512-o9ovdaefDHE5gorb83avugCjeixfBXrfJkIgSEEcT549yGF8CkmG/jgZIlqXKJf8Lh0tbg4zMAAanUSxUqV1FQ==} + + '@multiplechain/utils@0.1.21': + resolution: {integrity: sha512-4mRlnhvXcS+7Hb1By5s2eoCH02kqOSQzV8qj0DHqZK20FtxtduaoGCtcClrFgEjN/HAXnHgdDc1pxTpveIkvRQ==} + + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@sats-connect/core@0.0.7': + resolution: {integrity: sha512-4m5amq+orHDbqLqCRWojvDQigKAys33Ntwc7U5xNtFeib4j+DpYz6lVAL/s3cay1kq03WUZ+Gil3l5rv+5bQWQ==} + + '@sats-connect/core@0.0.8': + resolution: {integrity: sha512-vb7drnd8lFfO4ahCzaVAFkX1eHF1J7jheJl2V/JuuJd5f1sy6nHeNzKMp1zmiuql8uNwe0Sx1WrK1I+4tUmDHg==} + + '@sats-connect/make-default-provider-config@0.0.4': + resolution: {integrity: sha512-PsLzg1hV3FxMXUp9XrOUmDJgbuyR4VDHq/7mh1O1CtC3dDZQnJFa+Ue43duPMmUaRGinuVKtS2hnMhPLyURdGA==} + peerDependencies: + typescript: 5.4.4 + + '@sats-connect/ui@0.0.5-c661c02': + resolution: {integrity: sha512-6MUXFDGTapBhZAxb6deAdqKuB64GOe6k927gGww5JYwVnOUCaHGDcfaZ/lwexzYL45u8RJof12I4np7MgS+Bwg==} + + '@sats-connect/ui@0.0.6': + resolution: {integrity: sha512-H3bFFhr9CcY1oNosNi/QJszmMHSht4U19bUWfM3vzayAKgV4ebY6iUnRK5g3p2rVLLWVzlpaw1J9m+7JWwyBfA==} + + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + + '@scure/bip32@1.3.3': + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + + '@scure/bip39@1.2.2': + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + + '@types/bitcore-lib@0.15.6': + resolution: {integrity: sha512-CtKDBgSBubPXZ0wFeCiUCSdzH+cuy6nFya3FboOqf44evi+OmkQPqEg3ASMpmPDYE8vkcxV302Iu8lZqCjYieg==} + + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + + '@types/node@20.12.7': + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + + '@types/ws@8.5.10': + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base58-js@1.0.5: + resolution: {integrity: sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==} + engines: {node: '>= 8'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + bitcoin-address-validation@2.2.3: + resolution: {integrity: sha512-1uGCGl26Ye8JG5qcExtFLQfuib6qEZWNDo1ZlLlwp/z7ygUFby3IxolgEfgMGaC+LG9csbVASLcH8fRLv7DIOg==} + + bitcore-lib@10.7.0: + resolution: {integrity: sha512-PcFiQXpWOVV9JUf/fN8c9f0No6+z1fIV+o7CAvUzE1TpnKbdrf8bTpU1SlgO+0hBFfA3duasw1x+hfA5iLL5uw==} + + bn.js@4.11.8: + resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-compare@1.1.1: + resolution: {integrity: sha512-O6NvNiHZMd3mlIeMDjP6t/gPG75OqGPeiRZXoMQZJ6iy9GofCls4Ijs5YkPZZwoysizLiedhticmdyx/GyHghA==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - buffer-compare@1.1.1: {} + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inherits@2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + jsontokens@4.0.1: + resolution: {integrity: sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==} + + lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + sats-connect@2.3.1: + resolution: {integrity: sha512-3KzqRO5KVBlge7Q4a/L828SfCkFD+M4MVdtgJZS+L+oHiDYoXlLkvnu3almh9Ynhcm0HnsGmVH1pKVL0lonjyQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + sha256-uint8array@0.10.7: + resolution: {integrity: sha512-1Q6JQU4tX9NqsDGodej6pkrUVQVNapLZnvkwIhddH/JqzBZF1fSaxSWNY6sziXBE8aEa2twtGkXUrwzGeZCMpQ==} + + typescript@5.4.4: + resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + web3-errors@1.1.4: + resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-types@1.5.0: + resolution: {integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-utils@4.2.1: + resolution: {integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-validator@2.0.4: + resolution: {integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA==} + engines: {node: '>=14', npm: '>=6.12.0'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + +snapshots: - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 + '@multiplechain/types@0.1.70': {} + + '@multiplechain/utils@0.1.21': + dependencies: + '@types/ws': 8.5.10 + bignumber.js: 9.1.2 + web3-utils: 4.2.1 + ws: 8.17.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 + + '@noble/hashes@1.3.3': {} + + '@noble/secp256k1@1.7.1': {} + + '@sats-connect/core@0.0.7': + dependencies: + axios: 1.6.8 + bitcoin-address-validation: 2.2.3 + buffer: 6.0.3 + jsontokens: 4.0.1 + lodash.omit: 4.5.0 + transitivePeerDependencies: + - debug - delayed-stream@1.0.0: {} + '@sats-connect/core@0.0.8': + dependencies: + axios: 1.6.8 + bitcoin-address-validation: 2.2.3 + buffer: 6.0.3 + jsontokens: 4.0.1 + lodash.omit: 4.5.0 + transitivePeerDependencies: + - debug + + '@sats-connect/make-default-provider-config@0.0.4(typescript@5.4.4)': + dependencies: + '@sats-connect/core': 0.0.7 + '@sats-connect/ui': 0.0.5-c661c02 + bowser: 2.11.0 + typescript: 5.4.4 + transitivePeerDependencies: + - debug + + '@sats-connect/ui@0.0.5-c661c02': {} + + '@sats-connect/ui@0.0.6': {} + + '@scure/base@1.1.6': {} + + '@scure/bip32@1.3.3': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@scure/bip39@1.2.2': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@types/bitcore-lib@0.15.6': + dependencies: + '@types/node': 20.12.7 + + '@types/lodash@4.17.7': {} + + '@types/node@20.12.7': + dependencies: + undici-types: 5.26.5 + + '@types/ws@8.5.10': + dependencies: + '@types/node': 20.12.7 + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axios@1.6.8: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 + + base58-js@1.0.5: {} + + base64-js@1.5.1: {} + + bech32@2.0.0: {} + + bignumber.js@9.1.2: {} + + bitcoin-address-validation@2.2.3: + dependencies: + base58-js: 1.0.5 + bech32: 2.0.0 + sha256-uint8array: 0.10.7 + + bitcore-lib@10.7.0: + dependencies: + bech32: 2.0.0 + bn.js: 4.11.8 + bs58: 4.0.1 + buffer-compare: 1.1.1 + elliptic: 6.5.5 + inherits: 2.0.1 + lodash: 4.17.21 + + bn.js@4.11.8: {} + + bn.js@4.12.0: {} + + bowser@2.11.0: {} + + brorand@1.1.0: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + buffer-compare@1.1.1: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 - ecurve@1.0.6: - dependencies: - bigi: 1.4.2 - safe-buffer: 5.2.1 + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 - elliptic@6.5.5: - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 - es-errors@1.3.0: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 - ethereum-cryptography@2.1.3: - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/bip32': 1.3.3 - '@scure/bip39': 1.2.2 + delayed-stream@1.0.0: {} - eventemitter3@5.0.1: {} + elliptic@6.5.5: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 - follow-redirects@1.15.6: {} + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 + es-errors@1.3.0: {} - form-data@4.0.0: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 + ethereum-cryptography@2.1.3: + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 - function-bind@1.1.2: {} + eventemitter3@5.0.1: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 + follow-redirects@1.15.6: {} - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.0 + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 - has-proto@1.0.3: {} + function-bind@1.1.2: {} - has-symbols@1.0.3: {} + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.0.3 + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 - hash.js@1.1.7: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 + has-proto@1.0.3: {} - hmac-drbg@1.0.1: - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 + has-symbols@1.0.3: {} - ieee754@1.2.1: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 - inherits@2.0.1: {} + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 - inherits@2.0.4: {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 - is-callable@1.2.7: {} + ieee754@1.2.1: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 + inherits@2.0.1: {} + + inherits@2.0.4: {} - is-typed-array@1.1.13: - dependencies: - which-typed-array: 1.1.15 + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} - isomorphic-ws@5.0.0(ws@8.17.0): - dependencies: - ws: 8.17.0 + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 - js-sha256@0.9.0: {} + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 - jsontokens@4.0.1: - dependencies: - '@noble/hashes': 1.3.3 - '@noble/secp256k1': 1.7.1 - base64-js: 1.5.1 + isomorphic-ws@5.0.0(ws@8.17.0): + dependencies: + ws: 8.17.0 - lodash.omit@4.5.0: {} + jsontokens@4.0.1: + dependencies: + '@noble/hashes': 1.3.3 + '@noble/secp256k1': 1.7.1 + base64-js: 1.5.1 - lodash@4.17.21: {} + lodash.omit@4.5.0: {} - mime-db@1.52.0: {} + lodash@4.17.21: {} - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 + mime-db@1.52.0: {} - minimalistic-assert@1.0.1: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 - minimalistic-crypto-utils@1.0.1: {} + minimalistic-assert@1.0.1: {} - possible-typed-array-names@1.0.0: {} + minimalistic-crypto-utils@1.0.1: {} - proxy-from-env@1.1.0: {} + possible-typed-array-names@1.0.0: {} - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 + proxy-from-env@1.1.0: {} - safe-buffer@5.2.1: {} + safe-buffer@5.2.1: {} - sats-connect@2.3.1(typescript@5.4.4): - dependencies: - '@sats-connect/core': 0.0.8 - '@sats-connect/make-default-provider-config': 0.0.4(typescript@5.4.4) - '@sats-connect/ui': 0.0.6 - transitivePeerDependencies: - - debug - - typescript + sats-connect@2.3.1(typescript@5.4.4): + dependencies: + '@sats-connect/core': 0.0.8 + '@sats-connect/make-default-provider-config': 0.0.4(typescript@5.4.4) + '@sats-connect/ui': 0.0.6 + transitivePeerDependencies: + - debug + - typescript - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 - sha256-uint8array@0.10.7: {} + sha256-uint8array@0.10.7: {} - typescript@5.4.4: {} + typescript@5.4.4: {} - undici-types@5.26.5: {} + undici-types@5.26.5: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 - web3-errors@1.1.4: - dependencies: - web3-types: 1.5.0 + web3-errors@1.1.4: + dependencies: + web3-types: 1.5.0 - web3-types@1.5.0: {} + web3-types@1.5.0: {} - web3-utils@4.2.1: - dependencies: - ethereum-cryptography: 2.1.3 - eventemitter3: 5.0.1 - web3-errors: 1.1.4 - web3-types: 1.5.0 - web3-validator: 2.0.4 + web3-utils@4.2.1: + dependencies: + ethereum-cryptography: 2.1.3 + eventemitter3: 5.0.1 + web3-errors: 1.1.4 + web3-types: 1.5.0 + web3-validator: 2.0.4 - web3-validator@2.0.4: - dependencies: - ethereum-cryptography: 2.1.3 - util: 0.12.5 - web3-errors: 1.1.4 - web3-types: 1.5.0 - zod: 3.22.4 + web3-validator@2.0.4: + dependencies: + ethereum-cryptography: 2.1.3 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.5.0 + zod: 3.22.4 - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 - ws@8.17.0: {} + ws@8.17.0: {} - zod@3.22.4: {} + zod@3.22.4: {} diff --git a/packages/networks/bitcoin/src/assets/Coin.ts b/packages/networks/bitcoin/src/assets/Coin.ts index 1132e8b..1f98dab 100644 --- a/packages/networks/bitcoin/src/assets/Coin.ts +++ b/packages/networks/bitcoin/src/assets/Coin.ts @@ -1,7 +1,7 @@ import axios from 'axios' +import bitcore from 'bitcore-lib' import { Provider } from '../services/Provider' import { fromSatoshi, toSatoshi } from '../utils' -import { Transaction, Script, Address } from 'bitcore-lib' import { TransactionSigner } from '../services/TransactionSigner' import { ErrorTypeEnum, @@ -80,8 +80,8 @@ export class Coin implements CoinInterface { } const inputs = [] - const transaction = new Transaction() - const senderAddress = new Address(sender) + const transaction = new bitcore.Transaction() + const senderAddress = new bitcore.Address(sender) const satoshiToSend = toSatoshi(amount) const utxos = await axios @@ -90,12 +90,12 @@ export class Coin implements CoinInterface { for (const utxo of utxos) { inputs.push( - new Transaction.UnspentOutput({ + new bitcore.Transaction.UnspentOutput({ txId: utxo.txid, satoshis: utxo.value, address: senderAddress, outputIndex: utxo.vout, - script: Script.fromAddress(senderAddress) + script: bitcore.Script.fromAddress(senderAddress) }) ) } diff --git a/packages/networks/bitcoin/src/index.ts b/packages/networks/bitcoin/src/index.ts index 5de3d60..fb1d1e5 100644 --- a/packages/networks/bitcoin/src/index.ts +++ b/packages/networks/bitcoin/src/index.ts @@ -1,5 +1,5 @@ import lodash from 'lodash' -import { Address, PublicKey, Script } from 'bitcore-lib' +import bitcore from 'bitcore-lib' export * from './services/Provider' @@ -18,7 +18,7 @@ declare module 'bitcore-lib' { } } -Address.prototype._classifyArguments = function (data: any, network: any, type: any) { +bitcore.Address.prototype._classifyArguments = function (data: any, network: any, type: any) { /* jshint maxcomplexity: 10 */ // transform and validate input data if ( @@ -30,10 +30,10 @@ Address.prototype._classifyArguments = function (data: any, network: any, type: } else if ((data instanceof Buffer || data instanceof Uint8Array) && data.length >= 21) { // @ts-expect-error exists return Address._transformBuffer(data, network, type) - } else if (data instanceof PublicKey) { + } else if (data instanceof bitcore.PublicKey) { // @ts-expect-error exists return Address._transformPublicKey(data, network, type) - } else if (data instanceof Script) { + } else if (data instanceof bitcore.Script) { // @ts-expect-error exists return Address._transformScript(data, network) } else if (typeof data === 'string') { diff --git a/packages/networks/bitcoin/src/services/TransactionSigner.ts b/packages/networks/bitcoin/src/services/TransactionSigner.ts index cc1f7b0..82b9427 100644 --- a/packages/networks/bitcoin/src/services/TransactionSigner.ts +++ b/packages/networks/bitcoin/src/services/TransactionSigner.ts @@ -1,14 +1,14 @@ import axios from 'axios' +import type bitcore from 'bitcore-lib' import type { AxiosError } from 'axios' import { Provider } from '../services/Provider' -import type { Transaction as BitcoreLibTransactionData } from 'bitcore-lib' import type { PrivateKey, TransactionId, TransactionSignerInterface } from '@multiplechain/types' export interface TransactionData { sender: string receiver: string amount: number - bitcoreLib: BitcoreLibTransactionData + bitcoreLib: bitcore.Transaction } export class TransactionSigner implements TransactionSignerInterface { From 28492ac84c4ea9a3c6973d17bc48e7a93258bb0e Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Wed, 8 Jan 2025 11:54:07 +0300 Subject: [PATCH 04/15] ready to dev --- packages/networks/ton/.eslintrc.json | 3 + packages/networks/ton/README.md | 5 + packages/networks/ton/esbuild.ts | 3 + packages/networks/ton/index.example.html | 322 +++++++++++++ packages/networks/ton/package.json | 78 ++++ packages/networks/ton/pnpm-lock.yaml | 435 ++++++++++++++++++ packages/networks/ton/src/assets/Coin.ts | 60 +++ packages/networks/ton/src/assets/Contract.ts | 80 ++++ packages/networks/ton/src/assets/NFT.ts | 96 ++++ packages/networks/ton/src/assets/Token.ts | 96 ++++ packages/networks/ton/src/assets/index.ts | 4 + packages/networks/ton/src/browser/Wallet.ts | 142 ++++++ .../ton/src/browser/adapters/Example.ts | 30 ++ .../ton/src/browser/adapters/index.ts | 1 + packages/networks/ton/src/browser/index.ts | 28 ++ packages/networks/ton/src/index.ts | 8 + .../ton/src/models/CoinTransaction.ts | 45 ++ .../ton/src/models/ContractTransaction.ts | 11 + .../networks/ton/src/models/NftTransaction.ts | 45 ++ .../ton/src/models/TokenTransaction.ts | 45 ++ .../networks/ton/src/models/Transaction.ts | 119 +++++ packages/networks/ton/src/models/index.ts | 5 + .../networks/ton/src/services/Provider.ts | 81 ++++ .../ton/src/services/TransactionListener.ts | 164 +++++++ .../ton/src/services/TransactionSigner.ts | 59 +++ packages/networks/ton/src/services/index.ts | 2 + packages/networks/ton/tests/assets.spec.ts | 256 +++++++++++ packages/networks/ton/tests/models.spec.ts | 155 +++++++ packages/networks/ton/tests/services.spec.ts | 216 +++++++++ packages/networks/ton/tests/setup.ts | 13 + packages/networks/ton/tsconfig.json | 21 + packages/networks/ton/vite.config.ts | 10 + packages/networks/ton/vite.svg | 1 + packages/networks/ton/vitest.config.ts | 12 + 34 files changed, 2651 insertions(+) create mode 100644 packages/networks/ton/.eslintrc.json create mode 100644 packages/networks/ton/README.md create mode 100644 packages/networks/ton/esbuild.ts create mode 100644 packages/networks/ton/index.example.html create mode 100644 packages/networks/ton/package.json create mode 100644 packages/networks/ton/pnpm-lock.yaml create mode 100644 packages/networks/ton/src/assets/Coin.ts create mode 100644 packages/networks/ton/src/assets/Contract.ts create mode 100644 packages/networks/ton/src/assets/NFT.ts create mode 100644 packages/networks/ton/src/assets/Token.ts create mode 100644 packages/networks/ton/src/assets/index.ts create mode 100644 packages/networks/ton/src/browser/Wallet.ts create mode 100644 packages/networks/ton/src/browser/adapters/Example.ts create mode 100644 packages/networks/ton/src/browser/adapters/index.ts create mode 100644 packages/networks/ton/src/browser/index.ts create mode 100644 packages/networks/ton/src/index.ts create mode 100644 packages/networks/ton/src/models/CoinTransaction.ts create mode 100644 packages/networks/ton/src/models/ContractTransaction.ts create mode 100644 packages/networks/ton/src/models/NftTransaction.ts create mode 100644 packages/networks/ton/src/models/TokenTransaction.ts create mode 100644 packages/networks/ton/src/models/Transaction.ts create mode 100644 packages/networks/ton/src/models/index.ts create mode 100644 packages/networks/ton/src/services/Provider.ts create mode 100644 packages/networks/ton/src/services/TransactionListener.ts create mode 100644 packages/networks/ton/src/services/TransactionSigner.ts create mode 100644 packages/networks/ton/src/services/index.ts create mode 100644 packages/networks/ton/tests/assets.spec.ts create mode 100644 packages/networks/ton/tests/models.spec.ts create mode 100644 packages/networks/ton/tests/services.spec.ts create mode 100644 packages/networks/ton/tests/setup.ts create mode 100644 packages/networks/ton/tsconfig.json create mode 100644 packages/networks/ton/vite.config.ts create mode 100644 packages/networks/ton/vite.svg create mode 100644 packages/networks/ton/vitest.config.ts diff --git a/packages/networks/ton/.eslintrc.json b/packages/networks/ton/.eslintrc.json new file mode 100644 index 0000000..9e99876 --- /dev/null +++ b/packages/networks/ton/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../../.eslintrc.json"] +} diff --git a/packages/networks/ton/README.md b/packages/networks/ton/README.md new file mode 100644 index 0000000..1f39f6f --- /dev/null +++ b/packages/networks/ton/README.md @@ -0,0 +1,5 @@ +# MultipleChain TON + +MultipleChain aims for easy access by simplifying the complex structure of many blockchains. For example, each blockchain network has a different structure for transfer initiation or transaction data. You may need to learn new things from scratch for each blockchain network. This is necessary if you want to go into detail. But if you just want to get to the basics. MultipleChain will make your work much easier. In many different programming languages. + +#### 📚 [Documentation](https://multiplechain.gitbook.io/multiplechain-docs) diff --git a/packages/networks/ton/esbuild.ts b/packages/networks/ton/esbuild.ts new file mode 100644 index 0000000..f25aad1 --- /dev/null +++ b/packages/networks/ton/esbuild.ts @@ -0,0 +1,3 @@ +void import('../../../esbuild').then((module) => { + module.default() +}) diff --git a/packages/networks/ton/index.example.html b/packages/networks/ton/index.example.html new file mode 100644 index 0000000..0a992b8 --- /dev/null +++ b/packages/networks/ton/index.example.html @@ -0,0 +1,322 @@ + + + + + + + Browser Tests + + + + +
+
    +
    + +
    +
    Adapter id:
    +
    Adapter name:
    +
    + Adapter icon: + icon +
    +
    Platforms:
    +
    Download link:
    +
    Deep link:
    +
    + Connected address: +
    + +
    Result:
    + +
    Result:
    + +
    Result:
    +
    + + + + diff --git a/packages/networks/ton/package.json b/packages/networks/ton/package.json new file mode 100644 index 0000000..1d66687 --- /dev/null +++ b/packages/networks/ton/package.json @@ -0,0 +1,78 @@ +{ + "name": "@multiplechain/ton", + "version": "0.1.0", + "type": "module", + "main": "dist/index.cjs", + "module": "dist/index.es.js", + "unpkg": "dist/index.umd.js", + "browser": "dist/index.umd.js", + "jsdelivr": "dist/index.umd.js", + "exports": { + ".": { + "import": { + "default": "./dist/index.es.js", + "types": "./dist/browser/index.d.ts" + }, + "require": { + "default": "./dist/index.cjs", + "types": "./dist/index.d.ts" + } + }, + "./node": { + "default": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./browser": { + "default": "./dist/index.es.js", + "types": "./dist/browser/index.d.ts" + } + }, + "typesVersions": { + "*": { + "node": [ + "./dist/index.d.ts" + ], + "browser": [ + "./dist/browser/index.d.ts" + ] + } + }, + "files": [ + "dist", + "README.md", + "!tsconfig.tsbuildinfo" + ], + "scripts": { + "dev": "vite", + "clean": "rm -rf dist", + "watch": "tsc --watch", + "build:vite": "vite build", + "build:node": "tsx esbuild.ts", + "typecheck": "tsc --noEmit", + "lint": "eslint . --ext .ts", + "test": "vitest run --dir tests", + "test-ui": "vitest watch --ui", + "prepublishOnly": "pnpm run build", + "build": "pnpm run build:vite && pnpm run build:node" + }, + "keywords": [ + "web3", + "crypto", + "blockchain", + "multiple-chain" + ], + "author": "MultipleChain", + "license": "MIT", + "homepage": "https://github.com/MultipleChain/js/tree/master/packages/networks/network-name", + "repository": { + "type": "git", + "url": "git+https://github.com/MultipleChain/js.git" + }, + "bugs": { + "url": "https://github.com/MultipleChain/js/issues" + }, + "dependencies": { + "@multiplechain/types": "^0.1.67", + "@multiplechain/utils": "^0.1.21" + } +} diff --git a/packages/networks/ton/pnpm-lock.yaml b/packages/networks/ton/pnpm-lock.yaml new file mode 100644 index 0000000..7b40332 --- /dev/null +++ b/packages/networks/ton/pnpm-lock.yaml @@ -0,0 +1,435 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@multiplechain/types': + specifier: ^0.1.67 + version: 0.1.67 + '@multiplechain/utils': + specifier: ^0.1.21 + version: 0.1.21 + +packages: + /@multiplechain/types@0.1.67: + resolution: + { + integrity: sha512-8TN5HhDC7lILh7wDKneJFS1Nyvxa+YGi0L56m6jnj0mBmTmwxNN42W5tP/3KYUlsfTHqb64iijjXMTLYZ0x+Dg== + } + dev: false + + /@multiplechain/utils@0.1.21: + resolution: + { + integrity: sha512-4mRlnhvXcS+7Hb1By5s2eoCH02kqOSQzV8qj0DHqZK20FtxtduaoGCtcClrFgEjN/HAXnHgdDc1pxTpveIkvRQ== + } + dependencies: + '@types/ws': 8.5.10 + bignumber.js: 9.1.2 + web3-utils: 4.2.1 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@noble/curves@1.3.0: + resolution: + { + integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + } + dependencies: + '@noble/hashes': 1.3.3 + dev: false + + /@noble/hashes@1.3.3: + resolution: + { + integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + } + engines: { node: '>= 16' } + dev: false + + /@scure/base@1.1.6: + resolution: + { + integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + } + dev: false + + /@scure/bip32@1.3.3: + resolution: + { + integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + } + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + dev: false + + /@scure/bip39@1.2.2: + resolution: + { + integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + } + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + dev: false + + /@types/node@20.12.7: + resolution: + { + integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + } + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/ws@8.5.10: + resolution: + { + integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + } + dependencies: + '@types/node': 20.12.7 + dev: false + + /available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + } + engines: { node: '>= 0.4' } + dependencies: + possible-typed-array-names: 1.0.0 + dev: false + + /bignumber.js@9.1.2: + resolution: + { + integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + } + dev: false + + /call-bind@1.0.7: + resolution: + { + integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + } + engines: { node: '>= 0.4' } + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: false + + /define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + } + engines: { node: '>= 0.4' } + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: false + + /es-define-property@1.0.0: + resolution: + { + integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + } + engines: { node: '>= 0.4' } + dependencies: + get-intrinsic: 1.2.4 + dev: false + + /es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + } + engines: { node: '>= 0.4' } + dev: false + + /ethereum-cryptography@2.1.3: + resolution: + { + integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + } + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + dev: false + + /eventemitter3@5.0.1: + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + } + dev: false + + /for-each@0.3.3: + resolution: + { + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + } + dependencies: + is-callable: 1.2.7 + dev: false + + /function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + } + dev: false + + /get-intrinsic@1.2.4: + resolution: + { + integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + } + engines: { node: '>= 0.4' } + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: false + + /gopd@1.0.1: + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + } + dependencies: + get-intrinsic: 1.2.4 + dev: false + + /has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + } + dependencies: + es-define-property: 1.0.0 + dev: false + + /has-proto@1.0.3: + resolution: + { + integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + } + engines: { node: '>= 0.4' } + dev: false + + /has-symbols@1.0.3: + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + } + engines: { node: '>= 0.4' } + dev: false + + /has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + } + engines: { node: '>= 0.4' } + dependencies: + has-symbols: 1.0.3 + dev: false + + /hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + } + engines: { node: '>= 0.4' } + dependencies: + function-bind: 1.1.2 + dev: false + + /inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + } + dev: false + + /is-arguments@1.1.1: + resolution: + { + integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + + /is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + } + engines: { node: '>= 0.4' } + dev: false + + /is-generator-function@1.0.10: + resolution: + { + integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + } + engines: { node: '>= 0.4' } + dependencies: + has-tostringtag: 1.0.2 + dev: false + + /is-typed-array@1.1.13: + resolution: + { + integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + } + engines: { node: '>= 0.4' } + dependencies: + which-typed-array: 1.1.15 + dev: false + + /possible-typed-array-names@1.0.0: + resolution: + { + integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + } + engines: { node: '>= 0.4' } + dev: false + + /set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + } + engines: { node: '>= 0.4' } + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: false + + /undici-types@5.26.5: + resolution: + { + integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + } + dev: false + + /util@0.12.5: + resolution: + { + integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + } + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: false + + /web3-errors@1.1.4: + resolution: + { + integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== + } + engines: { node: '>=14', npm: '>=6.12.0' } + dependencies: + web3-types: 1.5.0 + dev: false + + /web3-types@1.5.0: + resolution: + { + integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw== + } + engines: { node: '>=14', npm: '>=6.12.0' } + dev: false + + /web3-utils@4.2.1: + resolution: + { + integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A== + } + engines: { node: '>=14', npm: '>=6.12.0' } + dependencies: + ethereum-cryptography: 2.1.3 + eventemitter3: 5.0.1 + web3-errors: 1.1.4 + web3-types: 1.5.0 + web3-validator: 2.0.4 + dev: false + + /web3-validator@2.0.4: + resolution: + { + integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== + } + engines: { node: '>=14', npm: '>=6.12.0' } + dependencies: + ethereum-cryptography: 2.1.3 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.5.0 + zod: 3.22.4 + dev: false + + /which-typed-array@1.1.15: + resolution: + { + integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + } + engines: { node: '>= 0.4' } + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: false + + /ws@8.16.0: + resolution: + { + integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + } + engines: { node: '>=10.0.0' } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /zod@3.22.4: + resolution: + { + integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== + } + dev: false diff --git a/packages/networks/ton/src/assets/Coin.ts b/packages/networks/ton/src/assets/Coin.ts new file mode 100644 index 0000000..cb67d3c --- /dev/null +++ b/packages/networks/ton/src/assets/Coin.ts @@ -0,0 +1,60 @@ +import { Provider } from '../services/Provider' +import { TransactionSigner } from '../services/TransactionSigner' +import type { CoinInterface, TransferAmount, WalletAddress } from '@multiplechain/types' + +export class Coin implements CoinInterface { + /** + * Blockchain network provider + */ + provider: Provider + + /** + * @param provider network provider + */ + constructor(provider?: Provider) { + this.provider = provider ?? Provider.instance + } + + /** + * @returns Coin name + */ + getName(): string { + return 'example' + } + + /** + * @returns Coin symbol + */ + getSymbol(): string { + return 'example' + } + + /** + * @returns Decimal value of the coin + */ + getDecimals(): number { + return 18 + } + + /** + * @param owner Wallet address + * @returns Wallet balance as currency of COIN + */ + async getBalance(owner: WalletAddress): Promise { + return 0 + } + + /** + * @param sender Sender wallet address + * @param receiver Receiver wallet address + * @param amount Amount of assets that will be transferred + * @returns Transaction signer + */ + async transfer( + sender: WalletAddress, + receiver: WalletAddress, + amount: TransferAmount + ): Promise { + return new TransactionSigner('example') + } +} diff --git a/packages/networks/ton/src/assets/Contract.ts b/packages/networks/ton/src/assets/Contract.ts new file mode 100644 index 0000000..5b21304 --- /dev/null +++ b/packages/networks/ton/src/assets/Contract.ts @@ -0,0 +1,80 @@ +import { Provider } from '../services/Provider' +import type { ContractAddress, ContractInterface, WalletAddress } from '@multiplechain/types' + +export class Contract implements ContractInterface { + /** + * Contract address + */ + address: ContractAddress + + /** + * Cached static methods + */ + cachedMethods: Record = {} + + /** + * Blockchain network provider + */ + provider: Provider + + /** + * @param address Contract address + * @param provider Blockchain network provider + */ + constructor(address: ContractAddress, provider?: Provider) { + this.address = address + this.provider = provider ?? Provider.instance + } + + /** + * @returns Contract address + */ + getAddress(): ContractAddress { + return this.address + } + + /** + * @param method Method name + * @param args Method parameters + * @returns Method result + */ + async callMethod(method: string, ...args: unknown[]): Promise { + return {} + } + + /** + * @param method Method name + * @param args Method parameters + * @returns Method result + */ + async callMethodWithCache(method: string, ...args: unknown[]): Promise { + if (this.cachedMethods[method] !== undefined) { + return this.cachedMethods[method] + } + + return (this.cachedMethods[method] = await this.callMethod(method, ...args)) + } + + /** + * @param method Method name + * @param args Sender wallet address + * @returns Encoded method data + */ + async getMethodData(method: string, ...args: unknown[]): Promise { + return {} + } + + /** + * @param method Method name + * @param from Sender wallet address + * @param args Method parameters + * @returns Encoded method data + */ + async createTransactionData( + method: string, + from: WalletAddress, + ...args: any[] + ): Promise { + return '' + } +} diff --git a/packages/networks/ton/src/assets/NFT.ts b/packages/networks/ton/src/assets/NFT.ts new file mode 100644 index 0000000..5d51432 --- /dev/null +++ b/packages/networks/ton/src/assets/NFT.ts @@ -0,0 +1,96 @@ +import { Contract } from './Contract' +import { TransactionSigner } from '../services/TransactionSigner' +import type { NftId, NftInterface, WalletAddress } from '@multiplechain/types' + +export class NFT extends Contract implements NftInterface { + /** + * @returns NFT name + */ + async getName(): Promise { + return 'example' + } + + /** + * @returns NFT symbol + */ + async getSymbol(): Promise { + return 'example' + } + + /** + * @param owner Wallet address + * @returns Wallet balance as currency of NFT + */ + async getBalance(owner: WalletAddress): Promise { + return 0 + } + + /** + * @param nftId NFT ID + * @returns Wallet address of the owner of the NFT + */ + async getOwner(nftId: NftId): Promise { + return 'example' + } + + /** + * @param nftId NFT ID + * @returns URI of the NFT + */ + async getTokenURI(nftId: NftId): Promise { + return 'example' + } + + /** + * @param nftId ID of the NFT that will be transferred + * @returns Wallet address of the approved spender + */ + async getApproved(nftId: NftId): Promise { + return 'example' + } + + /** + * @param sender Sender address + * @param receiver Receiver address + * @param nftId NFT ID + * @returns Transaction signer + */ + async transfer( + sender: WalletAddress, + receiver: WalletAddress, + nftId: NftId + ): Promise { + return new TransactionSigner('example') + } + + /** + * @param spender Spender address + * @param owner Owner address + * @param receiver Receiver address + * @param nftId NFT ID + * @returns Transaction signer + */ + async transferFrom( + spender: WalletAddress, + owner: WalletAddress, + receiver: WalletAddress, + nftId: NftId + ): Promise { + return new TransactionSigner('example') + } + + /** + * Gives permission to the spender to spend owner's tokens + * @param owner Address of owner of the tokens that will be used + * @param spender Address of the spender that will use the tokens of owner + * @param nftId ID of the NFT that will be transferred + * @returns Transaction signer + */ + async approve( + owner: WalletAddress, + spender: WalletAddress, + nftId: NftId + ): Promise { + return new TransactionSigner('example') + } +} diff --git a/packages/networks/ton/src/assets/Token.ts b/packages/networks/ton/src/assets/Token.ts new file mode 100644 index 0000000..f539cc1 --- /dev/null +++ b/packages/networks/ton/src/assets/Token.ts @@ -0,0 +1,96 @@ +import { Contract } from './Contract' +import { TransactionSigner } from '../services/TransactionSigner' +import type { TokenInterface, TransferAmount, WalletAddress } from '@multiplechain/types' + +export class Token extends Contract implements TokenInterface { + /** + * @returns Token name + */ + async getName(): Promise { + return 'example' + } + + /** + * @returns Token symbol + */ + async getSymbol(): Promise { + return 'example' + } + + /** + * @returns Decimal value of the token + */ + async getDecimals(): Promise { + return 18 + } + + /** + * @param owner Wallet address + * @returns Wallet balance as currency of TOKEN + */ + async getBalance(owner: WalletAddress): Promise { + return 0 + } + + /** + * @returns Total supply of the token + */ + async getTotalSupply(): Promise { + return 0 + } + + /** + * @param owner Address of owner of the tokens that is being used + * @param spender Address of the spender that is using the tokens of owner + * @returns Amount of tokens that the spender is allowed to spend + */ + async getAllowance(owner: WalletAddress, spender: WalletAddress): Promise { + return 0 + } + + /** + * transfer() method is the main method for processing transfers for fungible assets (TOKEN, COIN) + * @param sender Sender wallet address + * @param receiver Receiver wallet address + * @param amount Amount of assets that will be transferred + * @returns Transaction signer + */ + async transfer( + sender: WalletAddress, + receiver: WalletAddress, + amount: TransferAmount + ): Promise { + return new TransactionSigner('example') + } + + /** + * @param spender Address of the spender of transaction + * @param owner Sender wallet address + * @param receiver Receiver wallet address + * @param amount Amount of tokens that will be transferred + * @returns Transaction signer + */ + async transferFrom( + spender: WalletAddress, + owner: WalletAddress, + receiver: WalletAddress, + amount: TransferAmount + ): Promise { + return new TransactionSigner('example') + } + + /** + * Gives permission to the spender to spend owner's tokens + * @param owner Address of owner of the tokens that will be used + * @param spender Address of the spender that will use the tokens of owner + * @param amount Amount of the tokens that will be used + * @returns Transaction signer + */ + async approve( + owner: WalletAddress, + spender: WalletAddress, + amount: TransferAmount + ): Promise { + return new TransactionSigner('example') + } +} diff --git a/packages/networks/ton/src/assets/index.ts b/packages/networks/ton/src/assets/index.ts new file mode 100644 index 0000000..737051b --- /dev/null +++ b/packages/networks/ton/src/assets/index.ts @@ -0,0 +1,4 @@ +export * from './NFT' +export * from './Coin' +export * from './Token' +export * from './Contract' diff --git a/packages/networks/ton/src/browser/Wallet.ts b/packages/networks/ton/src/browser/Wallet.ts new file mode 100644 index 0000000..880ff0f --- /dev/null +++ b/packages/networks/ton/src/browser/Wallet.ts @@ -0,0 +1,142 @@ +import { Provider } from '../services/Provider' +import type { TransactionSigner } from '../services/TransactionSigner' +import type { + WalletInterface, + WalletAdapterInterface, + WalletPlatformEnum, + TransactionId, + SignedMessage, + WalletAddress, + ConnectConfig, + UnknownConfig +} from '@multiplechain/types' + +type WalletAdapter = WalletAdapterInterface + +export class Wallet implements WalletInterface { + /** + * WalletAdapter instance + */ + adapter: WalletAdapter + + /** + * Wallet provider is the instance of the wallet connection + */ + walletProvider: unknown + + /** + * Network provider is the instance of the blockchain network connection + */ + networkProvider: Provider + + /** + * @param adapter - WalletAdapter instance + * @param provider - Network provider + */ + constructor(adapter: WalletAdapter, provider?: Provider) { + this.adapter = adapter + this.networkProvider = provider ?? Provider.instance + } + + /** + * @returns wallet id + */ + getId(): string { + return this.adapter.id + } + + /** + * @returns wallet name + */ + getName(): string { + return this.adapter.name + } + + /** + * @returns wallet icon + */ + getIcon(): string { + return this.adapter.icon + } + + /** + * @returns wallet platforms + */ + getPlatforms(): WalletPlatformEnum[] { + return this.adapter.platforms + } + + /** + * @returns wallet download link + */ + getDownloadLink(): string | undefined { + return this.adapter.downloadLink + } + + /** + * @param url - URL to create a deep link + * @param config - Configuration for the deep link + * @returns deep link + */ + createDeepLink(url: string, config?: UnknownConfig): string | null { + if (this.adapter.createDeepLink === undefined) { + return null + } + + return this.adapter.createDeepLink(url, config) + } + + /** + * @param config - Configuration for the connection + * @returns wallet address + */ + async connect(config?: ConnectConfig): Promise { + await this.adapter.connect() + return 'wallet address' + } + + /** + * @returns wallet detected status + */ + async isDetected(): Promise { + return await this.adapter.isDetected() + } + + /** + * @returns wallet connected status + */ + async isConnected(): Promise { + return await this.adapter.isConnected() + } + + /** + * @returns wallet address + */ + async getAddress(): Promise { + return 'wallet address' + } + + /** + * @param message - Message to sign + * @returns signed message + */ + async signMessage(message: string): Promise { + return 'signed message' + } + + /** + * @param transactionSigner - Transaction signer + * @returns transaction id + */ + async sendTransaction(transactionSigner: TransactionSigner): Promise { + return 'transaction hash' + } + + /** + * @param eventName - Event name + * @param callback - Event callback + */ + on(eventName: string, callback: (...args: any[]) => void): void { + 'wallet events' + } +} diff --git a/packages/networks/ton/src/browser/adapters/Example.ts b/packages/networks/ton/src/browser/adapters/Example.ts new file mode 100644 index 0000000..f1bb4cf --- /dev/null +++ b/packages/networks/ton/src/browser/adapters/Example.ts @@ -0,0 +1,30 @@ +import type { Provider } from '../../services/Provider' +import { WalletPlatformEnum } from '@multiplechain/types' +import type { ConnectConfig, UnknownConfig, WalletAdapterInterface } from '@multiplechain/types' + +declare global { + interface Window { + example: any + } +} + +const Example: WalletAdapterInterface = { + id: 'example', + name: 'Example', + icon: 'icon base64 string here', + platforms: [WalletPlatformEnum.BROWSER, WalletPlatformEnum.MOBILE], + downloadLink: 'wallet download link here', + createDeepLink(url: string, config?: UnknownConfig): string { + return `https://example.com/dapp/${url}` + }, + isDetected: () => Boolean(window?.example), + isConnected: async () => { + return true // return true if connected + }, + connect: async (provider?: Provider, config?: ConnectConfig) => { + // connect wallet here + return window.example + } +} + +export default Example diff --git a/packages/networks/ton/src/browser/adapters/index.ts b/packages/networks/ton/src/browser/adapters/index.ts new file mode 100644 index 0000000..479da98 --- /dev/null +++ b/packages/networks/ton/src/browser/adapters/index.ts @@ -0,0 +1 @@ +export { default as Example } from './Example' diff --git a/packages/networks/ton/src/browser/index.ts b/packages/networks/ton/src/browser/index.ts new file mode 100644 index 0000000..28622c8 --- /dev/null +++ b/packages/networks/ton/src/browser/index.ts @@ -0,0 +1,28 @@ +import { Wallet } from './Wallet' +import * as adapterList from './adapters/index' +import type { Provider } from '../services/Provider' +import type { + WalletAdapterListType, + WalletAdapterInterface, + RegisterWalletAdapterType +} from '@multiplechain/types' + +const adapters: WalletAdapterListType = {} + +const registerAdapter: RegisterWalletAdapterType = ( + adapter: WalletAdapterInterface +): void => { + if (Object.values(adapters).find((a) => a.id === adapter.id) !== undefined) { + throw new Error(`Adapter with id ${adapter.id} already exists`) + } + + adapters[adapter.id] = adapter +} + +export * from '../index' + +export const browser = { + Wallet, + registerAdapter, + adapters: Object.assign(adapters, adapterList) +} diff --git a/packages/networks/ton/src/index.ts b/packages/networks/ton/src/index.ts new file mode 100644 index 0000000..612a2b2 --- /dev/null +++ b/packages/networks/ton/src/index.ts @@ -0,0 +1,8 @@ +export * from './services/Provider' + +export * as assets from './assets/index' +export * as models from './models/index' +export * as services from './services/index' + +export * as utils from '@multiplechain/utils' +export * as types from '@multiplechain/types' diff --git a/packages/networks/ton/src/models/CoinTransaction.ts b/packages/networks/ton/src/models/CoinTransaction.ts new file mode 100644 index 0000000..3cf0970 --- /dev/null +++ b/packages/networks/ton/src/models/CoinTransaction.ts @@ -0,0 +1,45 @@ +import { Transaction } from './Transaction' +import { TransactionStatusEnum } from '@multiplechain/types' +import type { + AssetDirectionEnum, + CoinTransactionInterface, + TransferAmount, + WalletAddress +} from '@multiplechain/types' + +export class CoinTransaction extends Transaction implements CoinTransactionInterface { + /** + * @returns Wallet address of the receiver of transaction + */ + async getReceiver(): Promise { + return 'example' + } + + /** + * @returns Wallet address of the sender of transaction + */ + async getSender(): Promise { + return 'example' + } + + /** + * @returns Amount of coin that will be transferred + */ + async getAmount(): Promise { + return 0 + } + + /** + * @param direction - Direction of the transaction (asset) + * @param address - Wallet address of the receiver or sender of the transaction, dependant on direction + * @param amount Amount of assets that will be transferred + * @returns Status of the transaction + */ + async verifyTransfer( + direction: AssetDirectionEnum, + address: WalletAddress, + amount: TransferAmount + ): Promise { + return TransactionStatusEnum.PENDING + } +} diff --git a/packages/networks/ton/src/models/ContractTransaction.ts b/packages/networks/ton/src/models/ContractTransaction.ts new file mode 100644 index 0000000..e52bbee --- /dev/null +++ b/packages/networks/ton/src/models/ContractTransaction.ts @@ -0,0 +1,11 @@ +import { Transaction } from './Transaction' +import type { ContractAddress, ContractTransactionInterface } from '@multiplechain/types' + +export class ContractTransaction extends Transaction implements ContractTransactionInterface { + /** + * @returns Contract address of the transaction + */ + async getAddress(): Promise { + return 'example' + } +} diff --git a/packages/networks/ton/src/models/NftTransaction.ts b/packages/networks/ton/src/models/NftTransaction.ts new file mode 100644 index 0000000..da99b8c --- /dev/null +++ b/packages/networks/ton/src/models/NftTransaction.ts @@ -0,0 +1,45 @@ +import { ContractTransaction } from './ContractTransaction' +import { TransactionStatusEnum } from '@multiplechain/types' +import type { + NftTransactionInterface, + AssetDirectionEnum, + WalletAddress, + NftId +} from '@multiplechain/types' + +export class NftTransaction extends ContractTransaction implements NftTransactionInterface { + /** + * @returns Receiver wallet address + */ + async getReceiver(): Promise { + return 'example' + } + + /** + * @returns Wallet address of the sender of transaction + */ + async getSender(): Promise { + return 'example' + } + + /** + * @returns NFT ID + */ + async getNftId(): Promise { + return 0 + } + + /** + * @param direction - Direction of the transaction (nft) + * @param address - Wallet address of the receiver or sender of the transaction, dependant on direction + * @param nftId ID of the NFT that will be transferred + * @returns Status of the transaction + */ + async verifyTransfer( + direction: AssetDirectionEnum, + address: WalletAddress, + nftId: NftId + ): Promise { + return TransactionStatusEnum.PENDING + } +} diff --git a/packages/networks/ton/src/models/TokenTransaction.ts b/packages/networks/ton/src/models/TokenTransaction.ts new file mode 100644 index 0000000..08c07d1 --- /dev/null +++ b/packages/networks/ton/src/models/TokenTransaction.ts @@ -0,0 +1,45 @@ +import { ContractTransaction } from './ContractTransaction' +import { TransactionStatusEnum } from '@multiplechain/types' +import type { + AssetDirectionEnum, + TokenTransactionInterface, + TransferAmount, + WalletAddress +} from '@multiplechain/types' + +export class TokenTransaction extends ContractTransaction implements TokenTransactionInterface { + /** + * @returns Wallet address of the receiver of transaction + */ + async getReceiver(): Promise { + return 'example' + } + + /** + * @returns Wallet address of the sender of transaction + */ + async getSender(): Promise { + return 'example' + } + + /** + * @returns Amount of tokens that will be transferred + */ + async getAmount(): Promise { + return 0 + } + + /** + * @param direction - Direction of the transaction (token) + * @param address - Wallet address of the owner or spender of the transaction, dependant on direction + * @param amount Amount of tokens that will be approved + * @returns Status of the transaction + */ + async verifyTransfer( + direction: AssetDirectionEnum, + address: WalletAddress, + amount: TransferAmount + ): Promise { + return TransactionStatusEnum.PENDING + } +} diff --git a/packages/networks/ton/src/models/Transaction.ts b/packages/networks/ton/src/models/Transaction.ts new file mode 100644 index 0000000..74df4b8 --- /dev/null +++ b/packages/networks/ton/src/models/Transaction.ts @@ -0,0 +1,119 @@ +import { Provider } from '../services/Provider' +import { TransactionStatusEnum } from '@multiplechain/types' +import { + TransactionTypeEnum, + type BlockConfirmationCount, + type BlockNumber, + type BlockTimestamp, + type TransactionFee, + type TransactionId, + type TransactionInterface, + type WalletAddress +} from '@multiplechain/types' + +// custom tx data for each blockchain +type TxData = {} + +export class Transaction implements TransactionInterface { + /** + * Each transaction has its own unique ID defined by the user + */ + id: TransactionId + + /** + * Transaction data + */ + data: TxData | null = null + + /** + * Blockchain network provider + */ + provider: Provider + + /** + * @param id Transaction id + * @param provider Blockchain network provider + */ + constructor(id: TransactionId, provider?: Provider) { + this.id = id + this.provider = provider ?? Provider.instance + } + + /** + * @returns Transaction data + */ + async getData(): Promise { + return {} + } + + /** + * @param ms - Milliseconds to wait for the transaction to be confirmed. Default is 4000ms + * @returns Status of the transaction + */ + async wait(ms: number = 4000): Promise { + return await Promise.resolve(TransactionStatusEnum.CONFIRMED) + } + + /** + * @returns Transaction ID + */ + getId(): TransactionId { + return this.id + } + + /** + * @returns Type of the transaction + */ + async getType(): Promise { + return await Promise.resolve(TransactionTypeEnum.GENERAL) + } + + /** + * @returns Transaction URL + */ + getUrl(): string { + return 'example' + } + + /** + * @returns Wallet address of the sender of transaction + */ + async getSigner(): Promise { + return 'example' + } + + /** + * @returns Transaction fee + */ + async getFee(): Promise { + return 0 + } + + /** + * @returns Block number that transaction + */ + async getBlockNumber(): Promise { + return 0 + } + + /** + * @returns Block timestamp that transaction + */ + async getBlockTimestamp(): Promise { + return 0 + } + + /** + * @returns Confirmation count of the block + */ + async getBlockConfirmationCount(): Promise { + return 0 + } + + /** + * @returns Status of the transaction + */ + async getStatus(): Promise { + return TransactionStatusEnum.CONFIRMED + } +} diff --git a/packages/networks/ton/src/models/index.ts b/packages/networks/ton/src/models/index.ts new file mode 100644 index 0000000..354aa74 --- /dev/null +++ b/packages/networks/ton/src/models/index.ts @@ -0,0 +1,5 @@ +export * from './Transaction' +export * from './NftTransaction' +export * from './CoinTransaction' +export * from './TokenTransaction' +export * from './ContractTransaction' diff --git a/packages/networks/ton/src/services/Provider.ts b/packages/networks/ton/src/services/Provider.ts new file mode 100644 index 0000000..9f6886d --- /dev/null +++ b/packages/networks/ton/src/services/Provider.ts @@ -0,0 +1,81 @@ +import { + ErrorTypeEnum, + type NetworkConfigInterface, + type ProviderInterface +} from '@multiplechain/types' + +export class Provider implements ProviderInterface { + /** + * Network configuration of the provider + */ + network: NetworkConfigInterface + + /** + * Static instance of the provider + */ + private static _instance: Provider + + /** + * @param network - Network configuration of the provider + */ + constructor(network: NetworkConfigInterface) { + this.update(network) + } + + /** + * Get the static instance of the provider + * @returns Provider instance + */ + static get instance(): Provider { + if (Provider._instance === undefined) { + throw new Error(ErrorTypeEnum.PROVIDER_IS_NOT_INITIALIZED) + } + return Provider._instance + } + + /** + * Initialize the static instance of the provider + * @param network - Network configuration of the provider + */ + static initialize(network: NetworkConfigInterface): void { + if (Provider._instance !== undefined) { + throw new Error(ErrorTypeEnum.PROVIDER_IS_ALREADY_INITIALIZED) + } + Provider._instance = new Provider(network) + } + + /** + * Check RPC connection + * @param url - RPC URL + * @returns RPC connection status + */ + async checkRpcConnection(url?: string): Promise { + return true + } + + /** + * Check WS connection + * @param url - Websocket URL + * @returns ws connection status + */ + async checkWsConnection(url?: string): Promise { + return true + } + + /** + * Update network configuration of the provider + * @param network - Network configuration + */ + update(network: NetworkConfigInterface): void { + this.network = network + Provider._instance = this + } + + /** + * Get the current network configuration is testnet or not + * @returns testnet status + */ + isTestnet(): boolean { + return this.network?.testnet ?? false + } +} diff --git a/packages/networks/ton/src/services/TransactionListener.ts b/packages/networks/ton/src/services/TransactionListener.ts new file mode 100644 index 0000000..c283804 --- /dev/null +++ b/packages/networks/ton/src/services/TransactionListener.ts @@ -0,0 +1,164 @@ +import { Provider } from './Provider' +import { Transaction } from '../models/Transaction' +import { NftTransaction } from '../models/NftTransaction' +import { CoinTransaction } from '../models/CoinTransaction' +import { TokenTransaction } from '../models/TokenTransaction' +import { ContractTransaction } from '../models/ContractTransaction' +import { TransactionListenerProcessIndex, TransactionTypeEnum } from '@multiplechain/types' +import type { + DynamicTransactionType, + TransactionListenerInterface, + DynamicTransactionListenerFilterType, + NftTransactionListenerFilterInterface, + TokenTransactionListenerFilterInterface, + CoinTransactionListenerFilterInterface, + ContractTransactionListenerFilterInterface, + TransactionId +} from '@multiplechain/types' + +type TransactionListenerTriggerType = DynamicTransactionType< + T, + Transaction, + ContractTransaction, + CoinTransaction, + TokenTransaction, + NftTransaction +> + +type TransactionListenerCallbackType< + T extends TransactionTypeEnum, + Transaction = TransactionListenerTriggerType +> = (transaction: Transaction) => void + +export class TransactionListener< + T extends TransactionTypeEnum, + DTransaction extends TransactionListenerTriggerType, + CallBackType extends TransactionListenerCallbackType +> implements TransactionListenerInterface +{ + /** + * Transaction type + */ + type: T + + /** + * Provider + */ + provider: Provider + + /** + * Listener status + */ + status: boolean = false + + /** + * Transaction listener callback + */ + callbacks: CallBackType[] = [] + + /** + * Triggered transactions + */ + triggeredTransactions: TransactionId[] = [] + + /** + * Transaction listener filter + */ + filter?: DynamicTransactionListenerFilterType | Record + + /** + * @param type - Transaction type + * @param filter - Transaction listener filter + * @param provider - Provider + */ + constructor(type: T, filter?: DynamicTransactionListenerFilterType, provider?: Provider) { + this.type = type + this.filter = filter ?? {} + this.provider = provider ?? Provider.instance + } + + /** + * Close the listener + */ + stop(): void { + if (this.status) { + this.status = false + // stop the listener + } + } + + /** + * Start the listener + */ + start(): void { + if (!this.status) { + this.status = true + // @ts-expect-error allow dynamic access + this[TransactionListenerProcessIndex[this.type]]() + } + } + + /** + * Get the listener status + * @returns Listener status + */ + getStatus(): boolean { + return this.status + } + + /** + * Listen to the transaction events + * @param callback - Transaction listener callback + * @returns listener status + */ + async on(callback: CallBackType): Promise { + this.callbacks.push(callback) + return true + } + + /** + * Trigger the event when a transaction is detected + * @param transaction - Transaction data + */ + trigger(transaction: TransactionListenerTriggerType): void { + if (!this.triggeredTransactions.includes(transaction.id)) { + this.triggeredTransactions.push(transaction.id) + this.callbacks.forEach((callback) => { + callback(transaction as unknown as DTransaction) + }) + } + } + + /** + * General transaction process + */ + generalProcess(): void {} + + /** + * Contract transaction process + */ + contractProcess(): void { + const filter = this.filter as ContractTransactionListenerFilterInterface + } + + /** + * Coin transaction process + */ + coinProcess(): void { + const filter = this.filter as CoinTransactionListenerFilterInterface + } + + /** + * Token transaction process + */ + tokenProcess(): void { + const filter = this.filter as TokenTransactionListenerFilterInterface + } + + /** + * NFT transaction process + */ + nftProcess(): void { + const filter = this.filter as NftTransactionListenerFilterInterface + } +} diff --git a/packages/networks/ton/src/services/TransactionSigner.ts b/packages/networks/ton/src/services/TransactionSigner.ts new file mode 100644 index 0000000..bc6c45c --- /dev/null +++ b/packages/networks/ton/src/services/TransactionSigner.ts @@ -0,0 +1,59 @@ +import { Provider } from '../services/Provider' +import type { PrivateKey, TransactionId, TransactionSignerInterface } from '@multiplechain/types' + +export class TransactionSigner implements TransactionSignerInterface { + /** + * Transaction data from the blockchain network + */ + rawData: unknown + + /** + * Signed transaction data + */ + signedData: unknown + + /** + * Blockchain network provider + */ + provider: Provider + + /** + * @param rawData - Transaction data + * @param provider - Blockchain network provider + */ + constructor(rawData: unknown, provider?: Provider) { + this.rawData = rawData + this.provider = provider ?? Provider.instance + } + + /** + * Sign the transaction + * @param privateKey - Transaction data + * @returns Signed transaction data + */ + async sign(privateKey: PrivateKey): Promise { + return await Promise.resolve(this) + } + + /** + * Send the transaction to the blockchain network + * @returns Transaction ID + */ + async send(): Promise { + return await Promise.resolve('id') + } + + /** + * @returns raw transaction data + */ + getRawData(): unknown { + return this.rawData + } + + /** + * @returns signed transaction data + */ + getSignedData(): unknown { + return this.signedData + } +} diff --git a/packages/networks/ton/src/services/index.ts b/packages/networks/ton/src/services/index.ts new file mode 100644 index 0000000..0b05d2e --- /dev/null +++ b/packages/networks/ton/src/services/index.ts @@ -0,0 +1,2 @@ +export * from './TransactionSigner' +export * from './TransactionListener' diff --git a/packages/networks/ton/tests/assets.spec.ts b/packages/networks/ton/tests/assets.spec.ts new file mode 100644 index 0000000..8f555d3 --- /dev/null +++ b/packages/networks/ton/tests/assets.spec.ts @@ -0,0 +1,256 @@ +import { describe, it, expect, assert } from 'vitest' + +import { NFT } from '../src/assets/NFT' +import { Coin } from '../src/assets/Coin' +import { Token } from '../src/assets/Token' +import { math } from '@multiplechain/utils' +import { Transaction } from '../src/models/Transaction' +import { TransactionStatusEnum, type TransactionId } from '@multiplechain/types' +import { TransactionSigner } from '../src/services/TransactionSigner' + +const coinBalanceTestAmount = Number(process.env.TON_COIN_BALANCE_TEST_AMOUNT) +const tokenBalanceTestAmount = Number(process.env.TON_TOKEN_BALANCE_TEST_AMOUNT) +const nftBalanceTestAmount = Number(process.env.TON_NFT_BALANCE_TEST_AMOUNT) +const transferTestAmount = Number(process.env.TON_TRANSFER_TEST_AMOUNT) +const tokenTransferTestAmount = Number(process.env.TON_TOKEN_TRANSFER_TEST_AMOUNT) +const tokenApproveTestAmount = Number(process.env.TON_TOKEN_APPROVE_TEST_AMOUNT) +const nftTransferId = Number(process.env.TON_NFT_TRANSFER_ID) + +const coinTransferTestIsActive = Boolean(process.env.TON_COIN_TRANSFER_TEST_IS_ACTIVE !== 'false') +const tokenTransferTestIsActive = Boolean(process.env.TON_TOKEN_TRANSFER_TEST_IS_ACTIVE !== 'false') +const tokenApproveTestIsActive = Boolean(process.env.TON_TOKEN_APPROVE_TEST_IS_ACTIVE !== 'false') +const nftTransactionTestIsActive = Boolean( + process.env.TON_NFT_TRANSACTION_TEST_IS_ACTIVE !== 'false' +) +const tokenTransferFromTestIsActive = Boolean( + process.env.TON_TOKEN_TRANSFER_FROM_TEST_IS_ACTIVE !== 'false' +) + +const balanceTestAddress = String(process.env.TON_BALANCE_TEST_ADDRESS) +const senderPrivateKey = String(process.env.TON_SENDER_PRIVATE_KEY) +const receiverPrivateKey = String(process.env.TON_RECEIVER_PRIVATE_KEY) +const senderTestAddress = String(process.env.TON_SENDER_TEST_ADDRESS) +const receiverTestAddress = String(process.env.TON_RECEIVER_TEST_ADDRESS) +const tokenTestAddress = String(process.env.TON_TOKEN_TEST_ADDRESS) +const nftTestAddress = String(process.env.TON_NFT_TEST_ADDRESS) + +const waitSecondsBeforeThanNewTx = async (seconds: number): Promise => { + return await new Promise((resolve) => setTimeout(resolve, seconds * 1000)) +} + +const checkSigner = async (signer: TransactionSigner, privateKey?: string): Promise => { + expect(signer).toBeInstanceOf(TransactionSigner) + + const rawData = signer.getRawData() + + assert.isObject(rawData) + + await signer.sign(privateKey ?? senderPrivateKey) + + assert.isString(signer.getSignedData()) +} + +const checkTx = async (transactionId: TransactionId): Promise => { + const transaction = new Transaction(transactionId) + const status = await transaction.wait(10000) + expect(status).toBe(TransactionStatusEnum.CONFIRMED) +} + +describe('Coin', () => { + const coin = new Coin() + it('Name and symbol', () => { + expect(coin.getName()).toBe('Toncoin') + expect(coin.getSymbol()).toBe('TON') + }) + + it('Decimals', () => { + expect(coin.getDecimals()).toBe(18) + }) + + it('Balance', async () => { + const balance = await coin.getBalance(balanceTestAddress) + expect(balance).toBe(coinBalanceTestAmount) + }) + + it('Transfer', async () => { + const signer = await coin.transfer( + senderTestAddress, + receiverTestAddress, + transferTestAmount + ) + + await checkSigner(signer) + + if (!coinTransferTestIsActive) return + + const beforeBalance = await coin.getBalance(receiverTestAddress) + + await checkTx(await signer.send()) + + const afterBalance = await coin.getBalance(receiverTestAddress) + expect(afterBalance).toBe(math.add(beforeBalance, transferTestAmount)) + }) +}) + +describe('Token', () => { + const token = new Token(tokenTestAddress) + + it('Name and symbol', async () => { + expect(await token.getName()).toBe('TestToken') + expect(await token.getSymbol()).toBe('TTN') + }) + + it('Decimals', async () => { + expect(await token.getDecimals()).toBe(18) + }) + + it('Balance', async () => { + const balance = await token.getBalance(balanceTestAddress) + expect(balance).toBe(tokenBalanceTestAmount) + }) + + it('Total supply', async () => { + const totalSupply = await token.getTotalSupply() + expect(totalSupply).toBe(1000000) + }) + + it('Transfer', async () => { + const signer = await token.transfer( + senderTestAddress, + receiverTestAddress, + tokenTransferTestAmount + ) + + await checkSigner(signer) + + if (!tokenTransferTestIsActive) return + + await waitSecondsBeforeThanNewTx(5) + + const beforeBalance = await token.getBalance(receiverTestAddress) + + await checkTx(await signer.send()) + + const afterBalance = await token.getBalance(receiverTestAddress) + expect(afterBalance).toBe(math.add(beforeBalance, tokenTransferTestAmount)) + }) + + it('Approve and Allowance', async () => { + const signer = await token.approve( + senderTestAddress, + receiverTestAddress, + tokenApproveTestAmount + ) + + await checkSigner(signer) + + if (!tokenApproveTestIsActive) return + + await waitSecondsBeforeThanNewTx(5) + + await checkTx(await signer.send()) + + expect(await token.getAllowance(senderTestAddress, receiverTestAddress)).toBe( + tokenApproveTestAmount + ) + }) + + it('Transfer from', async () => { + const signer = await token.transferFrom( + receiverTestAddress, + senderTestAddress, + receiverTestAddress, + 2 + ) + + await checkSigner(signer, receiverPrivateKey) + + if (!tokenTransferFromTestIsActive) return + + await waitSecondsBeforeThanNewTx(5) + + const beforeBalance = await token.getBalance(receiverTestAddress) + + await checkTx(await signer.send()) + + const afterBalance = await token.getBalance(receiverTestAddress) + expect(afterBalance).toBe(math.add(beforeBalance, 2)) + }) +}) + +describe('Nft', () => { + const nft = new NFT(nftTestAddress) + + it('Name and symbol', async () => { + expect(await nft.getName()).toBe('TestNFT') + expect(await nft.getSymbol()).toBe('TNFT') + }) + + it('Balance', async () => { + const balance = await nft.getBalance(balanceTestAddress) + expect(balance).toBe(nftBalanceTestAmount) + }) + + it('Owner', async () => { + expect(await nft.getOwner(5)).toBe(balanceTestAddress) + }) + + it('Token URI', async () => { + expect(await nft.getTokenURI(5)).toBe('') + }) + + it('Approved', async () => { + expect(await nft.getApproved(5)).toBe(null) + }) + + it('Transfer', async () => { + const signer = await nft.transfer(senderTestAddress, receiverTestAddress, nftTransferId) + + await checkSigner(signer) + + if (!nftTransactionTestIsActive) return + + await waitSecondsBeforeThanNewTx(5) + + await checkTx(await signer.send()) + + expect(await nft.getOwner(nftTransferId)).toBe(receiverTestAddress) + }) + + it('Approve', async () => { + const customOwner = nftTransactionTestIsActive ? receiverTestAddress : senderTestAddress + const customSpender = nftTransactionTestIsActive ? senderTestAddress : receiverTestAddress + const customPrivateKey = nftTransactionTestIsActive ? receiverPrivateKey : senderPrivateKey + + const signer = await nft.approve(customOwner, customSpender, nftTransferId) + + await checkSigner(signer, customPrivateKey) + + if (!nftTransactionTestIsActive) return + + await waitSecondsBeforeThanNewTx(5) + + await checkTx(await signer.send()) + + expect(await nft.getApproved(nftTransferId)).toBe(senderTestAddress) + }) + + it('Transfer from', async () => { + if (!nftTransactionTestIsActive) return + + await waitSecondsBeforeThanNewTx(5) + + const signer = await nft.transferFrom( + senderTestAddress, + receiverTestAddress, + senderTestAddress, + nftTransferId + ) + + await checkSigner(signer) + + await checkTx(await signer.send()) + + expect(await nft.getOwner(nftTransferId)).toBe(senderTestAddress) + }) +}) diff --git a/packages/networks/ton/tests/models.spec.ts b/packages/networks/ton/tests/models.spec.ts new file mode 100644 index 0000000..d5fe12f --- /dev/null +++ b/packages/networks/ton/tests/models.spec.ts @@ -0,0 +1,155 @@ +import { describe, it, expect } from 'vitest' + +import { Transaction } from '../src/models/Transaction' +import { NftTransaction } from '../src/models/NftTransaction' +import { CoinTransaction } from '../src/models/CoinTransaction' +import { TokenTransaction } from '../src/models/TokenTransaction' +import { AssetDirectionEnum, TransactionStatusEnum } from '@multiplechain/types' + +const nftId = Number(process.env.TON_NFT_ID) +const tokenAmount = Number(process.env.TON_TOKEN_AMOUNT) +const coinAmount = Number(process.env.TON_COIN_AMOUNT) + +const etherTransferTx = String(process.env.TON_ETHER_TRANSFER_TX) +const tokenTransferTx = String(process.env.TON_TOKEN_TRANSFER_TX) +const nftTransferTx = String(process.env.TON_NFT_TRANSFER_TX) + +const coinSender = String(process.env.TON_COIN_SENDER) +const coinReceiver = String(process.env.TON_COIN_RECEIVER) + +const tokenSender = String(process.env.TON_TOKEN_SENDER) +const tokenReceiver = String(process.env.TON_TOKEN_RECEIVER) + +const nftSender = String(process.env.TON_NFT_SENDER) +const nftReceiver = String(process.env.TON_NFT_RECEIVER) + +describe('Transaction', () => { + const tx = new Transaction(etherTransferTx) + it('Id', async () => { + expect(tx.getId()).toBe(etherTransferTx) + }) + + it('Data', async () => { + expect(await tx.getData()).toBeTypeOf('object') + }) + + it('Wait', async () => { + expect(await tx.wait()).toBe(TransactionStatusEnum.CONFIRMED) + }) + + it('URL', async () => { + expect(tx.getUrl()).toBe( + 'https://testnet.tonscan.org/tx/6f97ca02d8f20151210ca2bef32340804214e4f74eebf6a9edf13b727ac2527e' + ) + }) + + it('Sender', async () => { + expect(await tx.getSigner()).toBe(coinSender) + }) + + it('Fee', async () => { + expect(await tx.getFee()).toBe(0.000371822357865) + }) + + it('Block Number', async () => { + expect(await tx.getBlockNumber()).toBe(5461884) + }) + + it('Block Timestamp', async () => { + expect(await tx.getBlockTimestamp()).toBe(1710141144) + }) + + it('Block Confirmation Count', async () => { + expect(await tx.getBlockConfirmationCount()).toBeGreaterThan(129954) + }) + + it('Status', async () => { + expect(await tx.getStatus()).toBe(TransactionStatusEnum.CONFIRMED) + }) +}) + +describe('Coin Transaction', () => { + const tx = new CoinTransaction(etherTransferTx) + + it('Receiver', async () => { + expect((await tx.getReceiver()).toLowerCase()).toBe(coinReceiver.toLowerCase()) + }) + + it('Amount', async () => { + expect(await tx.getAmount()).toBe(coinAmount) + }) + + it('Verify Transfer', async () => { + expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, coinReceiver, coinAmount)).toBe( + TransactionStatusEnum.CONFIRMED + ) + + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, coinSender, coinAmount)).toBe( + TransactionStatusEnum.CONFIRMED + ) + + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, coinReceiver, coinAmount)).toBe( + TransactionStatusEnum.FAILED + ) + }) +}) + +describe('Token Transaction', () => { + const tx = new TokenTransaction(tokenTransferTx) + + it('Receiver', async () => { + expect((await tx.getReceiver()).toLowerCase()).toBe(tokenReceiver.toLowerCase()) + }) + + it('Amount', async () => { + expect(await tx.getAmount()).toBe(tokenAmount) + }) + + it('Verify Transfer', async () => { + expect( + await tx.verifyTransfer(AssetDirectionEnum.INCOMING, tokenReceiver, tokenAmount) + ).toBe(TransactionStatusEnum.CONFIRMED) + + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, tokenSender, tokenAmount)).toBe( + TransactionStatusEnum.CONFIRMED + ) + + expect( + await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, tokenReceiver, tokenAmount) + ).toBe(TransactionStatusEnum.FAILED) + }) +}) + +describe('NFT Transaction', () => { + const tx = new NftTransaction(nftTransferTx) + + it('Receiver', async () => { + expect((await tx.getReceiver()).toLowerCase()).toBe(nftReceiver.toLowerCase()) + }) + + it('Signer', async () => { + expect((await tx.getSigner()).toLowerCase()).toBe(nftReceiver.toLowerCase()) + }) + + it('Sender', async () => { + expect((await tx.getSender()).toLowerCase()).toBe(nftSender.toLowerCase()) + }) + + it('NFT ID', async () => { + expect(await tx.getNftId()).toBe(nftId) + }) + + it('Verify Transfer', async () => { + expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, nftReceiver, nftId)).toBe( + TransactionStatusEnum.CONFIRMED + ) + + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, nftSender, nftId)).toBe( + TransactionStatusEnum.CONFIRMED + ) + + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, nftReceiver, nftId)).toBe( + TransactionStatusEnum.FAILED + ) + }) +}) diff --git a/packages/networks/ton/tests/services.spec.ts b/packages/networks/ton/tests/services.spec.ts new file mode 100644 index 0000000..dd9e14e --- /dev/null +++ b/packages/networks/ton/tests/services.spec.ts @@ -0,0 +1,216 @@ +import { describe, it, expect } from 'vitest' + +import { provider } from './setup' +import { Provider } from '../src/services/Provider' + +import { NFT } from '../src/assets/NFT' +import { Coin } from '../src/assets/Coin' +import { Token } from '../src/assets/Token' +import { sleep } from '@multiplechain/utils' +import { TransactionTypeEnum } from '@multiplechain/types' +import { Transaction } from '../src/models/Transaction' +import { NftTransaction } from '../src/models/NftTransaction' +import { CoinTransaction } from '../src/models/CoinTransaction' +import { TokenTransaction } from '../src/models/TokenTransaction' +import { ContractTransaction } from '../src/models/ContractTransaction' +import { TransactionListener } from '../src/services/TransactionListener' + +const senderPrivateKey = String(process.env.TON_SENDER_PRIVATE_KEY) +const receiverPrivateKey = String(process.env.TON_RECEIVER_PRIVATE_KEY) +const senderTestAddress = String(process.env.TON_SENDER_TEST_ADDRESS) +const receiverTestAddress = String(process.env.TON_RECEIVER_TEST_ADDRESS) +const tokenTestAddress = String(process.env.TON_TOKEN_TEST_ADDRESS) +const tokenProgram = String(process.env.TON_TOKEN_PROGRAM) +const nftTestAddress = String(process.env.TON_NFT_TEST_ADDRESS) +const nftTransferId = String(process.env.TON_NFT_TRANSFER_ID) + +const transactionListenerTestIsActive = Boolean( + process.env.TON_TRANSACTION_LISTENER_TEST_IS_ACTIVE !== 'false' +) + +const waitSecondsBeforeThanNewTx = async (seconds: number): Promise => { + return await new Promise((resolve) => setTimeout(resolve, seconds * 1000)) +} + +describe('Provider', () => { + it('isTestnet', () => { + expect(provider.isTestnet()).toBe(true) + }) + + it('instance', () => { + expect(Provider.instance).toBe(provider) + }) + + it('checkRpcConnection', async () => { + expect(await provider.checkRpcConnection()).toBe(true) + }) + + it('checkWsConnection', async () => { + expect(await provider.checkWsConnection()).toBe(true) + }) +}) + +describe('Transaction Listener', () => { + if (!transactionListenerTestIsActive) { + it('No test is active', () => { + expect(true).toBe(true) + }) + return + } + + it('General', async () => { + const listener = new TransactionListener(TransactionTypeEnum.GENERAL, { + signer: senderTestAddress + }) + + const signer = await new Coin().transfer(senderTestAddress, receiverTestAddress, 0.0001) + + const waitListenerEvent = async (): Promise => { + return await new Promise((resolve, reject) => { + void listener + .on((transaction) => { + listener.stop() + resolve(transaction) + }) + .then(async () => { + await sleep(2000) + void (await signer.sign(senderPrivateKey)).send() + }) + .catch(reject) + }) + } + + expect(await waitListenerEvent()).toBeInstanceOf(Transaction) + }) + + it('Contract', async () => { + await waitSecondsBeforeThanNewTx(10) + + const listener = new TransactionListener(TransactionTypeEnum.CONTRACT, { + signer: senderTestAddress, + address: tokenProgram + }) + + const signer = await new Token(tokenTestAddress).transfer( + senderTestAddress, + receiverTestAddress, + 0.01 + ) + + const waitListenerEvent = async (): Promise => { + return await new Promise((resolve, reject) => { + void listener + .on((transaction) => { + listener.stop() + resolve(transaction) + }) + .then(async () => { + await sleep(2000) + void (await signer.sign(senderPrivateKey)).send() + }) + .catch(reject) + }) + } + + expect(await waitListenerEvent()).toBeInstanceOf(ContractTransaction) + }) + + it('Coin', async () => { + await waitSecondsBeforeThanNewTx(10) + + const listener = new TransactionListener(TransactionTypeEnum.COIN, { + signer: senderTestAddress, + receiver: receiverTestAddress + }) + + const signer = await new Coin().transfer(senderTestAddress, receiverTestAddress, 0.0001) + + const waitListenerEvent = async (): Promise => { + return await new Promise((resolve, reject) => { + void listener + .on((transaction) => { + listener.stop() + resolve(transaction) + }) + .then(async () => { + await sleep(2000) + void (await signer.sign(senderPrivateKey)).send() + }) + .catch(reject) + }) + } + + expect(await waitListenerEvent()).toBeInstanceOf(CoinTransaction) + }) + + it('Token', async () => { + await waitSecondsBeforeThanNewTx(10) + + const listener = new TransactionListener(TransactionTypeEnum.TOKEN, { + signer: senderTestAddress, + receiver: receiverTestAddress, + address: tokenTestAddress + }) + + const signer = await new Token(tokenTestAddress).transfer( + senderTestAddress, + receiverTestAddress, + 0.01 + ) + + const waitListenerEvent = async (): Promise => { + return await new Promise((resolve, reject) => { + void listener + .on((transaction) => { + listener.stop() + resolve(transaction) + }) + .then(async () => { + await sleep(2000) + void (await signer.sign(senderPrivateKey)).send() + }) + .catch(reject) + }) + } + + expect(await waitListenerEvent()).toBeInstanceOf(TokenTransaction) + }) + + it('NFT', async () => { + await waitSecondsBeforeThanNewTx(10) + + const listener = new TransactionListener(TransactionTypeEnum.NFT, { + signer: senderTestAddress, + receiver: receiverTestAddress, + address: nftTestAddress, + nftId: nftTransferId + }) + + const nft = new NFT(nftTestAddress) + const signer = await nft.transfer(senderTestAddress, receiverTestAddress, nftTransferId) + + const waitListenerEvent = async (): Promise => { + return await new Promise((resolve, reject) => { + void listener + .on((transaction) => { + listener.stop() + resolve(transaction) + }) + .then(async () => { + await sleep(2000) + void (await signer.sign(senderPrivateKey)).send() + }) + .catch(reject) + }) + } + + const transaction = await waitListenerEvent() + expect(transaction).toBeInstanceOf(NftTransaction) + await transaction.wait() + await waitSecondsBeforeThanNewTx(10) + + const newSigner = await nft.transfer(receiverTestAddress, senderTestAddress, nftTransferId) + + await (await newSigner.sign(receiverPrivateKey)).send() + }) +}) diff --git a/packages/networks/ton/tests/setup.ts b/packages/networks/ton/tests/setup.ts new file mode 100644 index 0000000..476b875 --- /dev/null +++ b/packages/networks/ton/tests/setup.ts @@ -0,0 +1,13 @@ +import { Provider } from '../src/services/Provider' + +let provider: Provider + +try { + provider = Provider.instance +} catch (e) { + provider = new Provider({ + testnet: true + }) +} + +export { provider } diff --git a/packages/networks/ton/tsconfig.json b/packages/networks/ton/tsconfig.json new file mode 100644 index 0000000..594d173 --- /dev/null +++ b/packages/networks/ton/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "noEmit": true, + "composite": true, + "declaration": true, + "outDir": "./dist/esm", + "declarationDir": "./dist/types" + }, + "extends": "../../../tsconfig.json", + "include": [ + "src", + ".eslintrc.json", + "tests", + "vite.config.ts", + "esbuild.ts", + "vitest.config.ts", + "../../../esbuild.ts", + "../../../vite.config.ts", + "../../../vitest.config.ts" + ] +} diff --git a/packages/networks/ton/vite.config.ts b/packages/networks/ton/vite.config.ts new file mode 100644 index 0000000..ac35490 --- /dev/null +++ b/packages/networks/ton/vite.config.ts @@ -0,0 +1,10 @@ +import { mergeConfig } from 'vite' +import mainConfig from '../../../vite.config' + +export default mergeConfig(mainConfig, { + build: { + lib: { + name: 'MultipleChain.TON' + } + } +}) diff --git a/packages/networks/ton/vite.svg b/packages/networks/ton/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/networks/ton/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/networks/ton/vitest.config.ts b/packages/networks/ton/vitest.config.ts new file mode 100644 index 0000000..94ef2da --- /dev/null +++ b/packages/networks/ton/vitest.config.ts @@ -0,0 +1,12 @@ +import { mergeConfig, defineConfig } from 'vitest/config' +import mainConfig from '../../../vite.config' + +export default mergeConfig( + mainConfig, + defineConfig({ + test: { + testTimeout: 180000, + setupFiles: ['./tests/setup.ts'] + } + }) +) From 479f6d0c4c16fb576b885cee9634a9b48d723d9e Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Sat, 11 Jan 2025 18:40:03 +0300 Subject: [PATCH 05/15] models completed --- packages/networks/ton/package.json | 8 +- packages/networks/ton/pnpm-lock.yaml | 951 ++++++++++-------- .../ton/src/models/CoinTransaction.ts | 42 +- .../ton/src/models/ContractTransaction.ts | 5 +- .../networks/ton/src/models/NftTransaction.ts | 53 +- .../ton/src/models/TokenTransaction.ts | 76 +- .../networks/ton/src/models/Transaction.ts | 143 ++- .../networks/ton/src/services/Provider.ts | 134 ++- packages/networks/ton/tests/models.spec.ts | 75 +- packages/networks/ton/tests/setup.ts | 3 +- 10 files changed, 979 insertions(+), 511 deletions(-) diff --git a/packages/networks/ton/package.json b/packages/networks/ton/package.json index 1d66687..b1cd256 100644 --- a/packages/networks/ton/package.json +++ b/packages/networks/ton/package.json @@ -73,6 +73,12 @@ }, "dependencies": { "@multiplechain/types": "^0.1.67", - "@multiplechain/utils": "^0.1.21" + "@multiplechain/utils": "^0.1.21", + "@ton/core": "^0.59.1", + "@ton/crypto": "^3.3.0", + "@ton/sandbox": "0.21.0-beta.1", + "@ton/ton": "^15.1.0", + "axios": "^1.7.9", + "ton-center-v3": "^0.1.3" } } diff --git a/packages/networks/ton/pnpm-lock.yaml b/packages/networks/ton/pnpm-lock.yaml index 7b40332..6ee5415 100644 --- a/packages/networks/ton/pnpm-lock.yaml +++ b/packages/networks/ton/pnpm-lock.yaml @@ -1,435 +1,534 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + autoInstallPeers: true + excludeLinksFromLockfile: false -dependencies: - '@multiplechain/types': +importers: + + .: + dependencies: + '@multiplechain/types': specifier: ^0.1.67 version: 0.1.67 - '@multiplechain/utils': + '@multiplechain/utils': specifier: ^0.1.21 version: 0.1.21 + '@ton/core': + specifier: ^0.59.1 + version: 0.59.1(@ton/crypto@3.3.0) + '@ton/crypto': + specifier: ^3.3.0 + version: 3.3.0 + '@ton/sandbox': + specifier: 0.21.0-beta.1 + version: 0.21.0-beta.1(@ton/core@0.59.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) + '@ton/ton': + specifier: ^15.1.0 + version: 15.1.0(@ton/core@0.59.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) + axios: + specifier: ^1.7.9 + version: 1.7.9 + ton-center-v3: + specifier: ^0.1.3 + version: 0.1.3 packages: - /@multiplechain/types@0.1.67: - resolution: - { - integrity: sha512-8TN5HhDC7lILh7wDKneJFS1Nyvxa+YGi0L56m6jnj0mBmTmwxNN42W5tP/3KYUlsfTHqb64iijjXMTLYZ0x+Dg== - } - dev: false - - /@multiplechain/utils@0.1.21: - resolution: - { - integrity: sha512-4mRlnhvXcS+7Hb1By5s2eoCH02kqOSQzV8qj0DHqZK20FtxtduaoGCtcClrFgEjN/HAXnHgdDc1pxTpveIkvRQ== - } - dependencies: - '@types/ws': 8.5.10 - bignumber.js: 9.1.2 - web3-utils: 4.2.1 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@noble/curves@1.3.0: - resolution: - { - integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - } - dependencies: - '@noble/hashes': 1.3.3 - dev: false - - /@noble/hashes@1.3.3: - resolution: - { - integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - } - engines: { node: '>= 16' } - dev: false - - /@scure/base@1.1.6: - resolution: - { - integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - } - dev: false - - /@scure/bip32@1.3.3: - resolution: - { - integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - } - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - dev: false - - /@scure/bip39@1.2.2: - resolution: - { - integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - } - dependencies: - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - dev: false - - /@types/node@20.12.7: - resolution: - { - integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - } - dependencies: - undici-types: 5.26.5 - dev: false - - /@types/ws@8.5.10: - resolution: - { - integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - } - dependencies: - '@types/node': 20.12.7 - dev: false - - /available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - } - engines: { node: '>= 0.4' } - dependencies: - possible-typed-array-names: 1.0.0 - dev: false - - /bignumber.js@9.1.2: - resolution: - { - integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - } - dev: false - - /call-bind@1.0.7: - resolution: - { - integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - } - engines: { node: '>= 0.4' } - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - dev: false - - /define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - } - engines: { node: '>= 0.4' } - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - dev: false - - /es-define-property@1.0.0: - resolution: - { - integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - } - engines: { node: '>= 0.4' } - dependencies: - get-intrinsic: 1.2.4 - dev: false - - /es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - } - engines: { node: '>= 0.4' } - dev: false - - /ethereum-cryptography@2.1.3: - resolution: - { - integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - } - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/bip32': 1.3.3 - '@scure/bip39': 1.2.2 - dev: false - - /eventemitter3@5.0.1: - resolution: - { - integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - } - dev: false - - /for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - } - dependencies: - is-callable: 1.2.7 - dev: false - - /function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - } - dev: false - - /get-intrinsic@1.2.4: - resolution: - { - integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - } - engines: { node: '>= 0.4' } - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - dev: false - - /gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - } - dependencies: - get-intrinsic: 1.2.4 - dev: false - - /has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - } - dependencies: - es-define-property: 1.0.0 - dev: false - - /has-proto@1.0.3: - resolution: - { - integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - } - engines: { node: '>= 0.4' } - dev: false - - /has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - } - engines: { node: '>= 0.4' } - dev: false - - /has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - } - engines: { node: '>= 0.4' } - dependencies: - has-symbols: 1.0.3 - dev: false - - /hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - } - engines: { node: '>= 0.4' } - dependencies: - function-bind: 1.1.2 - dev: false - - /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - } - dev: false - - /is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: false - - /is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - } - engines: { node: '>= 0.4' } - dev: false - - /is-generator-function@1.0.10: - resolution: - { - integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - } - engines: { node: '>= 0.4' } - dependencies: - has-tostringtag: 1.0.2 - dev: false - - /is-typed-array@1.1.13: - resolution: - { - integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - } - engines: { node: '>= 0.4' } - dependencies: - which-typed-array: 1.1.15 - dev: false - - /possible-typed-array-names@1.0.0: - resolution: - { - integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - } - engines: { node: '>= 0.4' } - dev: false - - /set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - } - engines: { node: '>= 0.4' } - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - dev: false - - /undici-types@5.26.5: - resolution: - { - integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - } - dev: false - - /util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - } - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - dev: false - - /web3-errors@1.1.4: - resolution: - { - integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dependencies: - web3-types: 1.5.0 - dev: false - - /web3-types@1.5.0: - resolution: - { - integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dev: false - - /web3-utils@4.2.1: - resolution: - { - integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dependencies: - ethereum-cryptography: 2.1.3 - eventemitter3: 5.0.1 - web3-errors: 1.1.4 - web3-types: 1.5.0 - web3-validator: 2.0.4 - dev: false - - /web3-validator@2.0.4: - resolution: - { - integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dependencies: - ethereum-cryptography: 2.1.3 - util: 0.12.5 - web3-errors: 1.1.4 - web3-types: 1.5.0 - zod: 3.22.4 - dev: false - - /which-typed-array@1.1.15: - resolution: - { - integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - } - engines: { node: '>= 0.4' } - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - dev: false - - /ws@8.16.0: - resolution: - { - integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - } - engines: { node: '>=10.0.0' } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /zod@3.22.4: - resolution: - { - integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - } - dev: false + + '@multiplechain/types@0.1.67': + resolution: {integrity: sha512-8TN5HhDC7lILh7wDKneJFS1Nyvxa+YGi0L56m6jnj0mBmTmwxNN42W5tP/3KYUlsfTHqb64iijjXMTLYZ0x+Dg==} + + '@multiplechain/utils@0.1.21': + resolution: {integrity: sha512-4mRlnhvXcS+7Hb1By5s2eoCH02kqOSQzV8qj0DHqZK20FtxtduaoGCtcClrFgEjN/HAXnHgdDc1pxTpveIkvRQ==} + + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + + '@scure/bip32@1.3.3': + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + + '@scure/bip39@1.2.2': + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + + '@ton/core@0.59.1': + resolution: {integrity: sha512-SxFBAvutYJaIllTkv82vbHTJhJI6NxzqUhi499CDEjJEZ9i6i9lHJiK2df4dlLAb/4SiWX6+QUzESkK4DEdnCw==} + peerDependencies: + '@ton/crypto': '>=3.2.0' + + '@ton/crypto-primitives@2.1.0': + resolution: {integrity: sha512-PQesoyPgqyI6vzYtCXw4/ZzevePc4VGcJtFwf08v10OevVJHVfW238KBdpj1kEDQkxWLeuNHEpTECNFKnP6tow==} + + '@ton/crypto@3.3.0': + resolution: {integrity: sha512-/A6CYGgA/H36OZ9BbTaGerKtzWp50rg67ZCH2oIjV1NcrBaCK9Z343M+CxedvM7Haf3f/Ee9EhxyeTp0GKMUpA==} + + '@ton/sandbox@0.21.0-beta.1': + resolution: {integrity: sha512-y9LUMwa5QsbqXLAhhBmXHGRdfXkzVVYUAZB6QxVkp+IOr8DctiJjdLDtqZ+kwUUaeoM1xNd7XMIdMerhNU/NBQ==} + peerDependencies: + '@ton/core': '>=0.56.0' + '@ton/crypto': '>=3.2.0' + + '@ton/ton@15.1.0': + resolution: {integrity: sha512-almetcfTu7jLjcNcEEPB7wAc8yl90ES1M//sOr1QE+kv7RbmEvMkaPSc7kFxzs10qrjIPKxlodBJlMSWP5LuVQ==} + peerDependencies: + '@ton/core': '>=0.59.0' + '@ton/crypto': '>=3.2.0' + + '@types/node@20.12.7': + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + + '@types/ws@8.5.10': + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + jssha@3.2.0: + resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + symbol.inspect@1.0.1: + resolution: {integrity: sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==} + + teslabot@1.5.0: + resolution: {integrity: sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==} + + ton-center-v3@0.1.3: + resolution: {integrity: sha512-Q/lw3ZfKCQAllGGEpumB89RDGQD1hrv/4jvfdromdwVEhMC4Bv1jnCQq6dzGlqgA34WAIinaZf8qyfyjbGUIfQ==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + web3-errors@1.1.4: + resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-types@1.5.0: + resolution: {integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-utils@4.2.1: + resolution: {integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-validator@2.0.4: + resolution: {integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA==} + engines: {node: '>=14', npm: '>=6.12.0'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + +snapshots: + + '@multiplechain/types@0.1.67': {} + + '@multiplechain/utils@0.1.21': + dependencies: + '@types/ws': 8.5.10 + bignumber.js: 9.1.2 + web3-utils: 4.2.1 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 + + '@noble/hashes@1.3.3': {} + + '@scure/base@1.1.6': {} + + '@scure/bip32@1.3.3': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@scure/bip39@1.2.2': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@ton/core@0.59.1(@ton/crypto@3.3.0)': + dependencies: + '@ton/crypto': 3.3.0 + symbol.inspect: 1.0.1 + + '@ton/crypto-primitives@2.1.0': + dependencies: + jssha: 3.2.0 + + '@ton/crypto@3.3.0': + dependencies: + '@ton/crypto-primitives': 2.1.0 + jssha: 3.2.0 + tweetnacl: 1.0.3 + + '@ton/sandbox@0.21.0-beta.1(@ton/core@0.59.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0)': + dependencies: + '@ton/core': 0.59.1(@ton/crypto@3.3.0) + '@ton/crypto': 3.3.0 + + '@ton/ton@15.1.0(@ton/core@0.59.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0)': + dependencies: + '@ton/core': 0.59.1(@ton/crypto@3.3.0) + '@ton/crypto': 3.3.0 + axios: 1.7.9 + dataloader: 2.2.3 + symbol.inspect: 1.0.1 + teslabot: 1.5.0 + zod: 3.22.4 + transitivePeerDependencies: + - debug + + '@types/node@20.12.7': + dependencies: + undici-types: 5.26.5 + + '@types/ws@8.5.10': + dependencies: + '@types/node': 20.12.7 + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + bignumber.js@9.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + dataloader@2.2.3: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + delayed-stream@1.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + ethereum-cryptography@2.1.3: + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + + eventemitter3@5.0.1: {} + + follow-redirects@1.15.9: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + jssha@3.2.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + possible-typed-array-names@1.0.0: {} + + proxy-from-env@1.1.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + symbol.inspect@1.0.1: {} + + teslabot@1.5.0: {} + + ton-center-v3@0.1.3: + dependencies: + axios: 1.7.9 + transitivePeerDependencies: + - debug + + tweetnacl@1.0.3: {} + + undici-types@5.26.5: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + web3-errors@1.1.4: + dependencies: + web3-types: 1.5.0 + + web3-types@1.5.0: {} + + web3-utils@4.2.1: + dependencies: + ethereum-cryptography: 2.1.3 + eventemitter3: 5.0.1 + web3-errors: 1.1.4 + web3-types: 1.5.0 + web3-validator: 2.0.4 + + web3-validator@2.0.4: + dependencies: + ethereum-cryptography: 2.1.3 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.5.0 + zod: 3.22.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + ws@8.16.0: {} + + zod@3.22.4: {} diff --git a/packages/networks/ton/src/models/CoinTransaction.ts b/packages/networks/ton/src/models/CoinTransaction.ts index 3cf0970..ee28bae 100644 --- a/packages/networks/ton/src/models/CoinTransaction.ts +++ b/packages/networks/ton/src/models/CoinTransaction.ts @@ -1,32 +1,38 @@ import { Transaction } from './Transaction' import { TransactionStatusEnum } from '@multiplechain/types' -import type { +import { AssetDirectionEnum, - CoinTransactionInterface, - TransferAmount, - WalletAddress + type CoinTransactionInterface, + type TransferAmount, + type WalletAddress } from '@multiplechain/types' +import { Address, fromNano } from '@ton/core' export class CoinTransaction extends Transaction implements CoinTransactionInterface { /** * @returns Wallet address of the receiver of transaction */ async getReceiver(): Promise { - return 'example' + const data = await this.getData() + const source = (data?.action.details.destination ?? '') as string + return Address.parse(source).toString(this.provider.walletStandard) } /** * @returns Wallet address of the sender of transaction */ async getSender(): Promise { - return 'example' + const data = await this.getData() + const source = (data?.action.details.source ?? '') as string + return Address.parse(source).toString(this.provider.walletStandard) } /** * @returns Amount of coin that will be transferred */ async getAmount(): Promise { - return 0 + const data = await this.getData() + return Number(fromNano(data?.action.details.value as string)) } /** @@ -40,6 +46,26 @@ export class CoinTransaction extends Transaction implements CoinTransactionInter address: WalletAddress, amount: TransferAmount ): Promise { - return TransactionStatusEnum.PENDING + const status = await this.getStatus() + + if (status === TransactionStatusEnum.PENDING) { + return TransactionStatusEnum.PENDING + } + + if ((await this.getAmount()) !== amount) { + return TransactionStatusEnum.FAILED + } + + if (direction === AssetDirectionEnum.INCOMING) { + if ((await this.getReceiver()).toLowerCase() !== address.toLowerCase()) { + return TransactionStatusEnum.FAILED + } + } else { + if ((await this.getSender()).toLowerCase() !== address.toLowerCase()) { + return TransactionStatusEnum.FAILED + } + } + + return TransactionStatusEnum.CONFIRMED } } diff --git a/packages/networks/ton/src/models/ContractTransaction.ts b/packages/networks/ton/src/models/ContractTransaction.ts index e52bbee..0acff37 100644 --- a/packages/networks/ton/src/models/ContractTransaction.ts +++ b/packages/networks/ton/src/models/ContractTransaction.ts @@ -1,3 +1,4 @@ +import { Address } from '@ton/core' import { Transaction } from './Transaction' import type { ContractAddress, ContractTransactionInterface } from '@multiplechain/types' @@ -6,6 +7,8 @@ export class ContractTransaction extends Transaction implements ContractTransact * @returns Contract address of the transaction */ async getAddress(): Promise { - return 'example' + const data = await this.getData() + const address = (data?.action.details.asset ?? '') as string + return Address.parse(address).toString(this.provider.contractStandard) } } diff --git a/packages/networks/ton/src/models/NftTransaction.ts b/packages/networks/ton/src/models/NftTransaction.ts index da99b8c..3a735da 100644 --- a/packages/networks/ton/src/models/NftTransaction.ts +++ b/packages/networks/ton/src/models/NftTransaction.ts @@ -1,32 +1,49 @@ import { ContractTransaction } from './ContractTransaction' import { TransactionStatusEnum } from '@multiplechain/types' -import type { - NftTransactionInterface, +import { + type NftTransactionInterface, AssetDirectionEnum, - WalletAddress, - NftId + type WalletAddress, + type NftId, + type ContractAddress } from '@multiplechain/types' +import { Address } from '@ton/core' export class NftTransaction extends ContractTransaction implements NftTransactionInterface { + /** + * @returns Contract address of the transaction + */ + async getAddress(): Promise { + const data = await this.getData() + const address = (data?.action.details.nft_collection ?? '') as string + return Address.parse(address).toString(this.provider.contractStandard) + } + /** * @returns Receiver wallet address */ async getReceiver(): Promise { - return 'example' + const data = await this.getData() + const source = (data?.action.details.new_owner ?? '') as string + return Address.parse(source).toString(this.provider.walletStandard) } /** * @returns Wallet address of the sender of transaction */ async getSender(): Promise { - return 'example' + const data = await this.getData() + const source = (data?.action.details.old_owner ?? '') as string + return Address.parse(source).toString(this.provider.walletStandard) } /** * @returns NFT ID */ async getNftId(): Promise { - return 0 + const data = await this.getData() + const address = (data?.action.details.nft_item ?? '') as string + return Address.parse(address).toString(this.provider.contractStandard) } /** @@ -40,6 +57,26 @@ export class NftTransaction extends ContractTransaction implements NftTransactio address: WalletAddress, nftId: NftId ): Promise { - return TransactionStatusEnum.PENDING + const status = await this.getStatus() + + if (status === TransactionStatusEnum.PENDING) { + return TransactionStatusEnum.PENDING + } + + if ((await this.getNftId()) !== nftId) { + return TransactionStatusEnum.FAILED + } + + if (direction === AssetDirectionEnum.INCOMING) { + if ((await this.getReceiver()).toLowerCase() !== address.toLowerCase()) { + return TransactionStatusEnum.FAILED + } + } else { + if ((await this.getSender()).toLowerCase() !== address.toLowerCase()) { + return TransactionStatusEnum.FAILED + } + } + + return TransactionStatusEnum.CONFIRMED } } diff --git a/packages/networks/ton/src/models/TokenTransaction.ts b/packages/networks/ton/src/models/TokenTransaction.ts index 08c07d1..b7ba2e9 100644 --- a/packages/networks/ton/src/models/TokenTransaction.ts +++ b/packages/networks/ton/src/models/TokenTransaction.ts @@ -1,32 +1,72 @@ import { ContractTransaction } from './ContractTransaction' import { TransactionStatusEnum } from '@multiplechain/types' -import type { +import { AssetDirectionEnum, - TokenTransactionInterface, - TransferAmount, - WalletAddress + type ContractAddress, + type TokenTransactionInterface, + type TransferAmount, + type WalletAddress } from '@multiplechain/types' +import { math } from '@multiplechain/utils' +import { Address } from '@ton/core' export class TokenTransaction extends ContractTransaction implements TokenTransactionInterface { + /** + * @returns Contract address of the transaction + */ + async getAddress(): Promise { + const data = await this.getData() + const address = (data?.action.details.asset ?? '') as string + return Address.parse(address).toString(this.provider.contractStandard) + } + /** * @returns Wallet address of the receiver of transaction */ async getReceiver(): Promise { - return 'example' + const data = await this.getData() + const source = (data?.action.details.receiver ?? '') as string + return Address.parse(source).toString(this.provider.walletStandard) } /** * @returns Wallet address of the sender of transaction */ async getSender(): Promise { - return 'example' + const data = await this.getData() + const destination = (data?.action.details.sender ?? '') as string + return Address.parse(destination).toString(this.provider.walletStandard) + } + + /** + * @returns Wallet address of the receiver of transaction + */ + async getReceiverJettonWallet(): Promise { + const data = await this.getData() + const source = (data?.action.details.receiver_jetton_wallet ?? '') as string + return Address.parse(source).toString(this.provider.contractStandard) + } + + /** + * @returns Wallet address of the sender of transaction + */ + async getSenderJettonWallet(): Promise { + const data = await this.getData() + const destination = (data?.action.details.sender_jetton_wallet ?? '') as string + return Address.parse(destination).toString(this.provider.contractStandard) } /** * @returns Amount of tokens that will be transferred */ async getAmount(): Promise { - return 0 + const data = await this.getData() + const amount = Number(data?.action.details.amount ?? 0) + const tokenData = await this.provider.client3.getJettonMasters({ + address: [await this.getAddress()] + }) + const decimals = Number(tokenData.jetton_masters[0].jetton_content.decimals) + return math.div(amount, math.pow(10, decimals), decimals) } /** @@ -40,6 +80,26 @@ export class TokenTransaction extends ContractTransaction implements TokenTransa address: WalletAddress, amount: TransferAmount ): Promise { - return TransactionStatusEnum.PENDING + const status = await this.getStatus() + + if (status === TransactionStatusEnum.PENDING) { + return TransactionStatusEnum.PENDING + } + + if ((await this.getAmount()) !== amount) { + return TransactionStatusEnum.FAILED + } + + if (direction === AssetDirectionEnum.INCOMING) { + if ((await this.getReceiver()).toLowerCase() !== address.toLowerCase()) { + return TransactionStatusEnum.FAILED + } + } else { + if ((await this.getSender()).toLowerCase() !== address.toLowerCase()) { + return TransactionStatusEnum.FAILED + } + } + + return TransactionStatusEnum.CONFIRMED } } diff --git a/packages/networks/ton/src/models/Transaction.ts b/packages/networks/ton/src/models/Transaction.ts index 74df4b8..1d2fa1b 100644 --- a/packages/networks/ton/src/models/Transaction.ts +++ b/packages/networks/ton/src/models/Transaction.ts @@ -1,5 +1,5 @@ import { Provider } from '../services/Provider' -import { TransactionStatusEnum } from '@multiplechain/types' +import { ErrorTypeEnum, TransactionStatusEnum } from '@multiplechain/types' import { TransactionTypeEnum, type BlockConfirmationCount, @@ -10,11 +10,17 @@ import { type TransactionInterface, type WalletAddress } from '@multiplechain/types' +import { Address, fromNano } from '@ton/core' +import type { Action, Transaction as TxData } from 'ton-center-v3/response' // custom tx data for each blockchain -type TxData = {} -export class Transaction implements TransactionInterface { +export interface TransactionData { + transaction: TxData + action: Action +} + +export class Transaction implements TransactionInterface { /** * Each transaction has its own unique ID defined by the user */ @@ -23,7 +29,7 @@ export class Transaction implements TransactionInterface { /** * Transaction data */ - data: TxData | null = null + data: TransactionData | null = null /** * Blockchain network provider @@ -42,8 +48,35 @@ export class Transaction implements TransactionInterface { /** * @returns Transaction data */ - async getData(): Promise { - return {} + async getData(): Promise { + try { + if (this.data !== null) { + return this.data + } + + const res = + (await this.provider.client3.getTransactions({ + hash: this.id + })) ?? undefined + + if (res === undefined) { + return null + } + + const transaction = res.transactions[0] + + if (transaction === undefined) { + return null + } + + const action = ( + await this.provider.client3.getActions({ trace_id: [transaction.trace_id] }) + ).actions[0] + + return (this.data = { transaction, action }) + } catch (error) { + throw new Error(ErrorTypeEnum.RPC_REQUEST_ERROR) + } } /** @@ -51,7 +84,21 @@ export class Transaction implements TransactionInterface { * @returns Status of the transaction */ async wait(ms: number = 4000): Promise { - return await Promise.resolve(TransactionStatusEnum.CONFIRMED) + return await new Promise((resolve, reject) => { + const check = async (): Promise => { + try { + const status = await this.getStatus() + if (status !== TransactionStatusEnum.PENDING) { + resolve(status) + return + } + setTimeout(check, ms) + } catch (error) { + reject(TransactionStatusEnum.FAILED) + } + } + void check() + }) } /** @@ -65,55 +112,121 @@ export class Transaction implements TransactionInterface { * @returns Type of the transaction */ async getType(): Promise { - return await Promise.resolve(TransactionTypeEnum.GENERAL) + const data = await this.getData() + + if (data === null) { + return TransactionTypeEnum.GENERAL + } + + const type = data.action.type + + if (type === 'ton_transfer') { + return TransactionTypeEnum.COIN + } + + if (type === 'jetton_transfer') { + return TransactionTypeEnum.TOKEN + } + + if (type === 'nft_transfer') { + return TransactionTypeEnum.NFT + } + + return TransactionTypeEnum.CONTRACT } /** * @returns Transaction URL */ getUrl(): string { - return 'example' + return this.provider.explorerUrl + this.id + } + + async getComment(): Promise { + const data = await this.getData() + return data?.action.details.comment as string } /** * @returns Wallet address of the sender of transaction */ async getSigner(): Promise { - return 'example' + const data = await this.getData() + const source = data?.transaction.account ?? '' + return Address.parse(source).toString(this.provider.walletStandard) } /** * @returns Transaction fee */ async getFee(): Promise { - return 0 + const data = await this.getData() + return Number(fromNano(data?.transaction.total_fees ?? 0)) } /** * @returns Block number that transaction */ async getBlockNumber(): Promise { - return 0 + const data = await this.getData() + return data?.transaction.block_ref.seqno ?? 0 + } + + /** + * @returns Workchain of the transaction + */ + async getWorkchain(): Promise { + const data = await this.getData() + return data?.transaction.block_ref.workchain ?? 0 + } + + /** + * @returns Shard of the transaction + */ + async getShard(): Promise { + const data = await this.getData() + return data?.transaction.block_ref.shard ?? '' + } + + /** + * @returns Block reference of the transaction + */ + async getBlockId(): Promise { + const data = await this.getData() + const ref = data?.transaction.block_ref + return `${ref?.workchain}:${ref?.shard}:${ref?.seqno}` } /** * @returns Block timestamp that transaction */ async getBlockTimestamp(): Promise { - return 0 + const data = await this.getData() + return data?.transaction.now ?? 0 } /** * @returns Confirmation count of the block */ async getBlockConfirmationCount(): Promise { - return 0 + const blockNumber = await this.getBlockNumber() + const { blocks } = await this.provider.client3.getBlocks({ + workchain: this.provider.workchain, + sort: 'desc' + }) + return blocks[0].seqno - blockNumber } /** * @returns Status of the transaction */ async getStatus(): Promise { - return TransactionStatusEnum.CONFIRMED + const data = await this.getData() + if (data?.transaction.prev_trans_hash) { + return data.action.success + ? TransactionStatusEnum.CONFIRMED + : TransactionStatusEnum.FAILED + } + return TransactionStatusEnum.PENDING } } diff --git a/packages/networks/ton/src/services/Provider.ts b/packages/networks/ton/src/services/Provider.ts index 9f6886d..a7f9816 100644 --- a/packages/networks/ton/src/services/Provider.ts +++ b/packages/networks/ton/src/services/Provider.ts @@ -1,14 +1,60 @@ +import axios from 'axios' import { ErrorTypeEnum, type NetworkConfigInterface, type ProviderInterface } from '@multiplechain/types' +import TonCenterV3 from 'ton-center-v3' +import { TonClient, TonClient4 } from '@ton/ton' -export class Provider implements ProviderInterface { +export interface TonNetworkConfigInterface extends NetworkConfigInterface { + apiKey: string + workchain?: number + explorer?: 'tonviewer' | 'tonscan' +} + +export enum TonNetwork { + MAINNET = -239, + TESTNET = -3 +} + +export class Provider implements ProviderInterface { /** * Network configuration of the provider */ - network: NetworkConfigInterface + network: TonNetworkConfigInterface + + client1: TonClient + + client3: TonCenterV3 + + client4: TonClient4 + + mainnetEndpoint = 'https://toncenter.com/api/v2/jsonRPC' + + testnetEndpoint = 'https://testnet.toncenter.com/api/v2/jsonRPC' + + tonViewerMainnet = 'https://tonviewer.com/transaction/' + + tonViewerTestnet = 'https://testnet.tonviewer.com/transaction/' + + tonScanMainnet = 'https://tonscan.org/tx/' + + tonScanTestnet = 'https://testnet.tonscan.org/tx/' + + explorerUrl: string + + workchain: number + + public walletStandard: { + testOnly: boolean + bounceable: boolean + } + + public contractStandard: { + testOnly: boolean + bounceable: boolean + } /** * Static instance of the provider @@ -18,7 +64,7 @@ export class Provider implements ProviderInterface { /** * @param network - Network configuration of the provider */ - constructor(network: NetworkConfigInterface) { + constructor(network: TonNetworkConfigInterface) { this.update(network) } @@ -37,7 +83,7 @@ export class Provider implements ProviderInterface { * Initialize the static instance of the provider * @param network - Network configuration of the provider */ - static initialize(network: NetworkConfigInterface): void { + static initialize(network: TonNetworkConfigInterface): void { if (Provider._instance !== undefined) { throw new Error(ErrorTypeEnum.PROVIDER_IS_ALREADY_INITIALIZED) } @@ -50,7 +96,23 @@ export class Provider implements ProviderInterface { * @returns RPC connection status */ async checkRpcConnection(url?: string): Promise { - return true + try { + await this.client1.getMasterchainInfo() + await this.client3.getMasterchainInfo() + await this.client4.getLastBlock() + + if (url) { + const response = await axios.get(url) + + if (response.status !== 200) { + return new Error(response.statusText + ': ' + JSON.stringify(response.data)) + } + } + + return true + } catch (error) { + return error as Error + } } /** @@ -59,15 +121,73 @@ export class Provider implements ProviderInterface { * @returns ws connection status */ async checkWsConnection(url?: string): Promise { - return true + try { + if (url) { + const response = await axios.get(url) + + if (response.status !== 200) { + return new Error(response.statusText + ': ' + JSON.stringify(response.data)) + } + } + + return true + } catch (error) { + return error as Error + } } /** * Update network configuration of the provider * @param network - Network configuration */ - update(network: NetworkConfigInterface): void { + update(network: TonNetworkConfigInterface): void { + const apiKey = network.apiKey ?? '' + const testnet = network.testnet ?? false + const explorer = network.explorer ?? 'tonscan' + const endpoint = testnet ? this.testnetEndpoint : this.mainnetEndpoint + + if (!apiKey) { + throw new Error('TonCenter API key is required') + } + + this.client1 = new TonClient({ + endpoint, + apiKey + }) + + this.client4 = new TonClient4({ + endpoint, + requestInterceptor: (config) => { + config.headers['X-API-KEY'] = apiKey + return config + } + }) + + this.client3 = new TonCenterV3({ + apiKey, + testnet + }) + + if (explorer === 'tonscan') { + this.explorerUrl = testnet ? this.tonScanTestnet : this.tonScanMainnet + } else { + this.explorerUrl = testnet ? this.tonViewerTestnet : this.tonViewerMainnet + } + + this.walletStandard = { + testOnly: testnet, + bounceable: false + } + + this.contractStandard = { + testOnly: testnet, + bounceable: true + } + this.network = network + + this.workchain = network.workchain ?? 0 + Provider._instance = this } diff --git a/packages/networks/ton/tests/models.spec.ts b/packages/networks/ton/tests/models.spec.ts index d5fe12f..6c8a105 100644 --- a/packages/networks/ton/tests/models.spec.ts +++ b/packages/networks/ton/tests/models.spec.ts @@ -6,27 +6,22 @@ import { CoinTransaction } from '../src/models/CoinTransaction' import { TokenTransaction } from '../src/models/TokenTransaction' import { AssetDirectionEnum, TransactionStatusEnum } from '@multiplechain/types' -const nftId = Number(process.env.TON_NFT_ID) +const nftId = String(process.env.TON_NFT_ID) const tokenAmount = Number(process.env.TON_TOKEN_AMOUNT) const coinAmount = Number(process.env.TON_COIN_AMOUNT) +const nftCollection = String(process.env.TON_NFT_COLLECTION) -const etherTransferTx = String(process.env.TON_ETHER_TRANSFER_TX) +const tonTransferTx = String(process.env.TON_TRANSFER_TX) const tokenTransferTx = String(process.env.TON_TOKEN_TRANSFER_TX) const nftTransferTx = String(process.env.TON_NFT_TRANSFER_TX) -const coinSender = String(process.env.TON_COIN_SENDER) -const coinReceiver = String(process.env.TON_COIN_RECEIVER) - -const tokenSender = String(process.env.TON_TOKEN_SENDER) -const tokenReceiver = String(process.env.TON_TOKEN_RECEIVER) - -const nftSender = String(process.env.TON_NFT_SENDER) -const nftReceiver = String(process.env.TON_NFT_RECEIVER) +const sender = String(process.env.TON_SENDER_ADDRESS) +const receiver = String(process.env.TON_RECEIVER_ADDRESS) describe('Transaction', () => { - const tx = new Transaction(etherTransferTx) + const tx = new Transaction(tonTransferTx) it('Id', async () => { - expect(tx.getId()).toBe(etherTransferTx) + expect(tx.getId()).toBe(tonTransferTx) }) it('Data', async () => { @@ -44,23 +39,27 @@ describe('Transaction', () => { }) it('Sender', async () => { - expect(await tx.getSigner()).toBe(coinSender) + expect(await tx.getSigner()).toBe(sender) }) it('Fee', async () => { - expect(await tx.getFee()).toBe(0.000371822357865) + expect(await tx.getFee()).toBe(0.002830538) }) it('Block Number', async () => { - expect(await tx.getBlockNumber()).toBe(5461884) + expect(await tx.getBlockNumber()).toBe(28607062) + }) + + it('Block ID', async () => { + expect(await tx.getBlockId()).toBe('0:6000000000000000:28607062') }) it('Block Timestamp', async () => { - expect(await tx.getBlockTimestamp()).toBe(1710141144) + expect(await tx.getBlockTimestamp()).toBe(1736323418) }) it('Block Confirmation Count', async () => { - expect(await tx.getBlockConfirmationCount()).toBeGreaterThan(129954) + expect(await tx.getBlockConfirmationCount()).toBeGreaterThan(77696) }) it('Status', async () => { @@ -69,10 +68,10 @@ describe('Transaction', () => { }) describe('Coin Transaction', () => { - const tx = new CoinTransaction(etherTransferTx) + const tx = new CoinTransaction(tonTransferTx) it('Receiver', async () => { - expect((await tx.getReceiver()).toLowerCase()).toBe(coinReceiver.toLowerCase()) + expect((await tx.getReceiver()).toLowerCase()).toBe(receiver.toLowerCase()) }) it('Amount', async () => { @@ -80,15 +79,15 @@ describe('Coin Transaction', () => { }) it('Verify Transfer', async () => { - expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, coinReceiver, coinAmount)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, receiver, coinAmount)).toBe( TransactionStatusEnum.CONFIRMED ) - expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, coinSender, coinAmount)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, sender, coinAmount)).toBe( TransactionStatusEnum.CONFIRMED ) - expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, coinReceiver, coinAmount)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, receiver, coinAmount)).toBe( TransactionStatusEnum.FAILED ) }) @@ -98,7 +97,7 @@ describe('Token Transaction', () => { const tx = new TokenTransaction(tokenTransferTx) it('Receiver', async () => { - expect((await tx.getReceiver()).toLowerCase()).toBe(tokenReceiver.toLowerCase()) + expect((await tx.getReceiver()).toLowerCase()).toBe(receiver.toLowerCase()) }) it('Amount', async () => { @@ -106,17 +105,17 @@ describe('Token Transaction', () => { }) it('Verify Transfer', async () => { - expect( - await tx.verifyTransfer(AssetDirectionEnum.INCOMING, tokenReceiver, tokenAmount) - ).toBe(TransactionStatusEnum.CONFIRMED) + expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, receiver, tokenAmount)).toBe( + TransactionStatusEnum.CONFIRMED + ) - expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, tokenSender, tokenAmount)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, sender, tokenAmount)).toBe( TransactionStatusEnum.CONFIRMED ) - expect( - await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, tokenReceiver, tokenAmount) - ).toBe(TransactionStatusEnum.FAILED) + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, receiver, tokenAmount)).toBe( + TransactionStatusEnum.FAILED + ) }) }) @@ -124,15 +123,19 @@ describe('NFT Transaction', () => { const tx = new NftTransaction(nftTransferTx) it('Receiver', async () => { - expect((await tx.getReceiver()).toLowerCase()).toBe(nftReceiver.toLowerCase()) + expect((await tx.getReceiver()).toLowerCase()).toBe(receiver.toLowerCase()) + }) + + it('Address', async () => { + expect((await tx.getAddress()).toLowerCase()).toBe(nftCollection.toLowerCase()) }) it('Signer', async () => { - expect((await tx.getSigner()).toLowerCase()).toBe(nftReceiver.toLowerCase()) + expect((await tx.getSigner()).toLowerCase()).toBe(sender.toLowerCase()) }) it('Sender', async () => { - expect((await tx.getSender()).toLowerCase()).toBe(nftSender.toLowerCase()) + expect((await tx.getSender()).toLowerCase()).toBe(sender.toLowerCase()) }) it('NFT ID', async () => { @@ -140,15 +143,15 @@ describe('NFT Transaction', () => { }) it('Verify Transfer', async () => { - expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, nftReceiver, nftId)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.INCOMING, receiver, nftId)).toBe( TransactionStatusEnum.CONFIRMED ) - expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, nftSender, nftId)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, sender, nftId)).toBe( TransactionStatusEnum.CONFIRMED ) - expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, nftReceiver, nftId)).toBe( + expect(await tx.verifyTransfer(AssetDirectionEnum.OUTGOING, receiver, nftId)).toBe( TransactionStatusEnum.FAILED ) }) diff --git a/packages/networks/ton/tests/setup.ts b/packages/networks/ton/tests/setup.ts index 476b875..fec8cee 100644 --- a/packages/networks/ton/tests/setup.ts +++ b/packages/networks/ton/tests/setup.ts @@ -6,7 +6,8 @@ try { provider = Provider.instance } catch (e) { provider = new Provider({ - testnet: true + testnet: true, + apiKey: '0a804e1153b5dec04715342789d68c219845e3f1336da822399d7b180a5b5533' }) } From 2fce76cefa19eeca09ab3ce358ee893d4bf86245 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Mon, 13 Jan 2025 12:59:46 +0300 Subject: [PATCH 06/15] completed some method of assets --- packages/networks/ton/src/assets/Coin.ts | 38 +++- packages/networks/ton/src/assets/Contract.ts | 53 ++++-- packages/networks/ton/src/assets/NFT.ts | 163 ++++++++++++++--- packages/networks/ton/src/assets/Token.ts | 169 ++++++++++++++--- .../networks/ton/src/models/Transaction.ts | 5 + .../networks/ton/src/services/Provider.ts | 173 ++++++++++++++++-- .../ton/src/services/TransactionSigner.ts | 43 ++++- packages/networks/ton/tests/assets.spec.ts | 168 ++++++++--------- 8 files changed, 630 insertions(+), 182 deletions(-) diff --git a/packages/networks/ton/src/assets/Coin.ts b/packages/networks/ton/src/assets/Coin.ts index cb67d3c..e14752b 100644 --- a/packages/networks/ton/src/assets/Coin.ts +++ b/packages/networks/ton/src/assets/Coin.ts @@ -1,6 +1,12 @@ import { Provider } from '../services/Provider' +import { comment, fromNano, internal, toNano } from '@ton/core' import { TransactionSigner } from '../services/TransactionSigner' -import type { CoinInterface, TransferAmount, WalletAddress } from '@multiplechain/types' +import { + ErrorTypeEnum, + type CoinInterface, + type TransferAmount, + type WalletAddress +} from '@multiplechain/types' export class Coin implements CoinInterface { /** @@ -19,21 +25,21 @@ export class Coin implements CoinInterface { * @returns Coin name */ getName(): string { - return 'example' + return 'Toncoin' } /** * @returns Coin symbol */ getSymbol(): string { - return 'example' + return 'TON' } /** * @returns Decimal value of the coin */ getDecimals(): number { - return 18 + return 9 } /** @@ -41,20 +47,38 @@ export class Coin implements CoinInterface { * @returns Wallet balance as currency of COIN */ async getBalance(owner: WalletAddress): Promise { - return 0 + const response = await this.provider.client3.getAddressInformation(owner) + return Number(fromNano(response.balance)) } /** * @param sender Sender wallet address * @param receiver Receiver wallet address * @param amount Amount of assets that will be transferred + * @param body Comment for the transaction * @returns Transaction signer */ async transfer( sender: WalletAddress, receiver: WalletAddress, - amount: TransferAmount + amount: TransferAmount, + body?: string ): Promise { - return new TransactionSigner('example') + if (amount < 0) { + throw new Error(ErrorTypeEnum.INVALID_AMOUNT) + } + + if (amount > (await this.getBalance(sender))) { + throw new Error(ErrorTypeEnum.INSUFFICIENT_BALANCE) + } + + return new TransactionSigner( + internal({ + bounce: false, + to: receiver, + value: toNano(amount), + body: body ? comment(body) : undefined + }) + ) } } diff --git a/packages/networks/ton/src/assets/Contract.ts b/packages/networks/ton/src/assets/Contract.ts index 5b21304..bd512de 100644 --- a/packages/networks/ton/src/assets/Contract.ts +++ b/packages/networks/ton/src/assets/Contract.ts @@ -1,4 +1,5 @@ import { Provider } from '../services/Provider' +import { Address, beginCell, type Cell, type Builder } from '@ton/core' import type { ContractAddress, ContractInterface, WalletAddress } from '@multiplechain/types' export class Contract implements ContractInterface { @@ -34,12 +35,12 @@ export class Contract implements ContractInterface { } /** - * @param method Method name - * @param args Method parameters + * @param _method Method name + * @param _args Method parameters * @returns Method result */ - async callMethod(method: string, ...args: unknown[]): Promise { - return {} + async callMethod(_method: string, ..._args: unknown[]): Promise { + throw new Error('Method not implemented.') } /** @@ -56,25 +57,47 @@ export class Contract implements ContractInterface { } /** - * @param method Method name - * @param args Sender wallet address + * @param _method Method name + * @param _args Sender wallet address * @returns Encoded method data */ - async getMethodData(method: string, ...args: unknown[]): Promise { - return {} + async getMethodData(_method: string, ..._args: unknown[]): Promise { + throw new Error('Method not implemented.') } /** - * @param method Method name - * @param from Sender wallet address - * @param args Method parameters + * @param _method Method name + * @param _from Sender wallet address + * @param _args Method parameters * @returns Encoded method data */ async createTransactionData( - method: string, - from: WalletAddress, - ...args: any[] + _method: string, + _from: WalletAddress, + ..._args: any[] ): Promise { - return '' + throw new Error('Method not implemented.') + } + + /** + * @param cell Cell builder + * @param receiver Receiver address + * @param sender Sender address + * @param body Message body + * @returns Cell builder + */ + endCell(cell: Builder, receiver: string, sender: string, body?: string): Cell { + cell.storeAddress(Address.parse(receiver)) + .storeAddress(Address.parse(sender)) + .storeBit(0) + .storeCoins(1n) + + if (body) { + cell.storeBit(1).storeRef(beginCell().storeUint(0, 32).storeStringTail(body).endCell()) + } else { + cell.storeBit(0) + } + + return cell.endCell() } } diff --git a/packages/networks/ton/src/assets/NFT.ts b/packages/networks/ton/src/assets/NFT.ts index 5d51432..ebbf4f4 100644 --- a/packages/networks/ton/src/assets/NFT.ts +++ b/packages/networks/ton/src/assets/NFT.ts @@ -1,20 +1,97 @@ import { Contract } from './Contract' import { TransactionSigner } from '../services/TransactionSigner' -import type { NftId, NftInterface, WalletAddress } from '@multiplechain/types' +import { + ErrorTypeEnum, + type NftId, + type NftInterface, + type WalletAddress +} from '@multiplechain/types' +import axios from 'axios' +import { Address, beginCell, internal, toNano } from '@ton/core' +import { OpCodes } from '../browser' + +interface NftMetadata { + name: string + image: string + description: string +} + +type Content = Record & { + uri: string +} + +interface NftItem { + address: string + code_hash: string + collection: { + address: string + code_hash: string + collection_content: Content + data_hash: string + last_transaction_lt: string + next_item_index: string + owner_address: string + } + collection_address: string + content: Content + data_hash: string + index: string + init: boolean + last_transaction_lt: string + owner_address: string +} export class NFT extends Contract implements NftInterface { + metadata: NftMetadata + + /** + * @returns Token metadata + */ + async getMetadata(): Promise { + if (this.metadata) { + return this.metadata + } + + const result = await this.provider.client3.getNftCollections({ + collection_address: [this.address] + }) + + const collectionUri = result.nft_collections[0].collection_content.uri + + const { data } = (await axios.get(collectionUri)) as any + + return (this.metadata = { + name: data.name, + image: data.image, + description: data.description + }) + } + + /** + * @param nftId NFT ID + * @returns NFT item + */ + async getNftItem(nftId: NftId): Promise { + const result = await this.provider.client3.getNftItems({ + collection_address: this.address, + address: [String(nftId)] + }) + + return result.nft_items[0] + } + /** * @returns NFT name */ async getName(): Promise { - return 'example' + return (await this.getMetadata()).name } /** * @returns NFT symbol */ async getSymbol(): Promise { - return 'example' + return (await this.getMetadata()).description } /** @@ -22,7 +99,11 @@ export class NFT extends Contract implements NftInterface { * @returns Wallet balance as currency of NFT */ async getBalance(owner: WalletAddress): Promise { - return 0 + const result = await this.provider.client3.getNftItems({ + collection_address: this.address, + owner_address: [owner] + }) + return result.nft_items.length } /** @@ -30,7 +111,9 @@ export class NFT extends Contract implements NftInterface { * @returns Wallet address of the owner of the NFT */ async getOwner(nftId: NftId): Promise { - return 'example' + return Address.parse((await this.getNftItem(nftId)).owner_address).toString( + this.provider.walletStandard + ) } /** @@ -38,59 +121,85 @@ export class NFT extends Contract implements NftInterface { * @returns URI of the NFT */ async getTokenURI(nftId: NftId): Promise { - return 'example' + return (await this.getNftItem(nftId)).content.uri } /** - * @param nftId ID of the NFT that will be transferred + * @param _nftId ID of the NFT that will be transferred * @returns Wallet address of the approved spender */ - async getApproved(nftId: NftId): Promise { - return 'example' + async getApproved(_nftId: NftId): Promise { + throw new Error('Method not implemented.') } /** * @param sender Sender address * @param receiver Receiver address * @param nftId NFT ID + * @param body Comment for the transaction * @returns Transaction signer */ async transfer( sender: WalletAddress, receiver: WalletAddress, - nftId: NftId + nftId: NftId, + body?: string ): Promise { - return new TransactionSigner('example') + // Check if tokens exist + const balance = await this.getBalance(sender) + + if (balance <= 0) { + throw new Error(ErrorTypeEnum.INSUFFICIENT_BALANCE) + } + + // Check ownership + const originalOwner = await this.getOwner(nftId) + if (originalOwner.toLowerCase() !== sender.toLowerCase()) { + throw new Error(ErrorTypeEnum.UNAUTHORIZED_ADDRESS) + } + + const builder = beginCell().storeUint(OpCodes.NFT_TRANSFER, 32).storeUint(0, 64) + + const cell = this.endCell(builder, receiver, sender, body) + + return new TransactionSigner( + internal({ + to: Address.parse(String(nftId)), + value: toNano('0.05'), + bounce: true, + body: cell + }) + ) } /** - * @param spender Spender address - * @param owner Owner address - * @param receiver Receiver address - * @param nftId NFT ID + * @param _spender Spender address + * @param _owner Owner address + * @param _receiver Receiver address + * @param _nftId NFT ID * @returns Transaction signer */ async transferFrom( - spender: WalletAddress, - owner: WalletAddress, - receiver: WalletAddress, - nftId: NftId + _spender: WalletAddress, + _owner: WalletAddress, + _receiver: WalletAddress, + _nftId: NftId ): Promise { - return new TransactionSigner('example') + throw new Error('Method not implemented.') } /** * Gives permission to the spender to spend owner's tokens - * @param owner Address of owner of the tokens that will be used - * @param spender Address of the spender that will use the tokens of owner - * @param nftId ID of the NFT that will be transferred + * @param _owner Address of owner of the tokens that will be used + * @param _spender Address of the spender that will use the tokens of owner + * @param _nftId ID of the NFT that will be transferred * @returns Transaction signer */ async approve( - owner: WalletAddress, - spender: WalletAddress, - nftId: NftId + _owner: WalletAddress, + _spender: WalletAddress, + _nftId: NftId ): Promise { - return new TransactionSigner('example') + throw new Error('Method not implemented.') } } diff --git a/packages/networks/ton/src/assets/Token.ts b/packages/networks/ton/src/assets/Token.ts index f539cc1..7818665 100644 --- a/packages/networks/ton/src/assets/Token.ts +++ b/packages/networks/ton/src/assets/Token.ts @@ -1,27 +1,91 @@ import { Contract } from './Contract' +import { math } from '@multiplechain/utils' +import { Address, beginCell, internal, toNano } from '@ton/core' import { TransactionSigner } from '../services/TransactionSigner' -import type { TokenInterface, TransferAmount, WalletAddress } from '@multiplechain/types' +import { + ErrorTypeEnum, + type TokenInterface, + type TransferAmount, + type WalletAddress +} from '@multiplechain/types' +import { OpCodes } from '../browser' + +interface TokenMetadata { + name: string + symbol: string + decimals: number + description: string + image: string +} export class Token extends Contract implements TokenInterface { + metadata: TokenMetadata + + /** + * @returns Token metadata + */ + async getMetadata(): Promise { + if (this.metadata) { + return this.metadata + } + + const master = await this.getJettonMaster() + + return (this.metadata = master.jetton_content as any as TokenMetadata) + } + /** * @returns Token name */ async getName(): Promise { - return 'example' + return (await this.getMetadata()).name } /** * @returns Token symbol */ async getSymbol(): Promise { - return 'example' + return (await this.getMetadata()).symbol } /** * @returns Decimal value of the token */ async getDecimals(): Promise { - return 18 + return Number((await this.getMetadata()).decimals) + } + + /** + * @param address Wallet address + * @returns Wallet address of the jetton + */ + async getJettonWalletAddress(address: string): Promise
    { + const userAddressCell = beginCell().storeAddress(Address.parse(address)).endCell() + + const response = await this.provider.client1.runMethod( + Address.parse(this.getAddress()), + 'get_wallet_address', + [{ type: 'slice', cell: userAddressCell }] + ) + + return response.stack.readAddress() + } + + async getJettonMaster(): Promise<{ + address: string + admin_address: string + code_hash: string + data_hash: string + jetton_content: Record + jetton_wallet_code_hash: string + last_transaction_lt: string + mintable: boolean + total_supply: string + }> { + const response = await this.provider.client3.getJettonMasters({ + address: [this.getAddress()] + }) + return response.jetton_masters[0] } /** @@ -29,23 +93,41 @@ export class Token extends Contract implements TokenInterface * @returns Wallet balance as currency of TOKEN */ async getBalance(owner: WalletAddress): Promise { - return 0 + const response = await this.provider.client3.getJettonWallets({ + owner_address: [owner], + jetton_address: this.getAddress() + }) + const decimals = await this.getDecimals() + const balance = Number(response.jetton_wallets[0].balance) + return math.div(balance, math.pow(10, decimals), decimals) } /** * @returns Total supply of the token */ async getTotalSupply(): Promise { - return 0 + const master = await this.getJettonMaster() + const decimals = await this.getDecimals() + const totalSupply = Number(master.total_supply) + return math.div(totalSupply, math.pow(10, decimals), decimals) } /** - * @param owner Address of owner of the tokens that is being used - * @param spender Address of the spender that is using the tokens of owner + * @param _owner Address of owner of the tokens that is being used + * @param _spender Address of the spender that is using the tokens of owner * @returns Amount of tokens that the spender is allowed to spend */ - async getAllowance(owner: WalletAddress, spender: WalletAddress): Promise { - return 0 + async getAllowance(_owner: WalletAddress, _spender: WalletAddress): Promise { + throw new Error('Method not implemented.') + } + + /** + * @param amount Amount of tokens that will be transferred + * @returns Formatted amount + */ + async formatAmount(amount: number): Promise { + const decimals = await this.getDecimals() + return math.mul(amount, math.pow(10, decimals), decimals) } /** @@ -53,44 +135,75 @@ export class Token extends Contract implements TokenInterface * @param sender Sender wallet address * @param receiver Receiver wallet address * @param amount Amount of assets that will be transferred + * @param body Comment for the transaction * @returns Transaction signer */ async transfer( sender: WalletAddress, receiver: WalletAddress, - amount: TransferAmount + amount: TransferAmount, + body?: string ): Promise { - return new TransactionSigner('example') + if (amount <= 0) { + throw new Error(ErrorTypeEnum.INVALID_AMOUNT) + } + + const balance = await this.getBalance(sender) + + if (amount > balance) { + throw new Error(ErrorTypeEnum.INSUFFICIENT_BALANCE) + } + + const [formattedAmount, senderJettonWallet] = await Promise.all([ + this.formatAmount(amount), + this.getJettonWalletAddress(sender) + ]) + + const builder = beginCell() + .storeUint(OpCodes.JETTON_TRANSFER, 32) + .storeUint(0, 64) + .storeCoins(formattedAmount) + + const cell = this.endCell(builder, receiver, sender, body) + + return new TransactionSigner( + internal({ + to: senderJettonWallet, + value: toNano('0.05'), + bounce: true, + body: cell + }) + ) } /** - * @param spender Address of the spender of transaction - * @param owner Sender wallet address - * @param receiver Receiver wallet address - * @param amount Amount of tokens that will be transferred + * @param _spender Address of the spender of transaction + * @param _owner Sender wallet address + * @param _receiver Receiver wallet address + * @param _amount Amount of tokens that will be transferred * @returns Transaction signer */ async transferFrom( - spender: WalletAddress, - owner: WalletAddress, - receiver: WalletAddress, - amount: TransferAmount + _spender: WalletAddress, + _owner: WalletAddress, + _receiver: WalletAddress, + _amount: TransferAmount ): Promise { - return new TransactionSigner('example') + throw new Error('Method not implemented.') } /** * Gives permission to the spender to spend owner's tokens - * @param owner Address of owner of the tokens that will be used - * @param spender Address of the spender that will use the tokens of owner - * @param amount Amount of the tokens that will be used + * @param _owner Address of owner of the tokens that will be used + * @param _spender Address of the spender that will use the tokens of owner + * @param _amount Amount of the tokens that will be used * @returns Transaction signer */ async approve( - owner: WalletAddress, - spender: WalletAddress, - amount: TransferAmount + _owner: WalletAddress, + _spender: WalletAddress, + _amount: TransferAmount ): Promise { - return new TransactionSigner('example') + throw new Error('Method not implemented.') } } diff --git a/packages/networks/ton/src/models/Transaction.ts b/packages/networks/ton/src/models/Transaction.ts index 1d2fa1b..a37e4da 100644 --- a/packages/networks/ton/src/models/Transaction.ts +++ b/packages/networks/ton/src/models/Transaction.ts @@ -73,6 +73,10 @@ export class Transaction implements TransactionInterface { await this.provider.client3.getActions({ trace_id: [transaction.trace_id] }) ).actions[0] + if (action === undefined) { + return null + } + return (this.data = { transaction, action }) } catch (error) { throw new Error(ErrorTypeEnum.RPC_REQUEST_ERROR) @@ -94,6 +98,7 @@ export class Transaction implements TransactionInterface { } setTimeout(check, ms) } catch (error) { + console.error(error) reject(TransactionStatusEnum.FAILED) } } diff --git a/packages/networks/ton/src/services/Provider.ts b/packages/networks/ton/src/services/Provider.ts index a7f9816..d3c7fe0 100644 --- a/packages/networks/ton/src/services/Provider.ts +++ b/packages/networks/ton/src/services/Provider.ts @@ -5,7 +5,15 @@ import { type ProviderInterface } from '@multiplechain/types' import TonCenterV3 from 'ton-center-v3' -import { TonClient, TonClient4 } from '@ton/ton' +import { + type Address, + TonClient, + WalletContractV3R1, + WalletContractV3R2, + WalletContractV4, + WalletContractV5Beta, + WalletContractV5R1 +} from '@ton/ton' export interface TonNetworkConfigInterface extends NetworkConfigInterface { apiKey: string @@ -13,11 +21,33 @@ export interface TonNetworkConfigInterface extends NetworkConfigInterface { explorer?: 'tonviewer' | 'tonscan' } -export enum TonNetwork { +export enum Network { MAINNET = -239, TESTNET = -3 } +export enum OpCodes { + JETTON_TRANSFER = 0xf8a7ea5, + NFT_TRANSFER = 0x5fcc3d14, + STONFI_SWAP = 0x25938561 +} + +export enum WalletVersion { + V3R1 = 0, + V3R2 = 1, + V4R1 = 2, + V4R2 = 3, + V5_BETA = 4, + V5R1 = 5 +} + +export type WalletContract = + | WalletContractV3R1 + | WalletContractV3R2 + | WalletContractV4 + | WalletContractV5Beta + | WalletContractV5R1 + export class Provider implements ProviderInterface { /** * Network configuration of the provider @@ -28,8 +58,6 @@ export class Provider implements ProviderInterface { client3: TonCenterV3 - client4: TonClient4 - mainnetEndpoint = 'https://toncenter.com/api/v2/jsonRPC' testnetEndpoint = 'https://testnet.toncenter.com/api/v2/jsonRPC' @@ -46,6 +74,8 @@ export class Provider implements ProviderInterface { workchain: number + net: Network + public walletStandard: { testOnly: boolean bounceable: boolean @@ -99,7 +129,6 @@ export class Provider implements ProviderInterface { try { await this.client1.getMasterchainInfo() await this.client3.getMasterchainInfo() - await this.client4.getLastBlock() if (url) { const response = await axios.get(url) @@ -111,6 +140,7 @@ export class Provider implements ProviderInterface { return true } catch (error) { + console.log(error) return error as Error } } @@ -155,14 +185,6 @@ export class Provider implements ProviderInterface { apiKey }) - this.client4 = new TonClient4({ - endpoint, - requestInterceptor: (config) => { - config.headers['X-API-KEY'] = apiKey - return config - } - }) - this.client3 = new TonCenterV3({ apiKey, testnet @@ -188,6 +210,8 @@ export class Provider implements ProviderInterface { this.workchain = network.workchain ?? 0 + this.net = testnet ? Network.TESTNET : Network.MAINNET + Provider._instance = this } @@ -198,4 +222,127 @@ export class Provider implements ProviderInterface { isTestnet(): boolean { return this.network?.testnet ?? false } + + /** + * Get the current network configuration is mainnet or not + * @param address - Wallet address + * @returns wallet version + */ + async findWalletVersion(address: string): Promise { + const result = await this.client3.getWalletInformation(address) + if (result.status === 'uninitialized') { + throw new Error('Wallet is not initialized') + } + + const type = result.wallet_type + + switch (type) { + case 'wallet v5 r1': + return WalletVersion.V5R1 + case 'wallet v5 beta': + return WalletVersion.V5_BETA + case 'wallet v4 r2': + return WalletVersion.V4R2 + case 'wallet v4 r1': + return WalletVersion.V4R1 + case 'wallet v3 r2': + return WalletVersion.V3R2 + case 'wallet v3 r1': + return WalletVersion.V3R1 + default: + throw new Error('Unknown wallet version') + } + } + + /** + * Get the current network configuration is mainnet or not + * @param publicKey - Public key of the wallet + * @param version - Wallet contract version + * @returns mainnet status + */ + createWalletByVersion(publicKey: Buffer, version: WalletVersion): WalletContract { + const workchain = this.workchain + + switch (version) { + case WalletVersion.V3R1: + return WalletContractV3R1.create({ workchain, publicKey }) + case WalletVersion.V3R2: + return WalletContractV3R2.create({ workchain, publicKey }) + case WalletVersion.V4R1: + throw new Error('Unsupported wallet contract version - v4R1') + case WalletVersion.V4R2: + return WalletContractV4.create({ workchain, publicKey }) + case WalletVersion.V5_BETA: + return WalletContractV5Beta.create({ + walletId: { + networkGlobalId: this.net + }, + publicKey + }) + case WalletVersion.V5R1: + return this.createWalletV5R1(publicKey) + } + } + + /** + * Create wallet contract for version 5R1 + * @param publicKey - Public key of the wallet + * @returns Wallet contract + */ + createWalletV5R1(publicKey: Buffer): WalletContractV5R1 { + return WalletContractV5R1.create({ + workchain: this.workchain, + walletId: { + networkGlobalId: this.net + }, + publicKey + }) + } + + /** + * Retry the function + * @param fn - Function that will be retried + * @param options - Retry options + * @param options.retries - Number of retries + * @param options.delay - Delay between retries + * @returns Function result + */ + async retry(fn: () => Promise, options: { retries: number; delay: number }): Promise { + let lastError: Error | undefined + for (let i = 0; i < options.retries; i++) { + try { + return await fn() + } catch (e) { + if (e instanceof Error) { + lastError = e + } + await new Promise((resolve) => setTimeout(resolve, options.delay)) + } + } + throw lastError ?? new Error('Unknown error') + } + + /** + * Find transaction hash by message hash + * @param address - Wallet address + * @param _hash - Message hash + * @returns Transaction hash + */ + async findTxHashByMessageHash(address: Address, _hash: string): Promise { + return await this.retry( + async () => { + const transactions = await this.client1.getTransactions(address, { + limit: 5 + }) + for (const tx of transactions) { + const hash = tx.inMessage?.body.hash().toString('base64') + if (hash === _hash) { + return tx.hash().toString('hex') + } + } + throw new Error('Transaction not found') + }, + { retries: 30, delay: 1000 } + ) + } } diff --git a/packages/networks/ton/src/services/TransactionSigner.ts b/packages/networks/ton/src/services/TransactionSigner.ts index bc6c45c..2eda026 100644 --- a/packages/networks/ton/src/services/TransactionSigner.ts +++ b/packages/networks/ton/src/services/TransactionSigner.ts @@ -1,27 +1,35 @@ import { Provider } from '../services/Provider' +import { mnemonicToPrivateKey } from '@ton/crypto' +import type { OpenedContract, WalletContractV5R1 } from '@ton/ton' +import { type Cell, SendMode, type MessageRelaxed } from '@ton/core' import type { PrivateKey, TransactionId, TransactionSignerInterface } from '@multiplechain/types' -export class TransactionSigner implements TransactionSignerInterface { +export class TransactionSigner implements TransactionSignerInterface { /** * Transaction data from the blockchain network */ - rawData: unknown + rawData: MessageRelaxed /** * Signed transaction data */ - signedData: unknown + signedData: Cell /** * Blockchain network provider */ provider: Provider + /** + * Wallet contract + */ + wallet: OpenedContract + /** * @param rawData - Transaction data * @param provider - Blockchain network provider */ - constructor(rawData: unknown, provider?: Provider) { + constructor(rawData: MessageRelaxed, provider?: Provider) { this.rawData = rawData this.provider = provider ?? Provider.instance } @@ -32,7 +40,17 @@ export class TransactionSigner implements TransactionSignerInterface { - return await Promise.resolve(this) + const { publicKey, secretKey } = await mnemonicToPrivateKey(privateKey.split(' ')) + const contract = this.provider.createWalletV5R1(publicKey) + this.wallet = this.provider.client1.open(contract) + const seqno = await this.wallet.getSeqno() + this.signedData = this.wallet.createTransfer({ + seqno, + secretKey, + messages: [this.rawData], + sendMode: SendMode.PAY_GAS_SEPARATELY + }) + return this } /** @@ -40,20 +58,29 @@ export class TransactionSigner implements TransactionSignerInterface { - return await Promise.resolve('id') + try { + await this.wallet.send(this.signedData) + return await this.provider.findTxHashByMessageHash( + this.wallet.address, + this.signedData.hash().toString('base64') + ) + } catch (error) { + console.error(error) + return '' + } } /** * @returns raw transaction data */ - getRawData(): unknown { + getRawData(): MessageRelaxed { return this.rawData } /** * @returns signed transaction data */ - getSignedData(): unknown { + getSignedData(): Cell { return this.signedData } } diff --git a/packages/networks/ton/tests/assets.spec.ts b/packages/networks/ton/tests/assets.spec.ts index 8f555d3..60212e2 100644 --- a/packages/networks/ton/tests/assets.spec.ts +++ b/packages/networks/ton/tests/assets.spec.ts @@ -7,32 +7,34 @@ import { math } from '@multiplechain/utils' import { Transaction } from '../src/models/Transaction' import { TransactionStatusEnum, type TransactionId } from '@multiplechain/types' import { TransactionSigner } from '../src/services/TransactionSigner' +import { Cell } from '@ton/core' const coinBalanceTestAmount = Number(process.env.TON_COIN_BALANCE_TEST_AMOUNT) const tokenBalanceTestAmount = Number(process.env.TON_TOKEN_BALANCE_TEST_AMOUNT) const nftBalanceTestAmount = Number(process.env.TON_NFT_BALANCE_TEST_AMOUNT) const transferTestAmount = Number(process.env.TON_TRANSFER_TEST_AMOUNT) const tokenTransferTestAmount = Number(process.env.TON_TOKEN_TRANSFER_TEST_AMOUNT) -const tokenApproveTestAmount = Number(process.env.TON_TOKEN_APPROVE_TEST_AMOUNT) -const nftTransferId = Number(process.env.TON_NFT_TRANSFER_ID) +// const tokenApproveTestAmount = Number(process.env.TON_TOKEN_APPROVE_TEST_AMOUNT) +const nftTransferId = String(process.env.TON_NFT_TRANSFER_ID) +const nftBalanceId = String(process.env.TON_NFT_BALANCE_TEST_ID) const coinTransferTestIsActive = Boolean(process.env.TON_COIN_TRANSFER_TEST_IS_ACTIVE !== 'false') const tokenTransferTestIsActive = Boolean(process.env.TON_TOKEN_TRANSFER_TEST_IS_ACTIVE !== 'false') -const tokenApproveTestIsActive = Boolean(process.env.TON_TOKEN_APPROVE_TEST_IS_ACTIVE !== 'false') +// const tokenApproveTestIsActive = Boolean(process.env.TON_TOKEN_APPROVE_TEST_IS_ACTIVE !== 'false') const nftTransactionTestIsActive = Boolean( process.env.TON_NFT_TRANSACTION_TEST_IS_ACTIVE !== 'false' ) -const tokenTransferFromTestIsActive = Boolean( - process.env.TON_TOKEN_TRANSFER_FROM_TEST_IS_ACTIVE !== 'false' -) +// const tokenTransferFromTestIsActive = Boolean( +// process.env.TON_TOKEN_TRANSFER_FROM_TEST_IS_ACTIVE !== 'false' +// ) const balanceTestAddress = String(process.env.TON_BALANCE_TEST_ADDRESS) -const senderPrivateKey = String(process.env.TON_SENDER_PRIVATE_KEY) -const receiverPrivateKey = String(process.env.TON_RECEIVER_PRIVATE_KEY) -const senderTestAddress = String(process.env.TON_SENDER_TEST_ADDRESS) -const receiverTestAddress = String(process.env.TON_RECEIVER_TEST_ADDRESS) +const senderPrivateKey = String(process.env.TON_SENDER_SEED_PHRASE) +// const receiverPrivateKey = String(process.env.TON_RECEIVER_SEED_PHRASE) +const senderTestAddress = String(process.env.TON_SENDER_ADDRESS) +const receiverTestAddress = String(process.env.TON_RECEIVER_ADDRESS) const tokenTestAddress = String(process.env.TON_TOKEN_TEST_ADDRESS) -const nftTestAddress = String(process.env.TON_NFT_TEST_ADDRESS) +const nftCollection = String(process.env.TON_NFT_COLLECTION) const waitSecondsBeforeThanNewTx = async (seconds: number): Promise => { return await new Promise((resolve) => setTimeout(resolve, seconds * 1000)) @@ -47,13 +49,14 @@ const checkSigner = async (signer: TransactionSigner, privateKey?: string): Prom await signer.sign(privateKey ?? senderPrivateKey) - assert.isString(signer.getSignedData()) + assert.instanceOf(signer.getSignedData(), Cell) } -const checkTx = async (transactionId: TransactionId): Promise => { +const checkTx = async (transactionId: TransactionId): Promise => { const transaction = new Transaction(transactionId) const status = await transaction.wait(10000) expect(status).toBe(TransactionStatusEnum.CONFIRMED) + return transaction } describe('Coin', () => { @@ -64,7 +67,7 @@ describe('Coin', () => { }) it('Decimals', () => { - expect(coin.getDecimals()).toBe(18) + expect(coin.getDecimals()).toBe(9) }) it('Balance', async () => { @@ -83,12 +86,7 @@ describe('Coin', () => { if (!coinTransferTestIsActive) return - const beforeBalance = await coin.getBalance(receiverTestAddress) - await checkTx(await signer.send()) - - const afterBalance = await coin.getBalance(receiverTestAddress) - expect(afterBalance).toBe(math.add(beforeBalance, transferTestAmount)) }) }) @@ -96,12 +94,12 @@ describe('Token', () => { const token = new Token(tokenTestAddress) it('Name and symbol', async () => { - expect(await token.getName()).toBe('TestToken') - expect(await token.getSymbol()).toBe('TTN') + expect(await token.getName()).toBe('TON Test Token') + expect(await token.getSymbol()).toBe('TTT') }) it('Decimals', async () => { - expect(await token.getDecimals()).toBe(18) + expect(await token.getDecimals()).toBe(9) }) it('Balance', async () => { @@ -111,7 +109,7 @@ describe('Token', () => { it('Total supply', async () => { const totalSupply = await token.getTotalSupply() - expect(totalSupply).toBe(1000000) + expect(totalSupply).toBe(100000000) }) it('Transfer', async () => { @@ -135,55 +133,55 @@ describe('Token', () => { expect(afterBalance).toBe(math.add(beforeBalance, tokenTransferTestAmount)) }) - it('Approve and Allowance', async () => { - const signer = await token.approve( - senderTestAddress, - receiverTestAddress, - tokenApproveTestAmount - ) + // it('Approve and Allowance', async () => { + // const signer = await token.approve( + // senderTestAddress, + // receiverTestAddress, + // tokenApproveTestAmount + // ) - await checkSigner(signer) + // await checkSigner(signer) - if (!tokenApproveTestIsActive) return + // if (!tokenApproveTestIsActive) return - await waitSecondsBeforeThanNewTx(5) + // await waitSecondsBeforeThanNewTx(5) - await checkTx(await signer.send()) + // await checkTx(await signer.send()) - expect(await token.getAllowance(senderTestAddress, receiverTestAddress)).toBe( - tokenApproveTestAmount - ) - }) + // expect(await token.getAllowance(senderTestAddress, receiverTestAddress)).toBe( + // tokenApproveTestAmount + // ) + // }) - it('Transfer from', async () => { - const signer = await token.transferFrom( - receiverTestAddress, - senderTestAddress, - receiverTestAddress, - 2 - ) + // it('Transfer from', async () => { + // const signer = await token.transferFrom( + // receiverTestAddress, + // senderTestAddress, + // receiverTestAddress, + // 2 + // ) - await checkSigner(signer, receiverPrivateKey) + // await checkSigner(signer, receiverPrivateKey) - if (!tokenTransferFromTestIsActive) return + // if (!tokenTransferFromTestIsActive) return - await waitSecondsBeforeThanNewTx(5) + // await waitSecondsBeforeThanNewTx(5) - const beforeBalance = await token.getBalance(receiverTestAddress) + // const beforeBalance = await token.getBalance(receiverTestAddress) - await checkTx(await signer.send()) + // await checkTx(await signer.send()) - const afterBalance = await token.getBalance(receiverTestAddress) - expect(afterBalance).toBe(math.add(beforeBalance, 2)) - }) + // const afterBalance = await token.getBalance(receiverTestAddress) + // expect(afterBalance).toBe(math.add(beforeBalance, 2)) + // }) }) describe('Nft', () => { - const nft = new NFT(nftTestAddress) + const nft = new NFT(nftCollection) it('Name and symbol', async () => { - expect(await nft.getName()).toBe('TestNFT') - expect(await nft.getSymbol()).toBe('TNFT') + expect(await nft.getName()).toBe('NFT Test on TON') + expect(await nft.getSymbol()).toBe('NFT Test on TON') }) it('Balance', async () => { @@ -192,16 +190,18 @@ describe('Nft', () => { }) it('Owner', async () => { - expect(await nft.getOwner(5)).toBe(balanceTestAddress) + expect(await nft.getOwner(nftBalanceId)).toBe(balanceTestAddress) }) it('Token URI', async () => { - expect(await nft.getTokenURI(5)).toBe('') + expect(await nft.getTokenURI(nftBalanceId)).toBe( + 'https://s.getgems.io/nft/c/677e3821c9af9379ef55f729/0/meta.json' + ) }) - it('Approved', async () => { - expect(await nft.getApproved(5)).toBe(null) - }) + // it('Approved', async () => { + // expect(await nft.getApproved(nftBalanceId)).toBe(null) + // }) it('Transfer', async () => { const signer = await nft.transfer(senderTestAddress, receiverTestAddress, nftTransferId) @@ -217,40 +217,40 @@ describe('Nft', () => { expect(await nft.getOwner(nftTransferId)).toBe(receiverTestAddress) }) - it('Approve', async () => { - const customOwner = nftTransactionTestIsActive ? receiverTestAddress : senderTestAddress - const customSpender = nftTransactionTestIsActive ? senderTestAddress : receiverTestAddress - const customPrivateKey = nftTransactionTestIsActive ? receiverPrivateKey : senderPrivateKey + // it('Approve', async () => { + // const customOwner = nftTransactionTestIsActive ? receiverTestAddress : senderTestAddress + // const customSpender = nftTransactionTestIsActive ? senderTestAddress : receiverTestAddress + // const customPrivateKey = nftTransactionTestIsActive ? receiverPrivateKey : senderPrivateKey - const signer = await nft.approve(customOwner, customSpender, nftTransferId) + // const signer = await nft.approve(customOwner, customSpender, nftTransferId) - await checkSigner(signer, customPrivateKey) + // await checkSigner(signer, customPrivateKey) - if (!nftTransactionTestIsActive) return + // if (!nftTransactionTestIsActive) return - await waitSecondsBeforeThanNewTx(5) + // await waitSecondsBeforeThanNewTx(5) - await checkTx(await signer.send()) + // await checkTx(await signer.send()) - expect(await nft.getApproved(nftTransferId)).toBe(senderTestAddress) - }) + // expect(await nft.getApproved(nftTransferId)).toBe(senderTestAddress) + // }) - it('Transfer from', async () => { - if (!nftTransactionTestIsActive) return + // it('Transfer from', async () => { + // if (!nftTransactionTestIsActive) return - await waitSecondsBeforeThanNewTx(5) + // await waitSecondsBeforeThanNewTx(5) - const signer = await nft.transferFrom( - senderTestAddress, - receiverTestAddress, - senderTestAddress, - nftTransferId - ) + // const signer = await nft.transferFrom( + // senderTestAddress, + // receiverTestAddress, + // senderTestAddress, + // nftTransferId + // ) - await checkSigner(signer) + // await checkSigner(signer) - await checkTx(await signer.send()) + // await checkTx(await signer.send()) - expect(await nft.getOwner(nftTransferId)).toBe(senderTestAddress) - }) + // expect(await nft.getOwner(nftTransferId)).toBe(senderTestAddress) + // }) }) From f9d47db66fadb42516301ceff9909bf5048ec1ac Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Mon, 13 Jan 2025 13:00:09 +0300 Subject: [PATCH 07/15] updated --- .env.example | 39 ++++++++++++++++++++++++++++++++++++++- .eslintrc.json | 3 ++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 6f82cfe..be83464 100644 --- a/.env.example +++ b/.env.example @@ -136,4 +136,41 @@ SOL_TRANSFER_TX='2RDU1otuPR6UtevwYCQWnngvvjPiTFuHFdyCnzwQVR8wyZ7niqACt2QBmfuyD5a SOL_TOKEN_TRANSFER_TX='4XLpHmpiKXXDM7pAg8CXeSLjw7SYKZaSzJjXHP2E1vL2ndvrJ6GnuHUvaQpY3LHQeJww8fzFLJ9MiLnvgsyyyt3i' SOL_TOKEN_2022_TRANSFER_TX='3c2Myd3k4Pw1NbsCjuskkZCtbD9HRTjoyoxh2u7qsVLgFN1RbRYAXXRKzBRzwTAmv2pXDjArbotzVL6AVehBMeyg' SOL_NFT_TRANSFER_TX='3vrCoNVmeNgGG4LB1qvvdx21TYm6dnPBmhFqXChsusuLn5ZEjFZNFG3BwQQ8fodBYiPXG8QokdBLWjRtxgi7tnRD' -#Solana \ No newline at end of file +#Solana + +#TON +# Assets +TON_COIN_TRANSFER_TEST_IS_ACTIVE=false +TON_TOKEN_TRANSFER_TEST_IS_ACTIVE=false +TON_TOKEN_APPROVE_TEST_IS_ACTIVE=false +TON_TOKEN_TRANSFER_FROM_TEST_IS_ACTIVE=false +TON_NFT_TRANSACTION_TEST_IS_ACTIVE=true +TON_TRANSACTION_LISTENER_TEST_IS_ACTIVE=false + +TON_COIN_BALANCE_TEST_AMOUNT=0.199996009 +TON_TOKEN_BALANCE_TEST_AMOUNT=100 +TON_NFT_BALANCE_TEST_AMOUNT=1 +TON_NFT_BALANCE_TEST_ID='kQDiYpnHCz8lP2yHtE0ePShy1dZtlOEZJOr4omdZ_zDOCMD7' +TON_TRANSFER_TEST_AMOUNT=0.001 +TON_TOKEN_TRANSFER_TEST_AMOUNT=1 +TON_TOKEN_APPROVE_TEST_AMOUNT=10 +#NFT ID +TON_BALANCE_TEST_ADDRESS='0QCDEJc7FGObqxBSqgKi4MMysr12FNEXP5WtfJhTU7DXlSHC' +TON_SENDER_SEED_PHRASE='observe eagle gym happy balance again width pony now cricket quit coach under three visa illness sign comfort valley diet tribe lunar power crane' +TON_RECEIVER_SEED_PHRASE='album lottery sock ozone plate label cute attend talk pretty horror obtain record scrub mushroom cook coast initial grant ahead faculty pulse wide saddle' +TON_SENDER_ADDRESS='0QBh14OFHZqXqMyAHUio8EZ9FAf5smnkcmb0j533aHtFNcsF' +TON_RECEIVER_ADDRESS='0QBE7-YFiBHs3mdSsp3kdUFfTESFvYxb23n5mAfFUOd7T2S3' +TON_TOKEN_TEST_ADDRESS='kQAIyxof6tfnDvBw5KC-bfUGF3JtkzkHR4cfFB49Ik-FV3RW' +TON_NFT_TRANSFER_ID='kQCqlC-1l1ScWpr7wfeiVBHmf-DFXuOOAcX567dlSfVBuRQV' +TON_NFT_COLLECTION='kQDNnL2Fi4TqcKiF0i2aeYMwHIhMR_AWqrG7WSkDph0mmL_S' +# Assets + +# Models +TON_NFT_ID='kQCGw3iqbbPAs8DqxYKEFAEPQpvvuVN9TelYMi23Gh8e66kp' +TON_COIN_AMOUNT=0.4 +TON_TOKEN_AMOUNT=10000 + +TON_TRANSFER_TX='6f97ca02d8f20151210ca2bef32340804214e4f74eebf6a9edf13b727ac2527e' +TON_TOKEN_TRANSFER_TX='e007ce43b116fd283364527c29411eb0cece2a49df776bf1990f2117747f3e2c' +TON_NFT_TRANSFER_TX='75f3029eaa33a56673fb4a3a449d972dd6af16e6f2f91ca9273c76bf9ad860f4' +#TON \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index b9aaf20..a189c44 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,7 +33,8 @@ "checksVoidReturn": false } ], - "filenames/match-exported": ["error", "pascal"] + "filenames/match-exported": ["error", "pascal"], + "@typescript-eslint/strict-boolean-expressions": "off" }, "ignorePatterns": [ "**/*.d.ts", From e5144d6fe965c042c1fe0733b2adef7e8c0c2808 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Mon, 13 Jan 2025 13:11:50 +0300 Subject: [PATCH 08/15] added wait for rpc request limit --- packages/networks/ton/tests/assets.spec.ts | 25 ++++++++++++++++------ packages/networks/ton/tests/models.spec.ts | 8 +++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/networks/ton/tests/assets.spec.ts b/packages/networks/ton/tests/assets.spec.ts index 60212e2..23fe402 100644 --- a/packages/networks/ton/tests/assets.spec.ts +++ b/packages/networks/ton/tests/assets.spec.ts @@ -36,7 +36,7 @@ const receiverTestAddress = String(process.env.TON_RECEIVER_ADDRESS) const tokenTestAddress = String(process.env.TON_TOKEN_TEST_ADDRESS) const nftCollection = String(process.env.TON_NFT_COLLECTION) -const waitSecondsBeforeThanNewTx = async (seconds: number): Promise => { +const waitForSec = async (seconds: number): Promise => { return await new Promise((resolve) => setTimeout(resolve, seconds * 1000)) } @@ -71,11 +71,13 @@ describe('Coin', () => { }) it('Balance', async () => { + await waitForSec(1) const balance = await coin.getBalance(balanceTestAddress) expect(balance).toBe(coinBalanceTestAmount) }) it('Transfer', async () => { + await waitForSec(1) const signer = await coin.transfer( senderTestAddress, receiverTestAddress, @@ -94,6 +96,7 @@ describe('Token', () => { const token = new Token(tokenTestAddress) it('Name and symbol', async () => { + await waitForSec(1) expect(await token.getName()).toBe('TON Test Token') expect(await token.getSymbol()).toBe('TTT') }) @@ -103,16 +106,19 @@ describe('Token', () => { }) it('Balance', async () => { + await waitForSec(1) const balance = await token.getBalance(balanceTestAddress) expect(balance).toBe(tokenBalanceTestAmount) }) it('Total supply', async () => { + await waitForSec(1) const totalSupply = await token.getTotalSupply() expect(totalSupply).toBe(100000000) }) it('Transfer', async () => { + await waitForSec(1) const signer = await token.transfer( senderTestAddress, receiverTestAddress, @@ -123,7 +129,7 @@ describe('Token', () => { if (!tokenTransferTestIsActive) return - await waitSecondsBeforeThanNewTx(5) + await waitForSec(5) const beforeBalance = await token.getBalance(receiverTestAddress) @@ -144,7 +150,7 @@ describe('Token', () => { // if (!tokenApproveTestIsActive) return - // await waitSecondsBeforeThanNewTx(5) + // await waitForSec(5) // await checkTx(await signer.send()) @@ -165,7 +171,7 @@ describe('Token', () => { // if (!tokenTransferFromTestIsActive) return - // await waitSecondsBeforeThanNewTx(5) + // await waitForSec(5) // const beforeBalance = await token.getBalance(receiverTestAddress) @@ -180,20 +186,24 @@ describe('Nft', () => { const nft = new NFT(nftCollection) it('Name and symbol', async () => { + await waitForSec(1) expect(await nft.getName()).toBe('NFT Test on TON') expect(await nft.getSymbol()).toBe('NFT Test on TON') }) it('Balance', async () => { + await waitForSec(1) const balance = await nft.getBalance(balanceTestAddress) expect(balance).toBe(nftBalanceTestAmount) }) it('Owner', async () => { + await waitForSec(1) expect(await nft.getOwner(nftBalanceId)).toBe(balanceTestAddress) }) it('Token URI', async () => { + await waitForSec(1) expect(await nft.getTokenURI(nftBalanceId)).toBe( 'https://s.getgems.io/nft/c/677e3821c9af9379ef55f729/0/meta.json' ) @@ -204,13 +214,14 @@ describe('Nft', () => { // }) it('Transfer', async () => { + await waitForSec(1) const signer = await nft.transfer(senderTestAddress, receiverTestAddress, nftTransferId) await checkSigner(signer) if (!nftTransactionTestIsActive) return - await waitSecondsBeforeThanNewTx(5) + await waitForSec(5) await checkTx(await signer.send()) @@ -228,7 +239,7 @@ describe('Nft', () => { // if (!nftTransactionTestIsActive) return - // await waitSecondsBeforeThanNewTx(5) + // await waitForSec(5) // await checkTx(await signer.send()) @@ -238,7 +249,7 @@ describe('Nft', () => { // it('Transfer from', async () => { // if (!nftTransactionTestIsActive) return - // await waitSecondsBeforeThanNewTx(5) + // await waitForSec(5) // const signer = await nft.transferFrom( // senderTestAddress, diff --git a/packages/networks/ton/tests/models.spec.ts b/packages/networks/ton/tests/models.spec.ts index 6c8a105..c414d80 100644 --- a/packages/networks/ton/tests/models.spec.ts +++ b/packages/networks/ton/tests/models.spec.ts @@ -18,6 +18,10 @@ const nftTransferTx = String(process.env.TON_NFT_TRANSFER_TX) const sender = String(process.env.TON_SENDER_ADDRESS) const receiver = String(process.env.TON_RECEIVER_ADDRESS) +const waitForSec = async (seconds: number): Promise => { + return await new Promise((resolve) => setTimeout(resolve, seconds * 1000)) +} + describe('Transaction', () => { const tx = new Transaction(tonTransferTx) it('Id', async () => { @@ -25,6 +29,7 @@ describe('Transaction', () => { }) it('Data', async () => { + await waitForSec(1) expect(await tx.getData()).toBeTypeOf('object') }) @@ -71,6 +76,7 @@ describe('Coin Transaction', () => { const tx = new CoinTransaction(tonTransferTx) it('Receiver', async () => { + await waitForSec(1) expect((await tx.getReceiver()).toLowerCase()).toBe(receiver.toLowerCase()) }) @@ -97,6 +103,7 @@ describe('Token Transaction', () => { const tx = new TokenTransaction(tokenTransferTx) it('Receiver', async () => { + await waitForSec(1) expect((await tx.getReceiver()).toLowerCase()).toBe(receiver.toLowerCase()) }) @@ -123,6 +130,7 @@ describe('NFT Transaction', () => { const tx = new NftTransaction(nftTransferTx) it('Receiver', async () => { + await waitForSec(1) expect((await tx.getReceiver()).toLowerCase()).toBe(receiver.toLowerCase()) }) From 5b56aab49e57eca16b6c42ce1075a3593c23a52f Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Mon, 13 Jan 2025 13:12:18 +0300 Subject: [PATCH 09/15] updated --- packages/utils/tests/index.spec.ts | 4 +--- vitest.config.ts | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/utils/tests/index.spec.ts b/packages/utils/tests/index.spec.ts index df6d807..ea82770 100644 --- a/packages/utils/tests/index.spec.ts +++ b/packages/utils/tests/index.spec.ts @@ -58,9 +58,7 @@ describe('Helper methods', () => { }) it('Check websocket', async () => { - expect( - await checkWebSocket('wss://sepolia.infura.io/ws/v3/9aa3d95b3bc440fa88ea12eaa4456161') - ).toBe(true) + expect(await checkWebSocket('wss://ethereum-sepolia-rpc.publicnode.com')).toBe(true) }) it('Is numeric', () => { diff --git a/vitest.config.ts b/vitest.config.ts index e9ed075..94f1351 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -31,7 +31,8 @@ export default mergeConfig( './packages/networks/evm-chains/tests/setup.ts', './packages/networks/bitcoin/tests/setup.ts', './packages/networks/solana/tests/setup.ts', - './packages/networks/tron/tests/setup.ts' + './packages/networks/tron/tests/setup.ts', + './packages/networks/ton/tests/setup.ts' ] } }) From 3bdfbd7d5d3f7a7546ea289bafb68dce31331c75 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Mon, 13 Jan 2025 15:30:34 +0300 Subject: [PATCH 10/15] optimize --- packages/networks/solana/src/assets/NFT.ts | 7 ++++--- packages/networks/solana/src/assets/Token.ts | 14 +++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/networks/solana/src/assets/NFT.ts b/packages/networks/solana/src/assets/NFT.ts index dbdb536..725dca4 100644 --- a/packages/networks/solana/src/assets/NFT.ts +++ b/packages/networks/solana/src/assets/NFT.ts @@ -171,8 +171,10 @@ export class NFT extends Contract implements NftInterface { const receiverPubKey = new PublicKey(receiver) const programId = await this.getProgramId(nftPubKey) - const ownerAccount = await this.getTokenAccount(ownerPubKey, programId) - const receiverAccount = await this.getTokenAccount(receiverPubKey, programId) + const [ownerAccount, receiverAccount] = await Promise.all([ + this.getTokenAccount(ownerPubKey, programId), + this.getTokenAccount(receiverPubKey, programId) + ]) // If the receiver does not have an associated token account, create one if ((await this.provider.web3.getAccountInfo(receiverAccount)) === null) { @@ -234,7 +236,6 @@ export class NFT extends Contract implements NftInterface { const ownerPubKey = new PublicKey(owner) const spenderPubKey = new PublicKey(spender) const programId = await this.getProgramId(nftPubKey) - const ownerAccount = await this.getTokenAccount(ownerPubKey, programId) transaction.add( diff --git a/packages/networks/solana/src/assets/Token.ts b/packages/networks/solana/src/assets/Token.ts index 96b8e3c..5cb5b83 100644 --- a/packages/networks/solana/src/assets/Token.ts +++ b/packages/networks/solana/src/assets/Token.ts @@ -234,10 +234,12 @@ export class Token extends Contract implements TokenInterface const spenderPubKey = new PublicKey(spender) const receiverPubKey = new PublicKey(receiver) const programId = await this.getProgramId() - const transferAmount = await this.formatAmount(amount) - const ownerAccount = await this.getTokenAccount(ownerPubKey, programId) - const receiverAccount = await this.getTokenAccount(receiverPubKey, programId) + const [transferAmount, ownerAccount, receiverAccount] = await Promise.all([ + this.formatAmount(amount), + this.getTokenAccount(ownerPubKey, programId), + this.getTokenAccount(receiverPubKey, programId) + ]) // If the receiver does not have an associated token account, create one if ((await this.provider.web3.getAccountInfo(receiverAccount)) === null) { @@ -295,9 +297,11 @@ export class Token extends Contract implements TokenInterface const ownerPubKey = new PublicKey(owner) const spenderPubKey = new PublicKey(spender) const programId = await this.getProgramId() - const approveAmount = await this.formatAmount(amount) - const ownerAccount = await this.getTokenAccount(ownerPubKey, programId) + const [approveAmount, ownerAccount] = await Promise.all([ + this.formatAmount(amount), + this.getTokenAccount(ownerPubKey, programId) + ]) transaction.add( createApproveInstruction( From b2be77f35d5533e429269e085e283f11caae2085 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Tue, 14 Jan 2025 12:14:16 +0300 Subject: [PATCH 11/15] completed Wallet --- packages/networks/ton/index.example.html | 33 ++--- packages/networks/ton/manifest.json | 5 + packages/networks/ton/package.json | 1 + packages/networks/ton/pnpm-lock.yaml | 115 ++++++++++++++++++ packages/networks/ton/src/browser/Wallet.ts | 79 ++++++++++-- .../ton/src/browser/adapters/Example.ts | 30 ----- .../ton/src/browser/adapters/TonConnect.ts | 78 ++++++++++++ .../ton/src/browser/adapters/icons.ts | 2 + .../ton/src/browser/adapters/index.ts | 2 +- .../networks/ton/src/services/Provider.ts | 39 ++++-- .../ton/src/services/TransactionSigner.ts | 5 +- 11 files changed, 315 insertions(+), 74 deletions(-) create mode 100644 packages/networks/ton/manifest.json delete mode 100644 packages/networks/ton/src/browser/adapters/Example.ts create mode 100644 packages/networks/ton/src/browser/adapters/TonConnect.ts create mode 100644 packages/networks/ton/src/browser/adapters/icons.ts diff --git a/packages/networks/ton/index.example.html b/packages/networks/ton/index.example.html index 0a992b8..ed2cf7c 100644 --- a/packages/networks/ton/index.example.html +++ b/packages/networks/ton/index.example.html @@ -175,10 +175,8 @@ icon
    Platforms:
    -
    Download link:
    -
    Deep link:
    - Connected address: + Connected address:
    Result:
    @@ -194,7 +192,8 @@ window.TON = TON const provider = new TON.Provider({ - // options + testnet: true, + apiKey: '0a804e1153b5dec04715342789d68c219845e3f1336da822399d7b180a5b5533' }) window.adapters = {} @@ -203,13 +202,9 @@ return alert('Adapter is not detected') } - if (adapter.disconnect) { - await adapter.disconnect() - } - const wallet = new TON.browser.Wallet(adapter) const adapterProvider = await wallet.connect({ - projectId: '113d9f5689edd84ff230c2a6d679c80c' + manifestUrl: 'https://gist.githubusercontent.com/0xBeycan/4ecdb38ae4157278c72398fe4a89508a/raw/cc5ef2f7f308b5ef2a4def51300b033ffe04904b/ton-manifest.json' }) document.querySelector('.methods').style.display = 'block' @@ -219,24 +214,21 @@ document.querySelector('.adapter-name').innerText = wallet.getName() document.querySelector('.adapter-icon img').src = wallet.getIcon() document.querySelector('.platforms').innerText = wallet.getPlatforms().join(', ') - document.querySelector('.download-link').innerText = wallet.getDownloadLink() - document.querySelector('.deep-link').innerText = - wallet.createDeepLink('https://google.com') + document.querySelector('.action-result .sign-message').innerText = '' document.querySelector('.connected-address').innerText = sender - document.querySelector('.action-result .sign-message').innerText = '' document.querySelector('.action-btn.sign-message').onclick = async () => { const result = await wallet.signMessage('Hello World') document.querySelector('.action-result .sign-message').innerText = result } - const receiver = '0xbBa4d06D1cEf94b35aDeCfDa893523907fdD36DE' - const tokenAddress = '0x4294cb0dD25dC9140B5127f247cBd47Eeb673431' + const receiver = '0QBE7-YFiBHs3mdSsp3kdUFfTESFvYxb23n5mAfFUOd7T2S3' + const tokenAddress = 'kQAIyxof6tfnDvBw5KC-bfUGF3JtkzkHR4cfFB49Ik-FV3RW' document.querySelector('.action-result .send-coin').innerText = '' document.querySelector('.action-btn.send-coin').onclick = async () => { const coin = new TON.assets.Coin() - const signer = await coin.transfer(sender, receiver, 0.00001) + const signer = await coin.transfer(sender, receiver, 0.001) const result = await wallet.sendTransaction(signer) document.querySelector('.action-result .send-coin').innerText = result } @@ -248,6 +240,15 @@ const result = await wallet.sendTransaction(signer) document.querySelector('.action-result .send-token').innerText = result } + + document.querySelector('.action-btn.disconnect').onclick = async () => { + await adapter.disconnect() + document.querySelector('.methods').style.display = 'none' + document.querySelector('.action-result .sign-message').innerText = '' + document.querySelector('.action-result .send-coin').innerText = '' + document.querySelector('.action-result .send-token').innerText = '' + document.querySelector('.connected-address').innerText = '' + } } const adapterTemplate = (adapter) => { diff --git a/packages/networks/ton/manifest.json b/packages/networks/ton/manifest.json new file mode 100644 index 0000000..9d342c6 --- /dev/null +++ b/packages/networks/ton/manifest.json @@ -0,0 +1,5 @@ +{ + "name": "MC TON", + "iconUrl": "https://ton.vote/logo.png", + "url": "https://github.com/MultipleChain/js/tree/alpha/packages/networks/ton" +} \ No newline at end of file diff --git a/packages/networks/ton/package.json b/packages/networks/ton/package.json index b1cd256..fb8843e 100644 --- a/packages/networks/ton/package.json +++ b/packages/networks/ton/package.json @@ -78,6 +78,7 @@ "@ton/crypto": "^3.3.0", "@ton/sandbox": "0.21.0-beta.1", "@ton/ton": "^15.1.0", + "@tonconnect/ui": "^2.0.11", "axios": "^1.7.9", "ton-center-v3": "^0.1.3" } diff --git a/packages/networks/ton/pnpm-lock.yaml b/packages/networks/ton/pnpm-lock.yaml index 6ee5415..372debc 100644 --- a/packages/networks/ton/pnpm-lock.yaml +++ b/packages/networks/ton/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: '@ton/ton': specifier: ^15.1.0 version: 15.1.0(@ton/core@0.59.1(@ton/crypto@3.3.0))(@ton/crypto@3.3.0) + '@tonconnect/ui': + specifier: ^2.0.11 + version: 2.0.11 axios: specifier: ^1.7.9 version: 1.7.9 @@ -80,6 +83,21 @@ packages: '@ton/core': '>=0.59.0' '@ton/crypto': '>=3.2.0' + '@tonconnect/isomorphic-eventsource@0.0.2': + resolution: {integrity: sha512-B4UoIjPi0QkvIzZH5fV3BQLWrqSYABdrzZQSI9sJA9aA+iC0ohOzFwVVGXanlxeDAy1bcvPbb29f6sVUk0UnnQ==} + + '@tonconnect/isomorphic-fetch@0.0.3': + resolution: {integrity: sha512-jIg5nTrDwnite4fXao3dD83eCpTvInTjZon/rZZrIftIegh4XxyVb5G2mpMqXrVGk1e8SVXm3Kj5OtfMplQs0w==} + + '@tonconnect/protocol@2.2.6': + resolution: {integrity: sha512-kyoDz5EqgsycYP+A+JbVsAUYHNT059BCrK+m0pqxykMODwpziuSAXfwAZmHcg8v7NB9VKYbdFY55xKeXOuEd0w==} + + '@tonconnect/sdk@3.0.6': + resolution: {integrity: sha512-dJipe0Cw43p/7o3Pa6Y6h0QMDtY2V2YKzwdCqcYvmyCYadBNmvA+8ScH9QK5GpkngRJnYaWq+321lAaQTFpUwA==} + + '@tonconnect/ui@2.0.11': + resolution: {integrity: sha512-5TOhfEDeyY8R9oyEGavLU+DRmDW3wSGyxVshWhHisi8597cZIuG39HHNbP05WJBBjmVm/Kh/bhcHtfx7lQp/Ig==} + '@types/node@20.12.7': resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} @@ -103,13 +121,23 @@ packages: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -132,6 +160,10 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + eventsource@2.0.2: + resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} + engines: {node: '>=12.0.0'} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -207,6 +239,15 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -227,9 +268,19 @@ packages: ton-center-v3@0.1.3: resolution: {integrity: sha512-Q/lw3ZfKCQAllGGEpumB89RDGQD1hrv/4jvfdromdwVEhMC4Bv1jnCQq6dzGlqgA34WAIinaZf8qyfyjbGUIfQ==} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + ua-parser-js@1.0.40: + resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + hasBin: true + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -252,6 +303,12 @@ packages: resolution: {integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA==} engines: {node: '>=14', npm: '>=6.12.0'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -336,6 +393,39 @@ snapshots: transitivePeerDependencies: - debug + '@tonconnect/isomorphic-eventsource@0.0.2': + dependencies: + eventsource: 2.0.2 + + '@tonconnect/isomorphic-fetch@0.0.3': + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@tonconnect/protocol@2.2.6': + dependencies: + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + + '@tonconnect/sdk@3.0.6': + dependencies: + '@tonconnect/isomorphic-eventsource': 0.0.2 + '@tonconnect/isomorphic-fetch': 0.0.3 + '@tonconnect/protocol': 2.2.6 + transitivePeerDependencies: + - encoding + + '@tonconnect/ui@2.0.11': + dependencies: + '@tonconnect/sdk': 3.0.6 + classnames: 2.5.1 + csstype: 3.1.3 + deepmerge: 4.3.1 + ua-parser-js: 1.0.40 + transitivePeerDependencies: + - encoding + '@types/node@20.12.7': dependencies: undici-types: 5.26.5 @@ -368,12 +458,18 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + classnames@2.5.1: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 + csstype@3.1.3: {} + dataloader@2.2.3: {} + deepmerge@4.3.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -397,6 +493,8 @@ snapshots: eventemitter3@5.0.1: {} + eventsource@2.0.2: {} + follow-redirects@1.15.9: {} for-each@0.3.3: @@ -464,6 +562,10 @@ snapshots: dependencies: mime-db: 1.52.0 + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + possible-typed-array-names@1.0.0: {} proxy-from-env@1.1.0: {} @@ -487,8 +589,14 @@ snapshots: transitivePeerDependencies: - debug + tr46@0.0.3: {} + + tweetnacl-util@0.15.1: {} + tweetnacl@1.0.3: {} + ua-parser-js@1.0.40: {} + undici-types@5.26.5: {} util@0.12.5: @@ -521,6 +629,13 @@ snapshots: web3-types: 1.5.0 zod: 3.22.4 + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 diff --git a/packages/networks/ton/src/browser/Wallet.ts b/packages/networks/ton/src/browser/Wallet.ts index 880ff0f..6c89817 100644 --- a/packages/networks/ton/src/browser/Wallet.ts +++ b/packages/networks/ton/src/browser/Wallet.ts @@ -1,5 +1,7 @@ import { Provider } from '../services/Provider' +import { CHAIN, type TonConnectUI } from '@tonconnect/ui' import type { TransactionSigner } from '../services/TransactionSigner' +import { Address, Cell, type CommonMessageInfoRelaxedInternal } from '@ton/core' import type { WalletInterface, WalletAdapterInterface, @@ -11,9 +13,15 @@ import type { UnknownConfig } from '@multiplechain/types' -type WalletAdapter = WalletAdapterInterface +type WalletAdapter = WalletAdapterInterface -export class Wallet implements WalletInterface { +const rejectMap = (error: any, reject: (a: any) => any): any => { + console.error('MultipleChain TON Connect Error:', error) + // const errorMessage = String(error.message ?? '') + return reject(error) +} + +export class Wallet implements WalletInterface { /** * WalletAdapter instance */ @@ -22,7 +30,7 @@ export class Wallet implements WalletInterface { - await this.adapter.connect() - return 'wallet address' + return await new Promise((resolve, reject) => { + this.adapter + .connect(this.networkProvider, config) + .then(async (provider) => { + this.walletProvider = provider + resolve(await this.getAddress()) + }) + .catch((error) => { + rejectMap(error, reject) + }) + }) } /** @@ -113,23 +130,61 @@ export class Wallet implements WalletInterface { - return 'wallet address' + const account = this.walletProvider.account + return Address.parse(this.getRawAddress()).toString({ + testOnly: account?.chain === CHAIN.TESTNET, + bounceable: false + }) + } + + getRawAddress(): string { + return this.walletProvider.account?.address ?? '' } /** - * @param message - Message to sign + * @param _message - Message to sign * @returns signed message */ - async signMessage(message: string): Promise { - return 'signed message' + async signMessage(_message: string): Promise { + throw new Error('Method not implemented.') } /** * @param transactionSigner - Transaction signer + * @param modalAction - Modal action + * @param modalAction.modals - Modals + * @param modalAction.notifications - Notifications * @returns transaction id */ - async sendTransaction(transactionSigner: TransactionSigner): Promise { - return 'transaction hash' + async sendTransaction( + transactionSigner: TransactionSigner, + modalAction = { + modals: [], + notifications: [] + } + ): Promise { + const account = this.walletProvider.account + const data = transactionSigner.getRawData() + const info = data.info as CommonMessageInfoRelaxedInternal + const result = await this.walletProvider.sendTransaction( + { + validUntil: Math.floor(Date.now() / 1000) + 60, + from: this.getRawAddress(), + network: account?.chain, + messages: [ + { + address: info.dest.toString(), + amount: info.value.coins.toString(), + payload: data.body.toBoc().toString('base64') + } + ] + }, + modalAction + ) + + const messageHash = Cell.fromBase64(result.boc).hash().toString('hex') + + return await this.networkProvider.findTxHashByMessageHash(messageHash) } /** @@ -137,6 +192,6 @@ export class Wallet implements WalletInterface void): void { - 'wallet events' + window.addEventListener('ton-connect-ui-' + eventName, callback) } } diff --git a/packages/networks/ton/src/browser/adapters/Example.ts b/packages/networks/ton/src/browser/adapters/Example.ts deleted file mode 100644 index f1bb4cf..0000000 --- a/packages/networks/ton/src/browser/adapters/Example.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { Provider } from '../../services/Provider' -import { WalletPlatformEnum } from '@multiplechain/types' -import type { ConnectConfig, UnknownConfig, WalletAdapterInterface } from '@multiplechain/types' - -declare global { - interface Window { - example: any - } -} - -const Example: WalletAdapterInterface = { - id: 'example', - name: 'Example', - icon: 'icon base64 string here', - platforms: [WalletPlatformEnum.BROWSER, WalletPlatformEnum.MOBILE], - downloadLink: 'wallet download link here', - createDeepLink(url: string, config?: UnknownConfig): string { - return `https://example.com/dapp/${url}` - }, - isDetected: () => Boolean(window?.example), - isConnected: async () => { - return true // return true if connected - }, - connect: async (provider?: Provider, config?: ConnectConfig) => { - // connect wallet here - return window.example - } -} - -export default Example diff --git a/packages/networks/ton/src/browser/adapters/TonConnect.ts b/packages/networks/ton/src/browser/adapters/TonConnect.ts new file mode 100644 index 0000000..9a8e386 --- /dev/null +++ b/packages/networks/ton/src/browser/adapters/TonConnect.ts @@ -0,0 +1,78 @@ +import { TonConnectIcon } from './icons' +import { THEME, TonConnectUI } from '@tonconnect/ui' +import type { Provider } from '../../services/Provider' +import { ErrorTypeEnum, WalletPlatformEnum } from '@multiplechain/types' +import type { ConnectConfig, WalletAdapterInterface } from '@multiplechain/types' + +export type TonConnectConfig = ConnectConfig & { + manifestUrl?: string + buttonRootId?: string + themeMode?: THEME +} + +let ui: TonConnectUI +let connectedAction: (value: TonConnectUI | PromiseLike) => void + +const createUI = (config?: TonConnectConfig): TonConnectUI => { + if (ui) { + return ui + } + + ui = new TonConnectUI({ + uiPreferences: { + theme: config?.themeMode ?? THEME.LIGHT + }, + manifestUrl: config?.manifestUrl, + buttonRootId: config?.buttonRootId + }) + + ui.onStatusChange((status) => { + if (status && ui.connected) { + ui.closeModal() + connectedAction(ui) + } + }) + + return ui +} + +const TonConnect: WalletAdapterInterface = { + id: 'ton-connect', + name: 'TON Connect', + icon: TonConnectIcon, + platforms: [WalletPlatformEnum.UNIVERSAL], + isDetected: () => true, + isConnected: async () => { + return ui?.connected ?? false + }, + disconnect: async () => { + if (ui) { + await ui.disconnect() + } + }, + connect: async (provider?: Provider, _config?: ConnectConfig) => { + const config = _config as TonConnectConfig + if (provider === undefined) { + throw new Error(ErrorTypeEnum.PROVIDER_IS_REQUIRED) + } + + if (config === undefined) { + throw new Error(ErrorTypeEnum.CONFIG_IS_REQUIRED) + } + + if (!config.manifestUrl) { + throw new Error('Manifest URL is required') + } + + return await new Promise((resolve, reject) => { + try { + connectedAction = resolve + void createUI(config).openModal() + } catch (error) { + reject(error) + } + }) + } +} + +export default TonConnect diff --git a/packages/networks/ton/src/browser/adapters/icons.ts b/packages/networks/ton/src/browser/adapters/icons.ts new file mode 100644 index 0000000..550ade1 --- /dev/null +++ b/packages/networks/ton/src/browser/adapters/icons.ts @@ -0,0 +1,2 @@ +export const TonConnectIcon = + 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfpAQ0OBghgihM5AAAQnElEQVR42u2dfXCV9ZXHP+e57wlvEQkYIi8iAQJux46IOi3oaLXq+Nap2x1ptUq3Ji3gdnZ2/K/WP3bG3Z0dRBwSbSmuHZhpLYPY1peKs2ptpcoOlgQCEQQaQBIISSDJfb9n//g9Ny/cJyE3ufc+F813Jsmd3Huf5/x+5zm/c37nnN85QrFh42mwUoB4gMuAOUAVsABlHjALoRyYApQCAcBjfzsJRIEeoBNoA1qAQ8BB0GbgGEg7ShJvCv55htsjHgRxmwAA6lvNX6UMWIhwPchSoBqoBCYB/jHQq0ActAs4AbIf9CPgI5QDiHSAQs10t2fCRYbUtaUpKAOWgt4BLEelCmFiAWhT4DzQjOr7wFsIHwMdgGvMKTxD6tsAvMBClPsQ7gWWACWuzEA/ekEbgdeAHagcQDRRaMYUhiEvtJnnEfWjsgx4BOEuYEbBaBg5FDgFvI7yMuguIIYl8Hh53m+e/8moawXBC9wIUgPchVHIxQ+lE3gDqAM+BE1Qm1+JyR9D6tvSrxaDrgF5EGM1XXpQziK8AroBlX2g5IsxuWdIfSuoAFoG8ijCGozp+kXAUZQNoJsR6UBzz5jcMsSYr4JyA/AUIrdiFPgXCQlU3wF5GmEXoNTkTrfkhiHrmyEwBaAEdBXwJMhMFyarkDiJ8gzoJqCXiZPhu8ExX3TsDKlrBRGAStCnQVZids9fBkRBtwBPAcdBGKu0jI0h9a32JfRakHXA8jFf89KDovwJ9F9A9iBj2/Fbo/5mfSukLIDbgC3ACr58zAAQhOWIbAG9jVSw3xU0qouNBnVpyeABhPXAlW7PSnFAW4AnQLYDo1q+smdI//7iQeA5zG57HP04BaxF9RUga7M4O4ak9xjCA8BGxpkxBPQUyo8Q2Z7tXmXkDKlrAxREbgP9Jcj4MjUstAXlMYSdKCNmysgYUt8GqiBcC7IFWOT2cC8RNIGuBPaM1CS+uJXVJxlU2qbtODNGjkXAOkyQzTaGhsfFGSIAUgLyNMa0HUdWkBX23JXYG+hhMTxD6lshaQGsAla6PbRLGCuBVViJ/kjpEBiaZfX2UmXiGK8AX3TfVL5xArNV+NAoeWd9MoyEKEAZyE8ZZ0YuMBP4KVA2nCnlzJA+sZJHgW+4PZIvEL4BPAoMqeAzGZL+oMoSlNX05zyNY+zwAKtBl4A4+rwyGSJiYuDCaoS5bo/gC4i5wGqTZ5C5dg3+T10biAIstx1k+YmBa9+vvj9FAxnwIn++63aUbwHvXxifvyC8qqD4gceRfDFDQaHEL8wosZjit/AUidM+qdAZS3GqN0VvzH5SRrB3GAWmIjzel2I0AP13q2uzY00sR3gVKMspCTYjppda/OO8IPfN8bNgsocJPsnTmEdHYndcae5K8urRGL85HKG1J2XmJfdEdqDcD7wP9JnB/RJi7ucBHiYfzAC+XuHnmWWlLJvuxVMsXLgAUwJQOcHDigof/zQvwJN/7eaDz+O2Ly+nNJdh5vrPmCRxIFOpL0K4M+ejVFhR4eelWyZy0wxf0TJjIDwi3DTDx0u3TOLrV/jzo+uEOxGqB+oqw5C6vl35fUBFTm+qSuVED/95QylXTbr0LOh5kzz8xw2lVEzw9El6DlEB3ItqX+CvX0JULkO5J6e3swfwSFWQ68t9eZy2/OKGci8r5wcGjSmHuMcYUOa6RocIgF4Hck2u7zY1aPGtuX7H91SV3gREk9kNUgGPwCS/YF2w/KVUORdTkpq91RrwCCVekAuuKSI8MDfAi00RuqKpXE/RNahch+gfAbwmLAsId5DrIwEK8yd7uHqy81L1+t9j/PfeMO2R7AapwOwJHjbdPJHy0ODJOxNRVr17nmPdyawZMjVo8a//EOLu2ZlpZfMne5gz0eJvkVSu9yclCHeg8kfqWvHam7QykOU5vY2NmaUWJd7MEbRHUvxsdy+7W+PZD1ChN67EU5mSFU8pTR0JDncmR3Xd8zHlhuk+pgYH2zsTfEJ5cPRZUxfBcowjt8Nr70gXYc7x5Rwey3mfkVIzeQhgZTlzepH1SDDaMVtrLmWYnCq896AK0YXAh5Y9sKWYc3w5x+lwimgy8//TQhYPzQ8iluRDUWYPVcQSHpofZFooUxK640prOOf6I41JINejYIF6QJfm5TYCh7qSnOxxHsj3qgJcN81bHP4sheumeflelXNacnNnkmPdOdcfA++/FMSygKmY0655wfGeFG8fjzm+d0WJh9VLQvi9LkuJKn6vsHpJiCtKPA5vK68ejdKVpfGRJapBL7dQmQ1SmZdbiKApZdOBCCd7ko4fuX+On1tn+tyVEoVbZ/q4f46zef5Je4Ktn0bz5dOy54qZCLMthCrypD/sG/F/p+NsPhhxfHuS32LtNSVMCljuSIkqkwI2Df5M3RFNKs81hDnRncwfMwwmo1RZoAvI53kOexA/b4rQ0J5w/MgtFT4emJsnf9HFoPDAXD+3VDh7EnaeiLHtSKwQef0BkAUWyNX5H7Vw7FySDY1hx71DwGOv36V58RcNDVWuKDV6LOAQlOmIpnh2b5jz0VS+pcOeJp1nUYijBGJ+fnM4yv+eiDt+5KuXe3m4Km/+okzY93i4KsBXL3c+Bvnrw1HePTmKjevoMcsC8n8aHkCErmiKdQ29dMUyrRVLhB8sCrFgSoHMYIUFU7z8YFEowx8GcOR8kucbwySSOY+DDIdyi0Ie4hd453icbZ9FHd++erKHmuogVr43i6pYllBTHXT0s6VU+fn+MPvOJgp8JkymWJgSRwW6nxC3rZaWbmcz+KH5QZaV51lKFJaVe3lovvOp2d2nE7yUtgoLG0wrtSj0iVmBv7Un+EVTBHWQgvKQxZprQgTztVlUJegV1lwTotzBRRJJKOsbwnzeUyBFPog2AhaqhQ3j2YPcdCDCniHM4HtmB7j9yjyZwQq3X+nnntnOz+GbLTF2HI26dXzVY7mS8iHCie4kGxrCjsGpCT5h7ZIQU4I53iyqMiVosXZJiAm+zHGfiaR4tiFMT6yginwQLAZkPBQUAtuOxNg5hJ9reYWPb18VyK2UKHz7qgDLh9gEbv00YjJM3MvBSFqYGoWFhwjnoynWNYTpcAiL+izhx4tDVE7M0WbRTrb48eIQPof4y6GuJBv3RUim3JMOhKiFKRjpFgG8dzLOrw87PxNfmerh+wtsS2gsTLG/+/0FQb4yNVNlJlWp3x/mYGehzdwM9FiY6p3uQIREUnm+McyRc0mHt4VVC4MsvmyMZrDC4su8rFoYzEhgANjVmuDlZlfM3AvRaWFKqboHgX1nE7zYFCblIAVzJnqorQ7hGe1mURWPJdRWh5gzMVM6ehPK+oZeTve6YOZmotXC1LV1D/YkvHQwwu7Tzmbwd64OcNOMUUqJwk0zvHznamcz9w/Hovz+WEG8uSNBiwV6yG0qEOFUT4r1DWEiicxZvzxoUbs4RCDbzaIqAa9QuzjE5Q4ZI21hY+aG4y4q8kH0cthC5SBuWVoDIbDjaJQ3W5zN4Ltn+VlRkWVkUWFFhY+7ZzlHAn/VHGFXq+uKPI0o6EELaAbOuU0NIvTElHV7w5xxiF1P8lvUVIcI+WRkTFEI+YSa6pBjJPBAR4K6/bbeKgbpgC6EZgvRY8Bxt6kBQODPp+Js/dQ53Ht7pZ/bKkfoUlG4rdLP7ZWZ0pFIKRv3hU0yXbFAOYHKMQvlDMp+t+kBQIRkStm4L8KnXZmTVeoTaquDlPgv/kSX+M1nSx1cJB+cirP1UJ6TFrLHfuCMhZCya54XBwQOdiao3x8m6aDAb67wc+csP8PlZycVvjnLz80VmdLRHVee3RumPVwUZu7AcX+MaMpeXPVjikGPQN8k9SncCxDyCo9Xh5gasBxXLgWmBmx945BT3Gc4FBEvgC67W0Pf+ZAmjHIvDohwujfFs3t76XUwg782w8e9s/2OObgphXtm+/najEwH4uc9SdY3hIkmikaR29BPgQOQZojSQfrwYbFA4A9/j/H7Y5kWecgrPLYwSJmDLinzG3eLk3S81Bw1m89i4oUZ7PsoHahgmZKmAvAW0Os2af00CmF7vXdKcp5ZajHBl2nOTvBZzCzN/H/j2QQv7g+bKGVRSQc9oG8hQG25LSGGvt1Ag9vUDYLArrYEv2rONINFnI85iGSegIqnjAPz6LkkxSce2giyO01XeskCOIvq79wmbxBEUFXq94Vp6kiM+jLvpl38dn5YkeF3KGfTTDAMSdduEtkBnHSbwgtxuCvJxn1hEqM4SXMuZrIPOyNFZuYanAReG1gN+8LFtgnTwKR4YIrhsPVQlA9OxbP++rbPYuw8UXRmbhpvmAZl/cRZg16pJlF9mXRjrGKBCGfD5knvjo9cSlq6kzzX2Eus6MxcwMzxy0Ays3AAwA/7Mkp3oVpcUgIgJkXn1aMjc0yrKr88EOGTM8Vo5gLwhik+o4N6Ww1esgzhMYQXgHa3KR5MmxBNmKzHoQ7/DMQn7Ul+caAowrIO0HbQF1AyYg2DGZLek6j8BeW3bpOdAYGP2+L9aZ5DIJZUNjT2cvx83g/ZjBa/Bf6CkNHawqGiHAAJ4HngiNuUD6bNEPdiU4SGs0ObwTtPxNj2WdEq8iMoz6OScIp+ZjKkpjxdaqMRw5QiChpA3+GfhjAxB5fv2UiKdXvDnCvUIZvskASeB2lEFGozexk4lyZI1yhX3Qz6ttujGAR7c7f1UISN+8P0DLC62iMp/n1PrzkUVHS8AOBtYLPTUjVweM6o7+vOeSNShIWUVQl6hOUVPq4v9xFLKX/6PM7HrQkSxeevgnQhZeVDwxDnc1LDU51ua2TpGuC/KLZmX3bZwIwRFR8zosC/kUhswOsdtkvC8NVUaqaDpQCbULa4PaoMiJg6KQN/io8ZAFtAN+H1XLRlxcXL26gC2ovoU6DvuT2ySw6q76E8hUovqYs/LCN7nNIVS+FaTEe28R4iI4I2ASvRkbfTG1kBqNrydMbgHmAtbqefXhpoAVmbDTMgmz6GtdPTy9dO0Ccw3cjG4YxTKE+YuSKrRpPZlUirTYd7ZTtGUsaZkgnTNg/dPlyfkKEwOpOkvq+DwnhjycFosVeP7aPtizu6IoI109OFM7ej+pitvL7saEJ5DK/HSMYomxSPzWjv6xT9JW9ObFKofoLiYnNiGKDoZQ+m8dVmiuFoQ+EQRdmM6ndR3QNjYwbk6mleoPCTNlBKgFWIPEmx+b5yj5PAM4BpcG9Ngx+OfTpzu7yYGvICLAN+hsitZPQoueSRAN4BngZ2ATrWpvYDkfv1Pq1XVMsQHgVZA8wpzFzlHUeBDcBmlI7hvLajRf4UcLrNt7IYWIPwIPlqoZR/nAV9BcOMfdk0G84W+beIDGO8wI1ADXAXhazRNTZ0mgwcqUP4ECWR7UYvWxTGRH2xFdvT6cfol0cwjJlRMBpGDsW4Pl4H/R/grwgxUgI/yn/xvcJPhpEYD8ZjfB9wL7CEXHdmyB69QCPwGrAD5QDkXyIuhHtPZ7qbqFAGXAf6TbtDQxUwsQC0KXAeaAZ9H3gTld2InbWZY2U9UhTHcpE2AEzbjIXA9cBSVKsRqcQUevaPgV4F4kAXJra9H/gI5SOEA6A2E/KjqLNBcTBkIF5oM+fSBA/KZSBzgPkIC4F5oLNQKUeYgqkXGaC/PWwS4ynoATpB21BpQTgEehBoBjkGtKOaxLLg8Wluj3gQ/h99ivDjY4hgoQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNS0wMS0xM1QxNDowNjowOCswMDowMF3e2xsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjUtMDEtMTNUMTQ6MDY6MDgrMDA6MDAsg2OnAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI1LTAxLTEzVDE0OjA2OjA4KzAwOjAwe5ZCeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=' diff --git a/packages/networks/ton/src/browser/adapters/index.ts b/packages/networks/ton/src/browser/adapters/index.ts index 479da98..3e0f310 100644 --- a/packages/networks/ton/src/browser/adapters/index.ts +++ b/packages/networks/ton/src/browser/adapters/index.ts @@ -1 +1 @@ -export { default as Example } from './Example' +export { default as TonConnect } from './TonConnect' diff --git a/packages/networks/ton/src/services/Provider.ts b/packages/networks/ton/src/services/Provider.ts index d3c7fe0..a5cdc2b 100644 --- a/packages/networks/ton/src/services/Provider.ts +++ b/packages/networks/ton/src/services/Provider.ts @@ -6,7 +6,6 @@ import { } from '@multiplechain/types' import TonCenterV3 from 'ton-center-v3' import { - type Address, TonClient, WalletContractV3R1, WalletContractV3R2, @@ -322,25 +321,43 @@ export class Provider implements ProviderInterface { throw lastError ?? new Error('Unknown error') } + /** + * Find transaction hash by message hash= + * @param _hash - Message hash + * @returns Transaction hash + */ + async findTxHashByBodyHash(_hash: string): Promise { + return await this.retry( + async () => { + const { messages } = await this.client3.getMessages({ + body_hash: _hash + }) + if (messages[0]) { + return Buffer.from(messages[0].in_msg_tx_hash, 'base64').toString('hex') + } else { + throw new Error('Transaction not found') + } + }, + { retries: 30, delay: 1000 } + ) + } + /** * Find transaction hash by message hash - * @param address - Wallet address * @param _hash - Message hash * @returns Transaction hash */ - async findTxHashByMessageHash(address: Address, _hash: string): Promise { + async findTxHashByMessageHash(_hash: string): Promise { return await this.retry( async () => { - const transactions = await this.client1.getTransactions(address, { - limit: 5 + const { messages } = await this.client3.getMessages({ + msg_hash: [_hash] }) - for (const tx of transactions) { - const hash = tx.inMessage?.body.hash().toString('base64') - if (hash === _hash) { - return tx.hash().toString('hex') - } + if (messages[0]) { + return Buffer.from(messages[0].in_msg_tx_hash, 'base64').toString('hex') + } else { + throw new Error('Transaction not found') } - throw new Error('Transaction not found') }, { retries: 30, delay: 1000 } ) diff --git a/packages/networks/ton/src/services/TransactionSigner.ts b/packages/networks/ton/src/services/TransactionSigner.ts index 2eda026..dd836b9 100644 --- a/packages/networks/ton/src/services/TransactionSigner.ts +++ b/packages/networks/ton/src/services/TransactionSigner.ts @@ -60,10 +60,7 @@ export class TransactionSigner implements TransactionSignerInterface { try { await this.wallet.send(this.signedData) - return await this.provider.findTxHashByMessageHash( - this.wallet.address, - this.signedData.hash().toString('base64') - ) + return await this.provider.findTxHashByBodyHash(this.signedData.hash().toString('hex')) } catch (error) { console.error(error) return '' From c3589067fc40b34bc4f66a5fd8a21c3d7c19ab62 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Tue, 14 Jan 2025 12:26:03 +0300 Subject: [PATCH 12/15] added console logs --- packages/networks/bitcoin/src/models/Transaction.ts | 2 ++ packages/networks/evm-chains/src/models/Transaction.ts | 2 ++ packages/networks/solana/src/models/Transaction.ts | 2 ++ packages/networks/ton/src/models/Transaction.ts | 3 ++- packages/networks/tron/src/models/Transaction.ts | 2 ++ 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/networks/bitcoin/src/models/Transaction.ts b/packages/networks/bitcoin/src/models/Transaction.ts index 61492fd..f44a2d9 100644 --- a/packages/networks/bitcoin/src/models/Transaction.ts +++ b/packages/networks/bitcoin/src/models/Transaction.ts @@ -98,6 +98,7 @@ export class Transaction implements TransactionInterface { return (this.data = data as TransactionData) } catch (error) { + console.error('MC Bitcoin TX getData', error) const axiosError = error as AxiosError // Returns empty data when the transaction is first created. For this reason, it would be better to check it intermittently and give an error if it still does not exist. Average 10 seconds. if (String(axiosError?.response?.data).includes('Transaction not found')) { @@ -130,6 +131,7 @@ export class Transaction implements TransactionInterface { } setTimeout(check, ms) } catch (error) { + console.error('MC Bitcoin TX wait', error) reject(TransactionStatusEnum.FAILED) } } diff --git a/packages/networks/evm-chains/src/models/Transaction.ts b/packages/networks/evm-chains/src/models/Transaction.ts index 8b94cd4..cbde168 100644 --- a/packages/networks/evm-chains/src/models/Transaction.ts +++ b/packages/networks/evm-chains/src/models/Transaction.ts @@ -87,6 +87,7 @@ export class Transaction implements TransactionInterface { const receipt = await this.ethers.getTransactionReceipt(this.id) return (this.data = { response, receipt }) } catch (error) { + console.error('MC EVM TX getData', error) if (error instanceof Error && String(error.message).includes('timeout')) { throw new Error(ErrorTypeEnum.RPC_TIMEOUT) } @@ -110,6 +111,7 @@ export class Transaction implements TransactionInterface { } setTimeout(check, ms) } catch (error) { + console.error('MC EVM TX wait', error) reject(TransactionStatusEnum.FAILED) } } diff --git a/packages/networks/solana/src/models/Transaction.ts b/packages/networks/solana/src/models/Transaction.ts index cbe8fac..e86364e 100644 --- a/packages/networks/solana/src/models/Transaction.ts +++ b/packages/networks/solana/src/models/Transaction.ts @@ -61,6 +61,7 @@ export class Transaction implements TransactionInterface { return (this.data = { transaction, action }) } catch (error) { + console.error('MC TON TX getData', error) throw new Error(ErrorTypeEnum.RPC_REQUEST_ERROR) } } @@ -98,7 +99,7 @@ export class Transaction implements TransactionInterface { } setTimeout(check, ms) } catch (error) { - console.error(error) + console.error('MC TON TX wait', error) reject(TransactionStatusEnum.FAILED) } } diff --git a/packages/networks/tron/src/models/Transaction.ts b/packages/networks/tron/src/models/Transaction.ts index 40a2dd1..bf79624 100644 --- a/packages/networks/tron/src/models/Transaction.ts +++ b/packages/networks/tron/src/models/Transaction.ts @@ -134,6 +134,7 @@ export class Transaction implements TransactionInterface { this.data.info = result?.id !== undefined ? result : undefined return this.data } catch (error) { + console.error('MC Tron TX getData', error) throw new Error(ErrorTypeEnum.RPC_REQUEST_ERROR) } } @@ -156,6 +157,7 @@ export class Transaction implements TransactionInterface { } setTimeout(check, ms) } catch (error) { + console.error('MC Tron TX wait', error) reject(TransactionStatusEnum.FAILED) } } From 9a97e0b751fd644c19523c7dde12bd6b6ca397df Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Tue, 14 Jan 2025 15:04:24 +0300 Subject: [PATCH 13/15] . --- .../ton/src/services/TransactionListener.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/networks/ton/src/services/TransactionListener.ts b/packages/networks/ton/src/services/TransactionListener.ts index c283804..829bf4d 100644 --- a/packages/networks/ton/src/services/TransactionListener.ts +++ b/packages/networks/ton/src/services/TransactionListener.ts @@ -1,20 +1,19 @@ import { Provider } from './Provider' -import { Transaction } from '../models/Transaction' -import { NftTransaction } from '../models/NftTransaction' -import { CoinTransaction } from '../models/CoinTransaction' -import { TokenTransaction } from '../models/TokenTransaction' -import { ContractTransaction } from '../models/ContractTransaction' -import { TransactionListenerProcessIndex, TransactionTypeEnum } from '@multiplechain/types' import type { + Transaction, + TokenTransaction, + CoinTransaction, + ContractTransaction, + NftTransaction +} from '../models/index' +import type { + TransactionTypeEnum, DynamicTransactionType, TransactionListenerInterface, DynamicTransactionListenerFilterType, - NftTransactionListenerFilterInterface, - TokenTransactionListenerFilterInterface, - CoinTransactionListenerFilterInterface, - ContractTransactionListenerFilterInterface, TransactionId } from '@multiplechain/types' +import { TransactionListenerProcessIndex } from '@multiplechain/types' type TransactionListenerTriggerType = DynamicTransactionType< T, @@ -75,6 +74,7 @@ export class TransactionListener< this.type = type this.filter = filter ?? {} this.provider = provider ?? Provider.instance + throw new Error('This class is not implemented for TON') } /** @@ -138,27 +138,27 @@ export class TransactionListener< * Contract transaction process */ contractProcess(): void { - const filter = this.filter as ContractTransactionListenerFilterInterface + // General transaction process } /** * Coin transaction process */ coinProcess(): void { - const filter = this.filter as CoinTransactionListenerFilterInterface + // Coin transaction process } /** * Token transaction process */ tokenProcess(): void { - const filter = this.filter as TokenTransactionListenerFilterInterface + // Token transaction process } /** * NFT transaction process */ nftProcess(): void { - const filter = this.filter as NftTransactionListenerFilterInterface + // NFT transaction process } } From dfdc106360226fa6ef32ed42b7c7b1e5a59893f6 Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Tue, 14 Jan 2025 15:04:33 +0300 Subject: [PATCH 14/15] . --- .../src/services/TransactionListener.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/networks/boilerplate/src/services/TransactionListener.ts b/packages/networks/boilerplate/src/services/TransactionListener.ts index c283804..c832778 100644 --- a/packages/networks/boilerplate/src/services/TransactionListener.ts +++ b/packages/networks/boilerplate/src/services/TransactionListener.ts @@ -1,11 +1,6 @@ import { Provider } from './Provider' -import { Transaction } from '../models/Transaction' -import { NftTransaction } from '../models/NftTransaction' -import { CoinTransaction } from '../models/CoinTransaction' -import { TokenTransaction } from '../models/TokenTransaction' -import { ContractTransaction } from '../models/ContractTransaction' -import { TransactionListenerProcessIndex, TransactionTypeEnum } from '@multiplechain/types' import type { + TransactionTypeEnum, DynamicTransactionType, TransactionListenerInterface, DynamicTransactionListenerFilterType, @@ -15,6 +10,14 @@ import type { ContractTransactionListenerFilterInterface, TransactionId } from '@multiplechain/types' +import type { + Transaction, + TokenTransaction, + CoinTransaction, + ContractTransaction, + NftTransaction +} from '../models/index' +import { TransactionListenerProcessIndex } from '@multiplechain/types' type TransactionListenerTriggerType = DynamicTransactionType< T, From 5f339690928ca7db5904157b60026204933cb2ab Mon Sep 17 00:00:00 2001 From: BeycanDeveloper Date: Thu, 16 Jan 2025 07:34:31 +0300 Subject: [PATCH 15/15] fix --- packages/wrapper/package.json | 8 +- packages/wrapper/pnpm-lock.yaml | 7298 ++----------------------------- 2 files changed, 320 insertions(+), 6986 deletions(-) diff --git a/packages/wrapper/package.json b/packages/wrapper/package.json index 75bca90..b51609d 100644 --- a/packages/wrapper/package.json +++ b/packages/wrapper/package.json @@ -71,11 +71,7 @@ "url": "https://github.com/MultipleChain/js/issues" }, "dependencies": { - "@multiplechain/types": "^0.1.67", - "@multiplechain/utils": "^0.1.21" - }, - "devDependencies": { - "@multiplechain/evm-chains": "^0.4.1", - "@multiplechain/tron": "^0.4.2" + "@multiplechain/types": "^0.1.70", + "@multiplechain/utils": "^0.1.23" } } diff --git a/packages/wrapper/pnpm-lock.yaml b/packages/wrapper/pnpm-lock.yaml index 201aa0c..f8de294 100644 --- a/packages/wrapper/pnpm-lock.yaml +++ b/packages/wrapper/pnpm-lock.yaml @@ -1,7047 +1,385 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + autoInstallPeers: true + excludeLinksFromLockfile: false -dependencies: - '@multiplechain/types': - specifier: ^0.1.67 - version: 0.1.67 - '@multiplechain/utils': - specifier: ^0.1.21 - version: 0.1.21 +importers: -devDependencies: - '@multiplechain/evm-chains': - specifier: ^0.4.1 - version: 0.4.1(react@18.3.1)(typescript@5.4.5) - '@multiplechain/tron': - specifier: ^0.4.2 - version: 0.4.2(typescript@5.4.5)(vite@5.2.11) + .: + dependencies: + '@multiplechain/types': + specifier: ^0.1.70 + version: 0.1.70 + '@multiplechain/utils': + specifier: ^0.1.23 + version: 0.1.23(bufferutil@4.0.8)(utf-8-validate@5.0.10) packages: - /@adraffy/ens-normalize@1.10.1: - resolution: - { - integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== - } - dev: true - /@babel/helper-string-parser@7.24.6: - resolution: - { - integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q== - } - engines: { node: '>=6.9.0' } - dev: true + '@multiplechain/types@0.1.70': + resolution: {integrity: sha512-o9ovdaefDHE5gorb83avugCjeixfBXrfJkIgSEEcT549yGF8CkmG/jgZIlqXKJf8Lh0tbg4zMAAanUSxUqV1FQ==} - /@babel/helper-validator-identifier@7.24.6: - resolution: - { - integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw== - } - engines: { node: '>=6.9.0' } - dev: true + '@multiplechain/utils@0.1.23': + resolution: {integrity: sha512-6mgJiXQsElObKgX/yA8DUpQYd+BS1GKhAyLj5F/2mv9yY3boZrX8sS7ZLk+g5NX45N+BACNMxbs09TG1iFiRsA==} - /@babel/parser@7.24.6: - resolution: - { - integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== - } - engines: { node: '>=6.0.0' } - hasBin: true - dependencies: - '@babel/types': 7.24.6 - dev: true + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} - /@babel/runtime@7.24.6: - resolution: - { - integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw== - } - engines: { node: '>=6.9.0' } - dependencies: - regenerator-runtime: 0.14.1 - dev: true + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} - /@babel/types@7.24.6: - resolution: - { - integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/helper-string-parser': 7.24.6 - '@babel/helper-validator-identifier': 7.24.6 - to-fast-properties: 2.0.0 - dev: true + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - /@beycandeveloper/tron-tx-decoder@2.0.7: - resolution: - { - integrity: sha512-mnU22flEWOyg2jMqZANiVX+L46irN/3lVcJlOJF12IXdV9KB27xRGGve9szu5WgYNH8aqpyMyM6tjShfwcJlOw== - } - dependencies: - axios: 0.21.4 - ethers: 4.0.49 - transitivePeerDependencies: - - debug - dev: true + '@scure/bip32@1.3.3': + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} - /@bitget-wallet/web3-sdk@0.0.8: - resolution: - { - integrity: sha512-WFk6URUxTCukKrU3YpTdWTCScrj6/wwd/0O7eSANeQl1KDbDs+yj/fAkN1Wy6ebI3NMcW6sqN9mrmfwz53dPMQ== - } - dependencies: - '@metamask/safe-event-emitter': 3.1.1 - '@solana/web3.js': 1.91.8 - eventemitter3: 5.0.1 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true + '@scure/bip39@1.2.2': + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} - /@coinbase/wallet-sdk@3.9.1: - resolution: - { - integrity: sha512-cGUE8wm1/cMI8irRMVOqbFWYcnNugqCtuy2lnnHfgloBg+GRLs9RsrkOUDMdv/StfUeeKhCDyYudsXXvcL1xIA== - } - dependencies: - bn.js: 5.2.1 - buffer: 6.0.3 - clsx: 1.2.1 - eth-block-tracker: 7.1.0 - eth-json-rpc-filters: 6.0.1 - eventemitter3: 5.0.1 - keccak: 3.0.4 - preact: 10.22.0 - sha.js: 2.4.11 - transitivePeerDependencies: - - supports-color - dev: true + '@types/node@20.12.7': + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} - /@esbuild/aix-ppc64@0.20.2: - resolution: - { - integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - } - engines: { node: '>=12' } - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.20.2: - resolution: - { - integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - } - engines: { node: '>=12' } - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.20.2: - resolution: - { - integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - } - engines: { node: '>=12' } - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.20.2: - resolution: - { - integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - } - engines: { node: '>=12' } - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.20.2: - resolution: - { - integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - } - engines: { node: '>=12' } - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.20.2: - resolution: - { - integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - } - engines: { node: '>=12' } - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.20.2: - resolution: - { - integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - } - engines: { node: '>=12' } - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.20.2: - resolution: - { - integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - } - engines: { node: '>=12' } - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.20.2: - resolution: - { - integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - } - engines: { node: '>=12' } - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.20.2: - resolution: - { - integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - } - engines: { node: '>=12' } - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.20.2: - resolution: - { - integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - } - engines: { node: '>=12' } - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.20.2: - resolution: - { - integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - } - engines: { node: '>=12' } - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.20.2: - resolution: - { - integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - } - engines: { node: '>=12' } - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.20.2: - resolution: - { - integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - } - engines: { node: '>=12' } - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.20.2: - resolution: - { - integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - } - engines: { node: '>=12' } - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.20.2: - resolution: - { - integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - } - engines: { node: '>=12' } - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.20.2: - resolution: - { - integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== - } - engines: { node: '>=12' } - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.20.2: - resolution: - { - integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - } - engines: { node: '>=12' } - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.20.2: - resolution: - { - integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - } - engines: { node: '>=12' } - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.20.2: - resolution: - { - integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - } - engines: { node: '>=12' } - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.20.2: - resolution: - { - integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - } - engines: { node: '>=12' } - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.20.2: - resolution: - { - integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - } - engines: { node: '>=12' } - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.20.2: - resolution: - { - integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== - } - engines: { node: '>=12' } - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@ethereumjs/common@3.2.0: - resolution: - { - integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA== - } - dependencies: - '@ethereumjs/util': 8.1.0 - crc-32: 1.2.2 - dev: true - - /@ethereumjs/rlp@4.0.1: - resolution: - { - integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - } - engines: { node: '>=14' } - hasBin: true - dev: true - - /@ethereumjs/tx@4.2.0: - resolution: - { - integrity: sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== - } - engines: { node: '>=14' } - dependencies: - '@ethereumjs/common': 3.2.0 - '@ethereumjs/rlp': 4.0.1 - '@ethereumjs/util': 8.1.0 - ethereum-cryptography: 2.1.3 - dev: true - - /@ethereumjs/util@8.1.0: - resolution: - { - integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - } - engines: { node: '>=14' } - dependencies: - '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.1.3 - micro-ftch: 0.3.1 - dev: true - - /@ethersproject/abi@5.7.0: - resolution: - { - integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - } - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true - - /@ethersproject/abstract-provider@5.7.0: - resolution: - { - integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - } - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - dev: true - - /@ethersproject/abstract-signer@5.7.0: - resolution: - { - integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - } - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: true - - /@ethersproject/address@5.7.0: - resolution: - { - integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - } - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/rlp': 5.7.0 - dev: true - - /@ethersproject/base64@5.7.0: - resolution: - { - integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - } - dependencies: - '@ethersproject/bytes': 5.7.0 - dev: true - - /@ethersproject/bignumber@5.7.0: - resolution: - { - integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - } - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 - dev: true - - /@ethersproject/bytes@5.7.0: - resolution: - { - integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - } - dependencies: - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/constants@5.7.0: - resolution: - { - integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - } - dependencies: - '@ethersproject/bignumber': 5.7.0 - dev: true - - /@ethersproject/hash@5.7.0: - resolution: - { - integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - } - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true - - /@ethersproject/keccak256@5.7.0: - resolution: - { - integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - } - dependencies: - '@ethersproject/bytes': 5.7.0 - js-sha3: 0.8.0 - dev: true - - /@ethersproject/logger@5.7.0: - resolution: - { - integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - } - dev: true - - /@ethersproject/networks@5.7.1: - resolution: - { - integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - } - dependencies: - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/properties@5.7.0: - resolution: - { - integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - } - dependencies: - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/rlp@5.7.0: - resolution: - { - integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - } - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true - - /@ethersproject/signing-key@5.7.0: - resolution: - { - integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - } - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - bn.js: 5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: true + '@types/ws@8.5.10': + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - /@ethersproject/strings@5.7.0: - resolution: - { - integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - } - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: true + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} - /@ethersproject/transactions@5.7.0: - resolution: - { - integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - } - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - dev: true + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - /@ethersproject/web@5.7.1: - resolution: - { - integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - } - dependencies: - '@ethersproject/base64': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: true + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - } - dev: true + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} - /@lit-labs/ssr-dom-shim@1.2.0: - resolution: - { - integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g== - } - dev: true + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} - /@lit/reactive-element@1.6.3: - resolution: - { - integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== - } - dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 - dev: true + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} - /@lit/reactive-element@2.0.4: - resolution: - { - integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ== - } - dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 - dev: true + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} - /@metamask/eth-json-rpc-provider@1.0.1: - resolution: - { - integrity: sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA== - } - engines: { node: '>=14.0.0' } - dependencies: - '@metamask/json-rpc-engine': 7.3.3 - '@metamask/safe-event-emitter': 3.1.1 - '@metamask/utils': 5.0.2 - transitivePeerDependencies: - - supports-color - dev: true + ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} - /@metamask/json-rpc-engine@7.3.3: - resolution: - { - integrity: sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg== - } - engines: { node: '>=16.0.0' } - dependencies: - '@metamask/rpc-errors': 6.2.1 - '@metamask/safe-event-emitter': 3.1.1 - '@metamask/utils': 8.4.0 - transitivePeerDependencies: - - supports-color - dev: true + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - /@metamask/rpc-errors@6.2.1: - resolution: - { - integrity: sha512-VTgWkjWLzb0nupkFl1duQi9Mk8TGT9rsdnQg6DeRrYEFxtFOh0IF8nAwxM/4GWqDl6uIB06lqUBgUrAVWl62Bw== - } - engines: { node: '>=16.0.0' } - dependencies: - '@metamask/utils': 8.4.0 - fast-safe-stringify: 2.1.1 - transitivePeerDependencies: - - supports-color - dev: true + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - /@metamask/safe-event-emitter@2.0.0: - resolution: - { - integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== - } - dev: true + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - /@metamask/safe-event-emitter@3.1.1: - resolution: - { - integrity: sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw== - } - engines: { node: '>=12.0.0' } - dev: true + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} - /@metamask/utils@5.0.2: - resolution: - { - integrity: sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== - } - engines: { node: '>=14.0.0' } - dependencies: - '@ethereumjs/tx': 4.2.0 - '@types/debug': 4.1.12 - debug: 4.3.4 - semver: 7.6.2 - superstruct: 1.0.4 - transitivePeerDependencies: - - supports-color - dev: true + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - /@metamask/utils@8.4.0: - resolution: - { - integrity: sha512-dbIc3C7alOe0agCuBHM1h71UaEaEqOk2W8rAtEn8QGz4haH2Qq7MoK6i7v2guzvkJVVh79c+QCzIqphC3KvrJg== - } - engines: { node: '>=16.0.0' } - dependencies: - '@ethereumjs/tx': 4.2.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - '@types/debug': 4.1.12 - debug: 4.3.4 - pony-cause: 2.1.11 - semver: 7.6.2 - superstruct: 1.0.4 - uuid: 9.0.1 - transitivePeerDependencies: - - supports-color - dev: true + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - /@microsoft/api-extractor-model@7.28.13: - resolution: - { - integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw== - } - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2 - transitivePeerDependencies: - - '@types/node' - dev: true + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} - /@microsoft/api-extractor@7.43.0: - resolution: - { - integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w== - } - hasBin: true - dependencies: - '@microsoft/api-extractor-model': 7.28.13 - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.0.2 - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.10.0 - '@rushstack/ts-command-line': 4.19.1 - lodash: 4.17.21 - minimatch: 3.0.8 - resolve: 1.22.8 - semver: 7.5.4 - source-map: 0.6.1 - typescript: 5.4.2 - transitivePeerDependencies: - - '@types/node' - dev: true + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} - /@microsoft/tsdoc-config@0.16.2: - resolution: - { - integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw== - } - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - dev: true + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} - /@microsoft/tsdoc@0.14.2: - resolution: - { - integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug== - } - dev: true + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} - /@motionone/animation@10.17.0: - resolution: - { - integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg== - } - dependencies: - '@motionone/easing': 10.17.0 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - tslib: 2.6.2 - dev: true + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /@motionone/dom@10.17.0: - resolution: - { - integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q== - } - dependencies: - '@motionone/animation': 10.17.0 - '@motionone/generators': 10.17.0 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - hey-listen: 1.0.8 - tslib: 2.6.2 - dev: true + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} - /@motionone/easing@10.17.0: - resolution: - { - integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg== - } - dependencies: - '@motionone/utils': 10.17.0 - tslib: 2.6.2 - dev: true + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} - /@motionone/generators@10.17.0: - resolution: - { - integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ== - } - dependencies: - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - tslib: 2.6.2 - dev: true + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} - /@motionone/svelte@10.16.4: - resolution: - { - integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA== - } - dependencies: - '@motionone/dom': 10.17.0 - tslib: 2.6.2 - dev: true + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} - /@motionone/types@10.17.0: - resolution: - { - integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA== - } - dev: true + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true - /@motionone/utils@10.17.0: - resolution: - { - integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg== - } - dependencies: - '@motionone/types': 10.17.0 - hey-listen: 1.0.8 - tslib: 2.6.2 - dev: true + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} - /@motionone/vue@10.16.4: - resolution: - { - integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg== - } - deprecated: Motion One for Vue is deprecated. Use Oku Motion instead https://oku-ui.com/motion - dependencies: - '@motionone/dom': 10.17.0 - tslib: 2.6.2 - dev: true + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} - /@multiplechain/evm-chains@0.4.1(react@18.3.1)(typescript@5.4.5): - resolution: - { - integrity: sha512-z8bwNcmgLdZAm1OmA38EL9MORKHe3jATQGXdELrboAXb1GcTLhkjpiDQ3SPIIJ+u9I4p4gOFvlIELcNBaGhQbA== - } - dependencies: - '@multiplechain/types': 0.1.67 - '@multiplechain/utils': 0.1.21 - '@wagmi/chains': 1.8.0(typescript@5.4.5) - '@walletconnect/ethereum-provider': 2.13.0(react@18.3.1) - '@walletconnect/modal': 2.6.2(react@18.3.1) - '@web3modal/core': 4.2.2(react@18.3.1) - '@web3modal/ethers': 4.2.2(ethers@6.12.1)(react@18.3.1) - '@web3modal/scaffold-utils': 4.2.2(react@18.3.1) - axios: 1.7.2 - ethers: 6.12.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - debug - - encoding - - ioredis - - react - - react-dom - - supports-color - - typescript - - uWebSockets.js - - utf-8-validate - - vue - dev: true + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /@multiplechain/tron-walletconnect@0.1.2(typescript@5.4.5)(vite@5.2.11): - resolution: - { - integrity: sha512-gLNcLX3MDAPP6s8E/5g3a5vt6md7/4I6J3m9xFJgwQILILadvkNro4BldJMGPYwI8rB7sGv3AqbqJ9l47sC2Fw== - } - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.6 - '@walletconnect/legacy-modal': 2.0.0 - '@walletconnect/sign-client': 2.13.0 - '@walletconnect/types': 2.13.0 - '@walletconnect/utils': 2.13.0 - vite-plugin-dts: 3.9.1(typescript@5.4.5)(vite@5.2.11) - vite-plugin-node-polyfills: 0.21.0(vite@5.2.11) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/node' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - rollup - - supports-color - - typescript - - uWebSockets.js - - utf-8-validate - - vite - dev: true + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} - /@multiplechain/tron@0.4.2(typescript@5.4.5)(vite@5.2.11): - resolution: - { - integrity: sha512-6wV2KsdYwqAj5T67q0b6Ca3O9cHJiOM2ivaKGgzrwEo/U62zPHSoqzMN38vesAlQkqFrK6QlXUbG7WdO7hNF/Q== - } - dependencies: - '@beycandeveloper/tron-tx-decoder': 2.0.7 - '@multiplechain/tron-walletconnect': 0.1.2(typescript@5.4.5)(vite@5.2.11) - '@multiplechain/types': 0.1.67 - '@multiplechain/utils': 0.1.21 - '@noble/secp256k1': 1.7.1 - '@tronweb3/tronwallet-adapter-bitkeep': 1.1.1 - '@tronweb3/tronwallet-adapter-okxwallet': 1.0.3 - '@tronweb3/tronwallet-adapter-tokenpocket': 1.0.3 - '@tronweb3/tronwallet-adapter-tronlink': 1.1.9 - tronweb: 5.3.2 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/node' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - debug - - encoding - - ioredis - - rollup - - supports-color - - typescript - - uWebSockets.js - - utf-8-validate - - vite - dev: true + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - /@multiplechain/types@0.1.67: - resolution: - { - integrity: sha512-8TN5HhDC7lILh7wDKneJFS1Nyvxa+YGi0L56m6jnj0mBmTmwxNN42W5tP/3KYUlsfTHqb64iijjXMTLYZ0x+Dg== - } + web3-errors@1.1.4: + resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} + engines: {node: '>=14', npm: '>=6.12.0'} - /@multiplechain/utils@0.1.21: - resolution: - { - integrity: sha512-4mRlnhvXcS+7Hb1By5s2eoCH02kqOSQzV8qj0DHqZK20FtxtduaoGCtcClrFgEjN/HAXnHgdDc1pxTpveIkvRQ== - } - dependencies: - '@types/ws': 8.5.10 - bignumber.js: 9.1.2 - web3-utils: 4.2.1 - ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate + web3-types@1.5.0: + resolution: {integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw==} + engines: {node: '>=14', npm: '>=6.12.0'} - /@noble/curves@1.2.0: - resolution: - { - integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - } - dependencies: - '@noble/hashes': 1.3.2 - dev: true + web3-utils@4.2.1: + resolution: {integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A==} + engines: {node: '>=14', npm: '>=6.12.0'} - /@noble/curves@1.3.0: - resolution: - { - integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - } - dependencies: - '@noble/hashes': 1.3.3 + web3-validator@2.0.4: + resolution: {integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA==} + engines: {node: '>=14', npm: '>=6.12.0'} - /@noble/curves@1.4.0: - resolution: - { - integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== - } - dependencies: - '@noble/hashes': 1.4.0 - dev: true + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} - /@noble/hashes@1.3.2: - resolution: - { - integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - } - engines: { node: '>= 16' } - dev: true - - /@noble/hashes@1.3.3: - resolution: - { - integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - } - engines: { node: '>= 16' } - - /@noble/hashes@1.4.0: - resolution: - { - integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - } - engines: { node: '>= 16' } - dev: true - - /@noble/secp256k1@1.7.1: - resolution: - { - integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - } - dev: true - - /@parcel/watcher-android-arm64@2.4.1: - resolution: - { - integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg== - } - engines: { node: '>= 10.0.0' } - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-darwin-arm64@2.4.1: - resolution: - { - integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA== - } - engines: { node: '>= 10.0.0' } - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-darwin-x64@2.4.1: - resolution: - { - integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg== - } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-freebsd-x64@2.4.1: - resolution: - { - integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w== - } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-linux-arm-glibc@2.4.1: - resolution: - { - integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA== - } - engines: { node: '>= 10.0.0' } - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-linux-arm64-glibc@2.4.1: - resolution: - { - integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA== - } - engines: { node: '>= 10.0.0' } - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-linux-arm64-musl@2.4.1: - resolution: - { - integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA== - } - engines: { node: '>= 10.0.0' } - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-linux-x64-glibc@2.4.1: - resolution: - { - integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg== - } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-linux-x64-musl@2.4.1: - resolution: - { - integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ== - } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-wasm@2.4.1: - resolution: - { - integrity: sha512-/ZR0RxqxU/xxDGzbzosMjh4W6NdYFMqq2nvo2b8SLi7rsl/4jkL8S5stIikorNkdR50oVDvqb/3JT05WM+CRRA== - } - engines: { node: '>= 10.0.0' } - dependencies: - is-glob: 4.0.3 - micromatch: 4.0.7 - napi-wasm: 1.1.0 - dev: true - bundledDependencies: - - napi-wasm - - /@parcel/watcher-win32-arm64@2.4.1: - resolution: - { - integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg== - } - engines: { node: '>= 10.0.0' } - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-win32-ia32@2.4.1: - resolution: - { - integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw== - } - engines: { node: '>= 10.0.0' } - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher-win32-x64@2.4.1: - resolution: - { - integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A== - } - engines: { node: '>= 10.0.0' } - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@parcel/watcher@2.4.1: - resolution: - { - integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA== - } - engines: { node: '>= 10.0.0' } - dependencies: - detect-libc: 1.0.3 - is-glob: 4.0.3 - micromatch: 4.0.7 - node-addon-api: 7.1.0 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.4.1 - '@parcel/watcher-darwin-arm64': 2.4.1 - '@parcel/watcher-darwin-x64': 2.4.1 - '@parcel/watcher-freebsd-x64': 2.4.1 - '@parcel/watcher-linux-arm-glibc': 2.4.1 - '@parcel/watcher-linux-arm64-glibc': 2.4.1 - '@parcel/watcher-linux-arm64-musl': 2.4.1 - '@parcel/watcher-linux-x64-glibc': 2.4.1 - '@parcel/watcher-linux-x64-musl': 2.4.1 - '@parcel/watcher-win32-arm64': 2.4.1 - '@parcel/watcher-win32-ia32': 2.4.1 - '@parcel/watcher-win32-x64': 2.4.1 - dev: true - - /@rollup/plugin-inject@5.0.5: - resolution: - { - integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg== - } - engines: { node: '>=14.0.0' } - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0 - estree-walker: 2.0.2 - magic-string: 0.30.10 - dev: true - - /@rollup/pluginutils@5.1.0: - resolution: - { - integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== - } - engines: { node: '>=14.0.0' } - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true - - /@rollup/rollup-android-arm-eabi@4.18.0: - resolution: - { - integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== - } - cpu: [arm] - os: [android] - requiresBuild: true - dev: true + ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: optional: true - - /@rollup/rollup-android-arm64@4.18.0: - resolution: - { - integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== - } - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.18.0: - resolution: - { - integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== - } - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.18.0: - resolution: - { - integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== - } - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.18.0: - resolution: - { - integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== - } - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm-musleabihf@4.18.0: - resolution: - { - integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== - } - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.18.0: - resolution: - { - integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== - } - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-arm64-musl@4.18.0: - resolution: - { - integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== - } - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: - resolution: - { - integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== - } - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-riscv64-gnu@4.18.0: - resolution: - { - integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== - } - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-s390x-gnu@4.18.0: - resolution: - { - integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== - } - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-gnu@4.18.0: - resolution: - { - integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== - } - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-linux-x64-musl@4.18.0: - resolution: - { - integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== - } - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-arm64-msvc@4.18.0: - resolution: - { - integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== - } - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-ia32-msvc@4.18.0: - resolution: - { - integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== - } - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rollup/rollup-win32-x64-msvc@4.18.0: - resolution: - { - integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== - } - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + utf-8-validate: optional: true - /@rushstack/node-core-library@4.0.2: - resolution: - { - integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg== - } - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - fs-extra: 7.0.1 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.8 - semver: 7.5.4 - z-schema: 5.0.5 - dev: true - - /@rushstack/rig-package@0.5.2: - resolution: - { - integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA== - } - dependencies: - resolve: 1.22.8 - strip-json-comments: 3.1.1 - dev: true - - /@rushstack/terminal@0.10.0: - resolution: - { - integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw== - } - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@rushstack/node-core-library': 4.0.2 - supports-color: 8.1.1 - dev: true - - /@rushstack/ts-command-line@4.19.1: - resolution: - { - integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg== - } - dependencies: - '@rushstack/terminal': 0.10.0 - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' - dev: true - - /@scure/base@1.1.6: - resolution: - { - integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - } - - /@scure/bip32@1.3.3: - resolution: - { - integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - } - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - - /@scure/bip39@1.2.2: - resolution: - { - integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - } - dependencies: - '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 - - /@solana/buffer-layout@4.0.1: - resolution: - { - integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== - } - engines: { node: '>=5.10' } - dependencies: - buffer: 6.0.3 - dev: true - - /@solana/web3.js@1.91.8: - resolution: - { - integrity: sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw== - } - dependencies: - '@babel/runtime': 7.24.6 - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.0 - node-fetch: 2.7.0 - rpc-websockets: 7.11.0 - superstruct: 0.14.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@stablelib/aead@1.0.1: - resolution: - { - integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== - } - dev: true - - /@stablelib/binary@1.0.1: - resolution: - { - integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - } - dependencies: - '@stablelib/int': 1.0.1 - dev: true - - /@stablelib/bytes@1.0.1: - resolution: - { - integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== - } - dev: true - - /@stablelib/chacha20poly1305@1.0.1: - resolution: - { - integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== - } - dependencies: - '@stablelib/aead': 1.0.1 - '@stablelib/binary': 1.0.1 - '@stablelib/chacha': 1.0.1 - '@stablelib/constant-time': 1.0.1 - '@stablelib/poly1305': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/chacha@1.0.1: - resolution: - { - integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== - } - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/constant-time@1.0.1: - resolution: - { - integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== - } - dev: true - - /@stablelib/ed25519@1.0.3: - resolution: - { - integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== - } - dependencies: - '@stablelib/random': 1.0.2 - '@stablelib/sha512': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/hash@1.0.1: - resolution: - { - integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== - } - dev: true - - /@stablelib/hkdf@1.0.1: - resolution: - { - integrity: sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== - } - dependencies: - '@stablelib/hash': 1.0.1 - '@stablelib/hmac': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/hmac@1.0.1: - resolution: - { - integrity: sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== - } - dependencies: - '@stablelib/constant-time': 1.0.1 - '@stablelib/hash': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/int@1.0.1: - resolution: - { - integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - } - dev: true - - /@stablelib/keyagreement@1.0.1: - resolution: - { - integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== - } - dependencies: - '@stablelib/bytes': 1.0.1 - dev: true - - /@stablelib/poly1305@1.0.1: - resolution: - { - integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== - } - dependencies: - '@stablelib/constant-time': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/random@1.0.2: - resolution: - { - integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - } - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/sha256@1.0.1: - resolution: - { - integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== - } - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/hash': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/sha512@1.0.1: - resolution: - { - integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== - } - dependencies: - '@stablelib/binary': 1.0.1 - '@stablelib/hash': 1.0.1 - '@stablelib/wipe': 1.0.1 - dev: true - - /@stablelib/wipe@1.0.1: - resolution: - { - integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - } - dev: true - - /@stablelib/x25519@1.0.3: - resolution: - { - integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== - } - dependencies: - '@stablelib/keyagreement': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/wipe': 1.0.1 - dev: true - - /@tronweb3/google-protobuf@3.21.2: - resolution: - { - integrity: sha512-IVcT2GfWX3K6tHUVhs14NP5uzKhQt4KeDya1g9ACxuZsUzsaoGUIGzceK2Ltu7xp1YV94AaHOf4yxLAivlvEkQ== - } - dev: true - - /@tronweb3/tronwallet-abstract-adapter@1.1.6: - resolution: - { - integrity: sha512-3T2ojxzSKIAw4ucEcg4p5Nwr4lN1g1Om8s1ty77DOHIa0oS1YDvZmlRQekptWEppKOoRDYFWST1ERCvt2Xxm0A== - } - engines: { node: '>=16', pnpm: '>=7' } - dependencies: - eventemitter3: 4.0.7 - dev: true - - /@tronweb3/tronwallet-adapter-bitkeep@1.1.1: - resolution: - { - integrity: sha512-Ny3I9ePL0R/oH2YjN7c+LTnCTPBe6SQDA3uyHYDWuH8R6Kdp8/t2n8sChDlu1NBQCUF3pt6THHQEUoXJkmjfJA== - } - engines: { node: '>=16', pnpm: '>=7' } - dependencies: - '@bitget-wallet/web3-sdk': 0.0.8 - '@tronweb3/tronwallet-abstract-adapter': 1.1.6 - '@tronweb3/tronwallet-adapter-tronlink': 1.1.9 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@tronweb3/tronwallet-adapter-okxwallet@1.0.3: - resolution: - { - integrity: sha512-43suyRr/RuJCueRaspSlNKxd0rMt/2VTmq5tkRF/WlxGI4CTEIEYk3NqdKBrVFobfsILOXQBiQg0cI+FF5lxtw== - } - engines: { node: '>=16', pnpm: '>=7' } - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.6 - '@tronweb3/tronwallet-adapter-tronlink': 1.1.9 - dev: true - - /@tronweb3/tronwallet-adapter-tokenpocket@1.0.3: - resolution: - { - integrity: sha512-vG1JLnlH0fodTY2YdezzWJKeW2VkCERsJYTa6d9oId1dgOaiEvjIO9UbHL/kdTPs1L1M484tM6Rh6pPBJzh/gA== - } - engines: { node: '>=16', pnpm: '>=7' } - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.6 - '@tronweb3/tronwallet-adapter-tronlink': 1.1.9 - dev: true - - /@tronweb3/tronwallet-adapter-tronlink@1.1.9: - resolution: - { - integrity: sha512-fIDKt822OmESLVeYCG9XbXGI34lM/79/jzJ3rd81xOZD8y7V0/DuDLdg5gFiCH4g9OIutKslDXiwoMpQry9O3w== - } - engines: { node: '>=16', pnpm: '>=7' } - dependencies: - '@tronweb3/tronwallet-abstract-adapter': 1.1.6 - dev: true - - /@types/argparse@1.0.38: - resolution: - { - integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== - } - dev: true - - /@types/connect@3.4.38: - resolution: - { - integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - } - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/debug@4.1.12: - resolution: - { - integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - } - dependencies: - '@types/ms': 0.7.34 - dev: true - - /@types/estree@1.0.5: - resolution: - { - integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - } - dev: true - - /@types/ms@0.7.34: - resolution: - { - integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - } - dev: true - - /@types/node@12.20.55: - resolution: - { - integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - } - dev: true - - /@types/node@18.15.13: - resolution: - { - integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - } - dev: true - - /@types/node@20.12.7: - resolution: - { - integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - } - dependencies: - undici-types: 5.26.5 - - /@types/trusted-types@2.0.7: - resolution: - { - integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== - } - dev: true - - /@types/ws@7.4.7: - resolution: - { - integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - } - dependencies: - '@types/node': 20.12.7 - dev: true - - /@types/ws@8.5.10: - resolution: - { - integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - } - dependencies: - '@types/node': 20.12.7 - - /@volar/language-core@1.11.1: - resolution: - { - integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== - } - dependencies: - '@volar/source-map': 1.11.1 - dev: true - - /@volar/source-map@1.11.1: - resolution: - { - integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== - } - dependencies: - muggle-string: 0.3.1 - dev: true - - /@volar/typescript@1.11.1: - resolution: - { - integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== - } - dependencies: - '@volar/language-core': 1.11.1 - path-browserify: 1.0.1 - dev: true - - /@vue/compiler-core@3.4.27: - resolution: - { - integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg== - } - dependencies: - '@babel/parser': 7.24.6 - '@vue/shared': 3.4.27 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.0 - dev: true - - /@vue/compiler-dom@3.4.27: - resolution: - { - integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw== - } - dependencies: - '@vue/compiler-core': 3.4.27 - '@vue/shared': 3.4.27 - dev: true - - /@vue/language-core@1.8.27(typescript@5.4.5): - resolution: - { - integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== - } - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@volar/language-core': 1.11.1 - '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.4.27 - '@vue/shared': 3.4.27 - computeds: 0.0.1 - minimatch: 9.0.4 - muggle-string: 0.3.1 - path-browserify: 1.0.1 - typescript: 5.4.5 - vue-template-compiler: 2.7.16 - dev: true - - /@vue/shared@3.4.27: - resolution: - { - integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== - } - dev: true - - /@wagmi/chains@1.8.0(typescript@5.4.5): - resolution: - { - integrity: sha512-UXo0GF0Cl0+neKC2KAmVAahv8L/5rACbFRRqkDvHMefzY6Fh7yzJd8F4GaGNNG3w4hj8eUB/E3+dEpaTYDN62w== - } - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - typescript: 5.4.5 - dev: true - - /@walletconnect/core@2.13.0: - resolution: - { - integrity: sha512-blDuZxQenjeXcVJvHxPznTNl6c/2DO4VNrFnus+qHmO6OtT5lZRowdMtlCaCNb1q0OxzgrmBDcTOCbFcCpio/g== - } - dependencies: - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.14 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - '@walletconnect/relay-api': 1.0.10 - '@walletconnect/relay-auth': 1.0.4 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.13.0 - '@walletconnect/utils': 2.13.0 - events: 3.3.0 - isomorphic-unfetch: 3.1.0 - lodash.isequal: 4.5.0 - uint8arrays: 3.1.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate - dev: true - - /@walletconnect/encoding@1.0.2: - resolution: - { - integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag== - } - dependencies: - is-typedarray: 1.0.0 - tslib: 1.14.1 - typedarray-to-buffer: 3.1.5 - dev: true - - /@walletconnect/environment@1.0.1: - resolution: - { - integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== - } - dependencies: - tslib: 1.14.1 - dev: true - - /@walletconnect/ethereum-provider@2.13.0(react@18.3.1): - resolution: - { - integrity: sha512-dnpW8mmLpWl1AZUYGYZpaAfGw1HFkL0WSlhk5xekx3IJJKn4pLacX2QeIOo0iNkzNQxZfux1AK4Grl1DvtzZEA== - } - dependencies: - '@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/modal': 2.6.2(react@18.3.1) - '@walletconnect/sign-client': 2.13.0 - '@walletconnect/types': 2.13.0 - '@walletconnect/universal-provider': 2.13.0 - '@walletconnect/utils': 2.13.0 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - react - - uWebSockets.js - - utf-8-validate - dev: true - - /@walletconnect/events@1.0.1: - resolution: - { - integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== - } - dependencies: - keyvaluestorage-interface: 1.0.0 - tslib: 1.14.1 - dev: true - - /@walletconnect/heartbeat@1.2.1: - resolution: - { - integrity: sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== - } - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/time': 1.0.2 - tslib: 1.14.1 - dev: true - - /@walletconnect/heartbeat@1.2.2: - resolution: - { - integrity: sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw== - } - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/time': 1.0.2 - events: 3.3.0 - dev: true - - /@walletconnect/jsonrpc-http-connection@1.0.8: - resolution: - { - integrity: sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw== - } - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - cross-fetch: 3.1.8 - events: 3.3.0 - transitivePeerDependencies: - - encoding - dev: true - - /@walletconnect/jsonrpc-provider@1.0.14: - resolution: - { - integrity: sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== - } - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - events: 3.3.0 - dev: true - - /@walletconnect/jsonrpc-types@1.0.3: - resolution: - { - integrity: sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== - } - dependencies: - keyvaluestorage-interface: 1.0.0 - tslib: 1.14.1 - dev: true - - /@walletconnect/jsonrpc-types@1.0.4: - resolution: - { - integrity: sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== - } - dependencies: - events: 3.3.0 - keyvaluestorage-interface: 1.0.0 - dev: true - - /@walletconnect/jsonrpc-utils@1.0.8: - resolution: - { - integrity: sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== - } - dependencies: - '@walletconnect/environment': 1.0.1 - '@walletconnect/jsonrpc-types': 1.0.4 - tslib: 1.14.1 - dev: true - - /@walletconnect/jsonrpc-ws-connection@1.0.14: - resolution: - { - integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA== - } - dependencies: - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/safe-json': 1.0.2 - events: 3.3.0 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /@walletconnect/keyvaluestorage@1.1.1: - resolution: - { - integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== - } - peerDependencies: - '@react-native-async-storage/async-storage': 1.x - peerDependenciesMeta: - '@react-native-async-storage/async-storage': - optional: true - dependencies: - '@walletconnect/safe-json': 1.0.2 - idb-keyval: 6.2.1 - unstorage: 1.10.2(idb-keyval@6.2.1) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: true - - /@walletconnect/legacy-modal@2.0.0: - resolution: - { - integrity: sha512-jckNd8lMhm4X7dX9TDdxM3bXKJnaqkRs6K2Mo5j6GmbIF9Eyx40jZ5+q457RVxvM6ciZEDT5s1wBHWdWoOo+9Q== - } - dependencies: - '@walletconnect/legacy-types': 2.0.0 - '@walletconnect/legacy-utils': 2.0.0 - copy-to-clipboard: 3.3.3 - preact: 10.22.0 - qrcode: 1.5.3 - dev: true - - /@walletconnect/legacy-types@2.0.0: - resolution: - { - integrity: sha512-sOVrA7HUdbI1OwKyPOQU0/DdvTSVFlsXWpAk2K2WvP2erTkBWPMTJq6cv2BmKdoJ3p6gLApT7sd+jHi3OF71uw== - } - dependencies: - '@walletconnect/jsonrpc-types': 1.0.4 - dev: true - - /@walletconnect/legacy-utils@2.0.0: - resolution: - { - integrity: sha512-CPWxSVVXw0kgNCxvU126g4GiV3mzXmC8IPJ15twE46aJ1FX+RHEIfAzFMFz2F2+fEhBxL63A7dwNQKDXorRPcQ== - } - dependencies: - '@walletconnect/encoding': 1.0.2 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/legacy-types': 2.0.0 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 6.14.1 - dev: true - - /@walletconnect/logger@2.1.2: - resolution: - { - integrity: sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== - } - dependencies: - '@walletconnect/safe-json': 1.0.2 - pino: 7.11.0 - dev: true - - /@walletconnect/modal-core@2.6.2(react@18.3.1): - resolution: - { - integrity: sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA== - } - dependencies: - valtio: 1.11.2(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - react - dev: true - - /@walletconnect/modal-ui@2.6.2(react@18.3.1): - resolution: - { - integrity: sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA== - } - dependencies: - '@walletconnect/modal-core': 2.6.2(react@18.3.1) - lit: 2.8.0 - motion: 10.16.2 - qrcode: 1.5.3 - transitivePeerDependencies: - - '@types/react' - - react - dev: true - - /@walletconnect/modal@2.6.2(react@18.3.1): - resolution: - { - integrity: sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== - } - dependencies: - '@walletconnect/modal-core': 2.6.2(react@18.3.1) - '@walletconnect/modal-ui': 2.6.2(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - react - dev: true - - /@walletconnect/relay-api@1.0.10: - resolution: - { - integrity: sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw== - } - dependencies: - '@walletconnect/jsonrpc-types': 1.0.4 - dev: true - - /@walletconnect/relay-auth@1.0.4: - resolution: - { - integrity: sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== - } - dependencies: - '@stablelib/ed25519': 1.0.3 - '@stablelib/random': 1.0.2 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - tslib: 1.14.1 - uint8arrays: 3.1.0 - dev: true - - /@walletconnect/safe-json@1.0.2: - resolution: - { - integrity: sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== - } - dependencies: - tslib: 1.14.1 - dev: true - - /@walletconnect/sign-client@2.13.0: - resolution: - { - integrity: sha512-En7KSvNUlQFx20IsYGsFgkNJ2lpvDvRsSFOT5PTdGskwCkUfOpB33SQJ6nCrN19gyoKPNvWg80Cy6MJI0TjNYA== - } - dependencies: - '@walletconnect/core': 2.13.0 - '@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.13.0 - '@walletconnect/utils': 2.13.0 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate - dev: true - - /@walletconnect/time@1.0.2: - resolution: - { - integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== - } - dependencies: - tslib: 1.14.1 - dev: true - - /@walletconnect/types@2.12.0: - resolution: - { - integrity: sha512-uhB3waGmujQVJcPgJvGOpB8RalgYSBT+HpmVbfl4Qe0xJyqpRUo4bPjQa0UYkrHaW20xIw94OuP4+FMLYdeemg== - } - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: true - - /@walletconnect/types@2.13.0: - resolution: - { - integrity: sha512-MWaVT0FkZwzYbD3tvk8F+2qpPlz1LUSWHuqbINUtMXnSzJtXN49Y99fR7FuBhNFtDalfuWsEK17GrNA+KnAsPQ== - } - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.2 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/keyvaluestorage': 1.1.1 - '@walletconnect/logger': 2.1.2 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: true - - /@walletconnect/universal-provider@2.13.0: - resolution: - { - integrity: sha512-B5QvO8pnk5Bqn4aIt0OukGEQn2Auk9VbHfhQb9cGwgmSCd1GlprX/Qblu4gyT5+TjHMb1Gz5UssUaZWTWbDhBg== - } - dependencies: - '@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/logger': 2.1.2 - '@walletconnect/sign-client': 2.13.0 - '@walletconnect/types': 2.13.0 - '@walletconnect/utils': 2.13.0 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate - dev: true - - /@walletconnect/utils@2.12.0: - resolution: - { - integrity: sha512-GIpfHUe1Bjp1Tjda0SkJEizKOT2biuv7VPFnKsOLT1T+8QxEP9NruC+K2UUEvijS1Qr/LKH9P5004RYNgrch+w== - } - dependencies: - '@stablelib/chacha20poly1305': 1.0.1 - '@stablelib/hkdf': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/sha256': 1.0.1 - '@stablelib/x25519': 1.0.3 - '@walletconnect/relay-api': 1.0.10 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.12.0 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 7.1.3 - uint8arrays: 3.1.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: true - - /@walletconnect/utils@2.13.0: - resolution: - { - integrity: sha512-q1eDCsRHj5iLe7fF8RroGoPZpdo2CYMZzQSrw1iqL+2+GOeqapxxuJ1vaJkmDUkwgklfB22ufqG6KQnz78sD4w== - } - dependencies: - '@stablelib/chacha20poly1305': 1.0.1 - '@stablelib/hkdf': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/sha256': 1.0.1 - '@stablelib/x25519': 1.0.3 - '@walletconnect/relay-api': 1.0.10 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.13.0 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 7.1.3 - uint8arrays: 3.1.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: true - - /@walletconnect/window-getters@1.0.1: - resolution: - { - integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== - } - dependencies: - tslib: 1.14.1 - dev: true - - /@walletconnect/window-metadata@1.0.1: - resolution: - { - integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== - } - dependencies: - '@walletconnect/window-getters': 1.0.1 - tslib: 1.14.1 - dev: true - - /@web3modal/common@4.2.2: - resolution: - { - integrity: sha512-FDTSfI8geY2x0or7h9fjNCKJ+9sxzXx1wjTa6iMqLNQB2Kkot8pz+IfHE9tdyHY5946WQ4YtowecmoKTjECzFw== - } - dependencies: - bignumber.js: 9.1.2 - dayjs: 1.11.10 - dev: true - - /@web3modal/core@4.2.2(react@18.3.1): - resolution: - { - integrity: sha512-O78tam38fQxELAnUL+eUAabkG1RZGBM680cqsG7OpRz2pUwtL4+2DTvsbNj071/wXm9VX7PNY2CyGErPSBvstQ== - } - dependencies: - '@web3modal/common': 4.2.2 - '@web3modal/wallet': 4.2.2 - valtio: 1.11.2(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - react - dev: true - - /@web3modal/ethers@4.2.2(ethers@6.12.1)(react@18.3.1): - resolution: - { - integrity: sha512-rBLoF+ZCDfLaqyYgadrr/M0uZ5iUlaGxEkiX+kF5QNeJwmD0UuoKsQeMxEIf2aIAO2Be5xEpWKxuE88FhEMoOA== - } - peerDependencies: - ethers: '>=6.0.0' - react: '>=17' - react-dom: '>=17' - vue: '>=3' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - vue: - optional: true - dependencies: - '@coinbase/wallet-sdk': 3.9.1 - '@walletconnect/ethereum-provider': 2.13.0(react@18.3.1) - '@web3modal/polyfills': 4.2.2 - '@web3modal/scaffold': 4.2.2(react@18.3.1) - '@web3modal/scaffold-react': 4.2.2(react@18.3.1) - '@web3modal/scaffold-utils': 4.2.2(react@18.3.1) - '@web3modal/scaffold-vue': 4.2.2(react@18.3.1) - '@web3modal/siwe': 4.2.2(react@18.3.1) - ethers: 6.12.1 - react: 18.3.1 - valtio: 1.11.2(react@18.3.1) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - supports-color - - uWebSockets.js - - utf-8-validate - dev: true - - /@web3modal/polyfills@4.2.2: - resolution: - { - integrity: sha512-fNqK/ybaiQwkcg38LMnBgpz+ZHIK/8xGxZ+f7ny21jFX4ttByT8T8xLwfubUoZRfNDPo320+cji7DcMQyvaCEw== - } - dependencies: - buffer: 6.0.3 - dev: true - - /@web3modal/scaffold-react@4.2.2(react@18.3.1): - resolution: - { - integrity: sha512-OEJvKWz7+W8VThB7an4D/Pta31thkvBQi/1kYG541sEA3xdjiR8dB0fpFgf+ImT1bcPs6XCTM3yPKqXsrN5PaA== - } - peerDependencies: - react: '>=17' - react-dom: '>=17' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - dependencies: - '@web3modal/scaffold': 4.2.2(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js - dev: true - - /@web3modal/scaffold-utils@4.2.2(react@18.3.1): - resolution: - { - integrity: sha512-gK8tzFv0KW0VEz9DB7QnMQGt5BsW3n8EzNX3YrWOk3x8jSmq087VyGFaoQCKxXNyrHWzbehvjpppLxqtsMUk3A== - } - dependencies: - '@web3modal/core': 4.2.2(react@18.3.1) - '@web3modal/polyfills': 4.2.2 - valtio: 1.11.2(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - react - dev: true - - /@web3modal/scaffold-vue@4.2.2(react@18.3.1): - resolution: - { - integrity: sha512-oaxOyaG5enjodIp/FNyodIPiFa3yiB4ptQrRfNX5opv6z2HUKDiu4jM3BRLwys2ncgLSflhDGfx3QQZZqNR8Hg== - } - peerDependencies: - vue: '>=3' - peerDependenciesMeta: - vue: - optional: true - dependencies: - '@web3modal/scaffold': 4.2.2(react@18.3.1) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - react - - uWebSockets.js - dev: true - - /@web3modal/scaffold@4.2.2(react@18.3.1): - resolution: - { - integrity: sha512-lpomW3Ypk+eaDNdwmUD0MFDNGiS4WEO8euN9q/pvuJkhnm5jzpr3sYiub4pU+WgZmZIJLRWUuiSeKdUDJSrlRg== - } - dependencies: - '@web3modal/common': 4.2.2 - '@web3modal/core': 4.2.2(react@18.3.1) - '@web3modal/siwe': 4.2.2(react@18.3.1) - '@web3modal/ui': 4.2.2 - '@web3modal/wallet': 4.2.2 - lit: 3.1.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - react - - uWebSockets.js - dev: true - - /@web3modal/siwe@4.2.2(react@18.3.1): - resolution: - { - integrity: sha512-9Pei6E5nG9/FeNuPh8Sj0zic9hc8K1PeMlK3wTTOOskOtlW4zCbdJ3GnsaDIwqrJDI8z5aG96JoRbC1rwInGtQ== - } - dependencies: - '@walletconnect/utils': 2.12.0 - '@web3modal/core': 4.2.2(react@18.3.1) - '@web3modal/scaffold-utils': 4.2.2(react@18.3.1) - lit: 3.1.0 - valtio: 1.11.2(react@18.3.1) - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@types/react' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - react - - uWebSockets.js - dev: true - - /@web3modal/ui@4.2.2: - resolution: - { - integrity: sha512-SlEGUSI5jq9cbo5w49KflQnAt0bDl5pWOg6Ax+d+6EOOjLrWl5giUAk+PX9qwV6YVVviBzUlzgofuTt2Z1ZXhw== - } - dependencies: - lit: 3.1.0 - qrcode: 1.5.3 - dev: true - - /@web3modal/wallet@4.2.2: - resolution: - { - integrity: sha512-ZkEWeXzbGWUGLFP+uPtdkG4OdiGgdVL9lLCWWVZlq7NZpZdTSc8+kmgdH71qvfNbt+yr7do1KVsQQcQfF6jXhw== - } - dependencies: - '@web3modal/polyfills': 4.2.2 - zod: 3.22.4 - dev: true - - /JSONStream@1.3.5: - resolution: - { - integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - } - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - - /acorn@8.11.3: - resolution: - { - integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - } - engines: { node: '>=0.4.0' } - hasBin: true - dev: true - - /aes-js@3.0.0: - resolution: - { - integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - } - dev: true - - /aes-js@4.0.0-beta.5: - resolution: - { - integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - } - dev: true - - /agentkeepalive@4.5.0: - resolution: - { - integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - } - engines: { node: '>= 8.0.0' } - dependencies: - humanize-ms: 1.2.1 - dev: true - - /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - } - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - } - engines: { node: '>=8' } - dev: true - - /ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - } - engines: { node: '>=8' } - dependencies: - color-convert: 2.0.1 - dev: true - - /anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - } - engines: { node: '>= 8' } - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /argparse@1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - } - dependencies: - sprintf-js: 1.0.3 - dev: true - - /asn1.js@4.10.1: - resolution: - { - integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - } - dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /assert@2.1.0: - resolution: - { - integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - } - dependencies: - call-bind: 1.0.7 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.5 - util: 0.12.5 - dev: true - - /async-mutex@0.2.6: - resolution: - { - integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== - } - dependencies: - tslib: 2.6.2 - dev: true - - /asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - } - dev: true - - /atomic-sleep@1.0.0: - resolution: - { - integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - } - engines: { node: '>=8.0.0' } - dev: true - - /available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - } - engines: { node: '>= 0.4' } - dependencies: - possible-typed-array-names: 1.0.0 - - /axios@0.21.4: - resolution: - { - integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - } - dependencies: - follow-redirects: 1.15.6 - transitivePeerDependencies: - - debug - dev: true - - /axios@1.7.2: - resolution: - { - integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== - } - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: true - - /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - } - dev: true - - /base-x@3.0.9: - resolution: - { - integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - } - dependencies: - safe-buffer: 5.2.1 - dev: true - - /base64-js@1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - } - dev: true - - /bigint-buffer@1.1.5: - resolution: - { - integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== - } - engines: { node: '>= 10.0.0' } - requiresBuild: true - dependencies: - bindings: 1.5.0 - dev: true - - /bignumber.js@9.1.2: - resolution: - { - integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - } - - /binary-extensions@2.3.0: - resolution: - { - integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - } - engines: { node: '>=8' } - dev: true - - /bindings@1.5.0: - resolution: - { - integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - } - dependencies: - file-uri-to-path: 1.0.0 - dev: true - - /bn.js@4.12.0: - resolution: - { - integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - } - dev: true - - /bn.js@5.2.1: - resolution: - { - integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - } - dev: true - - /borsh@0.7.0: - resolution: - { - integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== - } - dependencies: - bn.js: 5.2.1 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - dev: true - - /brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - } - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - } - dependencies: - balanced-match: 1.0.2 - dev: true - - /braces@3.0.3: - resolution: - { - integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - } - engines: { node: '>=8' } - dependencies: - fill-range: 7.1.1 - dev: true - - /brorand@1.1.0: - resolution: - { - integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - } - dev: true - - /browser-resolve@2.0.0: - resolution: - { - integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== - } - dependencies: - resolve: 1.22.8 - dev: true - - /browserify-aes@1.2.0: - resolution: - { - integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - } - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-cipher@1.0.1: - resolution: - { - integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - } - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - - /browserify-des@1.0.2: - resolution: - { - integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - } - dependencies: - cipher-base: 1.0.4 - des.js: 1.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-rsa@4.1.0: - resolution: - { - integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - } - dependencies: - bn.js: 5.2.1 - randombytes: 2.1.0 - dev: true - - /browserify-sign@4.2.3: - resolution: - { - integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== - } - engines: { node: '>= 0.12' } - dependencies: - bn.js: 5.2.1 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.5 - hash-base: 3.0.4 - inherits: 2.0.4 - parse-asn1: 5.1.7 - readable-stream: 2.3.8 - safe-buffer: 5.2.1 - dev: true - - /browserify-zlib@0.2.0: - resolution: - { - integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - } - dependencies: - pako: 1.0.11 - dev: true - - /bs58@4.0.1: - resolution: - { - integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - } - dependencies: - base-x: 3.0.9 - dev: true - - /buffer-xor@1.0.3: - resolution: - { - integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - } - dev: true - - /buffer@5.7.1: - resolution: - { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - } - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /buffer@6.0.3: - resolution: - { - integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - } - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - - /bufferutil@4.0.8: - resolution: - { - integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== - } - engines: { node: '>=6.14.2' } - requiresBuild: true - dependencies: - node-gyp-build: 4.8.1 - - /builtin-status-codes@3.0.0: - resolution: - { - integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== - } - dev: true - - /call-bind@1.0.7: - resolution: - { - integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - } - engines: { node: '>= 0.4' } - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - /camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - } - engines: { node: '>=6' } - dev: true - - /chokidar@3.6.0: - resolution: - { - integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - } - engines: { node: '>= 8.10.0' } - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /cipher-base@1.0.4: - resolution: - { - integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - } - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /citty@0.1.6: - resolution: - { - integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== - } - dependencies: - consola: 3.2.3 - dev: true - - /clipboardy@4.0.0: - resolution: - { - integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== - } - engines: { node: '>=18' } - dependencies: - execa: 8.0.1 - is-wsl: 3.1.0 - is64bit: 2.0.0 - dev: true - - /cliui@6.0.0: - resolution: - { - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - } - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true - - /clsx@1.2.1: - resolution: - { - integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - } - engines: { node: '>=6' } - dev: true - - /color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - } - engines: { node: '>=7.0.0' } - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - } - dev: true - - /combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - } - engines: { node: '>= 0.8' } - dependencies: - delayed-stream: 1.0.0 - dev: true - - /commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - } - dev: true - - /commander@9.5.0: - resolution: - { - integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - } - engines: { node: ^12.20.0 || >=14 } - requiresBuild: true - dev: true - optional: true - - /computeds@0.0.1: - resolution: - { - integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== - } - dev: true - - /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - } - dev: true - - /confbox@0.1.7: - resolution: - { - integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== - } - dev: true - - /consola@3.2.3: - resolution: - { - integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== - } - engines: { node: ^14.18.0 || >=16.10.0 } - dev: true - - /console-browserify@1.2.0: - resolution: - { - integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - } - dev: true - - /constants-browserify@1.0.0: - resolution: - { - integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== - } - dev: true - - /cookie-es@1.1.0: - resolution: - { - integrity: sha512-L2rLOcK0wzWSfSDA33YR+PUHDG10a8px7rUHKWbGLP4YfbsMed2KFUw5fczvDPbT98DDe3LEzviswl810apTEw== - } - dev: true - - /copy-to-clipboard@3.3.3: - resolution: - { - integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== - } - dependencies: - toggle-selection: 1.0.6 - dev: true - - /core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - } - dev: true - - /crc-32@1.2.2: - resolution: - { - integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - } - engines: { node: '>=0.8' } - hasBin: true - dev: true - - /create-ecdh@4.0.4: - resolution: - { - integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - } - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.5 - dev: true - - /create-hash@1.2.0: - resolution: - { - integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - } - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: - { - integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - } - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /create-require@1.1.1: - resolution: - { - integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - } - dev: true - - /cross-fetch@3.1.8: - resolution: - { - integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - } - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - - /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - } - engines: { node: '>= 8' } - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /crossws@0.2.4: - resolution: - { - integrity: sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg== - } - peerDependencies: - uWebSockets.js: '*' - peerDependenciesMeta: - uWebSockets.js: - optional: true - dev: true - - /crypto-browserify@3.12.0: - resolution: - { - integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - } - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.3 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - dev: true - - /dayjs@1.11.10: - resolution: - { - integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== - } - dev: true - - /de-indent@1.0.2: - resolution: - { - integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - } - dev: true - - /debug@4.3.4: - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - } - engines: { node: '>=6.0' } - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /decamelize@1.2.0: - resolution: - { - integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - } - engines: { node: '>=0.10.0' } - dev: true - - /decode-uri-component@0.2.2: - resolution: - { - integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - } - engines: { node: '>=0.10' } - dev: true - - /define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - } - engines: { node: '>= 0.4' } - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - /define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - } - engines: { node: '>= 0.4' } - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true - - /defu@6.1.4: - resolution: - { - integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== - } - dev: true - - /delay@5.0.0: - resolution: - { - integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - } - engines: { node: '>=10' } - dev: true - - /delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - } - engines: { node: '>=0.4.0' } - dev: true - - /des.js@1.1.0: - resolution: - { - integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== - } - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /destr@2.0.3: - resolution: - { - integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== - } - dev: true - - /detect-browser@5.3.0: - resolution: - { - integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== - } - dev: true - - /detect-libc@1.0.3: - resolution: - { - integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - } - engines: { node: '>=0.10' } - hasBin: true - dev: true - - /diffie-hellman@5.0.3: - resolution: - { - integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - } - dependencies: - bn.js: 4.12.0 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dev: true - - /dijkstrajs@1.0.3: - resolution: - { - integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== - } - dev: true - - /domain-browser@4.23.0: - resolution: - { - integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA== - } - engines: { node: '>=10' } - dev: true - - /duplexify@4.1.3: - resolution: - { - integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== - } - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 3.6.2 - stream-shift: 1.0.3 - dev: true - - /elliptic@6.5.4: - resolution: - { - integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - } - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.3 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /elliptic@6.5.5: - resolution: - { - integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== - } - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - } - dev: true - - /encode-utf8@1.0.3: - resolution: - { - integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - } - dev: true - - /end-of-stream@1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - } - dependencies: - once: 1.4.0 - dev: true - - /entities@4.5.0: - resolution: - { - integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - } - engines: { node: '>=0.12' } - dev: true - - /es-define-property@1.0.0: - resolution: - { - integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - } - engines: { node: '>= 0.4' } - dependencies: - get-intrinsic: 1.2.4 - - /es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - } - engines: { node: '>= 0.4' } - - /es6-promise@4.2.8: - resolution: - { - integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - } - dev: true - - /es6-promisify@5.0.0: - resolution: - { - integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== - } - dependencies: - es6-promise: 4.2.8 - dev: true - - /esbuild@0.20.2: - resolution: - { - integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== - } - engines: { node: '>=12' } - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: true - - /estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - } - dev: true - - /eth-block-tracker@7.1.0: - resolution: - { - integrity: sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg== - } - engines: { node: '>=14.0.0' } - dependencies: - '@metamask/eth-json-rpc-provider': 1.0.1 - '@metamask/safe-event-emitter': 3.1.1 - '@metamask/utils': 5.0.2 - json-rpc-random-id: 1.0.1 - pify: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /eth-json-rpc-filters@6.0.1: - resolution: - { - integrity: sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig== - } - engines: { node: '>=14.0.0' } - dependencies: - '@metamask/safe-event-emitter': 3.1.1 - async-mutex: 0.2.6 - eth-query: 2.1.2 - json-rpc-engine: 6.1.0 - pify: 5.0.0 - dev: true - - /eth-query@2.1.2: - resolution: - { - integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== - } - dependencies: - json-rpc-random-id: 1.0.1 - xtend: 4.0.2 - dev: true - - /eth-rpc-errors@4.0.3: - resolution: - { - integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== - } - dependencies: - fast-safe-stringify: 2.1.1 - dev: true - - /ethereum-cryptography@2.1.3: - resolution: - { - integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - } - dependencies: - '@noble/curves': 1.3.0 - '@noble/hashes': 1.3.3 - '@scure/bip32': 1.3.3 - '@scure/bip39': 1.2.2 - - /ethers@4.0.49: - resolution: - { - integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - } - dependencies: - aes-js: 3.0.0 - bn.js: 4.12.0 - elliptic: 6.5.4 - hash.js: 1.1.3 - js-sha3: 0.5.7 - scrypt-js: 2.0.4 - setimmediate: 1.0.4 - uuid: 2.0.1 - xmlhttprequest: 1.8.0 - dev: true - - /ethers@6.12.1: - resolution: - { - integrity: sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw== - } - engines: { node: '>=14.0.0' } - dependencies: - '@adraffy/ens-normalize': 1.10.1 - '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@types/node': 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /eventemitter3@3.1.2: - resolution: - { - integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - } - dev: true - - /eventemitter3@4.0.7: - resolution: - { - integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - } - dev: true - - /eventemitter3@5.0.1: - resolution: - { - integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - } - - /events@3.3.0: - resolution: - { - integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - } - engines: { node: '>=0.8.x' } - dev: true - - /evp_bytestokey@1.0.3: - resolution: - { - integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - } - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - dev: true - - /execa@8.0.1: - resolution: - { - integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - } - engines: { node: '>=16.17' } - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - - /eyes@0.1.8: - resolution: - { - integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== - } - engines: { node: '> 0.1.90' } - dev: true - - /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - } - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - } - dev: true - - /fast-redact@3.5.0: - resolution: - { - integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== - } - engines: { node: '>=6' } - dev: true - - /fast-safe-stringify@2.1.1: - resolution: - { - integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - } - dev: true - - /fast-stable-stringify@1.0.0: - resolution: - { - integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== - } - dev: true - - /file-uri-to-path@1.0.0: - resolution: - { - integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - } - dev: true - - /fill-range@7.1.1: - resolution: - { - integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - } - engines: { node: '>=8' } - dependencies: - to-regex-range: 5.0.1 - dev: true - - /filter-obj@1.1.0: - resolution: - { - integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - } - engines: { node: '>=0.10.0' } - dev: true - - /find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - } - engines: { node: '>=8' } - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - } - engines: { node: '>=10' } - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /follow-redirects@1.15.6: - resolution: - { - integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - } - engines: { node: '>=4.0' } - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: true - - /for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - } - dependencies: - is-callable: 1.2.7 - - /form-data@4.0.0: - resolution: - { - integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - } - engines: { node: '>= 6' } - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - - /fs-extra@7.0.1: - resolution: - { - integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - } - engines: { node: '>=6 <7 || >=8' } - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - dev: true - - /fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - } - - /get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - } - engines: { node: 6.* || 8.* || >= 10.* } - dev: true - - /get-intrinsic@1.2.4: - resolution: - { - integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - } - engines: { node: '>= 0.4' } - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - - /get-port-please@3.1.2: - resolution: - { - integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== - } - dev: true - - /get-stream@8.0.1: - resolution: - { - integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - } - engines: { node: '>=16' } - dev: true - - /glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - } - engines: { node: '>= 6' } - dependencies: - is-glob: 4.0.3 - dev: true - - /gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - } - dependencies: - get-intrinsic: 1.2.4 - - /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - } - dev: true - - /h3@1.11.1: - resolution: - { - integrity: sha512-AbaH6IDnZN6nmbnJOH72y3c5Wwh9P97soSVdGSBbcDACRdkC0FEWf25pzx4f/NuOCK6quHmW18yF2Wx+G4Zi1A== - } - dependencies: - cookie-es: 1.1.0 - crossws: 0.2.4 - defu: 6.1.4 - destr: 2.0.3 - iron-webcrypto: 1.2.1 - ohash: 1.1.3 - radix3: 1.1.2 - ufo: 1.5.3 - uncrypto: 0.1.3 - unenv: 1.9.0 - transitivePeerDependencies: - - uWebSockets.js - dev: true - - /has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - } - engines: { node: '>=8' } - dev: true - - /has-property-descriptors@1.0.2: - resolution: - { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - } - dependencies: - es-define-property: 1.0.0 - - /has-proto@1.0.3: - resolution: - { - integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - } - engines: { node: '>= 0.4' } - - /has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - } - engines: { node: '>= 0.4' } - - /has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - } - engines: { node: '>= 0.4' } - dependencies: - has-symbols: 1.0.3 - - /hash-base@3.0.4: - resolution: - { - integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== - } - engines: { node: '>=4' } - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /hash-base@3.1.0: - resolution: - { - integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - } - engines: { node: '>=4' } - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - safe-buffer: 5.2.1 - dev: true - - /hash.js@1.1.3: - resolution: - { - integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - } - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /hash.js@1.1.7: - resolution: - { - integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - } - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - - /hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - } - engines: { node: '>= 0.4' } - dependencies: - function-bind: 1.1.2 - - /he@1.2.0: - resolution: - { - integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - } - hasBin: true - dev: true - - /hey-listen@1.0.8: - resolution: - { - integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - } - dev: true - - /hmac-drbg@1.0.1: - resolution: - { - integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - } - dependencies: - hash.js: 1.1.3 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - - /http-shutdown@1.2.2: - resolution: - { - integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== - } - engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } - dev: true - - /https-browserify@1.0.0: - resolution: - { - integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== - } - dev: true - - /human-signals@5.0.0: - resolution: - { - integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - } - engines: { node: '>=16.17.0' } - dev: true - - /humanize-ms@1.2.1: - resolution: - { - integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - } - dependencies: - ms: 2.1.2 - dev: true - - /idb-keyval@6.2.1: - resolution: - { - integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== - } - dev: true - - /ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - } - dev: true - - /import-lazy@4.0.0: - resolution: - { - integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - } - engines: { node: '>=8' } - dev: true - - /inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - } - - /injectpromise@1.0.0: - resolution: - { - integrity: sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA== - } - dev: true - - /iron-webcrypto@1.2.1: - resolution: - { - integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== - } - dev: true - - /is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - - /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - } - engines: { node: '>=8' } - dependencies: - binary-extensions: 2.3.0 - dev: true - - /is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - } - engines: { node: '>= 0.4' } - - /is-core-module@2.13.1: - resolution: - { - integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - } - dependencies: - hasown: 2.0.2 - dev: true - - /is-docker@3.0.0: - resolution: - { - integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - hasBin: true - dev: true - - /is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - } - engines: { node: '>=0.10.0' } - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - } - engines: { node: '>=8' } - dev: true - - /is-generator-function@1.0.10: - resolution: - { - integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - } - engines: { node: '>= 0.4' } - dependencies: - has-tostringtag: 1.0.2 - - /is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - } - engines: { node: '>=0.10.0' } - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-inside-container@1.0.0: - resolution: - { - integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - } - engines: { node: '>=14.16' } - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - - /is-nan@1.3.2: - resolution: - { - integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - } - engines: { node: '>=0.12.0' } - dev: true - - /is-stream@3.0.0: - resolution: - { - integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dev: true - - /is-typed-array@1.1.13: - resolution: - { - integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - } - engines: { node: '>= 0.4' } - dependencies: - which-typed-array: 1.1.15 - - /is-typedarray@1.0.0: - resolution: - { - integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - } - dev: true - - /is-wsl@3.1.0: - resolution: - { - integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== - } - engines: { node: '>=16' } - dependencies: - is-inside-container: 1.0.0 - dev: true - - /is64bit@2.0.0: - resolution: - { - integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== - } - engines: { node: '>=18' } - dependencies: - system-architecture: 0.1.0 - dev: true - - /isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - } - dev: true - - /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - } - dev: true - - /isomorphic-timers-promises@1.0.1: - resolution: - { - integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ== - } - engines: { node: '>=10' } - dev: true - - /isomorphic-unfetch@3.1.0: - resolution: - { - integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== - } - dependencies: - node-fetch: 2.7.0 - unfetch: 4.2.0 - transitivePeerDependencies: - - encoding - dev: true - - /isomorphic-ws@4.0.1(ws@7.5.9): - resolution: - { - integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - } - peerDependencies: - ws: '*' - dependencies: - ws: 7.5.9 - dev: true - - /jayson@4.1.0: - resolution: - { - integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== - } - engines: { node: '>=8' } - hasBin: true - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.9) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 7.5.9 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /jiti@1.21.0: - resolution: - { - integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - } - hasBin: true - dev: true - - /jju@1.4.0: - resolution: - { - integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== - } - dev: true - - /js-sha3@0.5.7: - resolution: - { - integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - } - dev: true - - /js-sha3@0.8.0: - resolution: - { - integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - } - dev: true - - /js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - } - dev: true - - /json-rpc-engine@6.1.0: - resolution: - { - integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== - } - engines: { node: '>=10.0.0' } - dependencies: - '@metamask/safe-event-emitter': 2.0.0 - eth-rpc-errors: 4.0.3 - dev: true - - /json-rpc-random-id@1.0.1: - resolution: - { - integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== - } - dev: true - - /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - } - dev: true - - /json-stringify-safe@5.0.1: - resolution: - { - integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - } - dev: true - - /jsonfile@4.0.0: - resolution: - { - integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - } - optionalDependencies: - graceful-fs: 4.2.11 - dev: true - - /jsonparse@1.3.1: - resolution: - { - integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - } - engines: { '0': node >= 0.2.0 } - dev: true - - /keccak@3.0.4: - resolution: - { - integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== - } - engines: { node: '>=10.0.0' } - requiresBuild: true - dependencies: - node-addon-api: 2.0.2 - node-gyp-build: 4.8.1 - readable-stream: 3.6.2 - dev: true - - /keyvaluestorage-interface@1.0.0: - resolution: - { - integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== - } - dev: true - - /kolorist@1.8.0: - resolution: - { - integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== - } - dev: true - - /listhen@1.7.2: - resolution: - { - integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g== - } - hasBin: true - dependencies: - '@parcel/watcher': 2.4.1 - '@parcel/watcher-wasm': 2.4.1 - citty: 0.1.6 - clipboardy: 4.0.0 - consola: 3.2.3 - crossws: 0.2.4 - defu: 6.1.4 - get-port-please: 3.1.2 - h3: 1.11.1 - http-shutdown: 1.2.2 - jiti: 1.21.0 - mlly: 1.7.0 - node-forge: 1.3.1 - pathe: 1.1.2 - std-env: 3.7.0 - ufo: 1.5.3 - untun: 0.1.3 - uqr: 0.1.2 - transitivePeerDependencies: - - uWebSockets.js - dev: true - - /lit-element@3.3.3: - resolution: - { - integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== - } - dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 - '@lit/reactive-element': 1.6.3 - lit-html: 2.8.0 - dev: true - - /lit-element@4.0.5: - resolution: - { - integrity: sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q== - } - dependencies: - '@lit-labs/ssr-dom-shim': 1.2.0 - '@lit/reactive-element': 2.0.4 - lit-html: 3.1.3 - dev: true - - /lit-html@2.8.0: - resolution: - { - integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== - } - dependencies: - '@types/trusted-types': 2.0.7 - dev: true - - /lit-html@3.1.3: - resolution: - { - integrity: sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA== - } - dependencies: - '@types/trusted-types': 2.0.7 - dev: true - - /lit@2.8.0: - resolution: - { - integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA== - } - dependencies: - '@lit/reactive-element': 1.6.3 - lit-element: 3.3.3 - lit-html: 2.8.0 - dev: true - - /lit@3.1.0: - resolution: - { - integrity: sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w== - } - dependencies: - '@lit/reactive-element': 2.0.4 - lit-element: 4.0.5 - lit-html: 3.1.3 - dev: true - - /locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - } - engines: { node: '>=8' } - dependencies: - p-locate: 4.1.0 - dev: true - - /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - } - engines: { node: '>=10' } - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.get@4.4.2: - resolution: - { - integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - } - dev: true - - /lodash.isequal@4.5.0: - resolution: - { - integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - } - dev: true - - /lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - } - dev: true - - /loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - } - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: true - - /lru-cache@10.2.2: - resolution: - { - integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== - } - engines: { node: 14 || >=16.14 } - dev: true - - /lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - } - engines: { node: '>=10' } - dependencies: - yallist: 4.0.0 - dev: true - - /magic-string@0.30.10: - resolution: - { - integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== - } - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /md5.js@1.3.5: - resolution: - { - integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - } - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - } - dev: true - - /micro-ftch@0.3.1: - resolution: - { - integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - } - dev: true - - /micromatch@4.0.7: - resolution: - { - integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== - } - engines: { node: '>=8.6' } - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - dev: true - - /miller-rabin@4.0.1: - resolution: - { - integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - } - hasBin: true - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - dev: true - - /mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - } - engines: { node: '>= 0.6' } - dev: true - - /mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - } - engines: { node: '>= 0.6' } - dependencies: - mime-db: 1.52.0 - dev: true - - /mime@3.0.0: - resolution: - { - integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - } - engines: { node: '>=10.0.0' } - hasBin: true - dev: true - - /mimic-fn@4.0.0: - resolution: - { - integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - } - engines: { node: '>=12' } - dev: true - - /minimalistic-assert@1.0.1: - resolution: - { - integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - } - dev: true - - /minimalistic-crypto-utils@1.0.1: - resolution: - { - integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - } - dev: true - - /minimatch@3.0.8: - resolution: - { - integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - } - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@9.0.4: - resolution: - { - integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== - } - engines: { node: '>=16 || 14 >=14.17' } - dependencies: - brace-expansion: 2.0.1 - dev: true - - /mlly@1.7.0: - resolution: - { - integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ== - } - dependencies: - acorn: 8.11.3 - pathe: 1.1.2 - pkg-types: 1.1.1 - ufo: 1.5.3 - dev: true - - /motion@10.16.2: - resolution: - { - integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== - } - dependencies: - '@motionone/animation': 10.17.0 - '@motionone/dom': 10.17.0 - '@motionone/svelte': 10.16.4 - '@motionone/types': 10.17.0 - '@motionone/utils': 10.17.0 - '@motionone/vue': 10.16.4 - dev: true - - /mri@1.2.0: - resolution: - { - integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - } - engines: { node: '>=4' } - dev: true - - /ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - } - dev: true - - /muggle-string@0.3.1: - resolution: - { - integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== - } - dev: true - - /multiformats@9.9.0: - resolution: - { - integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== - } - dev: true - - /nanoid@3.3.7: - resolution: - { - integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true - dev: true - - /napi-wasm@1.1.0: - resolution: - { - integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg== - } - dev: true - - /node-addon-api@2.0.2: - resolution: - { - integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - } - dev: true - - /node-addon-api@7.1.0: - resolution: - { - integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g== - } - engines: { node: ^16 || ^18 || >= 20 } - dev: true - - /node-fetch-native@1.6.4: - resolution: - { - integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== - } - dev: true - - /node-fetch@2.7.0: - resolution: - { - integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - } - engines: { node: 4.x || >=6.0.0 } - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - - /node-forge@1.3.1: - resolution: - { - integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - } - engines: { node: '>= 6.13.0' } - dev: true - - /node-gyp-build@4.8.1: - resolution: - { - integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== - } - hasBin: true - - /node-stdlib-browser@1.2.0: - resolution: - { - integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg== - } - engines: { node: '>=10' } - dependencies: - assert: 2.1.0 - browser-resolve: 2.0.0 - browserify-zlib: 0.2.0 - buffer: 5.7.1 - console-browserify: 1.2.0 - constants-browserify: 1.0.0 - create-require: 1.1.1 - crypto-browserify: 3.12.0 - domain-browser: 4.23.0 - events: 3.3.0 - https-browserify: 1.0.0 - isomorphic-timers-promises: 1.0.1 - os-browserify: 0.3.0 - path-browserify: 1.0.1 - pkg-dir: 5.0.0 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - readable-stream: 3.6.2 - stream-browserify: 3.0.0 - stream-http: 3.2.0 - string_decoder: 1.3.0 - timers-browserify: 2.0.12 - tty-browserify: 0.0.1 - url: 0.11.3 - util: 0.12.5 - vm-browserify: 1.1.2 - dev: true - - /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - } - engines: { node: '>=0.10.0' } - dev: true - - /npm-run-path@5.3.0: - resolution: - { - integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dependencies: - path-key: 4.0.0 - dev: true - - /object-inspect@1.13.1: - resolution: - { - integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - } - dev: true - - /object-is@1.1.6: - resolution: - { - integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - } - engines: { node: '>= 0.4' } - dev: true - - /object.assign@4.1.5: - resolution: - { - integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /ofetch@1.3.4: - resolution: - { - integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw== - } - dependencies: - destr: 2.0.3 - node-fetch-native: 1.6.4 - ufo: 1.5.3 - dev: true - - /ohash@1.1.3: - resolution: - { - integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== - } - dev: true - - /on-exit-leak-free@0.2.0: - resolution: - { - integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - } - dev: true - - /once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - } - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@6.0.0: - resolution: - { - integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - } - engines: { node: '>=12' } - dependencies: - mimic-fn: 4.0.0 - dev: true - - /os-browserify@0.3.0: - resolution: - { - integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - } - dev: true - - /p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - } - engines: { node: '>=6' } - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - } - engines: { node: '>=10' } - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - } - engines: { node: '>=8' } - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - } - engines: { node: '>=10' } - dependencies: - p-limit: 3.1.0 - dev: true - - /p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - } - engines: { node: '>=6' } - dev: true - - /pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - } - dev: true - - /parse-asn1@5.1.7: - resolution: - { - integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== - } - engines: { node: '>= 0.10' } - dependencies: - asn1.js: 4.10.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - hash-base: 3.0.4 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - dev: true - - /path-browserify@1.0.1: - resolution: - { - integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - } - dev: true - - /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - } - engines: { node: '>=8' } - dev: true - - /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - } - engines: { node: '>=8' } - dev: true - - /path-key@4.0.0: - resolution: - { - integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - } - engines: { node: '>=12' } - dev: true - - /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - } - dev: true - - /pathe@1.1.2: - resolution: - { - integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - } - dev: true - - /pbkdf2@3.1.2: - resolution: - { - integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - } - engines: { node: '>=0.12' } - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - - /picocolors@1.0.1: - resolution: - { - integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - } - dev: true - - /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - } - engines: { node: '>=8.6' } - dev: true - - /pify@3.0.0: - resolution: - { - integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - } - engines: { node: '>=4' } - dev: true - - /pify@5.0.0: - resolution: - { - integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - } - engines: { node: '>=10' } - dev: true - - /pino-abstract-transport@0.5.0: - resolution: - { - integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - } - dependencies: - duplexify: 4.1.3 - split2: 4.2.0 - dev: true - - /pino-std-serializers@4.0.0: - resolution: - { - integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - } - dev: true - - /pino@7.11.0: - resolution: - { - integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - } - hasBin: true - dependencies: - atomic-sleep: 1.0.0 - fast-redact: 3.5.0 - on-exit-leak-free: 0.2.0 - pino-abstract-transport: 0.5.0 - pino-std-serializers: 4.0.0 - process-warning: 1.0.0 - quick-format-unescaped: 4.0.4 - real-require: 0.1.0 - safe-stable-stringify: 2.4.3 - sonic-boom: 2.8.0 - thread-stream: 0.15.2 - dev: true - - /pkg-dir@5.0.0: - resolution: - { - integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - } - engines: { node: '>=10' } - dependencies: - find-up: 5.0.0 - dev: true - - /pkg-types@1.1.1: - resolution: - { - integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== - } - dependencies: - confbox: 0.1.7 - mlly: 1.7.0 - pathe: 1.1.2 - dev: true - - /pngjs@5.0.0: - resolution: - { - integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - } - engines: { node: '>=10.13.0' } - dev: true - - /pony-cause@2.1.11: - resolution: - { - integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg== - } - engines: { node: '>=12.0.0' } - dev: true - - /possible-typed-array-names@1.0.0: - resolution: - { - integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - } - engines: { node: '>= 0.4' } - - /postcss@8.4.38: - resolution: - { - integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - } - engines: { node: ^10 || ^12 || >=14 } - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - dev: true - - /preact@10.22.0: - resolution: - { - integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw== - } - dev: true - - /process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - } - dev: true - - /process-warning@1.0.0: - resolution: - { - integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - } - dev: true - - /process@0.11.10: - resolution: - { - integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - } - engines: { node: '>= 0.6.0' } - dev: true - - /proxy-compare@2.5.1: - resolution: - { - integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== - } - dev: true - - /proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - } - dev: true - - /public-encrypt@4.0.3: - resolution: - { - integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - } - dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - parse-asn1: 5.1.7 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /punycode@1.4.1: - resolution: - { - integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - } - dev: true - - /punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - } - engines: { node: '>=6' } - dev: true - - /qrcode@1.5.3: - resolution: - { - integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== - } - engines: { node: '>=10.13.0' } - hasBin: true - dependencies: - dijkstrajs: 1.0.3 - encode-utf8: 1.0.3 - pngjs: 5.0.0 - yargs: 15.4.1 - dev: true - - /qs@6.12.1: - resolution: - { - integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== - } - engines: { node: '>=0.6' } - dependencies: - side-channel: 1.0.6 - dev: true - - /query-string@6.14.1: - resolution: - { - integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== - } - engines: { node: '>=6' } - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - dev: true - - /query-string@7.1.3: - resolution: - { - integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== - } - engines: { node: '>=6' } - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - dev: true - - /querystring-es3@0.2.1: - resolution: - { - integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== - } - engines: { node: '>=0.4.x' } - dev: true - - /quick-format-unescaped@4.0.4: - resolution: - { - integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - } - dev: true - - /radix3@1.1.2: - resolution: - { - integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== - } - dev: true - - /randombytes@2.1.0: - resolution: - { - integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - } - dependencies: - safe-buffer: 5.2.1 - dev: true - - /randomfill@1.0.4: - resolution: - { - integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - } - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - - /react@18.3.1: - resolution: - { - integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== - } - engines: { node: '>=0.10.0' } - dependencies: - loose-envify: 1.4.0 - dev: true - - /readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - } - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - - /readable-stream@3.6.2: - resolution: - { - integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - } - engines: { node: '>= 6' } - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - - /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - } - engines: { node: '>=8.10.0' } - dependencies: - picomatch: 2.3.1 - dev: true - - /real-require@0.1.0: - resolution: - { - integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - } - engines: { node: '>= 12.13.0' } - dev: true - - /regenerator-runtime@0.14.1: - resolution: - { - integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - } - dev: true - - /require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - } - engines: { node: '>=0.10.0' } - dev: true - - /require-main-filename@2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - } - dev: true - - /resolve@1.19.0: - resolution: - { - integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - } - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - dev: true - - /resolve@1.22.8: - resolution: - { - integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - } - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /ripemd160@2.0.2: - resolution: - { - integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - } - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - dev: true - - /rollup@4.18.0: - resolution: - { - integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== - } - engines: { node: '>=18.0.0', npm: '>=8.0.0' } - hasBin: true - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 - fsevents: 2.3.3 - dev: true - - /rpc-websockets@7.11.0: - resolution: - { - integrity: sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w== - } - dependencies: - eventemitter3: 4.0.7 - uuid: 8.3.2 - ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - dev: true - - /safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - } - dev: true - - /safe-buffer@5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - } - dev: true - - /safe-stable-stringify@2.4.3: - resolution: - { - integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - } - engines: { node: '>=10' } - dev: true - - /scrypt-js@2.0.4: - resolution: - { - integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - } - dev: true - - /semver@5.7.2: - resolution: - { - integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - } - hasBin: true - dev: true - - /semver@7.5.4: - resolution: - { - integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - } - engines: { node: '>=10' } - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /semver@7.6.2: - resolution: - { - integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - } - engines: { node: '>=10' } - hasBin: true - dev: true - - /set-blocking@2.0.0: - resolution: - { - integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - } - dev: true - - /set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - } - engines: { node: '>= 0.4' } - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - - /setimmediate@1.0.4: - resolution: - { - integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - } - dev: true - - /setimmediate@1.0.5: - resolution: - { - integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - } - dev: true - - /sha.js@2.4.11: - resolution: - { - integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - } - hasBin: true - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - } - engines: { node: '>=8' } - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - } - engines: { node: '>=8' } - dev: true - - /side-channel@1.0.6: - resolution: - { - integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true - - /signal-exit@4.1.0: - resolution: - { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - } - engines: { node: '>=14' } - dev: true - - /sonic-boom@2.8.0: - resolution: - { - integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - } - dependencies: - atomic-sleep: 1.0.0 - dev: true - - /source-map-js@1.2.0: - resolution: - { - integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - } - engines: { node: '>=0.10.0' } - dev: true - - /source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - } - engines: { node: '>=0.10.0' } - dev: true - - /split-on-first@1.1.0: - resolution: - { - integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - } - engines: { node: '>=6' } - dev: true - - /split2@4.2.0: - resolution: - { - integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - } - engines: { node: '>= 10.x' } - dev: true - - /sprintf-js@1.0.3: - resolution: - { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - } - dev: true - - /std-env@3.7.0: - resolution: - { - integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - } - dev: true - - /stream-browserify@3.0.0: - resolution: - { - integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - } - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true - - /stream-http@3.2.0: - resolution: - { - integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== - } - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - xtend: 4.0.2 - dev: true - - /stream-shift@1.0.3: - resolution: - { - integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - } - dev: true - - /strict-uri-encode@2.0.0: - resolution: - { - integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - } - engines: { node: '>=4' } - dev: true - - /string-argv@0.3.2: - resolution: - { - integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - } - engines: { node: '>=0.6.19' } - dev: true - - /string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - } - engines: { node: '>=8' } - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - } - dependencies: - safe-buffer: 5.1.2 - dev: true - - /string_decoder@1.3.0: - resolution: - { - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - } - dependencies: - safe-buffer: 5.2.1 - dev: true - - /strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - } - engines: { node: '>=8' } - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-final-newline@3.0.0: - resolution: - { - integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - } - engines: { node: '>=12' } - dev: true - - /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - } - engines: { node: '>=8' } - dev: true - - /superstruct@0.14.2: - resolution: - { - integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== - } - dev: true - - /superstruct@1.0.4: - resolution: - { - integrity: sha512-7JpaAoX2NGyoFlI9NBh66BQXGONc+uE+MRS5i2iOBKuS4e+ccgMDjATgZldkah+33DakBxDHiss9kvUcGAO8UQ== - } - engines: { node: '>=14.0.0' } - dev: true - - /supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - } - engines: { node: '>=10' } - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - } - engines: { node: '>= 0.4' } - dev: true - - /system-architecture@0.1.0: - resolution: - { - integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== - } - engines: { node: '>=18' } - dev: true - - /text-encoding-utf-8@1.0.2: - resolution: - { - integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - } - dev: true - - /thread-stream@0.15.2: - resolution: - { - integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - } - dependencies: - real-require: 0.1.0 - dev: true - - /through@2.3.8: - resolution: - { - integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - } - dev: true - - /timers-browserify@2.0.12: - resolution: - { - integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - } - engines: { node: '>=0.6.0' } - dependencies: - setimmediate: 1.0.5 - dev: true - - /to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - } - engines: { node: '>=4' } - dev: true - - /to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - } - engines: { node: '>=8.0' } - dependencies: - is-number: 7.0.0 - dev: true - - /toggle-selection@1.0.6: - resolution: - { - integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - } - dev: true - - /tr46@0.0.3: - resolution: - { - integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - } - dev: true - - /tronweb@5.3.2: - resolution: - { - integrity: sha512-iPcIjMCxb6H7FXMntAj47F3L+7jSideyQ7ZOvRj9MeZBh46SHevMrDDR57HzakUa/tT8VvlPFHtqFK4hzTLkXw== - } - dependencies: - '@babel/runtime': 7.24.6 - '@ethersproject/abi': 5.7.0 - '@tronweb3/google-protobuf': 3.21.2 - axios: 1.7.2 - bignumber.js: 9.1.2 - ethereum-cryptography: 2.1.3 - ethers: 6.12.1 - eventemitter3: 3.1.2 - injectpromise: 1.0.0 - lodash: 4.17.21 - querystring-es3: 0.2.1 - semver: 5.7.2 - validator: 13.12.0 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - dev: true - - /tslib@1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - } - dev: true - - /tslib@2.4.0: - resolution: - { - integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - } - dev: true - - /tslib@2.6.2: - resolution: - { - integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - } - dev: true - - /tty-browserify@0.0.1: - resolution: - { - integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - } - dev: true - - /typedarray-to-buffer@3.1.5: - resolution: - { - integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - } - dependencies: - is-typedarray: 1.0.0 - dev: true - - /typescript@5.4.2: - resolution: - { - integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== - } - engines: { node: '>=14.17' } - hasBin: true - dev: true - - /typescript@5.4.5: - resolution: - { - integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - } - engines: { node: '>=14.17' } - hasBin: true - dev: true - - /ufo@1.5.3: - resolution: - { - integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== - } - dev: true - - /uint8arrays@3.1.0: - resolution: - { - integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== - } - dependencies: - multiformats: 9.9.0 - dev: true - - /uint8arrays@3.1.1: - resolution: - { - integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - } - dependencies: - multiformats: 9.9.0 - dev: true - - /uncrypto@0.1.3: - resolution: - { - integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== - } - dev: true - - /undici-types@5.26.5: - resolution: - { - integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - } - - /unenv@1.9.0: - resolution: - { - integrity: sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g== - } - dependencies: - consola: 3.2.3 - defu: 6.1.4 - mime: 3.0.0 - node-fetch-native: 1.6.4 - pathe: 1.1.2 - dev: true - - /unfetch@4.2.0: - resolution: - { - integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - } - dev: true - - /universalify@0.1.2: - resolution: - { - integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - } - engines: { node: '>= 4.0.0' } - dev: true - - /unstorage@1.10.2(idb-keyval@6.2.1): - resolution: - { - integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ== - } - peerDependencies: - '@azure/app-configuration': ^1.5.0 - '@azure/cosmos': ^4.0.0 - '@azure/data-tables': ^13.2.2 - '@azure/identity': ^4.0.1 - '@azure/keyvault-secrets': ^4.8.0 - '@azure/storage-blob': ^12.17.0 - '@capacitor/preferences': ^5.0.7 - '@netlify/blobs': ^6.5.0 || ^7.0.0 - '@planetscale/database': ^1.16.0 - '@upstash/redis': ^1.28.4 - '@vercel/kv': ^1.0.1 - idb-keyval: ^6.2.1 - ioredis: ^5.3.2 - peerDependenciesMeta: - '@azure/app-configuration': - optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/kv': - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - dependencies: - anymatch: 3.1.3 - chokidar: 3.6.0 - destr: 2.0.3 - h3: 1.11.1 - idb-keyval: 6.2.1 - listhen: 1.7.2 - lru-cache: 10.2.2 - mri: 1.2.0 - node-fetch-native: 1.6.4 - ofetch: 1.3.4 - ufo: 1.5.3 - transitivePeerDependencies: - - uWebSockets.js - dev: true - - /untun@0.1.3: - resolution: - { - integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== - } - hasBin: true - dependencies: - citty: 0.1.6 - consola: 3.2.3 - pathe: 1.1.2 - dev: true - - /uqr@0.1.2: - resolution: - { - integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== - } - dev: true - - /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - } - dependencies: - punycode: 2.3.1 - dev: true - - /url@0.11.3: - resolution: - { - integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== - } - dependencies: - punycode: 1.4.1 - qs: 6.12.1 - dev: true - - /use-sync-external-store@1.2.0(react@18.3.1): - resolution: - { - integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - } - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.3.1 - dev: true - - /utf-8-validate@5.0.10: - resolution: - { - integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - } - engines: { node: '>=6.14.2' } - requiresBuild: true - dependencies: - node-gyp-build: 4.8.1 - - /util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - } - dev: true - - /util@0.12.5: - resolution: - { - integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - } - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - - /uuid@2.0.1: - resolution: - { - integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - } - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - dev: true - - /uuid@8.3.2: - resolution: - { - integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - } - hasBin: true - dev: true - - /uuid@9.0.1: - resolution: - { - integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - } - hasBin: true - dev: true - - /validator@13.12.0: - resolution: - { - integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== - } - engines: { node: '>= 0.10' } - dev: true - - /valtio@1.11.2(react@18.3.1): - resolution: - { - integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw== - } - engines: { node: '>=12.20.0' } - peerDependencies: - '@types/react': '>=16.8' - react: '>=16.8' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - dependencies: - proxy-compare: 2.5.1 - react: 18.3.1 - use-sync-external-store: 1.2.0(react@18.3.1) - dev: true - - /vite-plugin-dts@3.9.1(typescript@5.4.5)(vite@5.2.11): - resolution: - { - integrity: sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg== - } - engines: { node: ^14.18.0 || >=16.0.0 } - peerDependencies: - typescript: '*' - vite: '*' - peerDependenciesMeta: - vite: - optional: true - dependencies: - '@microsoft/api-extractor': 7.43.0 - '@rollup/pluginutils': 5.1.0 - '@vue/language-core': 1.8.27(typescript@5.4.5) - debug: 4.3.4 - kolorist: 1.8.0 - magic-string: 0.30.10 - typescript: 5.4.5 - vite: 5.2.11 - vue-tsc: 1.8.27(typescript@5.4.5) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - dev: true - - /vite-plugin-node-polyfills@0.21.0(vite@5.2.11): - resolution: - { - integrity: sha512-Sk4DiKnmxN8E0vhgEhzLudfJQfaT8k4/gJ25xvUPG54KjLJ6HAmDKbr4rzDD/QWEY+Lwg80KE85fGYBQihEPQA== - } - peerDependencies: - vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - dependencies: - '@rollup/plugin-inject': 5.0.5 - node-stdlib-browser: 1.2.0 - vite: 5.2.11 - transitivePeerDependencies: - - rollup - dev: true - - /vite@5.2.11: - resolution: - { - integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ== - } - engines: { node: ^18.0.0 || >=20.0.0 } - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.18.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vm-browserify@1.1.2: - resolution: - { - integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - } - dev: true - - /vue-template-compiler@2.7.16: - resolution: - { - integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== - } - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - dev: true - - /vue-tsc@1.8.27(typescript@5.4.5): - resolution: - { - integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== - } - hasBin: true - peerDependencies: - typescript: '*' - dependencies: - '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.4.5) - semver: 7.6.2 - typescript: 5.4.5 - dev: true - - /web3-errors@1.1.4: - resolution: - { - integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dependencies: - web3-types: 1.5.0 - - /web3-types@1.5.0: - resolution: - { - integrity: sha512-geWuMIeegQ8AedKAO6wO4G4j1gyQ1F/AyKLMw2vud4bsfZayyzWJgCMDZtjYMm5uo2a7i8j1W3/4QFmzlSy5cw== - } - engines: { node: '>=14', npm: '>=6.12.0' } - - /web3-utils@4.2.1: - resolution: - { - integrity: sha512-Fk29BlEqD9Q9Cnw4pBkKw7czcXiRpsSco/BzEUl4ye0ZTSHANQFfjsfQmNm4t7uY11u6Ah+8F3tNjBeU4CA80A== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dependencies: - ethereum-cryptography: 2.1.3 - eventemitter3: 5.0.1 - web3-errors: 1.1.4 - web3-types: 1.5.0 - web3-validator: 2.0.4 - - /web3-validator@2.0.4: - resolution: - { - integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== - } - engines: { node: '>=14', npm: '>=6.12.0' } - dependencies: - ethereum-cryptography: 2.1.3 - util: 0.12.5 - web3-errors: 1.1.4 - web3-types: 1.5.0 - zod: 3.22.4 - - /webidl-conversions@3.0.1: - resolution: - { - integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - } - dev: true - - /whatwg-url@5.0.0: - resolution: - { - integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - } - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: true - - /which-module@2.0.1: - resolution: - { - integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - } - dev: true - - /which-typed-array@1.1.15: - resolution: - { - integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - } - engines: { node: '>= 0.4' } - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - - /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - } - engines: { node: '>= 8' } - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true + zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - /wrap-ansi@6.2.0: - resolution: - { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - } - engines: { node: '>=8' } - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true +snapshots: - /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - } - dev: true + '@multiplechain/types@0.1.70': {} - /ws@7.5.9: - resolution: - { - integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - } - engines: { node: '>=8.3.0' } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + '@multiplechain/utils@0.1.23(bufferutil@4.0.8)(utf-8-validate@5.0.10)': + dependencies: + '@types/ws': 8.5.10 + bignumber.js: 9.1.2 + web3-utils: 4.2.1 + ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate - /ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - resolution: - { - integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - } - engines: { node: '>=10.0.0' } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 - /ws@8.5.0: - resolution: - { - integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - } - engines: { node: '>=10.0.0' } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + '@noble/hashes@1.3.3': {} - /xmlhttprequest@1.8.0: - resolution: - { - integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - } - engines: { node: '>=0.4.0' } - dev: true + '@scure/base@1.1.6': {} - /xtend@4.0.2: - resolution: - { - integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - } - engines: { node: '>=0.4' } - dev: true + '@scure/bip32@1.3.3': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 - /y18n@4.0.3: - resolution: - { - integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - } - dev: true + '@scure/bip39@1.2.2': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 - /yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - } - dev: true + '@types/node@20.12.7': + dependencies: + undici-types: 5.26.5 - /yargs-parser@18.1.3: - resolution: - { - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - } - engines: { node: '>=6' } - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true + '@types/ws@8.5.10': + dependencies: + '@types/node': 20.12.7 - /yargs@15.4.1: - resolution: - { - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - } - engines: { node: '>=8' } - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: true + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 - /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - } - engines: { node: '>=10' } - dev: true + bignumber.js@9.1.2: {} - /z-schema@5.0.5: - resolution: - { - integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q== - } - engines: { node: '>=8.0.0' } - hasBin: true - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.12.0 - optionalDependencies: - commander: 9.5.0 - dev: true + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.1 + optional: true - /zod@3.22.4: - resolution: - { - integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - } + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + ethereum-cryptography@2.1.3: + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + + eventemitter3@5.0.1: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + function-bind@1.1.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + inherits@2.0.4: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + node-gyp-build@4.8.1: + optional: true + + possible-typed-array-names@1.0.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + undici-types@5.26.5: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.1 + optional: true + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + + web3-errors@1.1.4: + dependencies: + web3-types: 1.5.0 + + web3-types@1.5.0: {} + + web3-utils@4.2.1: + dependencies: + ethereum-cryptography: 2.1.3 + eventemitter3: 5.0.1 + web3-errors: 1.1.4 + web3-types: 1.5.0 + web3-validator: 2.0.4 + + web3-validator@2.0.4: + dependencies: + ethereum-cryptography: 2.1.3 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.5.0 + zod: 3.22.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + zod@3.22.4: {}