@atomiqlabs/sdk 7.0.12 → 8.0.7
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/README.md +45 -29
- package/dist/SmartChainAssets.d.ts +11 -3
- package/dist/SmartChainAssets.js +7 -3
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
- package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
- package/dist/bitcoin/LightningNetworkApi.js +2 -0
- package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
- package/dist/bitcoin/coinselect2/accumulative.js +52 -0
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
- package/dist/bitcoin/coinselect2/blackjack.js +38 -0
- package/dist/bitcoin/coinselect2/index.d.ts +19 -0
- package/dist/bitcoin/coinselect2/index.js +69 -0
- package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
- package/dist/bitcoin/coinselect2/utils.js +123 -0
- package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
- package/dist/bitcoin/mempool/MempoolApi.js +311 -0
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
- package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
- package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
- package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
- package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
- package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
- package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
- package/dist/enums/FeeType.d.ts +8 -0
- package/dist/enums/FeeType.js +12 -0
- package/dist/enums/SwapAmountType.d.ts +8 -0
- package/dist/enums/SwapAmountType.js +12 -0
- package/dist/enums/SwapDirection.d.ts +8 -0
- package/dist/enums/SwapDirection.js +12 -0
- package/dist/enums/SwapType.d.ts +14 -0
- package/dist/enums/SwapType.js +18 -0
- package/dist/errors/IntermediaryError.d.ts +9 -0
- package/dist/errors/IntermediaryError.js +26 -0
- package/dist/errors/PaymentAuthError.d.ts +11 -0
- package/dist/errors/PaymentAuthError.js +23 -0
- package/dist/errors/RequestError.d.ts +18 -0
- package/dist/errors/RequestError.js +46 -0
- package/dist/errors/UserError.d.ts +7 -0
- package/dist/errors/UserError.js +15 -0
- package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
- package/dist/events/UnifiedSwapEventListener.js +130 -0
- package/dist/http/HttpUtils.d.ts +27 -0
- package/dist/http/HttpUtils.js +91 -0
- package/dist/http/paramcoders/IParamReader.d.ts +8 -0
- package/dist/http/paramcoders/IParamReader.js +2 -0
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
- package/dist/http/paramcoders/ParamDecoder.js +132 -0
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
- package/dist/http/paramcoders/ParamEncoder.js +31 -0
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
- package/dist/http/paramcoders/SchemaVerifier.js +145 -0
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
- package/dist/index.d.ts +82 -4
- package/dist/index.js +128 -4
- package/dist/intermediaries/Intermediary.d.ts +111 -0
- package/dist/intermediaries/Intermediary.js +115 -0
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
- package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
- package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
- package/dist/lnurl/LNURL.d.ts +102 -0
- package/dist/lnurl/LNURL.js +321 -0
- package/dist/prices/RedundantSwapPrice.d.ts +89 -0
- package/dist/prices/RedundantSwapPrice.js +202 -0
- package/dist/prices/SingleSwapPrice.d.ts +31 -0
- package/dist/prices/SingleSwapPrice.js +41 -0
- package/dist/prices/SwapPriceWithChain.d.ts +70 -0
- package/dist/prices/SwapPriceWithChain.js +91 -0
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
- package/dist/prices/abstract/IPriceProvider.js +74 -0
- package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
- package/dist/prices/abstract/ISwapPrice.js +219 -0
- package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
- package/dist/prices/providers/BinancePriceProvider.js +23 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
- package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
- package/dist/prices/providers/CustomPriceProvider.js +24 -0
- package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
- package/dist/prices/providers/KrakenPriceProvider.js +36 -0
- package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
- package/dist/prices/providers/OKXPriceProvider.js +23 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
- package/dist/storage/IUnifiedStorage.d.ts +73 -0
- package/dist/storage/IUnifiedStorage.js +2 -0
- package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
- package/dist/storage/UnifiedSwapStorage.js +83 -0
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
- package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
- package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
- package/dist/swapper/Swapper.d.ts +533 -0
- package/dist/swapper/Swapper.js +1566 -0
- package/dist/swapper/SwapperFactory.d.ts +87 -0
- package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
- package/dist/swapper/SwapperUtils.d.ts +153 -0
- package/dist/swapper/SwapperUtils.js +420 -0
- package/dist/swapper/SwapperWithChain.d.ts +214 -0
- package/dist/swapper/SwapperWithChain.js +315 -0
- package/dist/swapper/SwapperWithSigner.d.ts +178 -0
- package/dist/swapper/SwapperWithSigner.js +172 -0
- package/dist/swaps/IAddressSwap.d.ts +13 -0
- package/dist/swaps/IAddressSwap.js +13 -0
- package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
- package/dist/swaps/IBTCWalletSwap.js +17 -0
- package/dist/swaps/IClaimableSwap.d.ts +17 -0
- package/dist/swaps/IClaimableSwap.js +14 -0
- package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
- package/dist/swaps/IClaimableSwapWrapper.js +2 -0
- package/dist/swaps/IRefundableSwap.d.ts +17 -0
- package/dist/swaps/IRefundableSwap.js +13 -0
- package/dist/swaps/ISwap.d.ts +207 -0
- package/dist/swaps/ISwap.js +264 -0
- package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
- package/dist/swaps/ISwapWithGasDrop.js +11 -0
- package/dist/swaps/ISwapWrapper.d.ts +153 -0
- package/dist/swaps/ISwapWrapper.js +227 -0
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
- package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
- package/dist/types/AmountData.d.ts +9 -0
- package/dist/types/AmountData.js +2 -0
- package/dist/types/CustomPriceFunction.d.ts +5 -0
- package/dist/types/CustomPriceFunction.js +2 -0
- package/dist/types/PriceInfoType.d.ts +28 -0
- package/dist/types/PriceInfoType.js +57 -0
- package/dist/types/SwapExecutionAction.d.ts +7 -0
- package/dist/types/SwapExecutionAction.js +2 -0
- package/dist/types/SwapWithSigner.d.ts +14 -0
- package/dist/types/SwapWithSigner.js +40 -0
- package/dist/types/Token.d.ts +53 -0
- package/dist/types/Token.js +58 -0
- package/dist/types/TokenAmount.d.ts +57 -0
- package/dist/types/TokenAmount.js +47 -0
- package/dist/types/fees/Fee.d.ts +49 -0
- package/dist/types/fees/Fee.js +2 -0
- package/dist/types/fees/FeeBreakdown.d.ts +10 -0
- package/dist/types/fees/FeeBreakdown.js +2 -0
- package/dist/types/fees/PercentagePPM.d.ts +15 -0
- package/dist/types/fees/PercentagePPM.js +17 -0
- package/dist/types/lnurl/LNURLPay.d.ts +54 -0
- package/dist/types/lnurl/LNURLPay.js +28 -0
- package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
- package/dist/types/lnurl/LNURLWithdraw.js +24 -0
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
- package/dist/utils/BitcoinUtils.d.ts +13 -0
- package/dist/utils/BitcoinUtils.js +98 -0
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
- package/dist/utils/BitcoinWalletUtils.js +14 -0
- package/dist/utils/Logger.d.ts +7 -0
- package/dist/utils/Logger.js +12 -0
- package/dist/utils/RetryUtils.d.ts +21 -0
- package/dist/utils/RetryUtils.js +66 -0
- package/dist/utils/SwapUtils.d.ts +31 -0
- package/dist/utils/SwapUtils.js +18 -0
- package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
- package/dist/utils/TimeoutUtils.js +55 -0
- package/dist/utils/TokenUtils.d.ts +11 -0
- package/dist/utils/TokenUtils.js +29 -0
- package/dist/utils/TypeUtils.d.ts +7 -0
- package/dist/utils/TypeUtils.js +2 -0
- package/dist/utils/Utils.d.ts +57 -0
- package/dist/utils/Utils.js +178 -0
- package/package.json +14 -6
- package/src/SmartChainAssets.ts +11 -3
- package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
- package/src/bitcoin/LightningNetworkApi.ts +16 -0
- package/src/bitcoin/coinselect2/accumulative.ts +68 -0
- package/src/bitcoin/coinselect2/blackjack.ts +49 -0
- package/src/bitcoin/coinselect2/index.ts +92 -0
- package/src/bitcoin/coinselect2/utils.ts +189 -0
- package/src/bitcoin/mempool/MempoolApi.ts +554 -0
- package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
- package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
- package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
- package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
- package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
- package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
- package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
- package/src/enums/FeeType.ts +9 -0
- package/src/enums/SwapAmountType.ts +9 -0
- package/src/enums/SwapDirection.ts +9 -0
- package/src/enums/SwapType.ts +15 -0
- package/src/errors/IntermediaryError.ts +24 -0
- package/src/errors/PaymentAuthError.ts +26 -0
- package/src/errors/RequestError.ts +51 -0
- package/src/errors/UserError.ts +14 -0
- package/src/events/UnifiedSwapEventListener.ts +171 -0
- package/src/http/HttpUtils.ts +92 -0
- package/src/http/paramcoders/IParamReader.ts +10 -0
- package/src/http/paramcoders/ParamDecoder.ts +142 -0
- package/src/http/paramcoders/ParamEncoder.ts +37 -0
- package/src/http/paramcoders/SchemaVerifier.ts +153 -0
- package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
- package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
- package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
- package/src/index.ts +102 -4
- package/src/intermediaries/Intermediary.ts +204 -0
- package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
- package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
- package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
- package/src/lnurl/LNURL.ts +403 -0
- package/src/prices/RedundantSwapPrice.ts +245 -0
- package/src/prices/SingleSwapPrice.ts +47 -0
- package/src/prices/SwapPriceWithChain.ts +157 -0
- package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
- package/src/prices/abstract/IPriceProvider.ts +128 -0
- package/src/prices/abstract/ISwapPrice.ts +328 -0
- package/src/prices/providers/BinancePriceProvider.ts +41 -0
- package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
- package/src/prices/providers/CustomPriceProvider.ts +29 -0
- package/src/prices/providers/KrakenPriceProvider.ts +74 -0
- package/src/prices/providers/OKXPriceProvider.ts +53 -0
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
- package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
- package/src/storage/IUnifiedStorage.ts +83 -0
- package/src/storage/UnifiedSwapStorage.ts +104 -0
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
- package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
- package/src/swapper/Swapper.ts +2107 -0
- package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
- package/src/swapper/SwapperUtils.ts +510 -0
- package/src/swapper/SwapperWithChain.ts +464 -0
- package/src/swapper/SwapperWithSigner.ts +300 -0
- package/src/swaps/IAddressSwap.ts +20 -0
- package/src/swaps/IBTCWalletSwap.ts +77 -0
- package/src/swaps/IClaimableSwap.ts +30 -0
- package/src/swaps/IClaimableSwapWrapper.ts +9 -0
- package/src/swaps/IRefundableSwap.ts +29 -0
- package/src/swaps/ISwap.ts +490 -0
- package/src/swaps/ISwapWithGasDrop.ts +19 -0
- package/src/swaps/ISwapWrapper.ts +344 -0
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
- package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
- package/src/types/AmountData.ts +9 -0
- package/src/types/CustomPriceFunction.ts +5 -0
- package/src/types/PriceInfoType.ts +67 -0
- package/src/types/SwapExecutionAction.ts +8 -0
- package/src/types/SwapWithSigner.ts +57 -0
- package/src/types/Token.ts +90 -0
- package/src/types/TokenAmount.ts +110 -0
- package/src/types/fees/Fee.ts +55 -0
- package/src/types/fees/FeeBreakdown.ts +11 -0
- package/src/types/fees/PercentagePPM.ts +24 -0
- package/src/types/lnurl/LNURLPay.ts +72 -0
- package/src/types/lnurl/LNURLWithdraw.ts +55 -0
- package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
- package/src/utils/BitcoinUtils.ts +86 -0
- package/src/utils/BitcoinWalletUtils.ts +16 -0
- package/src/utils/Logger.ts +15 -0
- package/src/utils/RetryUtils.ts +71 -0
- package/src/utils/SwapUtils.ts +38 -0
- package/src/utils/TimeoutUtils.ts +50 -0
- package/src/utils/TokenUtils.ts +25 -0
- package/src/utils/TypeUtils.ts +9 -0
- package/src/utils/Utils.ts +182 -0
- package/dist/SwapperFactory.d.ts +0 -52
- package/dist/Utils.js +0 -37
- package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
- package/dist/fs-storage/FileSystemStorageManager.js +0 -60
- package/dist/fs-storage/index.d.ts +0 -1
- package/dist/fs-storage/index.js +0 -17
- package/src/SmartChainAssets.js +0 -75
- package/src/SwapperFactory.js +0 -120
- package/src/Utils.js +0 -37
- package/src/Utils.ts +0 -31
- package/src/fs-storage/FileSystemStorageManager.ts +0 -71
- package/src/fs-storage/index.ts +0 -1
- package/src/index.js +0 -21
- package/src/storage/LocalStorageManager.js +0 -72
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {timeoutSignal} from "./TimeoutUtils";
|
|
2
|
+
|
|
3
|
+
const headerUrls = ["https://api.atomiq.exchange/"];
|
|
4
|
+
|
|
5
|
+
type TimeReturnType = {delta: number, timestamp: number};
|
|
6
|
+
|
|
7
|
+
async function getHeaderTimestamp(url: string): Promise<TimeReturnType> {
|
|
8
|
+
const timeStart = performance.now();
|
|
9
|
+
const resp = await fetch(url, {method: "HEAD", signal: timeoutSignal(3000)});
|
|
10
|
+
const timeDelta = performance.now() - timeStart;
|
|
11
|
+
const dateHeaderValue = resp.headers.get("Date");
|
|
12
|
+
if(dateHeaderValue==null) throw new Error("Date header not returned!");
|
|
13
|
+
return {delta: timeDelta, timestamp: new Date(dateHeaderValue).getTime()};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function getBinanceTimestamp(): Promise<TimeReturnType> {
|
|
17
|
+
const timeStart = performance.now();
|
|
18
|
+
const resp = await fetch("https://api.binance.com/api/v3/time", {signal: timeoutSignal(3000)});
|
|
19
|
+
const timeDelta = performance.now() - timeStart;
|
|
20
|
+
const obj: {serverTime: number} = await resp.json();
|
|
21
|
+
if(obj==null || obj.serverTime==null) throw new Error("Timestamp not returned!");
|
|
22
|
+
return {delta: timeDelta, timestamp: Math.floor(obj.serverTime)};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function getOKXTimestamp(): Promise<TimeReturnType> {
|
|
26
|
+
const timeStart = performance.now();
|
|
27
|
+
const resp = await fetch("https://www.okx.com/api/v5/public/time", {signal: timeoutSignal(3000)});
|
|
28
|
+
const timeDelta = performance.now() - timeStart;
|
|
29
|
+
const obj: {code: number, msg: string, data: [{ts: number}]} = await resp.json();
|
|
30
|
+
if(obj==null || obj.data==null || obj.data[0]==null || obj.data[0].ts==null) throw new Error("Timestamp not returned!");
|
|
31
|
+
return {delta: timeDelta, timestamp: Math.floor(obj.data[0].ts)};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function getAisenseApiTimestamp(): Promise<TimeReturnType> {
|
|
35
|
+
const timeStart = performance.now();
|
|
36
|
+
const resp = await fetch("https://aisenseapi.com/services/v1/timestamp", {signal: timeoutSignal(3000)});
|
|
37
|
+
const timeDelta = performance.now() - timeStart;
|
|
38
|
+
const obj = await resp.json();
|
|
39
|
+
if(obj==null || obj.timestamp==null) throw new Error("Timestamp not returned!");
|
|
40
|
+
return {delta: timeDelta, timestamp: Math.floor(obj.timestamp * 1000)};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function correctClock() {
|
|
44
|
+
const dateNow: () => number = (Date as any)._now ?? Date.now;
|
|
45
|
+
const dateStart = performance.now();
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
let result: TimeReturnType = await Promise.any([
|
|
49
|
+
...headerUrls.map(url => getHeaderTimestamp(url)),
|
|
50
|
+
getAisenseApiTimestamp(),
|
|
51
|
+
getBinanceTimestamp(),
|
|
52
|
+
getOKXTimestamp()
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
const desiredTime = result.timestamp - (result.delta / 2);
|
|
56
|
+
if(Math.abs(Date.now() - desiredTime) < 2000) {
|
|
57
|
+
console.log("AutomaticClockDriftCorrection: correctClock(): Time drift too small, not adjusting!");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const timeDrift = dateStart - desiredTime;
|
|
62
|
+
console.log(`AutomaticClockDriftCorrection: correctClock(): Time correction perf.now: ${dateStart}, server: ${desiredTime}, time diff: ${timeDrift}`);
|
|
63
|
+
(Date as any)._now = dateNow;
|
|
64
|
+
(Date as any).now = () => {
|
|
65
|
+
return Math.floor(performance.now() - timeDrift);
|
|
66
|
+
};
|
|
67
|
+
} catch (e: any) {
|
|
68
|
+
if(e instanceof AggregateError) e.message = "Cannot sync time! All servers responded negatively!";
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import {BTC_NETWORK, isBytes, PubT, validatePubkey} from "@scure/btc-signer/utils";
|
|
2
|
+
import {Buffer} from "buffer";
|
|
3
|
+
import {Address, OutScript, Transaction} from "@scure/btc-signer";
|
|
4
|
+
import {CoinselectAddressTypes} from "../bitcoin/coinselect2";
|
|
5
|
+
|
|
6
|
+
export function toOutputScript(network: BTC_NETWORK, address: string): Buffer {
|
|
7
|
+
const outputScript = Address(network).decode(address);
|
|
8
|
+
switch(outputScript.type) {
|
|
9
|
+
case "pkh":
|
|
10
|
+
case "sh":
|
|
11
|
+
case "wpkh":
|
|
12
|
+
case "wsh":
|
|
13
|
+
return Buffer.from(OutScript.encode({
|
|
14
|
+
type: outputScript.type,
|
|
15
|
+
hash: outputScript.hash
|
|
16
|
+
}));
|
|
17
|
+
case "tr":
|
|
18
|
+
try {
|
|
19
|
+
return Buffer.from(OutScript.encode({
|
|
20
|
+
type: "tr",
|
|
21
|
+
pubkey: outputScript.pubkey
|
|
22
|
+
}));
|
|
23
|
+
} catch (e: any) {
|
|
24
|
+
let msg = "";
|
|
25
|
+
if(e.name!=null) msg += ": "+e.name;
|
|
26
|
+
if(e.message!=null) msg += ": "+e.message;
|
|
27
|
+
if(typeof(e)==="string") msg += ": "+e;
|
|
28
|
+
msg += ", isBytes: "+isBytes(outputScript.pubkey);
|
|
29
|
+
try {
|
|
30
|
+
validatePubkey(outputScript.pubkey, PubT.schnorr)
|
|
31
|
+
msg += ", validatePubkey: success";
|
|
32
|
+
} catch (e: any) {
|
|
33
|
+
msg += ", validatePubkeyError: ";
|
|
34
|
+
if(e.name!=null) msg += ": "+e.name;
|
|
35
|
+
if(e.message!=null) msg += ": "+e.message;
|
|
36
|
+
if(typeof(e)==="string") msg += ": "+e;
|
|
37
|
+
}
|
|
38
|
+
throw new Error(msg);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Unrecognized output script type: ${outputScript.type}`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function toCoinselectAddressType(outputScript: Uint8Array): CoinselectAddressTypes {
|
|
45
|
+
const data = OutScript.decode(outputScript);
|
|
46
|
+
switch(data.type) {
|
|
47
|
+
case "pkh":
|
|
48
|
+
return "p2pkh";
|
|
49
|
+
case "sh":
|
|
50
|
+
return "p2sh-p2wpkh";
|
|
51
|
+
case "wpkh":
|
|
52
|
+
return "p2wpkh"
|
|
53
|
+
case "wsh":
|
|
54
|
+
return "p2wsh"
|
|
55
|
+
case "tr":
|
|
56
|
+
return "p2tr"
|
|
57
|
+
}
|
|
58
|
+
throw new Error("Unrecognized address type!");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* General parsers for PSBTs, can parse hex or base64 encoded PSBTs
|
|
63
|
+
* @param _psbt
|
|
64
|
+
*/
|
|
65
|
+
export function parsePsbtTransaction(_psbt: Transaction | string): Transaction {
|
|
66
|
+
if (typeof (_psbt) === "string") {
|
|
67
|
+
let rawPsbt: Buffer;
|
|
68
|
+
if (/^(?:[0-9a-fA-F]{2})+$/.test(_psbt)) {
|
|
69
|
+
//Hex
|
|
70
|
+
rawPsbt = Buffer.from(_psbt, "hex");
|
|
71
|
+
} else if (/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(_psbt)) {
|
|
72
|
+
//Base64
|
|
73
|
+
rawPsbt = Buffer.from(_psbt, "base64");
|
|
74
|
+
} else {
|
|
75
|
+
throw new Error("Provided psbt string not base64 nor hex encoded!");
|
|
76
|
+
}
|
|
77
|
+
return Transaction.fromPSBT(rawPsbt, {
|
|
78
|
+
allowUnknownOutputs: true,
|
|
79
|
+
allowUnknownInputs: true,
|
|
80
|
+
allowLegacyWitnessUtxo: true,
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
return _psbt;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {IBitcoinWallet, isIBitcoinWallet} from "../bitcoin/wallet/IBitcoinWallet";
|
|
2
|
+
import {BitcoinRpcWithAddressIndex} from "../bitcoin/BitcoinRpcWithAddressIndex";
|
|
3
|
+
import {BTC_NETWORK} from "@scure/btc-signer/utils";
|
|
4
|
+
import {SingleAddressBitcoinWallet} from "../bitcoin/wallet/SingleAddressBitcoinWallet";
|
|
5
|
+
|
|
6
|
+
export function toBitcoinWallet(
|
|
7
|
+
_bitcoinWallet: IBitcoinWallet | { address: string, publicKey: string },
|
|
8
|
+
btcRpc: BitcoinRpcWithAddressIndex<any>,
|
|
9
|
+
bitcoinNetwork: BTC_NETWORK
|
|
10
|
+
): IBitcoinWallet {
|
|
11
|
+
if (isIBitcoinWallet(_bitcoinWallet)) {
|
|
12
|
+
return _bitcoinWallet;
|
|
13
|
+
} else {
|
|
14
|
+
return new SingleAddressBitcoinWallet(btcRpc, bitcoinNetwork, _bitcoinWallet);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type LoggerType = {
|
|
2
|
+
debug: (msg: string, ...args: any[]) => void,
|
|
3
|
+
info: (msg: string, ...args: any[]) => void,
|
|
4
|
+
warn: (msg: string, ...args: any[]) => void,
|
|
5
|
+
error: (msg: string, ...args: any[]) => void
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export function getLogger(prefix: string): LoggerType {
|
|
9
|
+
return {
|
|
10
|
+
debug: (msg, ...args) => (global as any).atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
11
|
+
info: (msg, ...args) => (global as any).atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
|
|
12
|
+
warn: (msg, ...args) => ((global as any).atomiqLogLevel == null || (global as any).atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
|
|
13
|
+
error: (msg, ...args) => ((global as any).atomiqLogLevel == null || (global as any).atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {timeoutPromise} from "./TimeoutUtils";
|
|
2
|
+
import {getLogger} from "./Logger";
|
|
3
|
+
|
|
4
|
+
const logger = getLogger("RetryUtils: ");
|
|
5
|
+
|
|
6
|
+
type Constructor<T = any> = new (...args: any[]) => T;
|
|
7
|
+
|
|
8
|
+
function isConstructor(fn: any): fn is Constructor {
|
|
9
|
+
return (
|
|
10
|
+
typeof fn === 'function' &&
|
|
11
|
+
fn.prototype != null &&
|
|
12
|
+
fn.prototype.constructor === fn
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function isConstructorArray(fnArr: any): fnArr is Constructor[] {
|
|
17
|
+
return Array.isArray(fnArr) && fnArr.every(isConstructor);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Checks whether the passed error is allowed to pass through
|
|
22
|
+
*
|
|
23
|
+
* @param e Error in question
|
|
24
|
+
* @param errorAllowed Allowed errors as defined as a callback function, specific error type, or an array of error types
|
|
25
|
+
*/
|
|
26
|
+
function checkError(e: any, errorAllowed: ((e: any) => boolean) | Constructor<Error> | Constructor<Error>[]) {
|
|
27
|
+
if (isConstructorArray(errorAllowed)) return errorAllowed.find(error => e instanceof error) != null;
|
|
28
|
+
if (isConstructor(errorAllowed)) return e instanceof errorAllowed;
|
|
29
|
+
return errorAllowed(e);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Runs the passed function multiple times if it fails
|
|
34
|
+
*
|
|
35
|
+
* @param func A callback for executing the action
|
|
36
|
+
* @param func.retryCount Count of the current retry, starting from 0 for original request and increasing
|
|
37
|
+
* @param retryPolicy Retry policy
|
|
38
|
+
* @param retryPolicy.maxRetries How many retries to attempt in total
|
|
39
|
+
* @param retryPolicy.delay How long should the delay be
|
|
40
|
+
* @param retryPolicy.exponential Whether to use exponentially increasing delays
|
|
41
|
+
* @param errorAllowed A callback for determining whether a given error is allowed, and we should therefore not retry
|
|
42
|
+
* @param abortSignal
|
|
43
|
+
* @returns Result of the action executing callback
|
|
44
|
+
* @category Utilities
|
|
45
|
+
*/
|
|
46
|
+
export async function tryWithRetries<T>(func: (retryCount: number) => Promise<T>, retryPolicy?: {
|
|
47
|
+
maxRetries?: number, delay?: number, exponential?: boolean
|
|
48
|
+
}, errorAllowed?: ((e: any) => boolean) | Constructor<Error> | Constructor<Error>[], abortSignal?: AbortSignal): Promise<T> {
|
|
49
|
+
retryPolicy = retryPolicy || {};
|
|
50
|
+
retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
|
|
51
|
+
retryPolicy.delay = retryPolicy.delay || 500;
|
|
52
|
+
retryPolicy.exponential = retryPolicy.exponential == null ? true : retryPolicy.exponential;
|
|
53
|
+
|
|
54
|
+
let err = null;
|
|
55
|
+
|
|
56
|
+
for (let i = 0; i < retryPolicy.maxRetries; i++) {
|
|
57
|
+
try {
|
|
58
|
+
return await func(i);
|
|
59
|
+
} catch (e) {
|
|
60
|
+
if (errorAllowed != null && checkError(e, errorAllowed)) throw e;
|
|
61
|
+
err = e;
|
|
62
|
+
logger.warn("tryWithRetries(): Error on try number: " + i, e);
|
|
63
|
+
}
|
|
64
|
+
if (abortSignal != null && abortSignal.aborted) throw (abortSignal.reason || new Error("Aborted"));
|
|
65
|
+
if (i !== retryPolicy.maxRetries - 1) {
|
|
66
|
+
await timeoutPromise(retryPolicy.exponential ? retryPolicy.delay * Math.pow(2, i) : retryPolicy.delay, abortSignal);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {ChainType} from "@atomiqlabs/base";
|
|
2
|
+
import {SwapType} from "../enums/SwapType";
|
|
3
|
+
import {SupportsSwapType} from "../swapper/Swapper";
|
|
4
|
+
import {SpvFromBTCSwap} from "../swaps/spv_swaps/SpvFromBTCSwap";
|
|
5
|
+
import {FromBTCSwap} from "../swaps/escrow_swaps/frombtc/onchain/FromBTCSwap";
|
|
6
|
+
import {FromBTCLNSwap} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
|
|
7
|
+
import {ToBTCSwap} from "../swaps/escrow_swaps/tobtc/onchain/ToBTCSwap";
|
|
8
|
+
import {FromBTCLNAutoSwap} from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap";
|
|
9
|
+
import {ToBTCLNSwap} from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap";
|
|
10
|
+
import {OnchainForGasSwap} from "../swaps/trusted/onchain/OnchainForGasSwap";
|
|
11
|
+
import {LnForGasSwap} from "../swaps/trusted/ln/LnForGasSwap";
|
|
12
|
+
import {ISwap} from "../swaps/ISwap";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Type mapping from SwapType enum to specific swap class implementations
|
|
16
|
+
* @category Utilities
|
|
17
|
+
*/
|
|
18
|
+
export type SwapTypeMapping<T extends ChainType> = {
|
|
19
|
+
[SwapType.FROM_BTC]: SupportsSwapType<T, SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T> : FromBTCSwap<T>,
|
|
20
|
+
[SwapType.FROM_BTCLN]: SupportsSwapType<T, SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T> : FromBTCLNSwap<T>,
|
|
21
|
+
[SwapType.TO_BTC]: ToBTCSwap<T>,
|
|
22
|
+
[SwapType.TO_BTCLN]: ToBTCLNSwap<T>,
|
|
23
|
+
[SwapType.TRUSTED_FROM_BTC]: OnchainForGasSwap<T>,
|
|
24
|
+
[SwapType.TRUSTED_FROM_BTCLN]: LnForGasSwap<T>,
|
|
25
|
+
[SwapType.SPV_VAULT_FROM_BTC]: SpvFromBTCSwap<T>,
|
|
26
|
+
[SwapType.FROM_BTCLN_AUTO]: FromBTCLNAutoSwap<T>
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Type guard to check if a swap is of a specific swap type
|
|
31
|
+
* @category Utilities
|
|
32
|
+
*/
|
|
33
|
+
export function isSwapType<T extends ChainType, S extends SwapType>(swap: ISwap<T>, swapType: S): swap is SwapTypeMapping<T>[S] {
|
|
34
|
+
if(swap==null) return false;
|
|
35
|
+
if(swap.getType()===SwapType.SPV_VAULT_FROM_BTC && swapType===SwapType.FROM_BTC) return true;
|
|
36
|
+
if(swap.getType()===SwapType.FROM_BTCLN_AUTO && swapType===SwapType.FROM_BTCLN) return true;
|
|
37
|
+
return swap.getType()===swapType;
|
|
38
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a promise that resolves after given amount seconds
|
|
3
|
+
*
|
|
4
|
+
* @param timeout how many milliseconds to wait for
|
|
5
|
+
* @param abortSignal
|
|
6
|
+
* @category Utilities
|
|
7
|
+
*/
|
|
8
|
+
export function timeoutPromise(timeout: number, abortSignal?: AbortSignal): Promise<void> {
|
|
9
|
+
return new Promise<void>((resolve, reject) => {
|
|
10
|
+
if (abortSignal != null && abortSignal.aborted) {
|
|
11
|
+
reject(abortSignal.reason);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let abortSignalListener: () => void;
|
|
16
|
+
let timeoutHandle: any | null = setTimeout(() => {
|
|
17
|
+
if (abortSignalListener != null && abortSignal != null) abortSignal.removeEventListener("abort", abortSignalListener);
|
|
18
|
+
resolve();
|
|
19
|
+
}, timeout);
|
|
20
|
+
|
|
21
|
+
if (abortSignal != null) {
|
|
22
|
+
abortSignal.addEventListener("abort", abortSignalListener = () => {
|
|
23
|
+
if (timeoutHandle != null) clearTimeout(timeoutHandle);
|
|
24
|
+
timeoutHandle = null;
|
|
25
|
+
reject(abortSignal.reason);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Returns an abort signal that aborts after a specified timeout in milliseconds
|
|
33
|
+
*
|
|
34
|
+
* @param timeout Milliseconds to wait
|
|
35
|
+
* @param abortReason Abort with this abort reason
|
|
36
|
+
* @param abortSignal Abort signal to extend
|
|
37
|
+
* @category Utilities
|
|
38
|
+
*/
|
|
39
|
+
export function timeoutSignal(timeout: number, abortReason?: any, abortSignal?: AbortSignal): AbortSignal {
|
|
40
|
+
if (timeout == null) throw new Error("Timeout seconds cannot be null!");
|
|
41
|
+
const abortController = new AbortController();
|
|
42
|
+
const timeoutHandle = setTimeout(() => abortController.abort(abortReason || new Error("Timed out")), timeout);
|
|
43
|
+
if (abortSignal != null) {
|
|
44
|
+
abortSignal.addEventListener("abort", () => {
|
|
45
|
+
clearTimeout(timeoutHandle);
|
|
46
|
+
abortController.abort(abortSignal.reason);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return abortController.signal;
|
|
50
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {Token} from "../types/Token";
|
|
2
|
+
|
|
3
|
+
import {fromDecimal, toDecimal} from "./Utils";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Converts a raw bigint amount to a human-readable string with decimals
|
|
7
|
+
* @category Utilities
|
|
8
|
+
*/
|
|
9
|
+
export function toHumanReadableString(amount: bigint, currencySpec: Token): string {
|
|
10
|
+
if(amount==null) return "";
|
|
11
|
+
return toDecimal(amount, currencySpec.decimals, undefined, currencySpec.displayDecimals);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Parses a human-readable decimal string to a raw bigint amount
|
|
16
|
+
* @category Utilities
|
|
17
|
+
*/
|
|
18
|
+
export function fromHumanReadableString(amount: string, currencySpec: Token): bigint | null {
|
|
19
|
+
if(amount==="" || amount==null) return null;
|
|
20
|
+
try {
|
|
21
|
+
return fromDecimal(amount, currencySpec.decimals);
|
|
22
|
+
} catch (e) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import {Buffer} from "buffer";
|
|
2
|
+
import {randomBytes as randomBytesNoble} from "@noble/hashes/utils";
|
|
3
|
+
import {sha256} from "@noble/hashes/sha2";
|
|
4
|
+
import {BigIntBufferUtils} from "@atomiqlabs/base";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns a promise that rejects if the passed promise resolves to `undefined` or `null`
|
|
8
|
+
*
|
|
9
|
+
* @param promise Promise to check resolve value of
|
|
10
|
+
* @param msg Optional message to pass to the thrown `Error`
|
|
11
|
+
* @category Utilities
|
|
12
|
+
*/
|
|
13
|
+
export function throwIfUndefined<T>(promise: Promise<T | undefined>, msg?: string): Promise<T> {
|
|
14
|
+
return promise.then(val => {
|
|
15
|
+
if(val==undefined) throw new Error(msg ?? "Promise value is undefined!");
|
|
16
|
+
return val;
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Returns a promise that resolves when any of the passed promises resolves, and rejects if all the underlying
|
|
22
|
+
* promises fail with an array of errors returned by the respective promises
|
|
23
|
+
*
|
|
24
|
+
* @param promises A list of promises
|
|
25
|
+
* @category Utilities
|
|
26
|
+
*/
|
|
27
|
+
export function promiseAny<T>(promises: Promise<T>[]): Promise<T> {
|
|
28
|
+
return new Promise<T>((resolve: ((val: T) => void) | null, reject) => {
|
|
29
|
+
let numRejected = 0;
|
|
30
|
+
const rejectReasons = Array(promises.length);
|
|
31
|
+
|
|
32
|
+
promises.forEach((promise, index) => {
|
|
33
|
+
promise.then((val) => {
|
|
34
|
+
if(resolve!=null) resolve(val);
|
|
35
|
+
resolve = null;
|
|
36
|
+
}).catch(err => {
|
|
37
|
+
rejectReasons[index] = err;
|
|
38
|
+
numRejected++;
|
|
39
|
+
if(numRejected===promises.length) {
|
|
40
|
+
reject(rejectReasons);
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Maps a JS object to another JS object based on the translation function, the translation function is called for every
|
|
49
|
+
* property (value/key) of the old object and returns the new value of for this property
|
|
50
|
+
*
|
|
51
|
+
* @param obj
|
|
52
|
+
* @param translator
|
|
53
|
+
*/
|
|
54
|
+
export function objectMap<
|
|
55
|
+
InputObject extends {[key in string]: any},
|
|
56
|
+
OutputObject extends {[key in keyof InputObject]: any}
|
|
57
|
+
>(
|
|
58
|
+
obj: InputObject,
|
|
59
|
+
translator: <InputKey extends Extract<keyof InputObject, string>>(
|
|
60
|
+
value: InputObject[InputKey],
|
|
61
|
+
key: InputKey
|
|
62
|
+
) => OutputObject[InputKey]
|
|
63
|
+
): {[key in keyof InputObject]: OutputObject[key]} {
|
|
64
|
+
const resp: {[key in keyof InputObject]?: OutputObject[key]} = {};
|
|
65
|
+
for(let key in obj) {
|
|
66
|
+
resp[key] = translator(obj[key], key);
|
|
67
|
+
}
|
|
68
|
+
return resp as {[key in keyof InputObject]: OutputObject[key]};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Maps the entries from the map to the array using the translator function
|
|
73
|
+
*
|
|
74
|
+
* @param map
|
|
75
|
+
* @param translator
|
|
76
|
+
*/
|
|
77
|
+
export function mapToArray<K, V, Output>(map: Map<K, V>, translator: (key: K, value: V) => Output): Output[] {
|
|
78
|
+
const arr: Output[] = Array(map.size);
|
|
79
|
+
let pointer = 0;
|
|
80
|
+
for(let entry of map.entries()) {
|
|
81
|
+
arr[pointer++] = translator(entry[0], entry[1]);
|
|
82
|
+
}
|
|
83
|
+
return arr;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Creates a new abort controller that will abort if the passed abort signal aborts
|
|
88
|
+
*
|
|
89
|
+
* @param abortSignal
|
|
90
|
+
*/
|
|
91
|
+
export function extendAbortController(abortSignal?: AbortSignal) {
|
|
92
|
+
const _abortController = new AbortController();
|
|
93
|
+
if(abortSignal!=null) {
|
|
94
|
+
abortSignal.throwIfAborted();
|
|
95
|
+
abortSignal.onabort = () => _abortController.abort(abortSignal.reason);
|
|
96
|
+
}
|
|
97
|
+
return _abortController;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function bigIntMin(a: bigint, b: bigint): bigint;
|
|
101
|
+
export function bigIntMin(a?: bigint, b?: bigint): bigint | undefined;
|
|
102
|
+
export function bigIntMin(a?: bigint, b?: bigint): bigint | undefined {
|
|
103
|
+
if(a==null) return b;
|
|
104
|
+
if(b==null) return a;
|
|
105
|
+
return a > b ? b : a;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function bigIntMax(a: bigint, b: bigint): bigint;
|
|
109
|
+
export function bigIntMax(a?: bigint, b?: bigint): bigint | undefined;
|
|
110
|
+
export function bigIntMax(a?: bigint, b?: bigint): bigint | undefined {
|
|
111
|
+
if(a==null) return b;
|
|
112
|
+
if(b==null) return a;
|
|
113
|
+
return b > a ? b : a;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function bigIntCompare(a: bigint, b: bigint): -1 | 0 | 1 {
|
|
117
|
+
return a > b ? 1 : a===b ? 0 : -1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function toBigInt(value: string): bigint;
|
|
121
|
+
export function toBigInt(value: undefined): undefined;
|
|
122
|
+
export function toBigInt(value: string | undefined): bigint | undefined {
|
|
123
|
+
if(value==null) return undefined;
|
|
124
|
+
return BigInt(value);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function randomBytes(bytesLength: number): Buffer {
|
|
128
|
+
return Buffer.from(randomBytesNoble(bytesLength));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function getTxoHash(outputScriptHex: string, value: number) {
|
|
132
|
+
return Buffer.from(sha256(Buffer.concat([
|
|
133
|
+
BigIntBufferUtils.toBuffer(BigInt(value), "le", 8),
|
|
134
|
+
Buffer.from(outputScriptHex, "hex")
|
|
135
|
+
])));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function fromDecimal(amount: string, decimalCount: number) {
|
|
139
|
+
if (amount.includes(".")) {
|
|
140
|
+
const [before, after] = amount.split(".");
|
|
141
|
+
if (decimalCount < 0) {
|
|
142
|
+
return BigInt(before.substring(0, before.length + decimalCount));
|
|
143
|
+
}
|
|
144
|
+
if (after.length > decimalCount) {
|
|
145
|
+
//Cut the last digits
|
|
146
|
+
return BigInt((before === "0" ? "" : before) + after.substring(0, decimalCount));
|
|
147
|
+
}
|
|
148
|
+
return BigInt((before === "0" ? "" : before) + after.padEnd(decimalCount, "0"));
|
|
149
|
+
} else {
|
|
150
|
+
if (decimalCount < 0) {
|
|
151
|
+
return BigInt(amount.substring(0, amount.length + decimalCount));
|
|
152
|
+
} else {
|
|
153
|
+
return BigInt(amount + "0".repeat(decimalCount));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function toDecimal(amount: bigint, decimalCount: number, cut?: boolean, displayDecimals?: number) {
|
|
160
|
+
if (decimalCount <= 0) {
|
|
161
|
+
return amount.toString(10) + "0".repeat(-decimalCount);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const amountStr = amount.toString(10).padStart(decimalCount + 1, "0");
|
|
165
|
+
|
|
166
|
+
const splitPoint = amountStr.length - decimalCount;
|
|
167
|
+
|
|
168
|
+
const decimalPart = amountStr.substring(splitPoint, amountStr.length);
|
|
169
|
+
let cutTo = decimalPart.length;
|
|
170
|
+
if (cut && cutTo > 0) {
|
|
171
|
+
for (let i = decimalPart.length - 1; i--; i >= 0) {
|
|
172
|
+
if (decimalPart.charAt(i) === "0") {
|
|
173
|
+
cutTo = i;
|
|
174
|
+
} else break;
|
|
175
|
+
}
|
|
176
|
+
if (cutTo === 0) cutTo = 1;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (displayDecimals === 0) return amountStr.substring(0, splitPoint);
|
|
180
|
+
if (displayDecimals != null && cutTo > displayDecimals) cutTo = displayDecimals;
|
|
181
|
+
return amountStr.substring(0, splitPoint) + "." + decimalPart.substring(0, cutTo);
|
|
182
|
+
}
|
package/dist/SwapperFactory.d.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { ChainData, BitcoinNetwork, BitcoinRpc, BaseTokenType, ChainType, StorageObject, IStorageManager, Messenger } from "@atomiqlabs/base";
|
|
2
|
-
import { BtcToken, CustomPriceFunction, MempoolApi, MempoolBitcoinRpc, SCToken, Swapper, SwapperOptions } from "@atomiqlabs/sdk-lib";
|
|
3
|
-
type ChainInitializer<O, C extends ChainType, T extends BaseTokenType> = {
|
|
4
|
-
chainId: ChainType["ChainId"];
|
|
5
|
-
chainType: ChainType;
|
|
6
|
-
initializer: (options: O, bitcoinRelay: BitcoinRpc<any>, network: BitcoinNetwork, storageCtor: <T extends StorageObject>(name: string) => IStorageManager<T>) => ChainData<C>;
|
|
7
|
-
tokens: T;
|
|
8
|
-
options: O;
|
|
9
|
-
};
|
|
10
|
-
type TokensDict<T extends ChainInitializer<any, any, any>> = {
|
|
11
|
-
[K in T["chainId"]]: {
|
|
12
|
-
[val in keyof T["tokens"]]: SCToken<K>;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
type GetAllTokens<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? TokensDict<First> & GetAllTokens<Rest> : unknown);
|
|
16
|
-
export type TokenResolverDict<T extends ChainInitializer<any, any, any>> = {
|
|
17
|
-
[K in T["chainId"]]: {
|
|
18
|
-
getToken: (address: string) => SCToken<K>;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
type GetAllTokenResolvers<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? TokenResolverDict<First> & GetAllTokenResolvers<Rest> : unknown);
|
|
22
|
-
type OptionsDict<T extends ChainInitializer<any, any, any>> = {
|
|
23
|
-
[K in T["chainId"]]: T["options"];
|
|
24
|
-
};
|
|
25
|
-
type GetAllOptions<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? OptionsDict<First> & GetAllOptions<Rest> : unknown);
|
|
26
|
-
type ChainTypeDict<T extends ChainInitializer<any, any, any>> = {
|
|
27
|
-
[K in T["chainId"]]: T["chainType"];
|
|
28
|
-
};
|
|
29
|
-
type ToMultichain<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? ChainTypeDict<First> & ToMultichain<Rest> : {});
|
|
30
|
-
export type MultichainSwapperOptions<T extends readonly ChainInitializer<any, any, any>[]> = SwapperOptions & {
|
|
31
|
-
chains: GetAllOptions<T>;
|
|
32
|
-
} & {
|
|
33
|
-
chainStorageCtor?: <T extends StorageObject>(name: string) => IStorageManager<T>;
|
|
34
|
-
pricingFeeDifferencePPM?: bigint;
|
|
35
|
-
mempoolApi?: MempoolApi | MempoolBitcoinRpc | string | string[];
|
|
36
|
-
messenger?: Messenger;
|
|
37
|
-
getPriceFn?: CustomPriceFunction;
|
|
38
|
-
};
|
|
39
|
-
export declare class SwapperFactory<T extends readonly ChainInitializer<any, any, any>[]> {
|
|
40
|
-
readonly initializers: T;
|
|
41
|
-
Tokens: GetAllTokens<T> & {
|
|
42
|
-
BITCOIN: {
|
|
43
|
-
BTC: BtcToken<false>;
|
|
44
|
-
BTCLN: BtcToken<true>;
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
|
-
TokenResolver: GetAllTokenResolvers<T>;
|
|
48
|
-
constructor(initializers: T);
|
|
49
|
-
newSwapper(options: MultichainSwapperOptions<T>): Swapper<ToMultichain<T>>;
|
|
50
|
-
newSwapperInitialized(options: MultichainSwapperOptions<T>): Promise<Swapper<ToMultichain<T>>>;
|
|
51
|
-
}
|
|
52
|
-
export {};
|
package/dist/Utils.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.timeoutSignal = exports.fromHumanReadableString = exports.toHumanReadableString = void 0;
|
|
4
|
-
const sdk_lib_1 = require("@atomiqlabs/sdk-lib");
|
|
5
|
-
function toHumanReadableString(amount, currencySpec) {
|
|
6
|
-
if (amount == null)
|
|
7
|
-
return null;
|
|
8
|
-
return (0, sdk_lib_1.toDecimal)(amount, currencySpec.decimals, undefined, currencySpec.displayDecimals);
|
|
9
|
-
}
|
|
10
|
-
exports.toHumanReadableString = toHumanReadableString;
|
|
11
|
-
function fromHumanReadableString(amount, currencySpec) {
|
|
12
|
-
if (amount === "" || amount == null)
|
|
13
|
-
return null;
|
|
14
|
-
return (0, sdk_lib_1.fromDecimal)(amount, currencySpec.decimals);
|
|
15
|
-
}
|
|
16
|
-
exports.fromHumanReadableString = fromHumanReadableString;
|
|
17
|
-
/**
|
|
18
|
-
* Returns an abort signal that aborts after a specified timeout in milliseconds
|
|
19
|
-
*
|
|
20
|
-
* @param timeout Milliseconds to wait
|
|
21
|
-
* @param abortReason Abort with this abort reason
|
|
22
|
-
* @param abortSignal Abort signal to extend
|
|
23
|
-
*/
|
|
24
|
-
function timeoutSignal(timeout, abortReason, abortSignal) {
|
|
25
|
-
if (timeout == null)
|
|
26
|
-
return abortSignal;
|
|
27
|
-
const abortController = new AbortController();
|
|
28
|
-
const timeoutHandle = setTimeout(() => abortController.abort(abortReason || new Error("Timed out")), timeout);
|
|
29
|
-
if (abortSignal != null) {
|
|
30
|
-
abortSignal.addEventListener("abort", () => {
|
|
31
|
-
clearTimeout(timeoutHandle);
|
|
32
|
-
abortController.abort(abortSignal.reason);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return abortController.signal;
|
|
36
|
-
}
|
|
37
|
-
exports.timeoutSignal = timeoutSignal;
|