@bigmi/core 0.8.1 → 0.9.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/CHANGELOG.md +10 -0
- package/README.md +2 -2
- package/dist/cjs/actions/getBalance.d.ts +2 -2
- package/dist/cjs/actions/getBlock.d.ts +1 -5
- package/dist/cjs/actions/getBlockCount.d.ts +0 -1
- package/dist/cjs/actions/getBlockStats.d.ts +1 -6
- package/dist/cjs/actions/getTransactionFee.d.ts +1 -4
- package/dist/cjs/actions/getTransactions.d.ts +1 -7
- package/dist/cjs/actions/getUTXOTransaction.d.ts +4 -6
- package/dist/cjs/actions/getUTXOs.d.ts +1 -5
- package/dist/cjs/actions/getXPubAddresses.d.ts +22 -22
- package/dist/cjs/actions/sendUTXOTransaction.d.ts +4 -6
- package/dist/cjs/actions/signPsbt.d.ts +0 -1
- package/dist/cjs/actions/waitForTransaction.d.ts +43 -49
- package/dist/cjs/actions/waitForTransaction.js.map +1 -1
- package/dist/cjs/actions/watchBlockNumber.d.ts +14 -16
- package/dist/cjs/actions/watchBlockNumber.js.map +1 -1
- package/dist/cjs/chains/bitcoin.d.ts +0 -1
- package/dist/cjs/chains/bitcoin.js.map +1 -1
- package/dist/cjs/chains/defineChain.d.ts +0 -1
- package/dist/cjs/chains/signet.d.ts +0 -1
- package/dist/cjs/chains/signet.js.map +1 -1
- package/dist/cjs/clients/decorators/public.d.ts +0 -1
- package/dist/cjs/clients/decorators/wallet.d.ts +2 -3
- package/dist/cjs/errors/address.d.ts +1 -4
- package/dist/cjs/errors/base.js.map +1 -1
- package/dist/cjs/errors/block.d.ts +1 -5
- package/dist/cjs/errors/provider.d.ts +0 -1
- package/dist/cjs/errors/request.d.ts +5 -28
- package/dist/cjs/errors/request.js.map +1 -1
- package/dist/cjs/errors/rpc.d.ts +23 -24
- package/dist/cjs/errors/transaction.d.ts +3 -14
- package/dist/cjs/errors/transport.d.ts +2 -10
- package/dist/cjs/errors/transport.js.map +1 -1
- package/dist/cjs/errors/utils.d.ts +0 -1
- package/dist/cjs/errors/utxo.d.ts +1 -6
- package/dist/cjs/factories/createClient.d.ts +49 -30
- package/dist/cjs/factories/createTransport.d.ts +3 -13
- package/dist/cjs/transports/ankr/ankr.d.ts +0 -1
- package/dist/cjs/transports/ankr/getBalance.d.ts +0 -1
- package/dist/cjs/transports/ankr/getTransactionFee.d.ts +0 -1
- package/dist/cjs/transports/ankr/getTransactions.d.ts +0 -1
- package/dist/cjs/transports/ankr/methods.d.ts +0 -1
- package/dist/cjs/transports/ankr/utils.d.ts +0 -1
- package/dist/cjs/transports/blockchair/blockchair.d.ts +0 -1
- package/dist/cjs/transports/blockchair/getBalance.d.ts +0 -1
- package/dist/cjs/transports/blockchair/getTransactionFee.d.ts +0 -1
- package/dist/cjs/transports/blockchair/getTransactionFee.js.map +1 -1
- package/dist/cjs/transports/blockchair/getUTXOs.d.ts +0 -1
- package/dist/cjs/transports/blockchair/getUTXOs.js.map +1 -1
- package/dist/cjs/transports/blockchair/getXPubAddresses.d.ts +0 -1
- package/dist/cjs/transports/blockchair/getXPubAddresses.js.map +1 -1
- package/dist/cjs/transports/blockchair/methods.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/blockcypher.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/getBalance.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/getTransactionFee.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/getUTXOs.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/getUTXOs.js.map +1 -1
- package/dist/cjs/transports/blockcypher/methods.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/utils.d.ts +0 -1
- package/dist/cjs/transports/blockcypher/utils.js.map +1 -1
- package/dist/cjs/transports/custom.d.ts +11 -7
- package/dist/cjs/transports/fallback.d.ts +32 -36
- package/dist/cjs/transports/fallback.js.map +1 -1
- package/dist/cjs/transports/getHttpRpcClient.d.ts +17 -9
- package/dist/cjs/transports/getHttpRpcClient.js.map +1 -1
- package/dist/cjs/transports/getRpcProviderMethods.d.ts +0 -1
- package/dist/cjs/transports/http.d.ts +31 -20
- package/dist/cjs/transports/mempool/getBalance.d.ts +0 -1
- package/dist/cjs/transports/mempool/getTransactionFee.d.ts +0 -1
- package/dist/cjs/transports/mempool/getTransactions.d.ts +0 -1
- package/dist/cjs/transports/mempool/getTransactions.js.map +1 -1
- package/dist/cjs/transports/mempool/mempool.d.ts +0 -1
- package/dist/cjs/transports/mempool/methods.d.ts +0 -1
- package/dist/cjs/transports/mempool/utils.d.ts +0 -1
- package/dist/cjs/transports/types.d.ts +17 -15
- package/dist/cjs/transports/utxo.d.ts +0 -1
- package/dist/cjs/transports/utxo.js.map +1 -1
- package/dist/cjs/types/account.d.ts +0 -1
- package/dist/cjs/types/address.d.ts +0 -1
- package/dist/cjs/types/block.d.ts +17 -17
- package/dist/cjs/types/chain.d.ts +20 -9
- package/dist/cjs/types/client.d.ts +40 -25
- package/dist/cjs/types/request.d.ts +12 -8
- package/dist/cjs/types/transport.d.ts +16 -11
- package/dist/cjs/types/utils.d.ts +31 -31
- package/dist/cjs/types/xpub.d.ts +0 -1
- package/dist/cjs/utils/buildRequest.d.ts +0 -1
- package/dist/cjs/utils/cancelTransaction.d.ts +0 -1
- package/dist/cjs/utils/converter.js.map +1 -1
- package/dist/cjs/utils/createBatchScheduler.d.ts +1 -8
- package/dist/cjs/utils/createBatchScheduler.js.map +1 -1
- package/dist/cjs/utils/deepEqual.js.map +1 -1
- package/dist/cjs/utils/getAction.d.ts +6 -7
- package/dist/cjs/utils/getAddressInfo.d.ts +0 -1
- package/dist/cjs/utils/getAddressInfo.js.map +1 -1
- package/dist/cjs/utils/isAddress.d.ts +0 -1
- package/dist/cjs/utils/lru.d.ts +4 -4
- package/dist/cjs/utils/lru.js.map +1 -1
- package/dist/cjs/utils/modifyFee.d.ts +0 -1
- package/dist/cjs/utils/modifyFee.js.map +1 -1
- package/dist/cjs/utils/observe.d.ts +4 -5
- package/dist/cjs/utils/observe.js.map +1 -1
- package/dist/cjs/utils/parseAccount.d.ts +0 -1
- package/dist/cjs/utils/poll.d.ts +4 -10
- package/dist/cjs/utils/retryUntil.d.ts +17 -15
- package/dist/cjs/utils/retryUntil.js.map +1 -1
- package/dist/cjs/utils/stringify.d.ts +0 -1
- package/dist/cjs/utils/uid.js.map +1 -1
- package/dist/cjs/utils/url.js.map +1 -1
- package/dist/cjs/utils/withDedupe.d.ts +1 -5
- package/dist/cjs/utils/withDedupe.js.map +1 -1
- package/dist/cjs/utils/withRetry.d.ts +2 -10
- package/dist/cjs/utils/withTimeout.d.ts +2 -9
- package/dist/cjs/utils/withTimeout.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/actions/getBalance.d.ts +2 -2
- package/dist/esm/actions/getBalance.d.ts.map +1 -1
- package/dist/esm/actions/getBlock.d.ts +1 -5
- package/dist/esm/actions/getBlock.d.ts.map +1 -1
- package/dist/esm/actions/getBlockCount.d.ts +0 -1
- package/dist/esm/actions/getBlockCount.d.ts.map +1 -1
- package/dist/esm/actions/getBlockStats.d.ts +1 -6
- package/dist/esm/actions/getBlockStats.d.ts.map +1 -1
- package/dist/esm/actions/getTransactionFee.d.ts +1 -4
- package/dist/esm/actions/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/actions/getTransactions.d.ts +1 -7
- package/dist/esm/actions/getTransactions.d.ts.map +1 -1
- package/dist/esm/actions/getUTXOTransaction.d.ts +4 -6
- package/dist/esm/actions/getUTXOTransaction.d.ts.map +1 -1
- package/dist/esm/actions/getUTXOs.d.ts +1 -5
- package/dist/esm/actions/getUTXOs.d.ts.map +1 -1
- package/dist/esm/actions/getXPubAddresses.d.ts +22 -22
- package/dist/esm/actions/getXPubAddresses.d.ts.map +1 -1
- package/dist/esm/actions/sendUTXOTransaction.d.ts +4 -6
- package/dist/esm/actions/sendUTXOTransaction.d.ts.map +1 -1
- package/dist/esm/actions/signPsbt.d.ts +0 -1
- package/dist/esm/actions/signPsbt.d.ts.map +1 -1
- package/dist/esm/actions/waitForTransaction.d.ts +43 -49
- package/dist/esm/actions/waitForTransaction.d.ts.map +1 -1
- package/dist/esm/actions/waitForTransaction.js.map +1 -1
- package/dist/esm/actions/watchBlockNumber.d.ts +14 -16
- package/dist/esm/actions/watchBlockNumber.d.ts.map +1 -1
- package/dist/esm/actions/watchBlockNumber.js.map +1 -1
- package/dist/esm/chains/bitcoin.d.ts +0 -1
- package/dist/esm/chains/bitcoin.d.ts.map +1 -1
- package/dist/esm/chains/defineChain.d.ts +0 -1
- package/dist/esm/chains/defineChain.d.ts.map +1 -1
- package/dist/esm/chains/signet.d.ts +0 -1
- package/dist/esm/chains/signet.d.ts.map +1 -1
- package/dist/esm/clients/decorators/public.d.ts +0 -1
- package/dist/esm/clients/decorators/public.d.ts.map +1 -1
- package/dist/esm/clients/decorators/wallet.d.ts +2 -3
- package/dist/esm/clients/decorators/wallet.d.ts.map +1 -1
- package/dist/esm/errors/address.d.ts +1 -4
- package/dist/esm/errors/address.d.ts.map +1 -1
- package/dist/esm/errors/base.d.ts.map +1 -1
- package/dist/esm/errors/base.js.map +1 -1
- package/dist/esm/errors/block.d.ts +1 -5
- package/dist/esm/errors/block.d.ts.map +1 -1
- package/dist/esm/errors/provider.d.ts +0 -1
- package/dist/esm/errors/provider.d.ts.map +1 -1
- package/dist/esm/errors/request.d.ts +5 -28
- package/dist/esm/errors/request.d.ts.map +1 -1
- package/dist/esm/errors/request.js.map +1 -1
- package/dist/esm/errors/rpc.d.ts +23 -24
- package/dist/esm/errors/rpc.d.ts.map +1 -1
- package/dist/esm/errors/transaction.d.ts +3 -14
- package/dist/esm/errors/transaction.d.ts.map +1 -1
- package/dist/esm/errors/transport.d.ts +2 -10
- package/dist/esm/errors/transport.d.ts.map +1 -1
- package/dist/esm/errors/transport.js.map +1 -1
- package/dist/esm/errors/utils.d.ts +0 -1
- package/dist/esm/errors/utils.d.ts.map +1 -1
- package/dist/esm/errors/utxo.d.ts +1 -6
- package/dist/esm/errors/utxo.d.ts.map +1 -1
- package/dist/esm/factories/createClient.d.ts +49 -30
- package/dist/esm/factories/createClient.d.ts.map +1 -1
- package/dist/esm/factories/createTransport.d.ts +3 -13
- package/dist/esm/factories/createTransport.d.ts.map +1 -1
- package/dist/esm/test/utils.d.ts.map +1 -1
- package/dist/esm/transports/ankr/ankr.d.ts +0 -1
- package/dist/esm/transports/ankr/ankr.d.ts.map +1 -1
- package/dist/esm/transports/ankr/ankr.types.d.ts.map +1 -1
- package/dist/esm/transports/ankr/getBalance.d.ts +0 -1
- package/dist/esm/transports/ankr/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/ankr/getTransactionFee.d.ts +0 -1
- package/dist/esm/transports/ankr/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/ankr/getTransactions.d.ts +0 -1
- package/dist/esm/transports/ankr/getTransactions.d.ts.map +1 -1
- package/dist/esm/transports/ankr/methods.d.ts +0 -1
- package/dist/esm/transports/ankr/methods.d.ts.map +1 -1
- package/dist/esm/transports/ankr/utils.d.ts +0 -1
- package/dist/esm/transports/ankr/utils.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/blockchair.d.ts +0 -1
- package/dist/esm/transports/blockchair/blockchair.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/blockchair.types.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getBalance.d.ts +0 -1
- package/dist/esm/transports/blockchair/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getTransactionFee.d.ts +0 -1
- package/dist/esm/transports/blockchair/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getTransactionFee.js.map +1 -1
- package/dist/esm/transports/blockchair/getUTXOs.d.ts +0 -1
- package/dist/esm/transports/blockchair/getUTXOs.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getUTXOs.js.map +1 -1
- package/dist/esm/transports/blockchair/getXPubAddresses.d.ts +0 -1
- package/dist/esm/transports/blockchair/getXPubAddresses.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getXPubAddresses.js.map +1 -1
- package/dist/esm/transports/blockchair/methods.d.ts +0 -1
- package/dist/esm/transports/blockchair/methods.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/blockcypher.d.ts +0 -1
- package/dist/esm/transports/blockcypher/blockcypher.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/blockcypher.types.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getBalance.d.ts +0 -1
- package/dist/esm/transports/blockcypher/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getTransactionFee.d.ts +0 -1
- package/dist/esm/transports/blockcypher/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getUTXOs.d.ts +0 -1
- package/dist/esm/transports/blockcypher/getUTXOs.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getUTXOs.js.map +1 -1
- package/dist/esm/transports/blockcypher/methods.d.ts +0 -1
- package/dist/esm/transports/blockcypher/methods.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/utils.d.ts +0 -1
- package/dist/esm/transports/blockcypher/utils.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/utils.js.map +1 -1
- package/dist/esm/transports/custom.d.ts +11 -7
- package/dist/esm/transports/custom.d.ts.map +1 -1
- package/dist/esm/transports/fallback.d.ts +32 -36
- package/dist/esm/transports/fallback.d.ts.map +1 -1
- package/dist/esm/transports/fallback.js.map +1 -1
- package/dist/esm/transports/getHttpRpcClient.d.ts +17 -9
- package/dist/esm/transports/getHttpRpcClient.d.ts.map +1 -1
- package/dist/esm/transports/getHttpRpcClient.js.map +1 -1
- package/dist/esm/transports/getRpcProviderMethods.d.ts +0 -1
- package/dist/esm/transports/getRpcProviderMethods.d.ts.map +1 -1
- package/dist/esm/transports/http.d.ts +31 -20
- package/dist/esm/transports/http.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getBalance.d.ts +0 -1
- package/dist/esm/transports/mempool/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getTransactionFee.d.ts +0 -1
- package/dist/esm/transports/mempool/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getTransactions.d.ts +0 -1
- package/dist/esm/transports/mempool/getTransactions.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getTransactions.js.map +1 -1
- package/dist/esm/transports/mempool/mempool.d.ts +0 -1
- package/dist/esm/transports/mempool/mempool.d.ts.map +1 -1
- package/dist/esm/transports/mempool/mempool.types.d.ts.map +1 -1
- package/dist/esm/transports/mempool/methods.d.ts +0 -1
- package/dist/esm/transports/mempool/methods.d.ts.map +1 -1
- package/dist/esm/transports/mempool/utils.d.ts +0 -1
- package/dist/esm/transports/mempool/utils.d.ts.map +1 -1
- package/dist/esm/transports/types.d.ts +17 -15
- package/dist/esm/transports/types.d.ts.map +1 -1
- package/dist/esm/transports/utxo.d.ts +0 -1
- package/dist/esm/transports/utxo.d.ts.map +1 -1
- package/dist/esm/transports/utxo.js.map +1 -1
- package/dist/esm/types/account.d.ts +0 -1
- package/dist/esm/types/account.d.ts.map +1 -1
- package/dist/esm/types/address.d.ts +0 -1
- package/dist/esm/types/address.d.ts.map +1 -1
- package/dist/esm/types/block.d.ts +17 -17
- package/dist/esm/types/block.d.ts.map +1 -1
- package/dist/esm/types/blockStats.d.ts.map +1 -1
- package/dist/esm/types/chain.d.ts +20 -9
- package/dist/esm/types/chain.d.ts.map +1 -1
- package/dist/esm/types/client.d.ts +40 -25
- package/dist/esm/types/client.d.ts.map +1 -1
- package/dist/esm/types/hash.d.ts.map +1 -1
- package/dist/esm/types/request.d.ts +12 -8
- package/dist/esm/types/request.d.ts.map +1 -1
- package/dist/esm/types/rpc.d.ts.map +1 -1
- package/dist/esm/types/transaction.d.ts.map +1 -1
- package/dist/esm/types/transport.d.ts +16 -11
- package/dist/esm/types/transport.d.ts.map +1 -1
- package/dist/esm/types/utils.d.ts +31 -31
- package/dist/esm/types/utils.d.ts.map +1 -1
- package/dist/esm/types/xpub.d.ts +0 -1
- package/dist/esm/types/xpub.d.ts.map +1 -1
- package/dist/esm/utils/buildRequest.d.ts +0 -1
- package/dist/esm/utils/buildRequest.d.ts.map +1 -1
- package/dist/esm/utils/cancelTransaction.d.ts +0 -1
- package/dist/esm/utils/cancelTransaction.d.ts.map +1 -1
- package/dist/esm/utils/converter.d.ts.map +1 -1
- package/dist/esm/utils/converter.js.map +1 -1
- package/dist/esm/utils/createBatchScheduler.d.ts +1 -8
- package/dist/esm/utils/createBatchScheduler.d.ts.map +1 -1
- package/dist/esm/utils/createBatchScheduler.js.map +1 -1
- package/dist/esm/utils/deepEqual.d.ts.map +1 -1
- package/dist/esm/utils/deepEqual.js.map +1 -1
- package/dist/esm/utils/getAction.d.ts +6 -7
- package/dist/esm/utils/getAction.d.ts.map +1 -1
- package/dist/esm/utils/getAddressInfo.d.ts +0 -1
- package/dist/esm/utils/getAddressInfo.d.ts.map +1 -1
- package/dist/esm/utils/getAddressInfo.js.map +1 -1
- package/dist/esm/utils/idCache.d.ts.map +1 -1
- package/dist/esm/utils/isAddress.d.ts +0 -1
- package/dist/esm/utils/isAddress.d.ts.map +1 -1
- package/dist/esm/utils/lru.d.ts +4 -4
- package/dist/esm/utils/lru.d.ts.map +1 -1
- package/dist/esm/utils/lru.js.map +1 -1
- package/dist/esm/utils/modifyFee.d.ts +0 -1
- package/dist/esm/utils/modifyFee.d.ts.map +1 -1
- package/dist/esm/utils/modifyFee.js.map +1 -1
- package/dist/esm/utils/observe.d.ts +4 -5
- package/dist/esm/utils/observe.d.ts.map +1 -1
- package/dist/esm/utils/observe.js.map +1 -1
- package/dist/esm/utils/parseAccount.d.ts +0 -1
- package/dist/esm/utils/parseAccount.d.ts.map +1 -1
- package/dist/esm/utils/poll.d.ts +4 -10
- package/dist/esm/utils/poll.d.ts.map +1 -1
- package/dist/esm/utils/retryUntil.d.ts +17 -15
- package/dist/esm/utils/retryUntil.d.ts.map +1 -1
- package/dist/esm/utils/retryUntil.js.map +1 -1
- package/dist/esm/utils/sleep.d.ts.map +1 -1
- package/dist/esm/utils/stringify.d.ts +0 -1
- package/dist/esm/utils/stringify.d.ts.map +1 -1
- package/dist/esm/utils/uid.d.ts.map +1 -1
- package/dist/esm/utils/uid.js.map +1 -1
- package/dist/esm/utils/url.d.ts.map +1 -1
- package/dist/esm/utils/url.js.map +1 -1
- package/dist/esm/utils/wait.d.ts.map +1 -1
- package/dist/esm/utils/withDedupe.d.ts +1 -5
- package/dist/esm/utils/withDedupe.d.ts.map +1 -1
- package/dist/esm/utils/withDedupe.js.map +1 -1
- package/dist/esm/utils/withResolvers.d.ts.map +1 -1
- package/dist/esm/utils/withRetry.d.ts +2 -10
- package/dist/esm/utils/withRetry.d.ts.map +1 -1
- package/dist/esm/utils/withTimeout.d.ts +2 -9
- package/dist/esm/utils/withTimeout.d.ts.map +1 -1
- package/dist/esm/utils/withTimeout.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.d.ts.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/package.json +1 -1
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.d.ts","names":[],"sources":["../../../../src/transports/blockchair/methods.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"methods.d.ts","names":[],"sources":["../../../../src/transports/blockchair/methods.ts"],"mappings":";;cAMa,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockcypher.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/blockcypher.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"blockcypher.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/blockcypher.ts"],"mappings":";;KAKK;EACH;EACA;IACE;cAES,cAAe,SAAS,sBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockcypher.types.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/blockcypher.types.ts"],"mappings":";KAAY
|
|
1
|
+
{"version":3,"file":"blockcypher.types.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/blockcypher.types.ts"],"mappings":";KAAY;EACV;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU,2BAA2B;EACrC,QAAQ;;KAGE;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ;EACR,SAAS;;KAGC,gCAAgC;EAC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBalance.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/getBalance.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getBalance.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/getBalance.ts"],"mappings":";;cAKa,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionFee.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/getTransactionFee.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getTransactionFee.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/getTransactionFee.ts"],"mappings":";;cAKa,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUTXOs.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/getUTXOs.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getUTXOs.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/getUTXOs.ts"],"mappings":";;cAuBa,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUTXOs.js","names":[],"sources":["../../../../src/transports/blockcypher/getUTXOs.ts"],"sourcesContent":["import { RpcRequestError } from '../../errors/request.js'\nimport { InsufficientUTXOBalanceError } from '../../errors/utxo.js'\nimport type { UTXO } from '../../types/transaction.js'\nimport { urlWithParams } from '../../utils/url.js'\nimport type { RpcMethodHandler } from '../types.js'\nimport type {\n BlockcypherUTXO,\n BlockcypherUTXOsResponse,\n} from './blockcypher.types.js'\nimport { getRpcErrorCode } from './utils.js'\n\nconst blockcypherUTXOTransformer = (utxo: BlockcypherUTXO): UTXO => ({\n blockHeight: utxo.block_height,\n isConfirmed: Boolean(utxo.confirmations),\n confirmations: utxo.confirmations,\n value: utxo.value,\n vout: utxo.tx_output_n,\n txId: utxo.tx_hash,\n scriptHex: utxo.script,\n})\n\nconst MAX_API_LIMIT = 2000\n\nexport const getUTXOs: RpcMethodHandler<'getUTXOs'> = async (\n client,\n { baseUrl, apiKey },\n { address, minValue }\n) => {\n async function* fetchUTXOs() {\n let hasMore = true\n let beforeBlock: number | undefined\n\n while (hasMore) {\n const apiUrl = urlWithParams(`${baseUrl}/addrs/${address}`, {\n token: apiKey,\n unspentOnly: 'true',\n includeScript: 'true',\n before: beforeBlock,\n limit: MAX_API_LIMIT,\n })\n const response = (await client.request({\n url: apiUrl,\n fetchOptions: { method: 'GET' },\n })) as unknown as BlockcypherUTXOsResponse\n\n if (response.error) {\n throw new RpcRequestError({\n url: apiUrl,\n body: {\n method: 'fetchUTXOs',\n params: {\n address,\n minValue,\n },\n },\n error: {\n code: getRpcErrorCode(response.error),\n message: response.error,\n },\n })\n }\n\n if (minValue && minValue > response.final_balance) {\n throw new InsufficientUTXOBalanceError({\n minValue,\n address,\n balance: response.final_balance,\n })\n }\n\n if (!response.txrefs || response.txrefs.length === 0) {\n hasMore = false\n continue\n }\n\n const { hasMore: apiHasMore } = response\n\n hasMore = Boolean(apiHasMore)\n beforeBlock = response.txrefs[response.txrefs.length - 1].block_height\n\n yield response.txrefs\n }\n }\n\n const utxos: UTXO[] = []\n let valueCount = 0\n\n for await (const batch of fetchUTXOs()) {\n const utxoBatch = batch.map(blockcypherUTXOTransformer)\n utxos.push(...utxoBatch)\n\n if (minValue) {\n valueCount += utxoBatch.reduce((sum, utxo) => sum + utxo.value, 0)\n if (valueCount >= minValue) {\n break\n }\n }\n }\n\n return { result: utxos }\n}\n"],"mappings":";;;;;AAWA,MAAM,8BAA8B,UAAiC;CACnE,aAAa,KAAK;CAClB,aAAa,QAAQ,KAAK,aAAa;CACvC,eAAe,KAAK;CACpB,OAAO,KAAK;CACZ,MAAM,KAAK;CACX,MAAM,KAAK;CACX,WAAW,KAAK;AAClB;AAEA,MAAM,gBAAgB;AAEtB,MAAa,WAAyC,OACpD,QACA,EAAE,SAAS,UACX,EAAE,SAAS,eACR;CACH,gBAAgB,aAAa;EAC3B,IAAI,UAAU;EACd,IAAI;EAEJ,OAAO,SAAS;GACd,MAAM,SAAS,cAAc,GAAG,QAAQ,SAAS,WAAW;IAC1D,OAAO;IACP,aAAa;IACb,eAAe;IACf,QAAQ;IACR,OAAO;GACT,CAAC;GACD,MAAM,WAAY,MAAM,OAAO,QAAQ;IACrC,KAAK;IACL,cAAc,EAAE,QAAQ,MAAM;GAChC,CAAC;GAED,IAAI,SAAS,OACX,MAAM,IAAI,gBAAgB;IACxB,KAAK;IACL,MAAM;KACJ,QAAQ;KACR,QAAQ;MACN;MACA;KACF;IACF;IACA,OAAO;KACL,MAAM,gBAAgB,SAAS,KAAK;KACpC,SAAS,SAAS;IACpB;GACF,CAAC;GAGH,IAAI,YAAY,WAAW,SAAS,eAClC,MAAM,IAAI,6BAA6B;IACrC;IACA;IACA,SAAS,SAAS;GACpB,CAAC;GAGH,IAAI,CAAC,SAAS,UAAU,SAAS,OAAO,WAAW,GAAG;IACpD,UAAU;IACV;GACF;GAEA,MAAM,EAAE,SAAS,eAAe;GAEhC,UAAU,QAAQ,UAAU;GAC5B,cAAc,SAAS,OAAO,SAAS,OAAO,SAAS,
|
|
1
|
+
{"version":3,"file":"getUTXOs.js","names":[],"sources":["../../../../src/transports/blockcypher/getUTXOs.ts"],"sourcesContent":["import { RpcRequestError } from '../../errors/request.js'\nimport { InsufficientUTXOBalanceError } from '../../errors/utxo.js'\nimport type { UTXO } from '../../types/transaction.js'\nimport { urlWithParams } from '../../utils/url.js'\nimport type { RpcMethodHandler } from '../types.js'\nimport type {\n BlockcypherUTXO,\n BlockcypherUTXOsResponse,\n} from './blockcypher.types.js'\nimport { getRpcErrorCode } from './utils.js'\n\nconst blockcypherUTXOTransformer = (utxo: BlockcypherUTXO): UTXO => ({\n blockHeight: utxo.block_height,\n isConfirmed: Boolean(utxo.confirmations),\n confirmations: utxo.confirmations,\n value: utxo.value,\n vout: utxo.tx_output_n,\n txId: utxo.tx_hash,\n scriptHex: utxo.script,\n})\n\nconst MAX_API_LIMIT = 2000\n\nexport const getUTXOs: RpcMethodHandler<'getUTXOs'> = async (\n client,\n { baseUrl, apiKey },\n { address, minValue }\n) => {\n async function* fetchUTXOs() {\n let hasMore = true\n let beforeBlock: number | undefined\n\n while (hasMore) {\n const apiUrl = urlWithParams(`${baseUrl}/addrs/${address}`, {\n token: apiKey,\n unspentOnly: 'true',\n includeScript: 'true',\n before: beforeBlock,\n limit: MAX_API_LIMIT,\n })\n const response = (await client.request({\n url: apiUrl,\n fetchOptions: { method: 'GET' },\n })) as unknown as BlockcypherUTXOsResponse\n\n if (response.error) {\n throw new RpcRequestError({\n url: apiUrl,\n body: {\n method: 'fetchUTXOs',\n params: {\n address,\n minValue,\n },\n },\n error: {\n code: getRpcErrorCode(response.error),\n message: response.error,\n },\n })\n }\n\n if (minValue && minValue > response.final_balance) {\n throw new InsufficientUTXOBalanceError({\n minValue,\n address,\n balance: response.final_balance,\n })\n }\n\n if (!response.txrefs || response.txrefs.length === 0) {\n hasMore = false\n continue\n }\n\n const { hasMore: apiHasMore } = response\n\n hasMore = Boolean(apiHasMore)\n beforeBlock = response.txrefs[response.txrefs.length - 1].block_height\n\n yield response.txrefs\n }\n }\n\n const utxos: UTXO[] = []\n let valueCount = 0\n\n for await (const batch of fetchUTXOs()) {\n const utxoBatch = batch.map(blockcypherUTXOTransformer)\n utxos.push(...utxoBatch)\n\n if (minValue) {\n valueCount += utxoBatch.reduce((sum, utxo) => sum + utxo.value, 0)\n if (valueCount >= minValue) {\n break\n }\n }\n }\n\n return { result: utxos }\n}\n"],"mappings":";;;;;AAWA,MAAM,8BAA8B,UAAiC;CACnE,aAAa,KAAK;CAClB,aAAa,QAAQ,KAAK,aAAa;CACvC,eAAe,KAAK;CACpB,OAAO,KAAK;CACZ,MAAM,KAAK;CACX,MAAM,KAAK;CACX,WAAW,KAAK;AAClB;AAEA,MAAM,gBAAgB;AAEtB,MAAa,WAAyC,OACpD,QACA,EAAE,SAAS,UACX,EAAE,SAAS,eACR;CACH,gBAAgB,aAAa;EAC3B,IAAI,UAAU;EACd,IAAI;EAEJ,OAAO,SAAS;GACd,MAAM,SAAS,cAAc,GAAG,QAAQ,SAAS,WAAW;IAC1D,OAAO;IACP,aAAa;IACb,eAAe;IACf,QAAQ;IACR,OAAO;GACT,CAAC;GACD,MAAM,WAAY,MAAM,OAAO,QAAQ;IACrC,KAAK;IACL,cAAc,EAAE,QAAQ,MAAM;GAChC,CAAC;GAED,IAAI,SAAS,OACX,MAAM,IAAI,gBAAgB;IACxB,KAAK;IACL,MAAM;KACJ,QAAQ;KACR,QAAQ;MACN;MACA;KACF;IACF;IACA,OAAO;KACL,MAAM,gBAAgB,SAAS,KAAK;KACpC,SAAS,SAAS;IACpB;GACF,CAAC;GAGH,IAAI,YAAY,WAAW,SAAS,eAClC,MAAM,IAAI,6BAA6B;IACrC;IACA;IACA,SAAS,SAAS;GACpB,CAAC;GAGH,IAAI,CAAC,SAAS,UAAU,SAAS,OAAO,WAAW,GAAG;IACpD,UAAU;IACV;GACF;GAEA,MAAM,EAAE,SAAS,eAAe;GAEhC,UAAU,QAAQ,UAAU;GAC5B,cAAc,SAAS,OAAO,SAAS,OAAO,SAAS,EAAE,CAAC;GAE1D,MAAM,SAAS;EACjB;CACF;CAEA,MAAM,QAAgB,CAAC;CACvB,IAAI,aAAa;CAEjB,WAAW,MAAM,SAAS,WAAW,GAAG;EACtC,MAAM,YAAY,MAAM,IAAI,0BAA0B;EACtD,MAAM,KAAK,GAAG,SAAS;EAEvB,IAAI,UAAU;GACZ,cAAc,UAAU,QAAQ,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC;GACjE,IAAI,cAAc,UAChB;EAEJ;CACF;CAEA,OAAO,EAAE,QAAQ,MAAM;AACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/methods.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"methods.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/methods.ts"],"mappings":";;cAKa,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/utils.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/transports/blockcypher/utils.ts"],"mappings":";;iBAEgB,gBAAgB,gBAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/transports/blockcypher/utils.ts"],"sourcesContent":["import { RpcErrorCode } from '../../errors/rpc.js'\n\nexport function getRpcErrorCode(error: string): RpcErrorCode {\n if (error.toLowerCase().startsWith('rate limit exceeded')) {\n return RpcErrorCode.ACCESS_DENIED\n }\n return RpcErrorCode.MISC_ERROR\n}\n"],"mappings":";;AAEA,SAAgB,gBAAgB,OAA6B;CAC3D,IAAI,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/transports/blockcypher/utils.ts"],"sourcesContent":["import { RpcErrorCode } from '../../errors/rpc.js'\n\nexport function getRpcErrorCode(error: string): RpcErrorCode {\n if (error.toLowerCase().startsWith('rate limit exceeded')) {\n return RpcErrorCode.ACCESS_DENIED\n }\n return RpcErrorCode.MISC_ERROR\n}\n"],"mappings":";;AAEA,SAAgB,gBAAgB,OAA6B;CAC3D,IAAI,MAAM,YAAY,CAAC,CAAC,WAAW,qBAAqB,GACtD,OAAA;CAEF,OAAA;AACF"}
|
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
import { ErrorType } from "../errors/utils.js";
|
|
2
2
|
import { CreateTransportErrorType, Transport, TransportConfig } from "../types/transport.js";
|
|
3
|
-
|
|
4
3
|
//#region src/transports/custom.d.ts
|
|
5
4
|
type BitcoinProvider = {
|
|
6
5
|
request(...args: any): Promise<any>;
|
|
7
6
|
};
|
|
8
7
|
type CustomTransportConfig = {
|
|
9
|
-
/** The key of the transport. */
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
/** The key of the transport. */
|
|
9
|
+
key?: TransportConfig["key"] | undefined;
|
|
10
|
+
/** Methods to include or exclude from executing RPC requests. */
|
|
11
|
+
methods?: TransportConfig["methods"] | undefined;
|
|
12
|
+
/** The name of the transport. */
|
|
13
|
+
name?: TransportConfig["name"] | undefined;
|
|
14
|
+
/** The max number of times to retry. */
|
|
15
|
+
retryCount?: TransportConfig["retryCount"] | undefined;
|
|
16
|
+
/** The base delay (in ms) between retries. */
|
|
13
17
|
retryDelay?: TransportConfig["retryDelay"] | undefined;
|
|
14
18
|
};
|
|
15
19
|
type CustomTransport = Transport<"custom", {}, BitcoinProvider["request"]>;
|
|
16
20
|
type CustomTransportErrorType = CreateTransportErrorType | ErrorType;
|
|
17
21
|
/**
|
|
18
|
-
* @description Creates a custom transport given an EIP-1193 compliant `request` attribute.
|
|
19
|
-
*/
|
|
22
|
+
* @description Creates a custom transport given an EIP-1193 compliant `request` attribute.
|
|
23
|
+
*/
|
|
20
24
|
declare function custom<provider extends BitcoinProvider>(provider: provider, config?: CustomTransportConfig): CustomTransport;
|
|
21
25
|
//#endregion
|
|
22
26
|
export { CustomTransport, CustomTransportConfig, CustomTransportErrorType, custom };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.d.ts","names":[],"sources":["../../../src/transports/custom.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"custom.d.ts","names":[],"sources":["../../../src/transports/custom.ts"],"mappings":";;;KAQK;EAAoB,WAAW,YAAY;;KAEpC;;EAEV,MAAM;;EAEN,UAAU;;EAEV,OAAO;;EAEP,aAAa;;EAEb,aAAa;;KAGH,kBAAkB,wBAI5B;KAGU,2BAA2B,2BAA2B;;;;iBAKlD,OAAO,iBAAiB,iBACtC,UAAU,UACV,SAAQ,wBACP"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Chain } from "../types/chain.js";
|
|
2
2
|
import { ErrorType } from "../errors/utils.js";
|
|
3
3
|
import { CreateTransportErrorType, Transport, TransportConfig } from "../types/transport.js";
|
|
4
|
-
|
|
5
4
|
//#region src/transports/fallback.d.ts
|
|
6
5
|
type OnResponseFn = (args: {
|
|
7
6
|
method: string;
|
|
@@ -18,68 +17,65 @@ type OnResponseFn = (args: {
|
|
|
18
17
|
})) => void;
|
|
19
18
|
type RankOptions = {
|
|
20
19
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
* The polling interval (in ms) at which the ranker should ping the RPC URL.
|
|
21
|
+
* @default client.pollingInterval
|
|
22
|
+
*/
|
|
24
23
|
interval?: number | undefined;
|
|
25
24
|
/**
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
* Ping method to determine latency.
|
|
26
|
+
*/
|
|
28
27
|
ping?: (parameters: {
|
|
29
28
|
transport: ReturnType<Transport>;
|
|
30
29
|
}) => Promise<unknown> | undefined;
|
|
31
30
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
* The number of previous samples to perform ranking on.
|
|
32
|
+
* @default 10
|
|
33
|
+
*/
|
|
35
34
|
sampleCount?: number | undefined;
|
|
36
35
|
/**
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
* Timeout when sampling transports.
|
|
37
|
+
* @default 1_000
|
|
38
|
+
*/
|
|
40
39
|
timeout?: number | undefined;
|
|
41
40
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
* Weights to apply to the scores. Weight values are proportional.
|
|
42
|
+
*/
|
|
44
43
|
weights?: {
|
|
45
44
|
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
* The weight to apply to the latency score.
|
|
46
|
+
* @default 0.3
|
|
47
|
+
*/
|
|
49
48
|
latency?: number | undefined;
|
|
50
49
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
* The weight to apply to the stability score.
|
|
51
|
+
* @default 0.7
|
|
52
|
+
*/
|
|
54
53
|
stability?: number | undefined;
|
|
55
54
|
} | undefined;
|
|
56
55
|
};
|
|
57
56
|
type FallbackTransportConfig = {
|
|
58
|
-
/** The key of the Fallback transport. */
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
/** The key of the Fallback transport. */
|
|
58
|
+
key?: TransportConfig["key"] | undefined;
|
|
59
|
+
/** The name of the Fallback transport. */
|
|
60
|
+
name?: TransportConfig["name"] | undefined;
|
|
61
|
+
/** Toggle to enable ranking, or rank options. */
|
|
62
|
+
rank?: boolean | RankOptions | undefined;
|
|
63
|
+
/** The max number of times to retry. */
|
|
64
|
+
retryCount?: TransportConfig["retryCount"] | undefined;
|
|
65
|
+
/** The base delay (in ms) between retries. */
|
|
66
|
+
retryDelay?: TransportConfig["retryDelay"] | undefined;
|
|
67
|
+
/** Callback on whether an error should throw or try the next transport in the fallback. */
|
|
63
68
|
shouldThrow?: (error: Error) => boolean | undefined;
|
|
64
69
|
};
|
|
65
70
|
type FallbackTransport<transports extends readonly Transport[] = readonly Transport[]> = Transport<"fallback", {
|
|
66
71
|
onResponse: (fn: OnResponseFn) => void;
|
|
67
|
-
transports: { [key in keyof transports]: ReturnType<transports[key]
|
|
72
|
+
transports: { [key in keyof transports]: ReturnType<transports[key]>; };
|
|
68
73
|
}>;
|
|
69
74
|
type FallbackTransportErrorType = CreateTransportErrorType | ErrorType;
|
|
70
75
|
declare function fallback<const transports extends readonly Transport[]>(transports_: transports, config?: FallbackTransportConfig): FallbackTransport<transports>;
|
|
71
76
|
declare function shouldThrow(error: Error): boolean;
|
|
72
77
|
/** @internal */
|
|
73
|
-
declare function rankTransports({
|
|
74
|
-
chain,
|
|
75
|
-
interval,
|
|
76
|
-
onTransports,
|
|
77
|
-
ping,
|
|
78
|
-
sampleCount,
|
|
79
|
-
timeout,
|
|
80
|
-
transports,
|
|
81
|
-
weights
|
|
82
|
-
}: {
|
|
78
|
+
declare function rankTransports({ chain, interval, onTransports, ping, sampleCount, timeout, transports, weights }: {
|
|
83
79
|
chain?: Chain | undefined;
|
|
84
80
|
interval: RankOptions["interval"];
|
|
85
81
|
onTransports: (transports: readonly Transport[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback.d.ts","names":[],"sources":["../../../src/transports/fallback.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"fallback.d.ts","names":[],"sources":["../../../src/transports/fallback.ts"],"mappings":";;;;KAiBY,gBACV;EACE;EACA;EACA,WAAW,WAAW;;EAGlB;EACA;EACA;;EAGA,OAAO;EACP;EACA;;KAKH;;;;;EAKH;;;;EAIA,QAAQ;IACN,WAAW,WAAW;QAClB;;;;;EAKN;;;;;EAKA;;;;EAIA;;;;;IAMM;;;;;IAKA;;;KAKI;;EAEV,MAAM;;EAEN,OAAO;;EAEP,iBAAiB;;EAEjB,aAAa;;EAEb,aAAa;;EAEb,eAAe,OAAO;;KAGZ,kBACV,4BAA4B,uBAAuB,eACjD;EAGA,aAAa,IAAI;EACjB,eACG,aAAa,aAAa,WAAW,WAAW;;KAK3C,6BAA6B,2BAA2B;iBAEpD,eAAe,4BAA4B,aACzD,aAAa,YACb,SAAQ,0BACP,kBAAkB;iBA2IL,YAAY,OAAO;;iBAmBnB,iBACd,OACA,UACA,cACA,MACA,aACA,SACA,YACA;EAEA,QAAQ;EACR,UAAU;EACV,eAAe,qBAAqB;EACpC,OAAO;EACP,cAAc;EACd,UAAU;EACV,qBAAqB;EACrB,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback.js","names":[],"sources":["../../../src/transports/fallback.ts"],"sourcesContent":["import { RpcErrorCode } from '../errors/rpc.js'\nimport {\n AllTransportsFailedError,\n TransportMethodNotSupportedError,\n} from '../errors/transport.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport { InsufficientUTXOBalanceError } from '../errors/utxo.js'\nimport { createTransport } from '../factories/createTransport.js'\nimport type { Chain } from '../types/chain.js'\nimport type {\n CreateTransportErrorType,\n Transport,\n TransportConfig,\n} from '../types/transport.js'\nimport { wait } from '../utils/wait.js'\n\n// TODO: Narrow `method` & `params` types.\nexport type OnResponseFn = (\n args: {\n method: string\n params: unknown[]\n transport: ReturnType<Transport>\n } & (\n | {\n error?: undefined\n response: unknown\n status: 'success'\n }\n | {\n error: Error\n response?: undefined\n status: 'error'\n }\n )\n) => void\n\ntype RankOptions = {\n /**\n * The polling interval (in ms) at which the ranker should ping the RPC URL.\n * @default client.pollingInterval\n */\n interval?: number | undefined\n /**\n * Ping method to determine latency.\n */\n ping?: (parameters: {\n transport: ReturnType<Transport>\n }) => Promise<unknown> | undefined\n /**\n * The number of previous samples to perform ranking on.\n * @default 10\n */\n sampleCount?: number | undefined\n /**\n * Timeout when sampling transports.\n * @default 1_000\n */\n timeout?: number | undefined\n /**\n * Weights to apply to the scores. Weight values are proportional.\n */\n weights?:\n | {\n /**\n * The weight to apply to the latency score.\n * @default 0.3\n */\n latency?: number | undefined\n /**\n * The weight to apply to the stability score.\n * @default 0.7\n */\n stability?: number | undefined\n }\n | undefined\n}\n\nexport type FallbackTransportConfig = {\n /** The key of the Fallback transport. */\n key?: TransportConfig['key'] | undefined\n /** The name of the Fallback transport. */\n name?: TransportConfig['name'] | undefined\n /** Toggle to enable ranking, or rank options. */\n rank?: boolean | RankOptions | undefined\n /** The max number of times to retry. */\n retryCount?: TransportConfig['retryCount'] | undefined\n /** The base delay (in ms) between retries. */\n retryDelay?: TransportConfig['retryDelay'] | undefined\n /** Callback on whether an error should throw or try the next transport in the fallback. */\n shouldThrow?: (error: Error) => boolean | undefined\n}\n\nexport type FallbackTransport<\n transports extends readonly Transport[] = readonly Transport[],\n> = Transport<\n 'fallback',\n {\n onResponse: (fn: OnResponseFn) => void\n transports: {\n [key in keyof transports]: ReturnType<transports[key]>\n }\n }\n>\n\nexport type FallbackTransportErrorType = CreateTransportErrorType | ErrorType\n\nexport function fallback<const transports extends readonly Transport[]>(\n transports_: transports,\n config: FallbackTransportConfig = {}\n): FallbackTransport<transports> {\n const {\n key = 'fallback',\n name = 'Fallback',\n rank = false,\n shouldThrow: shouldThrow_ = shouldThrow,\n retryCount,\n retryDelay,\n } = config\n return (({ chain, pollingInterval = 4_000, timeout, ...rest }) => {\n let transports = transports_\n\n let onResponse: OnResponseFn = () => {}\n\n const transport = createTransport(\n {\n key,\n name,\n async request({ method, params }) {\n // Filter transports to only those that support the requested method\n const supportedTransports = transports.reduce<\n ReturnType<Transport>[]\n >((supportedTransports, transport) => {\n const instance = transport({\n ...rest,\n chain,\n retryCount: 0,\n timeout,\n })\n const { include, exclude } = instance.config.methods || {}\n if (include) {\n if (include.includes(method)) {\n supportedTransports.push(instance)\n }\n return supportedTransports\n }\n if (exclude) {\n if (!exclude.includes(method)) {\n supportedTransports.push(instance)\n }\n return supportedTransports\n }\n supportedTransports.push(instance)\n return supportedTransports\n }, [])\n\n if (!supportedTransports.length) {\n throw new TransportMethodNotSupportedError({ method })\n }\n\n const collectedErrors: Array<{\n transport: string\n error: Error\n attempt: number\n }> = []\n\n const fetch = async (i = 0): Promise<any> => {\n const transport = supportedTransports[i]\n try {\n const response = await transport.request({\n method,\n params,\n })\n\n onResponse({\n method,\n params: params as unknown[],\n response,\n transport,\n status: 'success',\n })\n\n return response\n } catch (err) {\n onResponse({\n error: err as Error,\n method,\n params: params as unknown[],\n transport,\n status: 'error',\n })\n\n if (shouldThrow_(err as Error)) {\n throw err\n }\n\n collectedErrors.push({\n transport: transport.config.name,\n error: err as Error,\n attempt: i + 1,\n })\n\n // If we've reached the end of the fallbacks, throw all collected errors.\n if (i === supportedTransports.length - 1) {\n throw new AllTransportsFailedError({\n method,\n params,\n errors: collectedErrors,\n totalAttempts: i + 1,\n })\n }\n\n // Otherwise, try the next fallback.\n return fetch(i + 1)\n }\n }\n return fetch()\n },\n retryCount,\n retryDelay,\n type: 'fallback',\n },\n {\n onResponse: (fn: OnResponseFn) => {\n onResponse = fn\n },\n transports: transports.map((fn) => fn({ chain, retryCount: 0 })),\n }\n )\n\n if (rank) {\n const rankOptions = (typeof rank === 'object' ? rank : {}) as RankOptions\n rankTransports({\n chain,\n interval: rankOptions.interval ?? pollingInterval,\n onTransports: (transports_) => {\n transports = transports_ as transports\n },\n ping: rankOptions.ping,\n sampleCount: rankOptions.sampleCount,\n timeout: rankOptions.timeout,\n transports,\n weights: rankOptions.weights,\n })\n }\n return transport\n }) as FallbackTransport<transports>\n}\n\nexport function shouldThrow(error: Error): boolean {\n if (error instanceof InsufficientUTXOBalanceError) {\n return true\n }\n\n if ('code' in error && typeof error.code === 'number') {\n if (\n error.code === RpcErrorCode.INTERNAL_ERROR ||\n error.code === RpcErrorCode.USER_REJECTION ||\n error.code === 5000 // CAIP UserRejectedRequestError\n ) {\n return true\n }\n }\n\n return false\n}\n\n/** @internal */\nexport function rankTransports({\n chain,\n interval = 4_000,\n onTransports,\n ping,\n sampleCount = 10,\n timeout = 1_000,\n transports,\n weights = {},\n}: {\n chain?: Chain | undefined\n interval: RankOptions['interval']\n onTransports: (transports: readonly Transport[]) => void\n ping?: RankOptions['ping'] | undefined\n sampleCount?: RankOptions['sampleCount'] | undefined\n timeout?: RankOptions['timeout'] | undefined\n transports: readonly Transport[]\n weights?: RankOptions['weights'] | undefined\n}): void {\n const { stability: stabilityWeight = 0.7, latency: latencyWeight = 0.3 } =\n weights\n\n type SampleData = { latency: number; success: number }\n type Sample = SampleData[]\n const samples: Sample[] = []\n\n const rankTransports_ = async () => {\n // 1. Take a sample from each Transport.\n const sample: Sample = await Promise.all(\n transports.map(async (transport) => {\n const transport_ = transport({ chain, retryCount: 0, timeout })\n\n const start = Date.now()\n let end: number\n let success: number\n try {\n await (ping\n ? ping({ transport: transport_ })\n : transport_.request({\n method: 'net_listening',\n params: undefined,\n }))\n success = 1\n } catch {\n success = 0\n } finally {\n end = Date.now()\n }\n const latency = end - start\n return { latency, success }\n })\n )\n\n // 2. Store the sample. If we have more than `sampleCount` samples, remove\n // the oldest sample.\n samples.push(sample)\n if (samples.length > sampleCount) {\n samples.shift()\n }\n\n // 3. Calculate the max latency from samples.\n const maxLatency = Math.max(\n ...samples.map((sample) =>\n Math.max(...sample.map(({ latency }) => latency))\n )\n )\n\n // 4. Calculate the score for each Transport.\n const scores = transports\n .map((_, i) => {\n const latencies = samples.map((sample) => sample[i].latency)\n const meanLatency =\n latencies.reduce((acc, latency) => acc + latency, 0) /\n latencies.length\n const latencyScore = 1 - meanLatency / maxLatency\n\n const successes = samples.map((sample) => sample[i].success)\n const stabilityScore =\n successes.reduce((acc, success) => acc + success, 0) /\n successes.length\n\n if (stabilityScore === 0) {\n return [0, i]\n }\n return [\n latencyWeight * latencyScore + stabilityWeight * stabilityScore,\n i,\n ]\n })\n .sort((a, b) => b[0] - a[0])\n\n // 5. Sort the Transports by score.\n onTransports(scores.map(([, i]) => transports[i]))\n\n // 6. Wait, and then rank again.\n await wait(interval)\n rankTransports_()\n }\n rankTransports_()\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fallback.js","names":[],"sources":["../../../src/transports/fallback.ts"],"sourcesContent":["import { RpcErrorCode } from '../errors/rpc.js'\nimport {\n AllTransportsFailedError,\n TransportMethodNotSupportedError,\n} from '../errors/transport.js'\nimport type { ErrorType } from '../errors/utils.js'\nimport { InsufficientUTXOBalanceError } from '../errors/utxo.js'\nimport { createTransport } from '../factories/createTransport.js'\nimport type { Chain } from '../types/chain.js'\nimport type {\n CreateTransportErrorType,\n Transport,\n TransportConfig,\n} from '../types/transport.js'\nimport { wait } from '../utils/wait.js'\n\n// TODO: Narrow `method` & `params` types.\nexport type OnResponseFn = (\n args: {\n method: string\n params: unknown[]\n transport: ReturnType<Transport>\n } & (\n | {\n error?: undefined\n response: unknown\n status: 'success'\n }\n | {\n error: Error\n response?: undefined\n status: 'error'\n }\n )\n) => void\n\ntype RankOptions = {\n /**\n * The polling interval (in ms) at which the ranker should ping the RPC URL.\n * @default client.pollingInterval\n */\n interval?: number | undefined\n /**\n * Ping method to determine latency.\n */\n ping?: (parameters: {\n transport: ReturnType<Transport>\n }) => Promise<unknown> | undefined\n /**\n * The number of previous samples to perform ranking on.\n * @default 10\n */\n sampleCount?: number | undefined\n /**\n * Timeout when sampling transports.\n * @default 1_000\n */\n timeout?: number | undefined\n /**\n * Weights to apply to the scores. Weight values are proportional.\n */\n weights?:\n | {\n /**\n * The weight to apply to the latency score.\n * @default 0.3\n */\n latency?: number | undefined\n /**\n * The weight to apply to the stability score.\n * @default 0.7\n */\n stability?: number | undefined\n }\n | undefined\n}\n\nexport type FallbackTransportConfig = {\n /** The key of the Fallback transport. */\n key?: TransportConfig['key'] | undefined\n /** The name of the Fallback transport. */\n name?: TransportConfig['name'] | undefined\n /** Toggle to enable ranking, or rank options. */\n rank?: boolean | RankOptions | undefined\n /** The max number of times to retry. */\n retryCount?: TransportConfig['retryCount'] | undefined\n /** The base delay (in ms) between retries. */\n retryDelay?: TransportConfig['retryDelay'] | undefined\n /** Callback on whether an error should throw or try the next transport in the fallback. */\n shouldThrow?: (error: Error) => boolean | undefined\n}\n\nexport type FallbackTransport<\n transports extends readonly Transport[] = readonly Transport[],\n> = Transport<\n 'fallback',\n {\n onResponse: (fn: OnResponseFn) => void\n transports: {\n [key in keyof transports]: ReturnType<transports[key]>\n }\n }\n>\n\nexport type FallbackTransportErrorType = CreateTransportErrorType | ErrorType\n\nexport function fallback<const transports extends readonly Transport[]>(\n transports_: transports,\n config: FallbackTransportConfig = {}\n): FallbackTransport<transports> {\n const {\n key = 'fallback',\n name = 'Fallback',\n rank = false,\n shouldThrow: shouldThrow_ = shouldThrow,\n retryCount,\n retryDelay,\n } = config\n return (({ chain, pollingInterval = 4_000, timeout, ...rest }) => {\n let transports = transports_\n\n let onResponse: OnResponseFn = () => {}\n\n const transport = createTransport(\n {\n key,\n name,\n async request({ method, params }) {\n // Filter transports to only those that support the requested method\n const supportedTransports = transports.reduce<\n ReturnType<Transport>[]\n >((supportedTransports, transport) => {\n const instance = transport({\n ...rest,\n chain,\n retryCount: 0,\n timeout,\n })\n const { include, exclude } = instance.config.methods || {}\n if (include) {\n if (include.includes(method)) {\n supportedTransports.push(instance)\n }\n return supportedTransports\n }\n if (exclude) {\n if (!exclude.includes(method)) {\n supportedTransports.push(instance)\n }\n return supportedTransports\n }\n supportedTransports.push(instance)\n return supportedTransports\n }, [])\n\n if (!supportedTransports.length) {\n throw new TransportMethodNotSupportedError({ method })\n }\n\n const collectedErrors: Array<{\n transport: string\n error: Error\n attempt: number\n }> = []\n\n const fetch = async (i = 0): Promise<any> => {\n const transport = supportedTransports[i]\n try {\n const response = await transport.request({\n method,\n params,\n })\n\n onResponse({\n method,\n params: params as unknown[],\n response,\n transport,\n status: 'success',\n })\n\n return response\n } catch (err) {\n onResponse({\n error: err as Error,\n method,\n params: params as unknown[],\n transport,\n status: 'error',\n })\n\n if (shouldThrow_(err as Error)) {\n throw err\n }\n\n collectedErrors.push({\n transport: transport.config.name,\n error: err as Error,\n attempt: i + 1,\n })\n\n // If we've reached the end of the fallbacks, throw all collected errors.\n if (i === supportedTransports.length - 1) {\n throw new AllTransportsFailedError({\n method,\n params,\n errors: collectedErrors,\n totalAttempts: i + 1,\n })\n }\n\n // Otherwise, try the next fallback.\n return fetch(i + 1)\n }\n }\n return fetch()\n },\n retryCount,\n retryDelay,\n type: 'fallback',\n },\n {\n onResponse: (fn: OnResponseFn) => {\n onResponse = fn\n },\n transports: transports.map((fn) => fn({ chain, retryCount: 0 })),\n }\n )\n\n if (rank) {\n const rankOptions = (typeof rank === 'object' ? rank : {}) as RankOptions\n rankTransports({\n chain,\n interval: rankOptions.interval ?? pollingInterval,\n onTransports: (transports_) => {\n transports = transports_ as transports\n },\n ping: rankOptions.ping,\n sampleCount: rankOptions.sampleCount,\n timeout: rankOptions.timeout,\n transports,\n weights: rankOptions.weights,\n })\n }\n return transport\n }) as FallbackTransport<transports>\n}\n\nexport function shouldThrow(error: Error): boolean {\n if (error instanceof InsufficientUTXOBalanceError) {\n return true\n }\n\n if ('code' in error && typeof error.code === 'number') {\n if (\n error.code === RpcErrorCode.INTERNAL_ERROR ||\n error.code === RpcErrorCode.USER_REJECTION ||\n error.code === 5000 // CAIP UserRejectedRequestError\n ) {\n return true\n }\n }\n\n return false\n}\n\n/** @internal */\nexport function rankTransports({\n chain,\n interval = 4_000,\n onTransports,\n ping,\n sampleCount = 10,\n timeout = 1_000,\n transports,\n weights = {},\n}: {\n chain?: Chain | undefined\n interval: RankOptions['interval']\n onTransports: (transports: readonly Transport[]) => void\n ping?: RankOptions['ping'] | undefined\n sampleCount?: RankOptions['sampleCount'] | undefined\n timeout?: RankOptions['timeout'] | undefined\n transports: readonly Transport[]\n weights?: RankOptions['weights'] | undefined\n}): void {\n const { stability: stabilityWeight = 0.7, latency: latencyWeight = 0.3 } =\n weights\n\n type SampleData = { latency: number; success: number }\n type Sample = SampleData[]\n const samples: Sample[] = []\n\n const rankTransports_ = async () => {\n // 1. Take a sample from each Transport.\n const sample: Sample = await Promise.all(\n transports.map(async (transport) => {\n const transport_ = transport({ chain, retryCount: 0, timeout })\n\n const start = Date.now()\n let end: number\n let success: number\n try {\n await (ping\n ? ping({ transport: transport_ })\n : transport_.request({\n method: 'net_listening',\n params: undefined,\n }))\n success = 1\n } catch {\n success = 0\n } finally {\n end = Date.now()\n }\n const latency = end - start\n return { latency, success }\n })\n )\n\n // 2. Store the sample. If we have more than `sampleCount` samples, remove\n // the oldest sample.\n samples.push(sample)\n if (samples.length > sampleCount) {\n samples.shift()\n }\n\n // 3. Calculate the max latency from samples.\n const maxLatency = Math.max(\n ...samples.map((sample) =>\n Math.max(...sample.map(({ latency }) => latency))\n )\n )\n\n // 4. Calculate the score for each Transport.\n const scores = transports\n .map((_, i) => {\n const latencies = samples.map((sample) => sample[i].latency)\n const meanLatency =\n latencies.reduce((acc, latency) => acc + latency, 0) /\n latencies.length\n const latencyScore = 1 - meanLatency / maxLatency\n\n const successes = samples.map((sample) => sample[i].success)\n const stabilityScore =\n successes.reduce((acc, success) => acc + success, 0) /\n successes.length\n\n if (stabilityScore === 0) {\n return [0, i]\n }\n return [\n latencyWeight * latencyScore + stabilityWeight * stabilityScore,\n i,\n ]\n })\n .sort((a, b) => b[0] - a[0])\n\n // 5. Sort the Transports by score.\n onTransports(scores.map(([, i]) => transports[i]))\n\n // 6. Wait, and then rank again.\n await wait(interval)\n rankTransports_()\n }\n rankTransports_()\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { RpcResponse } from "../types/rpc.js";
|
|
2
2
|
import { MaybePromise } from "../types/utils.js";
|
|
3
|
-
|
|
4
3
|
//#region src/transports/getHttpRpcClient.d.ts
|
|
5
4
|
type RpcRequest = {
|
|
6
5
|
jsonrpc?: "2.0";
|
|
@@ -10,19 +9,28 @@ type RpcRequest = {
|
|
|
10
9
|
};
|
|
11
10
|
type HttpRequestReturnType<body extends RpcRequest | RpcRequest[] = RpcRequest> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse;
|
|
12
11
|
type HttpRpcClientOptions = {
|
|
13
|
-
/** Request configuration to pass to `fetch`. */
|
|
12
|
+
/** Request configuration to pass to `fetch`. */
|
|
13
|
+
fetchOptions?: Omit<RequestInit, "body"> | undefined;
|
|
14
|
+
/** A callback to handle the request. */
|
|
14
15
|
onRequest?: ((request: Request, init: RequestInit) => MaybePromise<void | undefined | (RequestInit & {
|
|
15
16
|
url?: string | undefined;
|
|
16
|
-
})>) | undefined;
|
|
17
|
-
|
|
17
|
+
})>) | undefined;
|
|
18
|
+
/** A callback to handle the response. */
|
|
19
|
+
onResponse?: ((response: Response) => Promise<void> | void) | undefined;
|
|
20
|
+
/** The timeout (in ms) for the request. */
|
|
18
21
|
timeout?: number | undefined;
|
|
19
22
|
};
|
|
20
23
|
type HttpRequestParameters<body extends RpcRequest | RpcRequest[] = RpcRequest> = {
|
|
21
|
-
url?: string;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
url?: string;
|
|
25
|
+
/** The RPC request body. */
|
|
26
|
+
body?: body;
|
|
27
|
+
/** Request configuration to pass to `fetch`. */
|
|
28
|
+
fetchOptions?: HttpRpcClientOptions["fetchOptions"] | undefined;
|
|
29
|
+
/** A callback to handle the response. */
|
|
30
|
+
onRequest?: ((request: Request) => Promise<void> | void) | undefined;
|
|
31
|
+
/** A callback to handle the response. */
|
|
32
|
+
onResponse?: ((response: Response) => Promise<void> | void) | undefined;
|
|
33
|
+
/** The timeout (in ms) for the request. */
|
|
26
34
|
timeout?: HttpRpcClientOptions["timeout"] | undefined;
|
|
27
35
|
};
|
|
28
36
|
type HttpRpcClient = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getHttpRpcClient.d.ts","names":[],"sources":["../../../src/transports/getHttpRpcClient.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getHttpRpcClient.d.ts","names":[],"sources":["../../../src/transports/getHttpRpcClient.ts"],"mappings":";;;KAOY;EACV;EACA;EACA;EACA;;KAGU,sBACV,aAAa,aAAa,eAAe,cACvC,aAAa,eAAe,gBAAgB;KAEpC;;EAEV,eAAe,KAAK;;EAEpB,cAEM,SAAS,SACT,MAAM,gBACH,iCACiB;IAAgB;;;EAI1C,eAAe,UAAU,aAAa;;EAEtC;;KAGU,sBACV,aAAa,aAAa,eAAe;EAEzC;;EAEA,OAAO;;EAEP,eAAe;;EAEf,cAAc,SAAS,YAAY;;EAEnC,eAAe,UAAU,aAAa;;EAEtC,UAAU;;KAGA;EACV,QAAQ,aAAa,aAAa,cAChC,QAAQ,sBAAsB,QAC7B,QAAQ,sBAAsB;;iBAGnB,iBACd,aACA,UAAS,uBACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getHttpRpcClient.js","names":[],"sources":["../../../src/transports/getHttpRpcClient.ts"],"sourcesContent":["import { HttpRequestError, TimeoutError } from '../errors/request.js'\nimport type { RpcResponse } from '../types/rpc.js'\nimport type { MaybePromise } from '../types/utils.js'\nimport { idCache } from '../utils/idCache.js'\nimport { stringify } from '../utils/stringify.js'\nimport { withTimeout } from '../utils/withTimeout.js'\n\nexport type RpcRequest = {\n jsonrpc?: '2.0'\n method: string\n params?: any\n id?: number\n}\n\nexport type HttpRequestReturnType<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse\n\nexport type HttpRpcClientOptions = {\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: Omit<RequestInit, 'body'> | undefined\n /** A callback to handle the request. */\n onRequest?:\n | ((\n request: Request,\n init: RequestInit\n ) => MaybePromise<\n void | undefined | (RequestInit & { url?: string | undefined })\n >)\n | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise<void> | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: number | undefined\n}\n\nexport type HttpRequestParameters<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = {\n url?: string\n /** The RPC request body. */\n body?: body\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n /** A callback to handle the response. */\n onRequest?: ((request: Request) => Promise<void> | void) | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise<void> | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: HttpRpcClientOptions['timeout'] | undefined\n}\n\nexport type HttpRpcClient = {\n request<body extends RpcRequest | RpcRequest[]>(\n params: HttpRequestParameters<body>\n ): Promise<HttpRequestReturnType<body>>\n}\n\nexport function getHttpRpcClient(\n url: string,\n options: HttpRpcClientOptions = {}\n): HttpRpcClient {\n return {\n async request(params) {\n const {\n body,\n onRequest = options.onRequest,\n onResponse = options.onResponse,\n timeout = options.timeout ?? 10_000,\n } = params\n\n const fetchOptions = {\n ...(options.fetchOptions ?? {}),\n ...(params.fetchOptions ?? {}),\n }\n\n const { headers, method, signal: signal_ } = fetchOptions\n\n try {\n const response = await withTimeout(\n async ({ signal }) => {\n const preparedBody = body\n ? Array.isArray(body)\n ? body.map((b) => ({\n jsonrpc: '2.0' as const,\n id: b.id ?? idCache.take(),\n ...b,\n }))\n : {\n jsonrpc: '2.0' as const,\n id: body.id ?? idCache.take(),\n ...body,\n }\n : undefined\n const init: RequestInit = {\n ...fetchOptions,\n body: preparedBody ? stringify(preparedBody) : undefined,\n headers: {\n ...(method !== 'GET'\n ? { 'Content-Type': 'application/json' }\n : undefined),\n ...headers,\n },\n method: method || 'POST',\n signal: signal_ || (timeout > 0 ? signal : null),\n }\n const request = new Request(params.url ?? url, init)\n if (onRequest) {\n await onRequest(request, init)\n }\n const response = await fetch(params.url ?? url, init)\n return response\n },\n {\n errorInstance: new TimeoutError({\n body: body ?? {},\n url: params.url ?? url,\n timeout,\n }),\n timeout,\n signal: true,\n }\n )\n\n if (onResponse) {\n await onResponse(response)\n }\n\n let data: any\n if (\n response.headers.get('Content-Type')?.startsWith('application/json')\n ) {\n data = await response.json()\n } else {\n data = await response.text()\n data = JSON.parse(data || '{}')\n }\n\n if (!response.ok) {\n throw new HttpRequestError({\n body,\n details: stringify(data.error) || response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n })\n }\n return data\n } catch (err) {\n if (err instanceof HttpRequestError) {\n throw err\n }\n if (err instanceof TimeoutError) {\n throw err\n }\n throw new HttpRequestError({\n body,\n cause: err as Error,\n url,\n })\n }\n },\n }\n}\n"],"mappings":";;;;;AA0DA,SAAgB,iBACd,KACA,UAAgC,CAAC,GAClB;CACf,OAAO,EACL,MAAM,QAAQ,QAAQ;EACpB,MAAM,EACJ,MACA,YAAY,QAAQ,WACpB,aAAa,QAAQ,YACrB,UAAU,QAAQ,WAAW,QAC3B;EAEJ,MAAM,eAAe;GACnB,GAAI,QAAQ,gBAAgB,CAAC;GAC7B,GAAI,OAAO,gBAAgB,CAAC;EAC9B;EAEA,MAAM,EAAE,SAAS,QAAQ,QAAQ,YAAY;EAE7C,IAAI;GACF,MAAM,WAAW,MAAM,YACrB,OAAO,EAAE,aAAa;IACpB,MAAM,eAAe,OACjB,MAAM,QAAQ,IAAI,IAChB,KAAK,KAAK,OAAO;KACf,SAAS;KACT,IAAI,EAAE,MAAM,QAAQ,KAAK;KACzB,GAAG;IACL,EAAE,IACF;KACE,SAAS;KACT,IAAI,KAAK,MAAM,QAAQ,KAAK;KAC5B,GAAG;IACL,IACF,KAAA;IACJ,MAAM,OAAoB;KACxB,GAAG;KACH,MAAM,eAAe,UAAU,YAAY,IAAI,KAAA;KAC/C,SAAS;MACP,GAAI,WAAW,QACX,EAAE,gBAAgB,mBAAmB,IACrC,KAAA;MACJ,GAAG;KACL;KACA,QAAQ,UAAU;KAClB,QAAQ,YAAY,UAAU,IAAI,SAAS;IAC7C;IACA,MAAM,UAAU,IAAI,QAAQ,OAAO,OAAO,KAAK,IAAI;IACnD,IAAI,WACF,MAAM,UAAU,SAAS,IAAI;IAG/B,OAAO,MADgB,MAAM,OAAO,OAAO,KAAK,IAAI;GAEtD,GACA;IACE,eAAe,IAAI,aAAa;KAC9B,MAAM,QAAQ,CAAC;KACf,KAAK,OAAO,OAAO;KACnB;IACF,CAAC;IACD;IACA,QAAQ;GACV,CACF;GAEA,IAAI,YACF,MAAM,WAAW,QAAQ;GAG3B,IAAI;GACJ,IACE,SAAS,QAAQ,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"getHttpRpcClient.js","names":[],"sources":["../../../src/transports/getHttpRpcClient.ts"],"sourcesContent":["import { HttpRequestError, TimeoutError } from '../errors/request.js'\nimport type { RpcResponse } from '../types/rpc.js'\nimport type { MaybePromise } from '../types/utils.js'\nimport { idCache } from '../utils/idCache.js'\nimport { stringify } from '../utils/stringify.js'\nimport { withTimeout } from '../utils/withTimeout.js'\n\nexport type RpcRequest = {\n jsonrpc?: '2.0'\n method: string\n params?: any\n id?: number\n}\n\nexport type HttpRequestReturnType<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse\n\nexport type HttpRpcClientOptions = {\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: Omit<RequestInit, 'body'> | undefined\n /** A callback to handle the request. */\n onRequest?:\n | ((\n request: Request,\n init: RequestInit\n ) => MaybePromise<\n void | undefined | (RequestInit & { url?: string | undefined })\n >)\n | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise<void> | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: number | undefined\n}\n\nexport type HttpRequestParameters<\n body extends RpcRequest | RpcRequest[] = RpcRequest,\n> = {\n url?: string\n /** The RPC request body. */\n body?: body\n /** Request configuration to pass to `fetch`. */\n fetchOptions?: HttpRpcClientOptions['fetchOptions'] | undefined\n /** A callback to handle the response. */\n onRequest?: ((request: Request) => Promise<void> | void) | undefined\n /** A callback to handle the response. */\n onResponse?: ((response: Response) => Promise<void> | void) | undefined\n /** The timeout (in ms) for the request. */\n timeout?: HttpRpcClientOptions['timeout'] | undefined\n}\n\nexport type HttpRpcClient = {\n request<body extends RpcRequest | RpcRequest[]>(\n params: HttpRequestParameters<body>\n ): Promise<HttpRequestReturnType<body>>\n}\n\nexport function getHttpRpcClient(\n url: string,\n options: HttpRpcClientOptions = {}\n): HttpRpcClient {\n return {\n async request(params) {\n const {\n body,\n onRequest = options.onRequest,\n onResponse = options.onResponse,\n timeout = options.timeout ?? 10_000,\n } = params\n\n const fetchOptions = {\n ...(options.fetchOptions ?? {}),\n ...(params.fetchOptions ?? {}),\n }\n\n const { headers, method, signal: signal_ } = fetchOptions\n\n try {\n const response = await withTimeout(\n async ({ signal }) => {\n const preparedBody = body\n ? Array.isArray(body)\n ? body.map((b) => ({\n jsonrpc: '2.0' as const,\n id: b.id ?? idCache.take(),\n ...b,\n }))\n : {\n jsonrpc: '2.0' as const,\n id: body.id ?? idCache.take(),\n ...body,\n }\n : undefined\n const init: RequestInit = {\n ...fetchOptions,\n body: preparedBody ? stringify(preparedBody) : undefined,\n headers: {\n ...(method !== 'GET'\n ? { 'Content-Type': 'application/json' }\n : undefined),\n ...headers,\n },\n method: method || 'POST',\n signal: signal_ || (timeout > 0 ? signal : null),\n }\n const request = new Request(params.url ?? url, init)\n if (onRequest) {\n await onRequest(request, init)\n }\n const response = await fetch(params.url ?? url, init)\n return response\n },\n {\n errorInstance: new TimeoutError({\n body: body ?? {},\n url: params.url ?? url,\n timeout,\n }),\n timeout,\n signal: true,\n }\n )\n\n if (onResponse) {\n await onResponse(response)\n }\n\n let data: any\n if (\n response.headers.get('Content-Type')?.startsWith('application/json')\n ) {\n data = await response.json()\n } else {\n data = await response.text()\n data = JSON.parse(data || '{}')\n }\n\n if (!response.ok) {\n throw new HttpRequestError({\n body,\n details: stringify(data.error) || response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n })\n }\n return data\n } catch (err) {\n if (err instanceof HttpRequestError) {\n throw err\n }\n if (err instanceof TimeoutError) {\n throw err\n }\n throw new HttpRequestError({\n body,\n cause: err as Error,\n url,\n })\n }\n },\n }\n}\n"],"mappings":";;;;;AA0DA,SAAgB,iBACd,KACA,UAAgC,CAAC,GAClB;CACf,OAAO,EACL,MAAM,QAAQ,QAAQ;EACpB,MAAM,EACJ,MACA,YAAY,QAAQ,WACpB,aAAa,QAAQ,YACrB,UAAU,QAAQ,WAAW,QAC3B;EAEJ,MAAM,eAAe;GACnB,GAAI,QAAQ,gBAAgB,CAAC;GAC7B,GAAI,OAAO,gBAAgB,CAAC;EAC9B;EAEA,MAAM,EAAE,SAAS,QAAQ,QAAQ,YAAY;EAE7C,IAAI;GACF,MAAM,WAAW,MAAM,YACrB,OAAO,EAAE,aAAa;IACpB,MAAM,eAAe,OACjB,MAAM,QAAQ,IAAI,IAChB,KAAK,KAAK,OAAO;KACf,SAAS;KACT,IAAI,EAAE,MAAM,QAAQ,KAAK;KACzB,GAAG;IACL,EAAE,IACF;KACE,SAAS;KACT,IAAI,KAAK,MAAM,QAAQ,KAAK;KAC5B,GAAG;IACL,IACF,KAAA;IACJ,MAAM,OAAoB;KACxB,GAAG;KACH,MAAM,eAAe,UAAU,YAAY,IAAI,KAAA;KAC/C,SAAS;MACP,GAAI,WAAW,QACX,EAAE,gBAAgB,mBAAmB,IACrC,KAAA;MACJ,GAAG;KACL;KACA,QAAQ,UAAU;KAClB,QAAQ,YAAY,UAAU,IAAI,SAAS;IAC7C;IACA,MAAM,UAAU,IAAI,QAAQ,OAAO,OAAO,KAAK,IAAI;IACnD,IAAI,WACF,MAAM,UAAU,SAAS,IAAI;IAG/B,OAAO,MADgB,MAAM,OAAO,OAAO,KAAK,IAAI;GAEtD,GACA;IACE,eAAe,IAAI,aAAa;KAC9B,MAAM,QAAQ,CAAC;KACf,KAAK,OAAO,OAAO;KACnB;IACF,CAAC;IACD;IACA,QAAQ;GACV,CACF;GAEA,IAAI,YACF,MAAM,WAAW,QAAQ;GAG3B,IAAI;GACJ,IACE,SAAS,QAAQ,IAAI,cAAc,CAAC,EAAE,WAAW,kBAAkB,GAEnE,OAAO,MAAM,SAAS,KAAK;QACtB;IACL,OAAO,MAAM,SAAS,KAAK;IAC3B,OAAO,KAAK,MAAM,QAAQ,IAAI;GAChC;GAEA,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,iBAAiB;IACzB;IACA,SAAS,UAAU,KAAK,KAAK,KAAK,SAAS;IAC3C,SAAS,SAAS;IAClB,QAAQ,SAAS;IACjB;GACF,CAAC;GAEH,OAAO;EACT,SAAS,KAAK;GACZ,IAAI,eAAe,kBACjB,MAAM;GAER,IAAI,eAAe,cACjB,MAAM;GAER,MAAM,IAAI,iBAAiB;IACzB;IACA,OAAO;IACP;GACF,CAAC;EACH;CACF,EACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getRpcProviderMethods.d.ts","names":[],"sources":["../../../src/transports/getRpcProviderMethods.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getRpcProviderMethods.d.ts","names":[],"sources":["../../../src/transports/getRpcProviderMethods.ts"],"mappings":";;KAMK;iBAEW,sBAAsB,KAAK,YAAY"}
|
|
@@ -3,31 +3,42 @@ import { ErrorType } from "../errors/utils.js";
|
|
|
3
3
|
import { BtcRpcRequestFn, RpcSchema } from "../types/request.js";
|
|
4
4
|
import { CreateTransportErrorType, Transport, TransportConfig } from "../types/transport.js";
|
|
5
5
|
import { UrlRequiredErrorType } from "../errors/transport.js";
|
|
6
|
-
|
|
7
6
|
//#region src/transports/http.d.ts
|
|
8
7
|
type HttpTransportConfig<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false> = {
|
|
9
8
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
* Whether to enable Batch JSON-RPC.
|
|
10
|
+
* @link https://www.jsonrpc.org/specification#batch
|
|
11
|
+
*/
|
|
13
12
|
batch?: boolean | {
|
|
14
|
-
/** The maximum number of JSON-RPC requests to send in a batch. @default 1_000 */
|
|
13
|
+
/** The maximum number of JSON-RPC requests to send in a batch. @default 1_000 */
|
|
14
|
+
batchSize?: number | undefined;
|
|
15
|
+
/** The maximum number of milliseconds to wait before sending a batch. @default 0 */
|
|
15
16
|
wait?: number | undefined;
|
|
16
17
|
} | undefined;
|
|
17
18
|
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
fetchOptions?: HttpRpcClientOptions["fetchOptions"] | undefined;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
* Request configuration to pass to `fetch`.
|
|
20
|
+
* @link https://developer.mozilla.org/en-US/docs/Web/API/fetch
|
|
21
|
+
*/
|
|
22
|
+
fetchOptions?: HttpRpcClientOptions["fetchOptions"] | undefined;
|
|
23
|
+
/** A callback to handle the response from `fetch`. */
|
|
24
|
+
onFetchRequest?: HttpRpcClientOptions["onRequest"] | undefined;
|
|
25
|
+
/** A callback to handle the response from `fetch`. */
|
|
26
|
+
onFetchResponse?: HttpRpcClientOptions["onResponse"] | undefined;
|
|
27
|
+
/** The key of the HTTP transport. */
|
|
28
|
+
key?: TransportConfig["key"] | undefined;
|
|
29
|
+
/** Methods to include or exclude from executing RPC requests. */
|
|
30
|
+
methods?: TransportConfig["methods"] | undefined;
|
|
31
|
+
/** The name of the HTTP transport. */
|
|
32
|
+
name?: TransportConfig["name"] | undefined;
|
|
33
|
+
/** Whether to return JSON RPC errors as responses instead of throwing. */
|
|
34
|
+
raw?: raw | boolean | undefined;
|
|
35
|
+
/** The max number of times to retry. */
|
|
36
|
+
retryCount?: TransportConfig["retryCount"] | undefined;
|
|
37
|
+
/** The base delay (in ms) between retries. */
|
|
38
|
+
retryDelay?: TransportConfig["retryDelay"] | undefined;
|
|
39
|
+
/** Typed JSON-RPC schema for the transport. */
|
|
40
|
+
rpcSchema?: rpcSchema | RpcSchema | undefined;
|
|
41
|
+
/** The timeout (in ms) for the HTTP request. Default: 10_000 */
|
|
31
42
|
timeout?: TransportConfig["timeout"] | undefined;
|
|
32
43
|
};
|
|
33
44
|
type HttpTransport<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false> = Transport<"http", {
|
|
@@ -36,8 +47,8 @@ type HttpTransport<rpcSchema extends RpcSchema | undefined = undefined, raw exte
|
|
|
36
47
|
}, BtcRpcRequestFn<rpcSchema, raw>>;
|
|
37
48
|
type HttpTransportErrorType = CreateTransportErrorType | UrlRequiredErrorType | ErrorType;
|
|
38
49
|
/**
|
|
39
|
-
* @description Creates a HTTP transport that connects to a JSON-RPC API.
|
|
40
|
-
*/
|
|
50
|
+
* @description Creates a HTTP transport that connects to a JSON-RPC API.
|
|
51
|
+
*/
|
|
41
52
|
declare function http<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false>(url?: string | undefined, config?: HttpTransportConfig<rpcSchema, raw>): HttpTransport<rpcSchema, raw>;
|
|
42
53
|
//#endregion
|
|
43
54
|
export { HttpTransport, HttpTransportConfig, HttpTransportErrorType, http };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","names":[],"sources":["../../../src/transports/http.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","names":[],"sources":["../../../src/transports/http.ts"],"mappings":";;;;;;KAsBY,oBACV,kBAAkB,mCAClB;;;;;EAMA;;IAIM;;IAEA;;;;;;EAON,eAAe;;EAEf,iBAAiB;;EAEjB,kBAAkB;;EAElB,MAAM;;EAEN,UAAU;;EAEV,OAAO;;EAEP,MAAM;;EAEN,aAAa;;EAEb,aAAa;;EAEb,YAAY,YAAY;;EAExB,UAAU;;KAGA,cACV,kBAAkB,mCAClB,+BACE;EAGA,eAAe;EACf;GAEF,gBAAgB,WAAW;KAGjB,yBACR,2BACA,uBACA;;;;iBAKY,KACd,kBAAkB,mCAClB,6BAGA,0BACA,SAAQ,oBAAoB,WAAW,OACtC,cAAc,WAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBalance.d.ts","names":[],"sources":["../../../../src/transports/mempool/getBalance.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getBalance.d.ts","names":[],"sources":["../../../../src/transports/mempool/getBalance.ts"],"mappings":";;cAGa,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionFee.d.ts","names":[],"sources":["../../../../src/transports/mempool/getTransactionFee.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getTransactionFee.d.ts","names":[],"sources":["../../../../src/transports/mempool/getTransactionFee.ts"],"mappings":";;cAGa,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactions.d.ts","names":[],"sources":["../../../../src/transports/mempool/getTransactions.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getTransactions.d.ts","names":[],"sources":["../../../../src/transports/mempool/getTransactions.ts"],"mappings":";;cAQa,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactions.js","names":[],"sources":["../../../../src/transports/mempool/getTransactions.ts"],"sourcesContent":["import { urlWithParams } from '../../utils/url.js'\nimport type { RpcMethodHandler } from '../types.js'\nimport type {\n MempoolBalanceResponse,\n MempoolUTXOTransactionsResponse,\n} from './mempool.types.js'\nimport { mempoolTransactionTransformer } from './utils.js'\n\nexport const getTransactions: RpcMethodHandler<'getTransactions'> = async (\n client,\n { baseUrl },\n { address, limit = 50, offset = 0, afterTxId }\n) => {\n const apiUrlAddress = `${baseUrl}/address/${address}`\n const balanceResponse = (await client.request({\n url: apiUrlAddress,\n fetchOptions: { method: 'GET' },\n })) as unknown as MempoolBalanceResponse\n const totalTxns =\n balanceResponse.chain_stats.tx_count +\n balanceResponse.mempool_stats.tx_count\n\n const apiUrl = urlWithParams(`${baseUrl}/address/${address}/txs`, {\n after_txid: afterTxId,\n })\n\n const response = (await client.request({\n url: apiUrl,\n fetchOptions: { method: 'GET' },\n })) as unknown as MempoolUTXOTransactionsResponse\n\n const transactions = response.map(mempoolTransactionTransformer)\n\n const result = {\n transactions,\n total: totalTxns,\n itemsPerPage: limit,\n hasMore: offset + transactions.length < totalTxns,\n }\n\n return {\n result,\n }\n}\n"],"mappings":";;;AAQA,MAAa,kBAAuD,OAClE,QACA,EAAE,WACF,EAAE,SAAS,QAAQ,IAAI,SAAS,GAAG,gBAChC;CACH,MAAM,gBAAgB,GAAG,QAAQ,WAAW;CAC5C,MAAM,kBAAmB,MAAM,OAAO,QAAQ;EAC5C,KAAK;EACL,cAAc,EAAE,QAAQ,MAAM;CAChC,CAAC;CACD,MAAM,YACJ,gBAAgB,YAAY,WAC5B,gBAAgB,cAAc;CAEhC,MAAM,SAAS,cAAc,GAAG,QAAQ,WAAW,QAAQ,OAAO,EAChE,YAAY,UACd,CAAC;CAOD,MAAM,gBAAe,MALG,OAAO,QAAQ;EACrC,KAAK;EACL,cAAc,EAAE,QAAQ,MAAM;CAChC,CAAC,
|
|
1
|
+
{"version":3,"file":"getTransactions.js","names":[],"sources":["../../../../src/transports/mempool/getTransactions.ts"],"sourcesContent":["import { urlWithParams } from '../../utils/url.js'\nimport type { RpcMethodHandler } from '../types.js'\nimport type {\n MempoolBalanceResponse,\n MempoolUTXOTransactionsResponse,\n} from './mempool.types.js'\nimport { mempoolTransactionTransformer } from './utils.js'\n\nexport const getTransactions: RpcMethodHandler<'getTransactions'> = async (\n client,\n { baseUrl },\n { address, limit = 50, offset = 0, afterTxId }\n) => {\n const apiUrlAddress = `${baseUrl}/address/${address}`\n const balanceResponse = (await client.request({\n url: apiUrlAddress,\n fetchOptions: { method: 'GET' },\n })) as unknown as MempoolBalanceResponse\n const totalTxns =\n balanceResponse.chain_stats.tx_count +\n balanceResponse.mempool_stats.tx_count\n\n const apiUrl = urlWithParams(`${baseUrl}/address/${address}/txs`, {\n after_txid: afterTxId,\n })\n\n const response = (await client.request({\n url: apiUrl,\n fetchOptions: { method: 'GET' },\n })) as unknown as MempoolUTXOTransactionsResponse\n\n const transactions = response.map(mempoolTransactionTransformer)\n\n const result = {\n transactions,\n total: totalTxns,\n itemsPerPage: limit,\n hasMore: offset + transactions.length < totalTxns,\n }\n\n return {\n result,\n }\n}\n"],"mappings":";;;AAQA,MAAa,kBAAuD,OAClE,QACA,EAAE,WACF,EAAE,SAAS,QAAQ,IAAI,SAAS,GAAG,gBAChC;CACH,MAAM,gBAAgB,GAAG,QAAQ,WAAW;CAC5C,MAAM,kBAAmB,MAAM,OAAO,QAAQ;EAC5C,KAAK;EACL,cAAc,EAAE,QAAQ,MAAM;CAChC,CAAC;CACD,MAAM,YACJ,gBAAgB,YAAY,WAC5B,gBAAgB,cAAc;CAEhC,MAAM,SAAS,cAAc,GAAG,QAAQ,WAAW,QAAQ,OAAO,EAChE,YAAY,UACd,CAAC;CAOD,MAAM,gBAAe,MALG,OAAO,QAAQ;EACrC,KAAK;EACL,cAAc,EAAE,QAAQ,MAAM;CAChC,CAAC,EAAA,CAE6B,IAAI,6BAA6B;CAS/D,OAAO,EACL,QAAA;EAPA;EACA,OAAO;EACP,cAAc;EACd,SAAS,SAAS,aAAa,SAAS;CAInC,EACP;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mempool.d.ts","names":[],"sources":["../../../../src/transports/mempool/mempool.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"mempool.d.ts","names":[],"sources":["../../../../src/transports/mempool/mempool.ts"],"mappings":";;KAKK;EACH;IACE;cAES,UAAW,SAAS,kBAAgB"}
|