@bigmi/core 0.8.1 → 0.9.1
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 +22 -0
- package/README.md +2 -2
- package/dist/cjs/_virtual/_rolldown/runtime.js +1 -1
- package/dist/cjs/actions/getBalance.d.ts +5 -6
- package/dist/cjs/actions/getBlock.d.ts +3 -8
- package/dist/cjs/actions/getBlockCount.d.ts +2 -4
- package/dist/cjs/actions/getBlockStats.d.ts +3 -9
- package/dist/cjs/actions/getTransactionFee.d.ts +3 -7
- package/dist/cjs/actions/getTransactions.d.ts +3 -10
- package/dist/cjs/actions/getUTXOTransaction.d.ts +6 -9
- package/dist/cjs/actions/getUTXOs.d.ts +3 -8
- package/dist/cjs/actions/getXPubAddresses.d.ts +25 -26
- package/dist/cjs/actions/sendUTXOTransaction.d.ts +6 -9
- package/dist/cjs/actions/signPsbt.d.ts +1 -3
- package/dist/cjs/actions/waitForTransaction.d.ts +48 -55
- package/dist/cjs/actions/waitForTransaction.js.map +1 -1
- package/dist/cjs/actions/watchBlockNumber.d.ts +18 -21
- package/dist/cjs/actions/watchBlockNumber.js +3 -2
- package/dist/cjs/actions/watchBlockNumber.js.map +1 -1
- package/dist/cjs/chains/bitcoin.d.ts +1 -3
- package/dist/cjs/chains/bitcoin.js.map +1 -1
- package/dist/cjs/chains/defineChain.d.ts +1 -3
- package/dist/cjs/chains/signet.d.ts +1 -3
- package/dist/cjs/chains/signet.js.map +1 -1
- package/dist/cjs/clients/decorators/public.d.ts +2 -4
- package/dist/cjs/clients/decorators/wallet.d.ts +4 -6
- package/dist/cjs/errors/address.d.ts +3 -7
- package/dist/cjs/errors/base.d.ts +3 -4
- package/dist/cjs/errors/base.js.map +1 -1
- package/dist/cjs/errors/block.d.ts +3 -8
- package/dist/cjs/errors/provider.d.ts +1 -3
- package/dist/cjs/errors/request.d.ts +15 -39
- package/dist/cjs/errors/request.js.map +1 -1
- package/dist/cjs/errors/rpc.d.ts +28 -30
- package/dist/cjs/errors/transaction.d.ts +9 -21
- package/dist/cjs/errors/transport.d.ts +8 -17
- package/dist/cjs/errors/transport.js.map +1 -1
- package/dist/cjs/errors/utils.d.ts +3 -5
- package/dist/cjs/errors/utxo.d.ts +3 -9
- package/dist/cjs/factories/createClient.d.ts +55 -37
- package/dist/cjs/factories/createClient.js.map +1 -1
- package/dist/cjs/factories/createTransport.d.ts +3 -14
- package/dist/cjs/test/utils.d.ts +1 -2
- package/dist/cjs/transports/ankr/ankr.d.ts +1 -3
- package/dist/cjs/transports/ankr/ankr.types.d.ts +7 -8
- package/dist/cjs/transports/ankr/getBalance.d.ts +1 -3
- package/dist/cjs/transports/ankr/getTransactionFee.d.ts +1 -3
- package/dist/cjs/transports/ankr/getTransactions.d.ts +1 -3
- package/dist/cjs/transports/ankr/methods.d.ts +1 -3
- package/dist/cjs/transports/ankr/utils.d.ts +1 -3
- package/dist/cjs/transports/blockchair/blockchair.d.ts +1 -3
- package/dist/cjs/transports/blockchair/blockchair.types.d.ts +13 -14
- package/dist/cjs/transports/blockchair/getBalance.d.ts +1 -3
- package/dist/cjs/transports/blockchair/getTransactionFee.d.ts +1 -3
- package/dist/cjs/transports/blockchair/getTransactionFee.js.map +1 -1
- package/dist/cjs/transports/blockchair/getUTXOs.d.ts +1 -3
- package/dist/cjs/transports/blockchair/getUTXOs.js.map +1 -1
- package/dist/cjs/transports/blockchair/getXPubAddresses.d.ts +1 -3
- package/dist/cjs/transports/blockchair/getXPubAddresses.js.map +1 -1
- package/dist/cjs/transports/blockchair/methods.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/blockcypher.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/blockcypher.types.d.ts +8 -9
- package/dist/cjs/transports/blockcypher/getBalance.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/getTransactionFee.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/getUTXOs.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/getUTXOs.js.map +1 -1
- package/dist/cjs/transports/blockcypher/methods.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/utils.d.ts +1 -3
- package/dist/cjs/transports/blockcypher/utils.js.map +1 -1
- package/dist/cjs/transports/custom.d.ts +15 -12
- package/dist/cjs/transports/fallback.d.ts +38 -43
- package/dist/cjs/transports/fallback.js.map +1 -1
- package/dist/cjs/transports/getHttpRpcClient.d.ts +23 -16
- package/dist/cjs/transports/getHttpRpcClient.js.map +1 -1
- package/dist/cjs/transports/getRpcProviderMethods.d.ts +1 -3
- package/dist/cjs/transports/http.d.ts +35 -25
- package/dist/cjs/transports/mempool/getBalance.d.ts +1 -3
- package/dist/cjs/transports/mempool/getTransactionFee.d.ts +1 -3
- package/dist/cjs/transports/mempool/getTransactions.d.ts +1 -3
- package/dist/cjs/transports/mempool/getTransactions.js.map +1 -1
- package/dist/cjs/transports/mempool/mempool.d.ts +1 -3
- package/dist/cjs/transports/mempool/mempool.types.d.ts +7 -8
- package/dist/cjs/transports/mempool/methods.d.ts +1 -3
- package/dist/cjs/transports/mempool/utils.d.ts +1 -3
- package/dist/cjs/transports/types.d.ts +28 -27
- package/dist/cjs/transports/utxo.d.ts +1 -3
- package/dist/cjs/transports/utxo.js.map +1 -1
- package/dist/cjs/types/account.d.ts +1 -3
- package/dist/cjs/types/address.d.ts +4 -6
- package/dist/cjs/types/block.d.ts +18 -19
- package/dist/cjs/types/blockStats.d.ts +2 -3
- package/dist/cjs/types/chain.d.ts +26 -16
- package/dist/cjs/types/client.d.ts +43 -29
- package/dist/cjs/types/hash.d.ts +1 -2
- package/dist/cjs/types/request.d.ts +16 -13
- package/dist/cjs/types/rpc.d.ts +4 -5
- package/dist/cjs/types/transaction.d.ts +2 -3
- package/dist/cjs/types/transport.d.ts +18 -14
- package/dist/cjs/types/utils.d.ts +43 -44
- package/dist/cjs/types/xpub.d.ts +1 -3
- package/dist/cjs/utils/buildRequest.d.ts +3 -5
- package/dist/cjs/utils/buildRequest.js +2 -1
- package/dist/cjs/utils/buildRequest.js.map +1 -1
- package/dist/cjs/utils/cancelTransaction.d.ts +1 -3
- package/dist/cjs/utils/converter.d.ts +5 -6
- package/dist/cjs/utils/converter.js.map +1 -1
- package/dist/cjs/utils/createBatchScheduler.d.ts +2 -10
- package/dist/cjs/utils/createBatchScheduler.js.map +1 -1
- package/dist/cjs/utils/deepEqual.d.ts +1 -2
- package/dist/cjs/utils/deepEqual.js.map +1 -1
- package/dist/cjs/utils/getAction.d.ts +7 -9
- package/dist/cjs/utils/getAddressInfo.d.ts +2 -4
- package/dist/cjs/utils/getAddressInfo.js +2 -1
- package/dist/cjs/utils/getAddressInfo.js.map +1 -1
- package/dist/cjs/utils/idCache.d.ts +1 -2
- package/dist/cjs/utils/isAddress.d.ts +1 -3
- package/dist/cjs/utils/lru.d.ts +5 -6
- package/dist/cjs/utils/lru.js.map +1 -1
- package/dist/cjs/utils/modifyFee.d.ts +1 -3
- package/dist/cjs/utils/modifyFee.js.map +1 -1
- package/dist/cjs/utils/observe.d.ts +7 -9
- package/dist/cjs/utils/observe.js.map +1 -1
- package/dist/cjs/utils/parseAccount.d.ts +2 -4
- package/dist/cjs/utils/poll.d.ts +4 -11
- package/dist/cjs/utils/poll.js +2 -1
- package/dist/cjs/utils/poll.js.map +1 -1
- package/dist/cjs/utils/retryUntil.d.ts +18 -17
- package/dist/cjs/utils/retryUntil.js.map +1 -1
- package/dist/cjs/utils/sleep.d.ts +1 -2
- package/dist/cjs/utils/stringify.d.ts +2 -4
- package/dist/cjs/utils/uid.d.ts +1 -2
- package/dist/cjs/utils/uid.js.map +1 -1
- package/dist/cjs/utils/url.d.ts +1 -2
- package/dist/cjs/utils/url.js.map +1 -1
- package/dist/cjs/utils/wait.d.ts +1 -2
- package/dist/cjs/utils/withDedupe.d.ts +2 -7
- package/dist/cjs/utils/withDedupe.js.map +1 -1
- package/dist/cjs/utils/withResolvers.d.ts +2 -3
- package/dist/cjs/utils/withRetry.d.ts +4 -13
- package/dist/cjs/utils/withTimeout.d.ts +3 -11
- package/dist/cjs/utils/withTimeout.js.map +1 -1
- package/dist/cjs/version.d.ts +2 -3
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/vite-env.d.ts +1 -1
- package/dist/esm/actions/getBalance.d.ts +5 -6
- package/dist/esm/actions/getBalance.d.ts.map +1 -1
- package/dist/esm/actions/getBlock.d.ts +3 -8
- package/dist/esm/actions/getBlock.d.ts.map +1 -1
- package/dist/esm/actions/getBlockCount.d.ts +2 -4
- package/dist/esm/actions/getBlockCount.d.ts.map +1 -1
- package/dist/esm/actions/getBlockStats.d.ts +3 -9
- package/dist/esm/actions/getBlockStats.d.ts.map +1 -1
- package/dist/esm/actions/getTransactionFee.d.ts +3 -7
- package/dist/esm/actions/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/actions/getTransactions.d.ts +3 -10
- package/dist/esm/actions/getTransactions.d.ts.map +1 -1
- package/dist/esm/actions/getUTXOTransaction.d.ts +6 -9
- package/dist/esm/actions/getUTXOTransaction.d.ts.map +1 -1
- package/dist/esm/actions/getUTXOs.d.ts +3 -8
- package/dist/esm/actions/getUTXOs.d.ts.map +1 -1
- package/dist/esm/actions/getXPubAddresses.d.ts +25 -26
- package/dist/esm/actions/getXPubAddresses.d.ts.map +1 -1
- package/dist/esm/actions/sendUTXOTransaction.d.ts +6 -9
- package/dist/esm/actions/sendUTXOTransaction.d.ts.map +1 -1
- package/dist/esm/actions/signPsbt.d.ts +1 -3
- package/dist/esm/actions/signPsbt.d.ts.map +1 -1
- package/dist/esm/actions/waitForTransaction.d.ts +48 -55
- 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 +18 -21
- package/dist/esm/actions/watchBlockNumber.d.ts.map +1 -1
- package/dist/esm/actions/watchBlockNumber.js +3 -2
- package/dist/esm/actions/watchBlockNumber.js.map +1 -1
- package/dist/esm/chains/bitcoin.d.ts +1 -3
- package/dist/esm/chains/bitcoin.d.ts.map +1 -1
- package/dist/esm/chains/defineChain.d.ts +1 -3
- package/dist/esm/chains/defineChain.d.ts.map +1 -1
- package/dist/esm/chains/signet.d.ts +1 -3
- package/dist/esm/chains/signet.d.ts.map +1 -1
- package/dist/esm/clients/decorators/public.d.ts +2 -4
- package/dist/esm/clients/decorators/public.d.ts.map +1 -1
- package/dist/esm/clients/decorators/wallet.d.ts +4 -6
- package/dist/esm/clients/decorators/wallet.d.ts.map +1 -1
- package/dist/esm/errors/address.d.ts +3 -7
- package/dist/esm/errors/address.d.ts.map +1 -1
- package/dist/esm/errors/base.d.ts +3 -4
- 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 +3 -8
- package/dist/esm/errors/block.d.ts.map +1 -1
- package/dist/esm/errors/provider.d.ts +1 -3
- package/dist/esm/errors/provider.d.ts.map +1 -1
- package/dist/esm/errors/request.d.ts +15 -39
- 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 +28 -30
- package/dist/esm/errors/rpc.d.ts.map +1 -1
- package/dist/esm/errors/transaction.d.ts +9 -21
- package/dist/esm/errors/transaction.d.ts.map +1 -1
- package/dist/esm/errors/transport.d.ts +8 -17
- 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 +3 -5
- package/dist/esm/errors/utils.d.ts.map +1 -1
- package/dist/esm/errors/utxo.d.ts +3 -9
- package/dist/esm/errors/utxo.d.ts.map +1 -1
- package/dist/esm/factories/createClient.d.ts +55 -37
- package/dist/esm/factories/createClient.d.ts.map +1 -1
- package/dist/esm/factories/createClient.js.map +1 -1
- package/dist/esm/factories/createTransport.d.ts +3 -14
- package/dist/esm/factories/createTransport.d.ts.map +1 -1
- package/dist/esm/test/utils.d.ts +1 -2
- package/dist/esm/test/utils.d.ts.map +1 -1
- package/dist/esm/transports/ankr/ankr.d.ts +1 -3
- package/dist/esm/transports/ankr/ankr.d.ts.map +1 -1
- package/dist/esm/transports/ankr/ankr.types.d.ts +7 -8
- package/dist/esm/transports/ankr/ankr.types.d.ts.map +1 -1
- package/dist/esm/transports/ankr/getBalance.d.ts +1 -3
- package/dist/esm/transports/ankr/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/ankr/getTransactionFee.d.ts +1 -3
- package/dist/esm/transports/ankr/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/ankr/getTransactions.d.ts +1 -3
- package/dist/esm/transports/ankr/getTransactions.d.ts.map +1 -1
- package/dist/esm/transports/ankr/methods.d.ts +1 -3
- package/dist/esm/transports/ankr/methods.d.ts.map +1 -1
- package/dist/esm/transports/ankr/utils.d.ts +1 -3
- package/dist/esm/transports/ankr/utils.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/blockchair.d.ts +1 -3
- package/dist/esm/transports/blockchair/blockchair.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/blockchair.types.d.ts +13 -14
- package/dist/esm/transports/blockchair/blockchair.types.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getBalance.d.ts +1 -3
- package/dist/esm/transports/blockchair/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/blockchair/getTransactionFee.d.ts +1 -3
- 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 +1 -3
- 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 +1 -3
- 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 +1 -3
- package/dist/esm/transports/blockchair/methods.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/blockcypher.d.ts +1 -3
- package/dist/esm/transports/blockcypher/blockcypher.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/blockcypher.types.d.ts +8 -9
- package/dist/esm/transports/blockcypher/blockcypher.types.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getBalance.d.ts +1 -3
- package/dist/esm/transports/blockcypher/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getTransactionFee.d.ts +1 -3
- package/dist/esm/transports/blockcypher/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/getUTXOs.d.ts +1 -3
- 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 +1 -3
- package/dist/esm/transports/blockcypher/methods.d.ts.map +1 -1
- package/dist/esm/transports/blockcypher/utils.d.ts +1 -3
- 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 +15 -12
- package/dist/esm/transports/custom.d.ts.map +1 -1
- package/dist/esm/transports/fallback.d.ts +38 -43
- 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 +23 -16
- 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 +1 -3
- package/dist/esm/transports/getRpcProviderMethods.d.ts.map +1 -1
- package/dist/esm/transports/http.d.ts +35 -25
- package/dist/esm/transports/http.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getBalance.d.ts +1 -3
- package/dist/esm/transports/mempool/getBalance.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getTransactionFee.d.ts +1 -3
- package/dist/esm/transports/mempool/getTransactionFee.d.ts.map +1 -1
- package/dist/esm/transports/mempool/getTransactions.d.ts +1 -3
- 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 +1 -3
- package/dist/esm/transports/mempool/mempool.d.ts.map +1 -1
- package/dist/esm/transports/mempool/mempool.types.d.ts +7 -8
- package/dist/esm/transports/mempool/mempool.types.d.ts.map +1 -1
- package/dist/esm/transports/mempool/methods.d.ts +1 -3
- package/dist/esm/transports/mempool/methods.d.ts.map +1 -1
- package/dist/esm/transports/mempool/utils.d.ts +1 -3
- package/dist/esm/transports/mempool/utils.d.ts.map +1 -1
- package/dist/esm/transports/types.d.ts +28 -27
- package/dist/esm/transports/types.d.ts.map +1 -1
- package/dist/esm/transports/utxo.d.ts +1 -3
- 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 +1 -3
- package/dist/esm/types/account.d.ts.map +1 -1
- package/dist/esm/types/address.d.ts +4 -6
- package/dist/esm/types/address.d.ts.map +1 -1
- package/dist/esm/types/block.d.ts +18 -19
- package/dist/esm/types/block.d.ts.map +1 -1
- package/dist/esm/types/blockStats.d.ts +2 -3
- package/dist/esm/types/blockStats.d.ts.map +1 -1
- package/dist/esm/types/chain.d.ts +26 -16
- package/dist/esm/types/chain.d.ts.map +1 -1
- package/dist/esm/types/client.d.ts +43 -29
- package/dist/esm/types/client.d.ts.map +1 -1
- package/dist/esm/types/hash.d.ts +1 -2
- package/dist/esm/types/hash.d.ts.map +1 -1
- package/dist/esm/types/request.d.ts +16 -13
- package/dist/esm/types/request.d.ts.map +1 -1
- package/dist/esm/types/rpc.d.ts +4 -5
- package/dist/esm/types/rpc.d.ts.map +1 -1
- package/dist/esm/types/transaction.d.ts +2 -3
- package/dist/esm/types/transaction.d.ts.map +1 -1
- package/dist/esm/types/transport.d.ts +18 -14
- package/dist/esm/types/transport.d.ts.map +1 -1
- package/dist/esm/types/utils.d.ts +43 -44
- package/dist/esm/types/utils.d.ts.map +1 -1
- package/dist/esm/types/xpub.d.ts +1 -3
- package/dist/esm/types/xpub.d.ts.map +1 -1
- package/dist/esm/utils/buildRequest.d.ts +3 -5
- package/dist/esm/utils/buildRequest.d.ts.map +1 -1
- package/dist/esm/utils/buildRequest.js +2 -1
- package/dist/esm/utils/buildRequest.js.map +1 -1
- package/dist/esm/utils/cancelTransaction.d.ts +1 -3
- package/dist/esm/utils/cancelTransaction.d.ts.map +1 -1
- package/dist/esm/utils/converter.d.ts +5 -6
- 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 +2 -10
- 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 +1 -2
- 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 +7 -9
- package/dist/esm/utils/getAction.d.ts.map +1 -1
- package/dist/esm/utils/getAddressInfo.d.ts +2 -4
- package/dist/esm/utils/getAddressInfo.d.ts.map +1 -1
- package/dist/esm/utils/getAddressInfo.js +2 -1
- package/dist/esm/utils/getAddressInfo.js.map +1 -1
- package/dist/esm/utils/idCache.d.ts +1 -2
- package/dist/esm/utils/idCache.d.ts.map +1 -1
- package/dist/esm/utils/isAddress.d.ts +1 -3
- package/dist/esm/utils/isAddress.d.ts.map +1 -1
- package/dist/esm/utils/lru.d.ts +5 -6
- 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 +1 -3
- 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 +7 -9
- 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 +2 -4
- package/dist/esm/utils/parseAccount.d.ts.map +1 -1
- package/dist/esm/utils/poll.d.ts +4 -11
- package/dist/esm/utils/poll.d.ts.map +1 -1
- package/dist/esm/utils/poll.js +2 -1
- package/dist/esm/utils/poll.js.map +1 -1
- package/dist/esm/utils/retryUntil.d.ts +18 -17
- 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 +1 -2
- package/dist/esm/utils/sleep.d.ts.map +1 -1
- package/dist/esm/utils/stringify.d.ts +2 -4
- package/dist/esm/utils/stringify.d.ts.map +1 -1
- package/dist/esm/utils/uid.d.ts +1 -2
- 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 +1 -2
- 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 +1 -2
- package/dist/esm/utils/wait.d.ts.map +1 -1
- package/dist/esm/utils/withDedupe.d.ts +2 -7
- 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 +2 -3
- package/dist/esm/utils/withResolvers.d.ts.map +1 -1
- package/dist/esm/utils/withRetry.d.ts +4 -13
- package/dist/esm/utils/withRetry.d.ts.map +1 -1
- package/dist/esm/utils/withTimeout.d.ts +3 -11
- 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 +2 -3
- 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/dist/esm/vite-env.d.ts +1 -1
- package/package.json +3 -3
- package/src/factories/createClient.ts +1 -2
- package/src/types/client.ts +1 -2
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUTXOs.js","names":["urlWithParams","RpcRequestError","getRpcErrorCode","InsufficientUTXOBalanceError"],"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,SAASA,kBAAAA,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,IAAIC,uBAAAA,gBAAgB;IACxB,KAAK;IACL,MAAM;KACJ,QAAQ;KACR,QAAQ;MACN;MACA;KACF;IACF;IACA,OAAO;KACL,MAAMC,qCAAAA,gBAAgB,SAAS,KAAK;KACpC,SAAS,SAAS;IACpB;GACF,CAAC;GAGH,IAAI,YAAY,WAAW,SAAS,eAClC,MAAM,IAAIC,oBAAAA,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":["urlWithParams","RpcRequestError","getRpcErrorCode","InsufficientUTXOBalanceError"],"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,SAASA,kBAAAA,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,IAAIC,uBAAAA,gBAAgB;IACxB,KAAK;IACL,MAAM;KACJ,QAAQ;KACR,QAAQ;MACN;MACA;KACF;IACF;IACA,OAAO;KACL,MAAMC,qCAAAA,gBAAgB,SAAS,KAAK;KACpC,SAAS,SAAS;IACpB;GACF,CAAC;GAGH,IAAI,YAAY,WAAW,SAAS,eAClC,MAAM,IAAIC,oBAAAA,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,7 +1,5 @@
|
|
|
1
1
|
import { RpcMethods } from "../types.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/blockcypher/methods.d.ts
|
|
4
|
-
declare const blockcypherMethods: RpcMethods;
|
|
3
|
+
export declare const blockcypherMethods: RpcMethods;
|
|
5
4
|
//#endregion
|
|
6
|
-
export { blockcypherMethods };
|
|
7
5
|
//# sourceMappingURL=methods.d.ts.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { RpcErrorCode } from "../../errors/rpc.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/blockcypher/utils.d.ts
|
|
4
|
-
declare function getRpcErrorCode(error: string): RpcErrorCode;
|
|
3
|
+
export declare function getRpcErrorCode(error: string): RpcErrorCode;
|
|
5
4
|
//#endregion
|
|
6
|
-
export { getRpcErrorCode };
|
|
7
5
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -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,23 +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
|
-
type CustomTransportConfig = {
|
|
9
|
-
/** The key of the transport. */
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
export type CustomTransportConfig = {
|
|
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
|
-
type CustomTransport = Transport<"custom", {}, BitcoinProvider["request"]>;
|
|
16
|
-
type CustomTransportErrorType = CreateTransportErrorType | ErrorType;
|
|
19
|
+
export type CustomTransport = Transport<"custom", {}, BitcoinProvider["request"]>;
|
|
20
|
+
export type CustomTransportErrorType = CreateTransportErrorType | ErrorType;
|
|
17
21
|
/**
|
|
18
|
-
* @description Creates a custom transport given an EIP-1193 compliant `request` attribute.
|
|
19
|
-
*/
|
|
20
|
-
declare function custom<provider extends BitcoinProvider>(provider: provider, config?: CustomTransportConfig): CustomTransport;
|
|
22
|
+
* @description Creates a custom transport given an EIP-1193 compliant `request` attribute.
|
|
23
|
+
*/
|
|
24
|
+
export declare function custom<provider extends BitcoinProvider>(provider: provider, config?: CustomTransportConfig): CustomTransport;
|
|
21
25
|
//#endregion
|
|
22
|
-
export { CustomTransport, CustomTransportConfig, CustomTransportErrorType, custom };
|
|
23
26
|
//# sourceMappingURL=custom.d.ts.map
|
|
@@ -1,9 +1,8 @@
|
|
|
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
|
-
type OnResponseFn = (args: {
|
|
5
|
+
export type OnResponseFn = (args: {
|
|
7
6
|
method: string;
|
|
8
7
|
params: unknown[];
|
|
9
8
|
transport: ReturnType<Transport>;
|
|
@@ -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
|
-
type FallbackTransportConfig = {
|
|
58
|
-
/** The key of the Fallback transport. */
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
export type FallbackTransportConfig = {
|
|
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
|
-
type FallbackTransport<transports extends readonly Transport[] = readonly Transport[]> = Transport<"fallback", {
|
|
70
|
+
export 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
|
-
type FallbackTransportErrorType = CreateTransportErrorType | ErrorType;
|
|
70
|
-
declare function fallback<const transports extends readonly Transport[]>(transports_: transports, config?: FallbackTransportConfig): FallbackTransport<transports>;
|
|
71
|
-
declare function shouldThrow(error: Error): boolean;
|
|
74
|
+
export type FallbackTransportErrorType = CreateTransportErrorType | ErrorType;
|
|
75
|
+
export declare function fallback<const transports extends readonly Transport[]>(transports_: transports, config?: FallbackTransportConfig): FallbackTransport<transports>;
|
|
76
|
+
export 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
|
+
export 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;
|
|
@@ -90,5 +86,4 @@ declare function rankTransports({
|
|
|
90
86
|
weights?: RankOptions["weights"] | undefined;
|
|
91
87
|
}): void;
|
|
92
88
|
//#endregion
|
|
93
|
-
export { FallbackTransport, FallbackTransportConfig, FallbackTransportErrorType, OnResponseFn, fallback, rankTransports, shouldThrow };
|
|
94
89
|
//# sourceMappingURL=fallback.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback.js","names":["createTransport","TransportMethodNotSupportedError","AllTransportsFailedError","InsufficientUTXOBalanceError","wait"],"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":["createTransport","TransportMethodNotSupportedError","AllTransportsFailedError","InsufficientUTXOBalanceError","wait"],"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,34 +1,41 @@
|
|
|
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
|
-
type RpcRequest = {
|
|
4
|
+
export type RpcRequest = {
|
|
6
5
|
jsonrpc?: "2.0";
|
|
7
6
|
method: string;
|
|
8
7
|
params?: any;
|
|
9
8
|
id?: number;
|
|
10
9
|
};
|
|
11
|
-
type HttpRequestReturnType<body extends RpcRequest | RpcRequest[] = RpcRequest> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse;
|
|
12
|
-
type HttpRpcClientOptions = {
|
|
13
|
-
/** Request configuration to pass to `fetch`. */
|
|
10
|
+
export type HttpRequestReturnType<body extends RpcRequest | RpcRequest[] = RpcRequest> = body extends RpcRequest[] ? RpcResponse[] : RpcResponse;
|
|
11
|
+
export type HttpRpcClientOptions = {
|
|
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
|
-
type HttpRequestParameters<body extends RpcRequest | RpcRequest[] = RpcRequest> = {
|
|
21
|
-
url?: string;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
export type HttpRequestParameters<body extends RpcRequest | RpcRequest[] = RpcRequest> = {
|
|
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
|
-
type HttpRpcClient = {
|
|
36
|
+
export type HttpRpcClient = {
|
|
29
37
|
request<body extends RpcRequest | RpcRequest[]>(params: HttpRequestParameters<body>): Promise<HttpRequestReturnType<body>>;
|
|
30
38
|
};
|
|
31
|
-
declare function getHttpRpcClient(url: string, options?: HttpRpcClientOptions): HttpRpcClient;
|
|
39
|
+
export declare function getHttpRpcClient(url: string, options?: HttpRpcClientOptions): HttpRpcClient;
|
|
32
40
|
//#endregion
|
|
33
|
-
export { HttpRequestParameters, HttpRequestReturnType, HttpRpcClient, HttpRpcClientOptions, RpcRequest, getHttpRpcClient };
|
|
34
41
|
//# sourceMappingURL=getHttpRpcClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getHttpRpcClient.js","names":["withTimeout","idCache","stringify","TimeoutError","HttpRequestError"],"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,MAAMA,0BAAAA,YACrB,OAAO,EAAE,aAAa;IACpB,MAAM,eAAe,OACjB,MAAM,QAAQ,IAAI,IAChB,KAAK,KAAK,OAAO;KACf,SAAS;KACT,IAAI,EAAE,MAAMC,sBAAAA,QAAQ,KAAK;KACzB,GAAG;IACL,EAAE,IACF;KACE,SAAS;KACT,IAAI,KAAK,MAAMA,sBAAAA,QAAQ,KAAK;KAC5B,GAAG;IACL,IACF,KAAA;IACJ,MAAM,OAAoB;KACxB,GAAG;KACH,MAAM,eAAeC,wBAAAA,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,IAAIC,uBAAAA,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":["withTimeout","idCache","stringify","TimeoutError","HttpRequestError"],"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,MAAMA,0BAAAA,YACrB,OAAO,EAAE,aAAa;IACpB,MAAM,eAAe,OACjB,MAAM,QAAQ,IAAI,IAChB,KAAK,KAAK,OAAO;KACf,SAAS;KACT,IAAI,EAAE,MAAMC,sBAAAA,QAAQ,KAAK;KACzB,GAAG;IACL,EAAE,IACF;KACE,SAAS;KACT,IAAI,KAAK,MAAMA,sBAAAA,QAAQ,KAAK;KAC5B,GAAG;IACL,IACF,KAAA;IACJ,MAAM,OAAoB;KACxB,GAAG;KACH,MAAM,eAAeC,wBAAAA,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,IAAIC,uBAAAA,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,IAAIC,uBAAAA,iBAAiB;IACzB;IACA,SAASF,wBAAAA,UAAU,KAAK,KAAK,KAAK,SAAS;IAC3C,SAAS,SAAS;IAClB,QAAQ,SAAS;IACjB;GACF,CAAC;GAEH,OAAO;EACT,SAAS,KAAK;GACZ,IAAI,eAAeE,uBAAAA,kBACjB,MAAM;GAER,IAAI,eAAeD,uBAAAA,cACjB,MAAM;GAER,MAAM,IAAIC,uBAAAA,iBAAiB;IACzB;IACA,OAAO;IACP;GACF,CAAC;EACH;CACF,EACF;AACF"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { RpcMethods } from "./types.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/getRpcProviderMethods.d.ts
|
|
4
3
|
type providers = "blockchair" | "ankr" | "blockcypher" | "mempool" | string;
|
|
5
|
-
declare function getRpcProviderMethods(key: providers): RpcMethods | null;
|
|
4
|
+
export declare function getRpcProviderMethods(key: providers): RpcMethods | null;
|
|
6
5
|
//#endregion
|
|
7
|
-
export { getRpcProviderMethods };
|
|
8
6
|
//# sourceMappingURL=getRpcProviderMethods.d.ts.map
|
|
@@ -3,42 +3,52 @@ 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
|
-
type HttpTransportConfig<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false> = {
|
|
7
|
+
export 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
|
-
type HttpTransport<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false> = Transport<"http", {
|
|
44
|
+
export type HttpTransport<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false> = Transport<"http", {
|
|
34
45
|
fetchOptions?: HttpTransportConfig["fetchOptions"] | undefined;
|
|
35
46
|
url?: string | undefined;
|
|
36
47
|
}, BtcRpcRequestFn<rpcSchema, raw>>;
|
|
37
|
-
type HttpTransportErrorType = CreateTransportErrorType | UrlRequiredErrorType | ErrorType;
|
|
48
|
+
export type HttpTransportErrorType = CreateTransportErrorType | UrlRequiredErrorType | ErrorType;
|
|
38
49
|
/**
|
|
39
|
-
* @description Creates a HTTP transport that connects to a JSON-RPC API.
|
|
40
|
-
*/
|
|
41
|
-
declare function http<rpcSchema extends RpcSchema | undefined = undefined, raw extends boolean = false>(url?: string | undefined, config?: HttpTransportConfig<rpcSchema, raw>): HttpTransport<rpcSchema, raw>;
|
|
50
|
+
* @description Creates a HTTP transport that connects to a JSON-RPC API.
|
|
51
|
+
*/
|
|
52
|
+
export 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
|
-
export { HttpTransport, HttpTransportConfig, HttpTransportErrorType, http };
|
|
44
54
|
//# sourceMappingURL=http.d.ts.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { RpcMethodHandler } from "../types.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/mempool/getBalance.d.ts
|
|
4
|
-
declare const getBalance: RpcMethodHandler<"getBalance">;
|
|
3
|
+
export declare const getBalance: RpcMethodHandler<"getBalance">;
|
|
5
4
|
//#endregion
|
|
6
|
-
export { getBalance };
|
|
7
5
|
//# sourceMappingURL=getBalance.d.ts.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { RpcMethodHandler } from "../types.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/mempool/getTransactionFee.d.ts
|
|
4
|
-
declare const getTransactionFee: RpcMethodHandler<"getTransactionFee">;
|
|
3
|
+
export declare const getTransactionFee: RpcMethodHandler<"getTransactionFee">;
|
|
5
4
|
//#endregion
|
|
6
|
-
export { getTransactionFee };
|
|
7
5
|
//# sourceMappingURL=getTransactionFee.d.ts.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { RpcMethodHandler } from "../types.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/mempool/getTransactions.d.ts
|
|
4
|
-
declare const getTransactions: RpcMethodHandler<"getTransactions">;
|
|
3
|
+
export declare const getTransactions: RpcMethodHandler<"getTransactions">;
|
|
5
4
|
//#endregion
|
|
6
|
-
export { getTransactions };
|
|
7
5
|
//# sourceMappingURL=getTransactions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactions.js","names":["urlWithParams","mempoolTransactionTransformer"],"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,SAASA,kBAAAA,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":["urlWithParams","mempoolTransactionTransformer"],"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,SAASA,kBAAAA,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,IAAIC,iCAAAA,6BAA6B;CAS/D,OAAO,EACL,QAAA;EAPA;EACA,OAAO;EACP,cAAc;EACd,SAAS,SAAS,aAAa,SAAS;CAInC,EACP;AACF"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { HttpTransport, HttpTransportConfig } from "../http.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/mempool/mempool.d.ts
|
|
4
3
|
type MempoolConfig = {
|
|
5
4
|
baseUrl?: string;
|
|
6
5
|
} & HttpTransportConfig;
|
|
7
|
-
declare const mempool: (config?: MempoolConfig) => HttpTransport;
|
|
6
|
+
export declare const mempool: (config?: MempoolConfig) => HttpTransport;
|
|
8
7
|
//#endregion
|
|
9
|
-
export { mempool };
|
|
10
8
|
//# sourceMappingURL=mempool.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/transports/mempool/mempool.types.d.ts
|
|
2
|
-
type MempoolBalanceResponse = {
|
|
2
|
+
export type MempoolBalanceResponse = {
|
|
3
3
|
address: string;
|
|
4
4
|
chain_stats: {
|
|
5
5
|
funded_txo_count: number;
|
|
@@ -16,7 +16,7 @@ type MempoolBalanceResponse = {
|
|
|
16
16
|
tx_count: number;
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
type MempoolVin = {
|
|
19
|
+
export type MempoolVin = {
|
|
20
20
|
txid: string;
|
|
21
21
|
vout: number;
|
|
22
22
|
prevout: MempoolVout;
|
|
@@ -26,14 +26,14 @@ type MempoolVin = {
|
|
|
26
26
|
is_coinbase: boolean;
|
|
27
27
|
sequence: number;
|
|
28
28
|
};
|
|
29
|
-
type MempoolVout = {
|
|
29
|
+
export type MempoolVout = {
|
|
30
30
|
scriptpubkey: string;
|
|
31
31
|
scriptpubkey_asm: string;
|
|
32
32
|
scriptpubkey_type: string;
|
|
33
33
|
scriptpubkey_address: string;
|
|
34
34
|
value: number;
|
|
35
35
|
};
|
|
36
|
-
type MempoolUTXOResponse = {
|
|
36
|
+
export type MempoolUTXOResponse = {
|
|
37
37
|
txid: string;
|
|
38
38
|
vout: number;
|
|
39
39
|
status: {
|
|
@@ -44,7 +44,7 @@ type MempoolUTXOResponse = {
|
|
|
44
44
|
};
|
|
45
45
|
value: number;
|
|
46
46
|
}[];
|
|
47
|
-
type MempoolTransaction = {
|
|
47
|
+
export type MempoolTransaction = {
|
|
48
48
|
txid: string;
|
|
49
49
|
version: number;
|
|
50
50
|
locktime: number;
|
|
@@ -60,8 +60,7 @@ type MempoolTransaction = {
|
|
|
60
60
|
block_time: number;
|
|
61
61
|
};
|
|
62
62
|
};
|
|
63
|
-
type MempoolUTXOTransactionsResponse = Array<MempoolTransaction>;
|
|
64
|
-
type MempoolErrorResponse = string;
|
|
63
|
+
export type MempoolUTXOTransactionsResponse = Array<MempoolTransaction>;
|
|
64
|
+
export type MempoolErrorResponse = string;
|
|
65
65
|
//#endregion
|
|
66
|
-
export { MempoolBalanceResponse, MempoolErrorResponse, MempoolTransaction, MempoolUTXOResponse, MempoolUTXOTransactionsResponse, MempoolVin, MempoolVout };
|
|
67
66
|
//# sourceMappingURL=mempool.types.d.ts.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { RpcMethods } from "../types.js";
|
|
2
|
-
|
|
3
2
|
//#region src/transports/mempool/methods.d.ts
|
|
4
|
-
declare const mempoolMethods: RpcMethods;
|
|
3
|
+
export declare const mempoolMethods: RpcMethods;
|
|
5
4
|
//#endregion
|
|
6
|
-
export { mempoolMethods };
|
|
7
5
|
//# sourceMappingURL=methods.d.ts.map
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { UTXOTransaction } from "../../types/transaction.js";
|
|
2
2
|
import { MempoolTransaction } from "./mempool.types.js";
|
|
3
|
-
|
|
4
3
|
//#region src/transports/mempool/utils.d.ts
|
|
5
|
-
declare const mempoolTransactionTransformer: (txn: MempoolTransaction) => Partial<UTXOTransaction>;
|
|
4
|
+
export declare const mempoolTransactionTransformer: (txn: MempoolTransaction) => Partial<UTXOTransaction>;
|
|
6
5
|
//#endregion
|
|
7
|
-
export { mempoolTransactionTransformer };
|
|
8
6
|
//# sourceMappingURL=utils.d.ts.map
|