@lifi/sdk 3.2.0-alpha.1 → 3.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +12 -4
- package/src/_cjs/core/EVM/EVMStepExecutor.js +3 -2
- package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_cjs/core/EVM/getAllowance.js +5 -5
- package/src/_cjs/core/EVM/getAllowance.js.map +1 -1
- package/src/_cjs/core/EVM/getEVMBalance.js +5 -5
- package/src/_cjs/core/EVM/getEVMBalance.js.map +1 -1
- package/src/_cjs/core/EVM/setAllowance.js +5 -5
- package/src/_cjs/core/EVM/setAllowance.js.map +1 -1
- package/src/_cjs/core/Solana/Solana.js +2 -2
- package/src/_cjs/core/Solana/Solana.js.map +1 -1
- package/src/_cjs/core/Solana/SolanaStepExecutor.js +7 -10
- package/src/_cjs/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_cjs/core/Solana/getSNSAddress.js +2 -2
- package/src/_cjs/core/Solana/getSNSAddress.js.map +1 -1
- package/src/_cjs/core/Solana/{isAddress.js → isSVMAddress.js} +3 -3
- package/src/_cjs/core/Solana/isSVMAddress.js.map +1 -0
- package/src/_cjs/core/UTXO/UTXO.js +38 -0
- package/src/_cjs/core/UTXO/UTXO.js.map +1 -0
- package/src/_cjs/core/UTXO/UTXOStepExecutor.js +219 -0
- package/src/_cjs/core/UTXO/UTXOStepExecutor.js.map +1 -0
- package/src/_cjs/core/UTXO/blockchairApi.js +169 -0
- package/src/_cjs/core/UTXO/blockchairApi.js.map +1 -0
- package/src/_cjs/core/UTXO/blockchairApiTypes.js +26 -0
- package/src/_cjs/core/UTXO/blockchairApiTypes.js.map +1 -0
- package/src/_cjs/core/UTXO/getUTXOAPIPublicClient.js +48 -0
- package/src/_cjs/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
- package/src/_cjs/core/UTXO/getUTXOBalance.js +30 -0
- package/src/_cjs/core/UTXO/getUTXOBalance.js.map +1 -0
- package/src/_cjs/core/UTXO/getUTXOPublicClient.js +36 -0
- package/src/_cjs/core/UTXO/getUTXOPublicClient.js.map +1 -0
- package/src/_cjs/core/UTXO/isUTXOAddress.js +133 -0
- package/src/_cjs/core/UTXO/isUTXOAddress.js.map +1 -0
- package/src/_cjs/core/UTXO/parseUTXOErrors.js +30 -0
- package/src/_cjs/core/UTXO/parseUTXOErrors.js.map +1 -0
- package/src/_cjs/core/UTXO/requestClient.js +63 -0
- package/src/_cjs/core/UTXO/requestClient.js.map +1 -0
- package/src/_cjs/core/UTXO/types.js +8 -0
- package/src/_cjs/core/UTXO/types.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBalance.js +11 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBlockCount.js +11 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +15 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +15 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/signPsbt.js +11 -0
- package/src/_cjs/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/clients/types.js +3 -0
- package/src/_cjs/core/UTXO/utxo-stack/clients/types.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +10 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOActions.js +14 -0
- package/src/_cjs/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/ankr.js +21 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockchair.js +24 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +21 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +77 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +22 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/mempool.js +17 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/types.js +3 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/utxo.js +56 -0
- package/src/_cjs/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
- package/src/_cjs/core/UTXO/utxo-stack/types/transaction.js +3 -0
- package/src/_cjs/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
- package/src/_cjs/core/checkBalance.js +3 -3
- package/src/_cjs/core/checkBalance.js.map +1 -1
- package/src/_cjs/core/utils.js +0 -6
- package/src/_cjs/core/utils.js.map +1 -1
- package/src/_cjs/core/waitForReceivingTransaction.js +4 -4
- package/src/_cjs/core/waitForReceivingTransaction.js.map +1 -1
- package/src/_cjs/createConfig.js +3 -1
- package/src/_cjs/createConfig.js.map +1 -1
- package/src/_cjs/index.js +10 -3
- package/src/_cjs/index.js.map +1 -1
- package/src/_cjs/request.js +3 -3
- package/src/_cjs/request.js.map +1 -1
- package/src/_cjs/services/api.js +15 -7
- package/src/_cjs/services/api.js.map +1 -1
- package/src/_cjs/services/balance.js +7 -3
- package/src/_cjs/services/balance.js.map +1 -1
- package/src/_cjs/utils/index.js +1 -1
- package/src/_cjs/utils/index.js.map +1 -1
- package/src/_cjs/utils/{utils.js → isZeroAddress.js} +2 -19
- package/src/_cjs/utils/isZeroAddress.js.map +1 -0
- package/src/_cjs/utils/sleep.js +9 -0
- package/src/_cjs/utils/sleep.js.map +1 -0
- package/src/_cjs/utils/waitForResult.js +16 -0
- package/src/_cjs/utils/waitForResult.js.map +1 -0
- package/src/_cjs/utils/withDedupe.js +37 -0
- package/src/_cjs/utils/withDedupe.js.map +1 -0
- package/src/_cjs/version.js +1 -1
- package/src/_esm/core/EVM/EVMStepExecutor.js +3 -2
- package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
- package/src/_esm/core/EVM/getAllowance.js +1 -1
- package/src/_esm/core/EVM/getAllowance.js.map +1 -1
- package/src/_esm/core/EVM/getEVMBalance.js +1 -1
- package/src/_esm/core/EVM/getEVMBalance.js.map +1 -1
- package/src/_esm/core/EVM/setAllowance.js +1 -1
- package/src/_esm/core/EVM/setAllowance.js.map +1 -1
- package/src/_esm/core/Solana/Solana.js +2 -2
- package/src/_esm/core/Solana/Solana.js.map +1 -1
- package/src/_esm/core/Solana/SolanaStepExecutor.js +6 -9
- package/src/_esm/core/Solana/SolanaStepExecutor.js.map +1 -1
- package/src/_esm/core/Solana/getSNSAddress.js +2 -2
- package/src/_esm/core/Solana/getSNSAddress.js.map +1 -1
- package/src/_esm/core/Solana/{isAddress.js → isSVMAddress.js} +2 -2
- package/src/_esm/core/Solana/isSVMAddress.js.map +1 -0
- package/src/_esm/core/UTXO/UTXO.js +36 -0
- package/src/_esm/core/UTXO/UTXO.js.map +1 -0
- package/src/_esm/core/UTXO/UTXOStepExecutor.js +243 -0
- package/src/_esm/core/UTXO/UTXOStepExecutor.js.map +1 -0
- package/src/_esm/core/UTXO/blockchairApi.js +167 -0
- package/src/_esm/core/UTXO/blockchairApi.js.map +1 -0
- package/src/_esm/core/UTXO/blockchairApiTypes.js +23 -0
- package/src/_esm/core/UTXO/blockchairApiTypes.js.map +1 -0
- package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js +50 -0
- package/src/_esm/core/UTXO/getUTXOAPIPublicClient.js.map +1 -0
- package/src/_esm/core/UTXO/getUTXOBalance.js +26 -0
- package/src/_esm/core/UTXO/getUTXOBalance.js.map +1 -0
- package/src/_esm/core/UTXO/getUTXOPublicClient.js +38 -0
- package/src/_esm/core/UTXO/getUTXOPublicClient.js.map +1 -0
- package/src/_esm/core/UTXO/isUTXOAddress.js +128 -0
- package/src/_esm/core/UTXO/isUTXOAddress.js.map +1 -0
- package/src/_esm/core/UTXO/parseUTXOErrors.js +26 -0
- package/src/_esm/core/UTXO/parseUTXOErrors.js.map +1 -0
- package/src/_esm/core/UTXO/requestClient.js +59 -0
- package/src/_esm/core/UTXO/requestClient.js.map +1 -0
- package/src/_esm/core/UTXO/types.js +6 -0
- package/src/_esm/core/UTXO/types.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js +9 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBalance.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js +9 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getBlockCount.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js +13 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/getUTXOTransaction.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js +13 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/sendUTXOTransaction.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js +9 -0
- package/src/_esm/core/UTXO/utxo-stack/actions/signPsbt.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/clients/types.js +2 -0
- package/src/_esm/core/UTXO/utxo-stack/clients/types.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js +7 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOAPIActions.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js +11 -0
- package/src/_esm/core/UTXO/utxo-stack/decorators/UTXOActions.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js +18 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/ankr.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js +21 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockchair.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js +18 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/blockcypher.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js +74 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js +19 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js +14 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/mempool.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js +2 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/types.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js +53 -0
- package/src/_esm/core/UTXO/utxo-stack/transports/utxo/utxo.js.map +1 -0
- package/src/_esm/core/UTXO/utxo-stack/types/transaction.js +2 -0
- package/src/_esm/core/UTXO/utxo-stack/types/transaction.js.map +1 -0
- package/src/_esm/core/checkBalance.js +2 -2
- package/src/_esm/core/checkBalance.js.map +1 -1
- package/src/_esm/core/utils.js +0 -5
- package/src/_esm/core/utils.js.map +1 -1
- package/src/_esm/core/waitForReceivingTransaction.js +4 -4
- package/src/_esm/core/waitForReceivingTransaction.js.map +1 -1
- package/src/_esm/createConfig.js +3 -1
- package/src/_esm/createConfig.js.map +1 -1
- package/src/_esm/index.js +7 -3
- package/src/_esm/index.js.map +1 -1
- package/src/_esm/request.js +3 -3
- package/src/_esm/request.js.map +1 -1
- package/src/_esm/services/api.js +15 -7
- package/src/_esm/services/api.js.map +1 -1
- package/src/_esm/services/balance.js +9 -5
- package/src/_esm/services/balance.js.map +1 -1
- package/src/_esm/utils/index.js +1 -1
- package/src/_esm/utils/index.js.map +1 -1
- package/src/_esm/utils/isZeroAddress.js +17 -0
- package/src/_esm/utils/isZeroAddress.js.map +1 -0
- package/src/_esm/utils/sleep.js +6 -0
- package/src/_esm/utils/sleep.js.map +1 -0
- package/src/_esm/utils/waitForResult.js +18 -0
- package/src/_esm/utils/waitForResult.js.map +1 -0
- package/src/_esm/utils/withDedupe.js +40 -0
- package/src/_esm/utils/withDedupe.js.map +1 -0
- package/src/_esm/version.js +1 -1
- package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
- package/src/_types/core/EVM/types.d.ts +1 -1
- package/src/_types/core/EVM/types.d.ts.map +1 -1
- package/src/_types/core/Solana/SolanaStepExecutor.d.ts.map +1 -1
- package/src/_types/core/Solana/isSVMAddress.d.ts +2 -0
- package/src/_types/core/Solana/isSVMAddress.d.ts.map +1 -0
- package/src/_types/core/UTXO/UTXO.d.ts +3 -0
- package/src/_types/core/UTXO/UTXO.d.ts.map +1 -0
- package/src/_types/core/UTXO/UTXOStepExecutor.d.ts +13 -0
- package/src/_types/core/UTXO/UTXOStepExecutor.d.ts.map +1 -0
- package/src/_types/core/UTXO/blockchairApi.d.ts +37 -0
- package/src/_types/core/UTXO/blockchairApi.d.ts.map +1 -0
- package/src/_types/core/UTXO/blockchairApiTypes.d.ts +229 -0
- package/src/_types/core/UTXO/blockchairApiTypes.d.ts.map +1 -0
- package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts +10 -0
- package/src/_types/core/UTXO/getUTXOAPIPublicClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/getUTXOBalance.d.ts +3 -0
- package/src/_types/core/UTXO/getUTXOBalance.d.ts.map +1 -0
- package/src/_types/core/UTXO/getUTXOPublicClient.d.ts +10 -0
- package/src/_types/core/UTXO/getUTXOPublicClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/isUTXOAddress.d.ts +21 -0
- package/src/_types/core/UTXO/isUTXOAddress.d.ts.map +1 -0
- package/src/_types/core/UTXO/parseUTXOErrors.d.ts +4 -0
- package/src/_types/core/UTXO/parseUTXOErrors.d.ts.map +1 -0
- package/src/_types/core/UTXO/requestClient.d.ts +22 -0
- package/src/_types/core/UTXO/requestClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/types.d.ts +10 -0
- package/src/_types/core/UTXO/types.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBalance.d.ts +9 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBalance.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBlockCount.d.ts +5 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getBlockCount.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getUTXOTransaction.d.ts +12 -0
- package/src/_types/core/UTXO/utxo-stack/actions/getUTXOTransaction.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/sendUTXOTransaction.d.ts +11 -0
- package/src/_types/core/UTXO/utxo-stack/actions/sendUTXOTransaction.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/actions/signPsbt.d.ts +4 -0
- package/src/_types/core/UTXO/utxo-stack/actions/signPsbt.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/clients/types.d.ts +44 -0
- package/src/_types/core/UTXO/utxo-stack/clients/types.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOAPIActions.d.ts +7 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOAPIActions.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOActions.d.ts +11 -0
- package/src/_types/core/UTXO/utxo-stack/decorators/UTXOActions.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/ankr.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/ankr.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockchair.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockchair.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockcypher.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/blockcypher.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.d.ts +25 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/mempool.d.ts +3 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/mempool.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/types.d.ts +45 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/types.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/utxo.d.ts +7 -0
- package/src/_types/core/UTXO/utxo-stack/transports/utxo/utxo.d.ts.map +1 -0
- package/src/_types/core/UTXO/utxo-stack/types/transaction.d.ts +42 -0
- package/src/_types/core/UTXO/utxo-stack/types/transaction.d.ts.map +1 -0
- package/src/_types/core/utils.d.ts +0 -1
- package/src/_types/core/utils.d.ts.map +1 -1
- package/src/_types/core/waitForReceivingTransaction.d.ts +1 -1
- package/src/_types/core/waitForReceivingTransaction.d.ts.map +1 -1
- package/src/_types/createConfig.d.ts.map +1 -1
- package/src/_types/index.d.ts +7 -3
- package/src/_types/index.d.ts.map +1 -1
- package/src/_types/request.d.ts.map +1 -1
- package/src/_types/services/api.d.ts +1 -1
- package/src/_types/services/api.d.ts.map +1 -1
- package/src/_types/services/balance.d.ts +3 -3
- package/src/_types/services/balance.d.ts.map +1 -1
- package/src/_types/utils/index.d.ts +1 -1
- package/src/_types/utils/index.d.ts.map +1 -1
- package/src/_types/utils/isZeroAddress.d.ts +3 -0
- package/src/_types/utils/isZeroAddress.d.ts.map +1 -0
- package/src/_types/utils/sleep.d.ts +2 -0
- package/src/_types/utils/sleep.d.ts.map +1 -0
- package/src/_types/utils/waitForResult.d.ts +8 -0
- package/src/_types/utils/waitForResult.d.ts.map +1 -0
- package/src/_types/utils/withDedupe.d.ts +20 -0
- package/src/_types/utils/withDedupe.d.ts.map +1 -0
- package/src/_types/version.d.ts +1 -1
- package/src/core/EVM/EVMStepExecutor.ts +3 -5
- package/src/core/EVM/getAllowance.ts +1 -1
- package/src/core/EVM/getEVMBalance.ts +1 -1
- package/src/core/EVM/setAllowance.ts +1 -1
- package/src/core/EVM/types.ts +1 -1
- package/src/core/Solana/Solana.ts +2 -2
- package/src/core/Solana/SolanaStepExecutor.ts +14 -17
- package/src/core/Solana/getSNSAddress.ts +2 -2
- package/src/core/Solana/{isAddress.ts → isSVMAddress.ts} +1 -1
- package/src/core/UTXO/UTXO.ts +43 -0
- package/src/core/UTXO/UTXOStepExecutor.ts +351 -0
- package/src/core/UTXO/blockchairApi.ts +273 -0
- package/src/core/UTXO/blockchairApiTypes.ts +253 -0
- package/src/core/UTXO/getUTXOAPIPublicClient.ts +71 -0
- package/src/core/UTXO/getUTXOBalance.ts +31 -0
- package/src/core/UTXO/getUTXOPublicClient.ts +60 -0
- package/src/core/UTXO/isUTXOAddress.ts +166 -0
- package/src/core/UTXO/parseUTXOErrors.ts +36 -0
- package/src/core/UTXO/requestClient.ts +84 -0
- package/src/core/UTXO/types.ts +15 -0
- package/src/core/UTXO/utxo-stack/actions/getBalance.ts +26 -0
- package/src/core/UTXO/utxo-stack/actions/getBlockCount.ts +20 -0
- package/src/core/UTXO/utxo-stack/actions/getUTXOTransaction.ts +30 -0
- package/src/core/UTXO/utxo-stack/actions/sendUTXOTransaction.ts +29 -0
- package/src/core/UTXO/utxo-stack/actions/signPsbt.ts +23 -0
- package/src/core/UTXO/utxo-stack/clients/types.ts +48 -0
- package/src/core/UTXO/utxo-stack/decorators/UTXOAPIActions.ts +21 -0
- package/src/core/UTXO/utxo-stack/decorators/UTXOActions.ts +37 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/ankr.ts +30 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/blockchair.ts +27 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/blockcypher.ts +32 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/getHttpRpcClient.ts +122 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/getRpcProviderMethods.ts +22 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/mempool.ts +34 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/types.ts +55 -0
- package/src/core/UTXO/utxo-stack/transports/utxo/utxo.ts +84 -0
- package/src/core/UTXO/utxo-stack/types/transaction.ts +43 -0
- package/src/core/checkBalance.ts +2 -2
- package/src/core/utils.ts +0 -6
- package/src/core/waitForReceivingTransaction.ts +5 -4
- package/src/createConfig.ts +3 -1
- package/src/index.ts +7 -3
- package/src/request.ts +3 -3
- package/src/services/api.ts +65 -44
- package/src/services/balance.ts +11 -6
- package/src/utils/index.ts +1 -1
- package/src/utils/isZeroAddress.ts +20 -0
- package/src/utils/sleep.ts +5 -0
- package/src/utils/waitForResult.ts +21 -0
- package/src/utils/withDedupe.ts +46 -0
- package/src/version.ts +1 -1
- package/src/_cjs/core/Solana/isAddress.js.map +0 -1
- package/src/_cjs/utils/utils.js.map +0 -1
- package/src/_esm/core/Solana/isAddress.js.map +0 -1
- package/src/_esm/utils/utils.js +0 -38
- package/src/_esm/utils/utils.js.map +0 -1
- package/src/_types/core/Solana/isAddress.d.ts +0 -2
- package/src/_types/core/Solana/isAddress.d.ts.map +0 -1
- package/src/_types/utils/utils.d.ts +0 -11
- package/src/_types/utils/utils.d.ts.map +0 -1
- package/src/utils/utils.ts +0 -48
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { HttpRequestError, stringify, TimeoutError, withTimeout } from 'viem'
|
|
2
|
+
import type { HttpRequestReturnType, HttpRpcClientOptions } from 'viem/utils'
|
|
3
|
+
|
|
4
|
+
export type RpcRequest = {
|
|
5
|
+
jsonrpc?: '2.0'
|
|
6
|
+
method: string
|
|
7
|
+
params?: any
|
|
8
|
+
id?: number
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type HttpRequestParameters<
|
|
12
|
+
body extends RpcRequest | RpcRequest[] = RpcRequest,
|
|
13
|
+
> = {
|
|
14
|
+
url?: string
|
|
15
|
+
/** The RPC request body. */
|
|
16
|
+
body?: body
|
|
17
|
+
/** Request configuration to pass to `fetch`. */
|
|
18
|
+
fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined
|
|
19
|
+
/** A callback to handle the response. */
|
|
20
|
+
onRequest?: ((request: Request) => Promise<void> | void) | undefined
|
|
21
|
+
/** A callback to handle the response. */
|
|
22
|
+
onResponse?: ((response: Response) => Promise<void> | void) | undefined
|
|
23
|
+
/** The timeout (in ms) for the request. */
|
|
24
|
+
timeout?: HttpRpcClientOptions['timeout'] | undefined
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type HttpRpcClient = {
|
|
28
|
+
request<body extends RpcRequest | RpcRequest[]>(
|
|
29
|
+
params: HttpRequestParameters<body>
|
|
30
|
+
): Promise<HttpRequestReturnType<body>>
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function getHttpRpcClient(
|
|
34
|
+
url: string,
|
|
35
|
+
options: HttpRpcClientOptions = {}
|
|
36
|
+
): HttpRpcClient {
|
|
37
|
+
return {
|
|
38
|
+
async request(params) {
|
|
39
|
+
const {
|
|
40
|
+
body,
|
|
41
|
+
onRequest = options.onRequest,
|
|
42
|
+
onResponse = options.onResponse,
|
|
43
|
+
timeout = options.timeout ?? 10_000,
|
|
44
|
+
} = params
|
|
45
|
+
|
|
46
|
+
const fetchOptions = {
|
|
47
|
+
...(options.fetchOptions ?? {}),
|
|
48
|
+
...(params.fetchOptions ?? {}),
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const { headers, method, signal: signal_ } = fetchOptions
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const response = await withTimeout(
|
|
55
|
+
async ({ signal }) => {
|
|
56
|
+
const init: RequestInit = {
|
|
57
|
+
...fetchOptions,
|
|
58
|
+
body: body ? stringify(body) : undefined,
|
|
59
|
+
headers: {
|
|
60
|
+
...(method !== 'GET'
|
|
61
|
+
? { 'Content-Type': 'application/json' }
|
|
62
|
+
: undefined),
|
|
63
|
+
...headers,
|
|
64
|
+
},
|
|
65
|
+
method: method,
|
|
66
|
+
signal: signal_ || (timeout > 0 ? signal : null),
|
|
67
|
+
}
|
|
68
|
+
const request = new Request(params.url ?? url, init)
|
|
69
|
+
if (onRequest) {
|
|
70
|
+
await onRequest(request)
|
|
71
|
+
}
|
|
72
|
+
const response = await fetch(params.url ?? url, init)
|
|
73
|
+
return response
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
errorInstance: new TimeoutError({ body: body ?? {}, url }),
|
|
77
|
+
timeout,
|
|
78
|
+
signal: true,
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
if (onResponse) {
|
|
83
|
+
await onResponse(response)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let data: any
|
|
87
|
+
if (
|
|
88
|
+
response.headers.get('Content-Type')?.startsWith('application/json')
|
|
89
|
+
) {
|
|
90
|
+
data = await response.json()
|
|
91
|
+
} else {
|
|
92
|
+
data = await response.text()
|
|
93
|
+
data = JSON.parse(data || '{}')
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
throw new HttpRequestError({
|
|
98
|
+
body,
|
|
99
|
+
details: stringify(data.error) || response.statusText,
|
|
100
|
+
headers: response.headers,
|
|
101
|
+
status: response.status,
|
|
102
|
+
url,
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return data
|
|
107
|
+
} catch (err) {
|
|
108
|
+
if (err instanceof HttpRequestError) {
|
|
109
|
+
throw err
|
|
110
|
+
}
|
|
111
|
+
if (err instanceof TimeoutError) {
|
|
112
|
+
throw err
|
|
113
|
+
}
|
|
114
|
+
throw new HttpRequestError({
|
|
115
|
+
body,
|
|
116
|
+
cause: err as Error,
|
|
117
|
+
url,
|
|
118
|
+
})
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ankrMethods } from './ankr.js'
|
|
2
|
+
import { blockchairMethods } from './blockchair.js'
|
|
3
|
+
import { blockcypherMethods } from './blockcypher.js'
|
|
4
|
+
import { mempoolMethods } from './mempool.js'
|
|
5
|
+
import type { RpcMethods } from './types.js'
|
|
6
|
+
|
|
7
|
+
export function getRpcProviderMethods(
|
|
8
|
+
key: 'blockchair' | 'ankr' | 'blockcypher' | 'mempool' | string
|
|
9
|
+
): RpcMethods | null {
|
|
10
|
+
switch (key) {
|
|
11
|
+
case 'blockchair':
|
|
12
|
+
return blockchairMethods
|
|
13
|
+
case 'ankr':
|
|
14
|
+
return ankrMethods
|
|
15
|
+
case 'blockcypher':
|
|
16
|
+
return blockcypherMethods
|
|
17
|
+
case 'mempool':
|
|
18
|
+
return mempoolMethods
|
|
19
|
+
default:
|
|
20
|
+
return null
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { RpcMethods } from './types.js'
|
|
2
|
+
|
|
3
|
+
type MempoolBalanceResponse = {
|
|
4
|
+
address: string
|
|
5
|
+
chain_stats: {
|
|
6
|
+
funded_txo_count: number
|
|
7
|
+
funded_txo_sum: number
|
|
8
|
+
spent_txo_count: number
|
|
9
|
+
spent_txo_sum: number
|
|
10
|
+
tx_count: number
|
|
11
|
+
}
|
|
12
|
+
mempool_stats: {
|
|
13
|
+
funded_txo_count: number
|
|
14
|
+
funded_txo_sum: number
|
|
15
|
+
spent_txo_count: number
|
|
16
|
+
spent_txo_sum: number
|
|
17
|
+
tx_count: number
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const mempoolMethods: RpcMethods = {
|
|
22
|
+
getBalance: async (client, baseUrl, { address }) => {
|
|
23
|
+
const apiUrl = `${baseUrl}/address/${address}`
|
|
24
|
+
const response = (await client.request({
|
|
25
|
+
url: apiUrl,
|
|
26
|
+
fetchOptions: { method: 'GET' },
|
|
27
|
+
})) as unknown as MempoolBalanceResponse
|
|
28
|
+
const balance =
|
|
29
|
+
response.chain_stats.funded_txo_sum - response.chain_stats.spent_txo_sum
|
|
30
|
+
return {
|
|
31
|
+
result: BigInt(balance),
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { UTXOTransaction } from '../../types/transaction.js'
|
|
2
|
+
import type { HttpRpcClient } from './getHttpRpcClient.js'
|
|
3
|
+
|
|
4
|
+
export type UTXOSchema = [
|
|
5
|
+
{
|
|
6
|
+
Method: 'getblockcount'
|
|
7
|
+
Parameters: []
|
|
8
|
+
ReturnType: number
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
Method: 'sendrawtransaction'
|
|
12
|
+
Parameters: [string, number?]
|
|
13
|
+
ReturnType: string
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
Method: 'getrawtransaction'
|
|
17
|
+
Parameters: [string, boolean, string?]
|
|
18
|
+
ReturnType: UTXOTransaction
|
|
19
|
+
},
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
export type UTXOAPISchema = [
|
|
23
|
+
{
|
|
24
|
+
Method: 'getBalance'
|
|
25
|
+
Parameters: { address: string }
|
|
26
|
+
ReturnType: bigint
|
|
27
|
+
},
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
export type UTXOAPIMethod = UTXOAPISchema[number]['Method']
|
|
31
|
+
|
|
32
|
+
export type SuccessResult<result> = {
|
|
33
|
+
method?: undefined
|
|
34
|
+
result: result
|
|
35
|
+
error?: undefined
|
|
36
|
+
}
|
|
37
|
+
export type ErrorResult<error> = {
|
|
38
|
+
method?: undefined
|
|
39
|
+
result?: undefined
|
|
40
|
+
error: error
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type RpcResponse<result = any, error = any> =
|
|
44
|
+
| SuccessResult<result>
|
|
45
|
+
| ErrorResult<error>
|
|
46
|
+
|
|
47
|
+
export type RpcMethodHandler = (
|
|
48
|
+
client: HttpRpcClient,
|
|
49
|
+
baseUrl: string,
|
|
50
|
+
params: any
|
|
51
|
+
) => Promise<RpcResponse>
|
|
52
|
+
|
|
53
|
+
export type RpcMethods = {
|
|
54
|
+
[key in UTXOAPIMethod]: RpcMethodHandler
|
|
55
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTransport,
|
|
3
|
+
RpcRequestError,
|
|
4
|
+
UrlRequiredError,
|
|
5
|
+
type HttpTransport,
|
|
6
|
+
type HttpTransportConfig,
|
|
7
|
+
} from 'viem'
|
|
8
|
+
import { getHttpRpcClient } from './getHttpRpcClient.js'
|
|
9
|
+
import { getRpcProviderMethods } from './getRpcProviderMethods.js'
|
|
10
|
+
import type { UTXOAPIMethod } from './types.js'
|
|
11
|
+
|
|
12
|
+
type UTXOHttpTransportConfig = HttpTransportConfig & {
|
|
13
|
+
includeChainToURL?: boolean
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function utxo(
|
|
17
|
+
url?: string,
|
|
18
|
+
config: UTXOHttpTransportConfig = {}
|
|
19
|
+
): HttpTransport {
|
|
20
|
+
const {
|
|
21
|
+
fetchOptions,
|
|
22
|
+
key = 'utxo',
|
|
23
|
+
name = 'UTXO HTTP API',
|
|
24
|
+
onFetchRequest,
|
|
25
|
+
onFetchResponse,
|
|
26
|
+
retryDelay,
|
|
27
|
+
} = config
|
|
28
|
+
return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {
|
|
29
|
+
const retryCount = config.retryCount ?? retryCount_
|
|
30
|
+
const timeout = timeout_ ?? config.timeout ?? 10_000
|
|
31
|
+
let url_ = url
|
|
32
|
+
if (config.includeChainToURL) {
|
|
33
|
+
const chainName = chain?.name.replace(' ', '-').toLowerCase()
|
|
34
|
+
url_ = `${url}${chainName ? `/${chainName}` : ''}`
|
|
35
|
+
}
|
|
36
|
+
if (!url_) {
|
|
37
|
+
throw new UrlRequiredError()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const client = getHttpRpcClient(url_, {
|
|
41
|
+
fetchOptions,
|
|
42
|
+
onRequest: onFetchRequest,
|
|
43
|
+
onResponse: onFetchResponse,
|
|
44
|
+
timeout,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
const rpcMethods = getRpcProviderMethods(key)
|
|
48
|
+
|
|
49
|
+
return createTransport(
|
|
50
|
+
{
|
|
51
|
+
key,
|
|
52
|
+
name,
|
|
53
|
+
async request({ method, params }) {
|
|
54
|
+
const body = { method, params }
|
|
55
|
+
const methodHandler = rpcMethods?.[method as UTXOAPIMethod]
|
|
56
|
+
const { error, result } = await (methodHandler?.(
|
|
57
|
+
client,
|
|
58
|
+
url_,
|
|
59
|
+
params
|
|
60
|
+
) ??
|
|
61
|
+
client.request({
|
|
62
|
+
body,
|
|
63
|
+
}))
|
|
64
|
+
if (error) {
|
|
65
|
+
throw new RpcRequestError({
|
|
66
|
+
body,
|
|
67
|
+
error,
|
|
68
|
+
url: url_,
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
return result
|
|
72
|
+
},
|
|
73
|
+
retryCount,
|
|
74
|
+
retryDelay,
|
|
75
|
+
timeout,
|
|
76
|
+
type: 'http',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
fetchOptions,
|
|
80
|
+
url: url_,
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type UTXOTransaction = {
|
|
2
|
+
blockhash?: string
|
|
3
|
+
blocktime?: number
|
|
4
|
+
confirmations?: number
|
|
5
|
+
hash: string
|
|
6
|
+
hex: string
|
|
7
|
+
in_active_chain?: boolean
|
|
8
|
+
locktime: number
|
|
9
|
+
size: number
|
|
10
|
+
time?: number
|
|
11
|
+
txid: string
|
|
12
|
+
version: number
|
|
13
|
+
vsize: number
|
|
14
|
+
weight: number
|
|
15
|
+
vin: {
|
|
16
|
+
scriptSig: {
|
|
17
|
+
asm: string
|
|
18
|
+
hex: string
|
|
19
|
+
}
|
|
20
|
+
sequence: number
|
|
21
|
+
txid: string
|
|
22
|
+
txinwitness: string[]
|
|
23
|
+
vout: number
|
|
24
|
+
}[]
|
|
25
|
+
vout: {
|
|
26
|
+
n: 0
|
|
27
|
+
scriptPubKey:
|
|
28
|
+
| {
|
|
29
|
+
address: string
|
|
30
|
+
asm: string
|
|
31
|
+
desc: string
|
|
32
|
+
hex: string
|
|
33
|
+
type: string
|
|
34
|
+
}
|
|
35
|
+
| {
|
|
36
|
+
asm: string
|
|
37
|
+
desc: string
|
|
38
|
+
hex: string
|
|
39
|
+
type: string
|
|
40
|
+
}
|
|
41
|
+
value: number
|
|
42
|
+
}[]
|
|
43
|
+
}
|
package/src/core/checkBalance.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { LiFiStep } from '@lifi/types'
|
|
2
2
|
import { formatUnits } from 'viem'
|
|
3
|
-
import { getTokenBalance } from '../services/balance.js'
|
|
4
3
|
import { BalanceError } from '../errors/errors.js'
|
|
5
|
-
import {
|
|
4
|
+
import { getTokenBalance } from '../services/balance.js'
|
|
5
|
+
import { sleep } from '../utils/sleep.js'
|
|
6
6
|
|
|
7
7
|
export const checkBalance = async (
|
|
8
8
|
walletAddress: string,
|
package/src/core/utils.ts
CHANGED
|
@@ -4,9 +4,9 @@ import type {
|
|
|
4
4
|
ProcessType,
|
|
5
5
|
StatusResponse,
|
|
6
6
|
} from '@lifi/types'
|
|
7
|
-
import { getStatus } from '../services/api.js'
|
|
8
7
|
import { ServerError } from '../errors/errors.js'
|
|
9
|
-
import {
|
|
8
|
+
import { getStatus } from '../services/api.js'
|
|
9
|
+
import { waitForResult } from '../utils/waitForResult.js'
|
|
10
10
|
import type { StatusManager } from './StatusManager.js'
|
|
11
11
|
import { getSubstatusMessage } from './processMessages.js'
|
|
12
12
|
|
|
@@ -16,7 +16,8 @@ export async function waitForReceivingTransaction(
|
|
|
16
16
|
txHash: string,
|
|
17
17
|
statusManager: StatusManager,
|
|
18
18
|
processType: ProcessType,
|
|
19
|
-
step: LiFiStep
|
|
19
|
+
step: LiFiStep,
|
|
20
|
+
interval: number = 5_000
|
|
20
21
|
): Promise<StatusResponse> {
|
|
21
22
|
const _getStatus = (): Promise<StatusResponse | undefined> =>
|
|
22
23
|
new Promise(async (resolve, reject) => {
|
|
@@ -62,7 +63,7 @@ export async function waitForReceivingTransaction(
|
|
|
62
63
|
if (txHash in TRANSACTION_HASH_OBSERVERS) {
|
|
63
64
|
status = await TRANSACTION_HASH_OBSERVERS[txHash]
|
|
64
65
|
} else {
|
|
65
|
-
TRANSACTION_HASH_OBSERVERS[txHash] =
|
|
66
|
+
TRANSACTION_HASH_OBSERVERS[txHash] = waitForResult(_getStatus, interval)
|
|
66
67
|
status = await TRANSACTION_HASH_OBSERVERS[txHash]
|
|
67
68
|
}
|
|
68
69
|
|
package/src/createConfig.ts
CHANGED
|
@@ -20,7 +20,9 @@ function createBaseConfig(options: SDKConfig) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export async function createChainsConfig() {
|
|
23
|
-
config.loading = getChains({
|
|
23
|
+
config.loading = getChains({
|
|
24
|
+
chainTypes: [ChainType.EVM, ChainType.SVM, ChainType.UTXO],
|
|
25
|
+
})
|
|
24
26
|
.then((chains) => config.setChains(chains))
|
|
25
27
|
.catch()
|
|
26
28
|
await config.loading
|
package/src/index.ts
CHANGED
|
@@ -14,17 +14,21 @@ export type {
|
|
|
14
14
|
MultisigTransaction,
|
|
15
15
|
MultisigTxDetails,
|
|
16
16
|
} from './core/EVM/types.js'
|
|
17
|
+
export * from './core/index.js'
|
|
18
|
+
export { isSVMAddress } from './core/Solana/isSVMAddress.js'
|
|
17
19
|
export {
|
|
18
20
|
KeypairWalletAdapter,
|
|
19
21
|
KeypairWalletName,
|
|
20
22
|
} from './core/Solana/KeypairWalletAdapter.js'
|
|
21
23
|
export { Solana } from './core/Solana/Solana.js'
|
|
22
|
-
export
|
|
24
|
+
export { isUTXOAddress } from './core/UTXO/isUTXOAddress.js'
|
|
25
|
+
export * from './core/UTXO/utxo-stack/clients/types.js'
|
|
26
|
+
export { UTXO } from './core/UTXO/UTXO.js'
|
|
23
27
|
export { createConfig } from './createConfig.js'
|
|
28
|
+
export * from './errors/index.js'
|
|
29
|
+
export { type ErrorCode } from './errors/index.js'
|
|
24
30
|
export * from './helpers.js'
|
|
25
31
|
export * from './services/api.js'
|
|
26
32
|
export * from './services/balance.js'
|
|
27
33
|
export * from './services/getNameServiceAddress.js'
|
|
28
34
|
export * from './types/index.js'
|
|
29
|
-
export * from './errors/index.js'
|
|
30
|
-
export { type ErrorCode } from './errors/index.js'
|
package/src/request.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { config } from './config.js'
|
|
2
|
-
import { HTTPError } from './errors/httpError.js'
|
|
3
|
-
import { wait } from './utils/utils.js'
|
|
4
2
|
import { ValidationError } from './errors/errors.js'
|
|
3
|
+
import { HTTPError } from './errors/httpError.js'
|
|
5
4
|
import { SDKError } from './errors/SDKError.js'
|
|
6
5
|
import type { ExtendedRequestInit } from './types/request.js'
|
|
6
|
+
import { sleep } from './utils/sleep.js'
|
|
7
7
|
import { version } from './version.js'
|
|
8
8
|
|
|
9
9
|
export const requestSettings = {
|
|
@@ -82,7 +82,7 @@ export const request = async <T = Response>(
|
|
|
82
82
|
return await response.json()
|
|
83
83
|
} catch (error) {
|
|
84
84
|
if (options.retries > 0 && (error as HTTPError).status === 500) {
|
|
85
|
-
await
|
|
85
|
+
await sleep(500)
|
|
86
86
|
return request<T>(url, { ...options, retries: options.retries - 1 })
|
|
87
87
|
}
|
|
88
88
|
|
package/src/services/api.ts
CHANGED
|
@@ -1,34 +1,37 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import {
|
|
2
|
+
isContractCallsRequestWithFromAmount,
|
|
3
|
+
isContractCallsRequestWithToAmount,
|
|
4
|
+
type ChainId,
|
|
5
|
+
type ChainKey,
|
|
6
|
+
type ChainsRequest,
|
|
7
|
+
type ChainsResponse,
|
|
8
|
+
type ConnectionsRequest,
|
|
9
|
+
type ConnectionsResponse,
|
|
10
|
+
type ContractCallsQuoteRequest,
|
|
11
|
+
type ExtendedChain,
|
|
12
|
+
type GasRecommendationRequest,
|
|
13
|
+
type GasRecommendationResponse,
|
|
14
|
+
type GetStatusRequest,
|
|
15
|
+
type LiFiStep,
|
|
16
|
+
type QuoteRequest,
|
|
17
|
+
type RequestOptions,
|
|
18
|
+
type RoutesRequest,
|
|
19
|
+
type RoutesResponse,
|
|
20
|
+
type StatusResponse,
|
|
21
|
+
type Token,
|
|
22
|
+
type TokensRequest,
|
|
23
|
+
type TokensResponse,
|
|
24
|
+
type ToolsRequest,
|
|
25
|
+
type ToolsResponse,
|
|
26
|
+
type TransactionAnalyticsRequest,
|
|
27
|
+
type TransactionAnalyticsResponse,
|
|
26
28
|
} from '@lifi/types'
|
|
27
29
|
import { config } from '../config.js'
|
|
28
|
-
import { request } from '../request.js'
|
|
29
|
-
import { isRoutesRequest, isStep } from '../typeguards.js'
|
|
30
30
|
import { ValidationError } from '../errors/errors.js'
|
|
31
31
|
import { SDKError } from '../errors/SDKError.js'
|
|
32
|
+
import { request } from '../request.js'
|
|
33
|
+
import { isRoutesRequest, isStep } from '../typeguards.js'
|
|
34
|
+
import { withDedupe } from '../utils/withDedupe.js'
|
|
32
35
|
/**
|
|
33
36
|
* Fetch information about a Token
|
|
34
37
|
* @param chain - Id or key of the chain that contains the token
|
|
@@ -139,7 +142,6 @@ export const getContractCallsQuote = async (
|
|
|
139
142
|
'fromAddress',
|
|
140
143
|
'toChain',
|
|
141
144
|
'toToken',
|
|
142
|
-
'toAmount',
|
|
143
145
|
'contractCalls',
|
|
144
146
|
]
|
|
145
147
|
requiredParameters.forEach((requiredParameter) => {
|
|
@@ -151,6 +153,16 @@ export const getContractCallsQuote = async (
|
|
|
151
153
|
)
|
|
152
154
|
}
|
|
153
155
|
})
|
|
156
|
+
if (
|
|
157
|
+
!isContractCallsRequestWithFromAmount(params) ||
|
|
158
|
+
!isContractCallsRequestWithToAmount(params)
|
|
159
|
+
) {
|
|
160
|
+
throw new SDKError(
|
|
161
|
+
new ValidationError(
|
|
162
|
+
`Required parameter "fromAmount" or "toAmount" is missing.`
|
|
163
|
+
)
|
|
164
|
+
)
|
|
165
|
+
}
|
|
154
166
|
const _config = config.get()
|
|
155
167
|
// apply defaults
|
|
156
168
|
// option.order is not used in this endpoint
|
|
@@ -220,14 +232,18 @@ export const getChains = async (
|
|
|
220
232
|
delete params[key as keyof ChainsRequest]
|
|
221
233
|
)
|
|
222
234
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
)
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
235
|
+
const urlSearchParams = new URLSearchParams(
|
|
236
|
+
params as Record<string, string>
|
|
237
|
+
).toString()
|
|
238
|
+
const response = await withDedupe(
|
|
239
|
+
() =>
|
|
240
|
+
request<ChainsResponse>(
|
|
241
|
+
`${config.get().apiUrl}/chains?${urlSearchParams}`,
|
|
242
|
+
{
|
|
243
|
+
signal: options?.signal,
|
|
244
|
+
}
|
|
245
|
+
),
|
|
246
|
+
{ id: `${getChains.name}.${urlSearchParams}` }
|
|
231
247
|
)
|
|
232
248
|
return response.chains
|
|
233
249
|
}
|
|
@@ -338,15 +354,20 @@ export const getTokens = async (
|
|
|
338
354
|
delete params[key as keyof TokensRequest]
|
|
339
355
|
)
|
|
340
356
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
)
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
357
|
+
const urlSearchParams = new URLSearchParams(
|
|
358
|
+
params as Record<string, string>
|
|
359
|
+
).toString()
|
|
360
|
+
const response = await withDedupe(
|
|
361
|
+
() =>
|
|
362
|
+
request<TokensResponse>(
|
|
363
|
+
`${config.get().apiUrl}/tokens?${urlSearchParams}`,
|
|
364
|
+
{
|
|
365
|
+
signal: options?.signal,
|
|
366
|
+
}
|
|
367
|
+
),
|
|
368
|
+
{ id: `${getTokens.name}.${urlSearchParams}` }
|
|
349
369
|
)
|
|
370
|
+
return response
|
|
350
371
|
}
|
|
351
372
|
|
|
352
373
|
/**
|
package/src/services/balance.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { ChainType, type Token, type TokenAmount } from '@lifi/types'
|
|
2
2
|
import { config } from '../config.js'
|
|
3
|
-
import { isToken } from '../typeguards.js'
|
|
4
3
|
import { ValidationError } from '../errors/errors.js'
|
|
4
|
+
import { isToken } from '../typeguards.js'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Returns the balances of a specific token a wallet holds across all aggregated chains.
|
|
@@ -50,8 +50,8 @@ export const getTokenBalances = async (
|
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* This method queries the balances of tokens for a specific list of chains for a given wallet.
|
|
53
|
-
* @param walletAddress - A
|
|
54
|
-
* @param tokensByChain - A list of
|
|
53
|
+
* @param walletAddress - A wallet address.
|
|
54
|
+
* @param tokensByChain - A list of token objects organized by chain ids.
|
|
55
55
|
* @returns A list of objects containing the tokens and the amounts on different chains organized by the chosen chains.
|
|
56
56
|
* @throws {BaseError} Throws a ValidationError if parameters are invalid.
|
|
57
57
|
*/
|
|
@@ -73,10 +73,15 @@ export const getTokenBalancesByChain = async (
|
|
|
73
73
|
await Promise.allSettled(
|
|
74
74
|
Object.keys(tokensByChain).map(async (chainIdStr) => {
|
|
75
75
|
const chainId = parseInt(chainIdStr)
|
|
76
|
-
const
|
|
76
|
+
const chain = await config.getChainById(chainId)
|
|
77
|
+
const tokenAddress = tokensByChain[chainId][0].address
|
|
77
78
|
const provider = config
|
|
78
79
|
.get()
|
|
79
|
-
.providers.find((provider) =>
|
|
80
|
+
.providers.find((provider) =>
|
|
81
|
+
chain.chainType === ChainType.UTXO
|
|
82
|
+
? provider.isAddress(walletAddress)
|
|
83
|
+
: provider.isAddress(tokenAddress)
|
|
84
|
+
)
|
|
80
85
|
if (!provider) {
|
|
81
86
|
throw new Error('SDK Token Provider not found.')
|
|
82
87
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AddressZero, AlternativeAddressZero } from '../constants.js'
|
|
2
|
+
|
|
3
|
+
export const isZeroAddress = (address: string): boolean => {
|
|
4
|
+
if (address === AddressZero || address === AlternativeAddressZero) {
|
|
5
|
+
return true
|
|
6
|
+
}
|
|
7
|
+
return false
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const isNativeTokenAddress = (address: string): boolean => {
|
|
11
|
+
if (
|
|
12
|
+
address === AddressZero ||
|
|
13
|
+
address === AlternativeAddressZero ||
|
|
14
|
+
// CELO native token
|
|
15
|
+
address === '0x471ece3750da237f93b8e339c536989b8978a438'
|
|
16
|
+
) {
|
|
17
|
+
return true
|
|
18
|
+
}
|
|
19
|
+
return false
|
|
20
|
+
}
|