@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,485 @@
|
|
|
1
|
+
import {Intermediary, ServicesType} from "./Intermediary";
|
|
2
|
+
import {SwapType} from "../enums/SwapType";
|
|
3
|
+
import {SignatureVerificationError, SwapContract} from "@atomiqlabs/base";
|
|
4
|
+
import {EventEmitter} from "events";
|
|
5
|
+
import {Buffer} from "buffer";
|
|
6
|
+
import {bigIntMax, bigIntMin, extendAbortController} from "../utils/Utils";
|
|
7
|
+
import {IntermediaryAPI} from "./apis/IntermediaryAPI";
|
|
8
|
+
import {getLogger} from "../utils/Logger";
|
|
9
|
+
import {httpGet} from "../http/HttpUtils";
|
|
10
|
+
import {tryWithRetries} from "../utils/RetryUtils";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Swap handler type enum for intermediary communication
|
|
14
|
+
* @category Pricing and LPs
|
|
15
|
+
*/
|
|
16
|
+
export enum SwapHandlerType {
|
|
17
|
+
TO_BTC = "TO_BTC",
|
|
18
|
+
FROM_BTC = "FROM_BTC",
|
|
19
|
+
TO_BTCLN = "TO_BTCLN",
|
|
20
|
+
FROM_BTCLN = "FROM_BTCLN",
|
|
21
|
+
FROM_BTC_TRUSTED = "FROM_BTC_TRUSTED",
|
|
22
|
+
FROM_BTCLN_TRUSTED = "FROM_BTCLN_TRUSTED",
|
|
23
|
+
FROM_BTC_SPV = "FROM_BTC_SPV",
|
|
24
|
+
FROM_BTCLN_AUTO = "FROM_BTCLN_AUTO"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Swap handler information type
|
|
29
|
+
* @category Pricing and LPs
|
|
30
|
+
*/
|
|
31
|
+
export type SwapHandlerInfoType = {
|
|
32
|
+
swapFeePPM: number,
|
|
33
|
+
swapBaseFee: number,
|
|
34
|
+
min: number,
|
|
35
|
+
max: number,
|
|
36
|
+
tokens: string[],
|
|
37
|
+
chainTokens?: {[chainId: string]: string[]};
|
|
38
|
+
data?: any,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
type InfoHandlerResponseEnvelope = {
|
|
42
|
+
nonce: string,
|
|
43
|
+
services: {
|
|
44
|
+
[key in SwapHandlerType]?: SwapHandlerInfoType
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Token bounds (min/max) for swaps
|
|
50
|
+
* @category Pricing and LPs
|
|
51
|
+
*/
|
|
52
|
+
export type TokenBounds = {
|
|
53
|
+
[token: string]: {
|
|
54
|
+
min: bigint,
|
|
55
|
+
max: bigint
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Multi-chain token bounds
|
|
61
|
+
* @category Pricing and LPs
|
|
62
|
+
*/
|
|
63
|
+
export type MultichainTokenBounds = {
|
|
64
|
+
[chainId: string]: TokenBounds
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Swap bounds by type
|
|
69
|
+
* @category Pricing and LPs
|
|
70
|
+
*/
|
|
71
|
+
export type SwapBounds = {
|
|
72
|
+
[key in SwapType]?: TokenBounds
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Multi-chain swap bounds
|
|
77
|
+
* @category Pricing and LPs
|
|
78
|
+
*/
|
|
79
|
+
export type MultichainSwapBounds = {
|
|
80
|
+
[key in SwapType]?: MultichainTokenBounds
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Converts SwapHandlerType (represented as string & used in REST API communication with intermediaries) to regular
|
|
85
|
+
* SwapType
|
|
86
|
+
*
|
|
87
|
+
* @param swapHandlerType
|
|
88
|
+
*/
|
|
89
|
+
function swapHandlerTypeToSwapType(swapHandlerType: SwapHandlerType): SwapType {
|
|
90
|
+
switch (swapHandlerType) {
|
|
91
|
+
case SwapHandlerType.FROM_BTC:
|
|
92
|
+
return SwapType.FROM_BTC;
|
|
93
|
+
case SwapHandlerType.TO_BTC:
|
|
94
|
+
return SwapType.TO_BTC;
|
|
95
|
+
case SwapHandlerType.FROM_BTCLN:
|
|
96
|
+
return SwapType.FROM_BTCLN;
|
|
97
|
+
case SwapHandlerType.TO_BTCLN:
|
|
98
|
+
return SwapType.TO_BTCLN;
|
|
99
|
+
case SwapHandlerType.FROM_BTC_TRUSTED:
|
|
100
|
+
return SwapType.TRUSTED_FROM_BTC;
|
|
101
|
+
case SwapHandlerType.FROM_BTCLN_TRUSTED:
|
|
102
|
+
return SwapType.TRUSTED_FROM_BTCLN;
|
|
103
|
+
case SwapHandlerType.FROM_BTC_SPV:
|
|
104
|
+
return SwapType.SPV_VAULT_FROM_BTC;
|
|
105
|
+
case SwapHandlerType.FROM_BTCLN_AUTO:
|
|
106
|
+
return SwapType.FROM_BTCLN_AUTO;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* A default intermediary comparator, only takes to announced fee into consideration
|
|
112
|
+
*
|
|
113
|
+
* @param swapType
|
|
114
|
+
* @param tokenAddress
|
|
115
|
+
* @param swapAmount
|
|
116
|
+
*/
|
|
117
|
+
function getIntermediaryComparator(swapType: SwapType, tokenAddress: string, swapAmount?: bigint) {
|
|
118
|
+
|
|
119
|
+
if(swapType===SwapType.TO_BTC) {
|
|
120
|
+
//TODO: Also take reputation into account
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return (a: Intermediary, b: Intermediary): number => {
|
|
124
|
+
const aService = a.services[swapType];
|
|
125
|
+
const bService = b.services[swapType];
|
|
126
|
+
if(aService==null && bService==null) return 0;
|
|
127
|
+
if(aService==null) return 1;
|
|
128
|
+
if(bService==null) return -1;
|
|
129
|
+
|
|
130
|
+
if(swapAmount==null) {
|
|
131
|
+
return aService.swapFeePPM - bService.swapFeePPM;
|
|
132
|
+
} else {
|
|
133
|
+
const feeA = BigInt(aService.swapBaseFee) + (swapAmount * BigInt(aService.swapFeePPM) / 1000000n);
|
|
134
|
+
const feeB = BigInt(bService.swapBaseFee) + (swapAmount * BigInt(bService.swapFeePPM) / 1000000n);
|
|
135
|
+
|
|
136
|
+
return feeA - feeB > 0n ? 1 : feeA === feeB ? 0 : -1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const logger = getLogger("IntermediaryDiscovery: ");
|
|
143
|
+
|
|
144
|
+
const REGISTRY_URL = "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main";
|
|
145
|
+
|
|
146
|
+
//To allow for legacy responses from not-yet updated LPs
|
|
147
|
+
const DEFAULT_CHAIN = "SOLANA";
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Discovery service for available liquidity providers/intermediaries
|
|
151
|
+
* @category Pricing and LPs
|
|
152
|
+
*/
|
|
153
|
+
export class IntermediaryDiscovery extends EventEmitter {
|
|
154
|
+
|
|
155
|
+
intermediaries: Intermediary[] = [];
|
|
156
|
+
|
|
157
|
+
swapContracts: {[key: string]: SwapContract};
|
|
158
|
+
registryUrl: string;
|
|
159
|
+
|
|
160
|
+
httpRequestTimeout?: number;
|
|
161
|
+
/**
|
|
162
|
+
* Maximum time (in millis) to wait for other LP's responses after the first one was founds
|
|
163
|
+
*/
|
|
164
|
+
maxWaitForOthersTimeout?: number;
|
|
165
|
+
|
|
166
|
+
private overrideNodeUrls?: string[];
|
|
167
|
+
|
|
168
|
+
constructor(
|
|
169
|
+
swapContracts: {[key: string]: SwapContract},
|
|
170
|
+
registryUrl: string = REGISTRY_URL,
|
|
171
|
+
nodeUrls?: string[],
|
|
172
|
+
httpRequestTimeout?: number,
|
|
173
|
+
maxWaitForOthersTimeout?: number
|
|
174
|
+
) {
|
|
175
|
+
super();
|
|
176
|
+
this.swapContracts = swapContracts;
|
|
177
|
+
this.registryUrl = registryUrl;
|
|
178
|
+
this.overrideNodeUrls = nodeUrls;
|
|
179
|
+
this.httpRequestTimeout = httpRequestTimeout;
|
|
180
|
+
this.maxWaitForOthersTimeout = maxWaitForOthersTimeout;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Fetches the URLs of swap intermediaries from registry or from a pre-defined array of node urls
|
|
185
|
+
*
|
|
186
|
+
* @param abortSignal
|
|
187
|
+
*/
|
|
188
|
+
private async getIntermediaryUrls(abortSignal?: AbortSignal): Promise<string[]> {
|
|
189
|
+
if(this.overrideNodeUrls!=null && this.overrideNodeUrls.length>0) {
|
|
190
|
+
return this.overrideNodeUrls;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const response = await tryWithRetries(
|
|
194
|
+
() => httpGet<{content: string}>(this.registryUrl, this.httpRequestTimeout, abortSignal),
|
|
195
|
+
{maxRetries: 3, delay: 100, exponential: true}
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
const content = response.content.replace(new RegExp("\\n", "g"), "");
|
|
199
|
+
|
|
200
|
+
return JSON.parse(Buffer.from(content, "base64").toString()) as string[];
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Returns data as reported by a specific node (as identified by its URL). This function is specifically made
|
|
205
|
+
* in a way, that in case the abortSignal fires AFTER the LP response was received (and during signature checking),
|
|
206
|
+
* it proceeds with the addresses it was able to verify already. Hence after calling abort, this function is guaranteed
|
|
207
|
+
* to either reject or resolve instantly.
|
|
208
|
+
*
|
|
209
|
+
* @param url
|
|
210
|
+
* @param abortSignal
|
|
211
|
+
*/
|
|
212
|
+
private async getNodeInfo(url: string, abortSignal?: AbortSignal) : Promise<{addresses: {[key: string]: string}, info: InfoHandlerResponseEnvelope}> {
|
|
213
|
+
const response = await tryWithRetries(
|
|
214
|
+
() => IntermediaryAPI.getIntermediaryInfo(url, this.httpRequestTimeout, abortSignal),
|
|
215
|
+
{maxRetries: 3, delay: 100, exponential: true},
|
|
216
|
+
undefined,
|
|
217
|
+
abortSignal
|
|
218
|
+
);
|
|
219
|
+
abortSignal?.throwIfAborted();
|
|
220
|
+
|
|
221
|
+
const promises: Promise<void>[] = [];
|
|
222
|
+
const addresses: {[key: string]: string} = {};
|
|
223
|
+
for(let chain in response.chains) {
|
|
224
|
+
if(this.swapContracts[chain]!=null) {
|
|
225
|
+
promises.push((async () => {
|
|
226
|
+
const {signature, address} = response.chains[chain];
|
|
227
|
+
try {
|
|
228
|
+
await this.swapContracts[chain].isValidDataSignature(Buffer.from(response.envelope), signature, address);
|
|
229
|
+
addresses[chain] = address;
|
|
230
|
+
} catch (e) {
|
|
231
|
+
logger.warn("Failed to verify "+chain+" signature for intermediary: "+url);
|
|
232
|
+
}
|
|
233
|
+
})());
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if(abortSignal!=null) {
|
|
238
|
+
await Promise.race([
|
|
239
|
+
Promise.all(promises),
|
|
240
|
+
new Promise(resolve => abortSignal.addEventListener("abort", resolve))
|
|
241
|
+
]);
|
|
242
|
+
} else {
|
|
243
|
+
await Promise.all(promises);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
//Handle legacy responses
|
|
247
|
+
const info: InfoHandlerResponseEnvelope = JSON.parse(response.envelope);
|
|
248
|
+
for(let swapType in info.services) {
|
|
249
|
+
const serviceData: SwapHandlerInfoType = info.services[swapType as SwapHandlerType]!;
|
|
250
|
+
if(serviceData.chainTokens==null) serviceData.chainTokens = {
|
|
251
|
+
[DEFAULT_CHAIN]: serviceData.tokens
|
|
252
|
+
};
|
|
253
|
+
for(let chain in serviceData.chainTokens) {
|
|
254
|
+
if(addresses[chain]==null) delete serviceData.chainTokens[chain];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return {
|
|
259
|
+
addresses,
|
|
260
|
+
info
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Inherits abort signal logic from `getNodeInfo()`, check those function docs to better understand
|
|
266
|
+
*
|
|
267
|
+
* @param url
|
|
268
|
+
* @param abortSignal
|
|
269
|
+
* @private
|
|
270
|
+
*/
|
|
271
|
+
private async loadIntermediary(url: string, abortSignal?: AbortSignal): Promise<Intermediary | null> {
|
|
272
|
+
try {
|
|
273
|
+
const nodeInfo = await this.getNodeInfo(url, abortSignal);
|
|
274
|
+
const services: ServicesType = {};
|
|
275
|
+
for(let key in nodeInfo.info.services) {
|
|
276
|
+
services[swapHandlerTypeToSwapType(key as SwapHandlerType)] = nodeInfo.info.services[key as SwapHandlerType];
|
|
277
|
+
}
|
|
278
|
+
return new Intermediary(url, nodeInfo.addresses, services);
|
|
279
|
+
} catch (e) {
|
|
280
|
+
logger.warn("fetchIntermediaries(): Error contacting intermediary "+url+": ", e);
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Returns the intermediary at the provided URL, either from the already fetched list of LPs or fetches the data on-demand
|
|
287
|
+
*
|
|
288
|
+
* @param url
|
|
289
|
+
* @param abortSignal
|
|
290
|
+
*/
|
|
291
|
+
getIntermediary(url: string, abortSignal?: AbortSignal): Promise<Intermediary | null> {
|
|
292
|
+
const foundLp = this.intermediaries.find(lp => lp.url===url);
|
|
293
|
+
if(foundLp!=null) return Promise.resolve(foundLp);
|
|
294
|
+
return this.loadIntermediary(url, abortSignal);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Reloads the saves a list of intermediaries
|
|
299
|
+
* @param abortSignal
|
|
300
|
+
*/
|
|
301
|
+
async reloadIntermediaries(abortSignal?: AbortSignal): Promise<void> {
|
|
302
|
+
//Get LP urls
|
|
303
|
+
const urls = await this.getIntermediaryUrls(abortSignal);
|
|
304
|
+
|
|
305
|
+
logger.debug("reloadIntermediaries(): Pinging intermediaries: ", urls.join());
|
|
306
|
+
|
|
307
|
+
const abortController = extendAbortController(abortSignal);
|
|
308
|
+
let timer: any;
|
|
309
|
+
const intermediaries = await Promise.all(urls.map(url => this.loadIntermediary(url, abortController.signal).then(lp => {
|
|
310
|
+
if(lp!=null && timer==null) timer = setTimeout(() => {
|
|
311
|
+
//Trigger abort through the abort controller, such that all underlying promises resolve instantly
|
|
312
|
+
abortController.abort();
|
|
313
|
+
}, this.maxWaitForOthersTimeout ?? 5*1000);
|
|
314
|
+
return lp;
|
|
315
|
+
})));
|
|
316
|
+
if(timer!=null) clearTimeout(timer);
|
|
317
|
+
|
|
318
|
+
const activeNodes: Intermediary[] = intermediaries.filter(intermediary => intermediary!=null) as Intermediary[];
|
|
319
|
+
if(activeNodes.length===0) logger.error("reloadIntermediaries(): No online intermediary found! Swaps might not be possible!");
|
|
320
|
+
|
|
321
|
+
this.intermediaries = activeNodes;
|
|
322
|
+
this.emit("added", activeNodes);
|
|
323
|
+
|
|
324
|
+
logger.info("reloadIntermediaries(): Using active intermediaries: ", activeNodes.map(lp => lp.url).join());
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Initializes the discovery by fetching/reloading intermediaries
|
|
329
|
+
*
|
|
330
|
+
* @param abortSignal
|
|
331
|
+
*/
|
|
332
|
+
init(abortSignal?: AbortSignal): Promise<void> {
|
|
333
|
+
logger.info("init(): Initializing with registryUrl: "+this.registryUrl+" intermediary array: "+(this.overrideNodeUrls || []).join());
|
|
334
|
+
return this.reloadIntermediaries(abortSignal);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
getMultichainSwapBounds(): MultichainSwapBounds {
|
|
338
|
+
const bounds: MultichainSwapBounds = {};
|
|
339
|
+
|
|
340
|
+
this.intermediaries.forEach(intermediary => {
|
|
341
|
+
for(let _swapType in intermediary.services) {
|
|
342
|
+
const swapType = parseInt(_swapType) as SwapType;
|
|
343
|
+
const swapService: SwapHandlerInfoType = intermediary.services[swapType]!;
|
|
344
|
+
const multichainBounds: MultichainTokenBounds = (bounds[swapType] ??= {});
|
|
345
|
+
for(let chainId in swapService.chainTokens) {
|
|
346
|
+
multichainBounds[chainId] ??= {};
|
|
347
|
+
const tokenBounds: TokenBounds = multichainBounds[chainId];
|
|
348
|
+
|
|
349
|
+
for(let token of swapService.chainTokens[chainId]) {
|
|
350
|
+
const tokenMinMax = tokenBounds[token];
|
|
351
|
+
if(tokenMinMax==null) {
|
|
352
|
+
tokenBounds[token] = {
|
|
353
|
+
min: BigInt(swapService.min),
|
|
354
|
+
max: BigInt(swapService.max)
|
|
355
|
+
}
|
|
356
|
+
} else {
|
|
357
|
+
tokenMinMax.min = bigIntMin(tokenMinMax.min, BigInt(swapService.min));
|
|
358
|
+
tokenMinMax.max = bigIntMax(tokenMinMax.max, BigInt(swapService.max));
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
return bounds;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Returns aggregate swap bounds (in sats - BTC) as indicated by the intermediaries
|
|
370
|
+
*/
|
|
371
|
+
getSwapBounds(chainIdentifier: string): SwapBounds {
|
|
372
|
+
const bounds: SwapBounds = {};
|
|
373
|
+
|
|
374
|
+
this.intermediaries.forEach(intermediary => {
|
|
375
|
+
for(let _swapType in intermediary.services) {
|
|
376
|
+
const swapType = parseInt(_swapType) as SwapType;
|
|
377
|
+
const swapService: SwapHandlerInfoType = intermediary.services[swapType]!;
|
|
378
|
+
const tokenBounds: TokenBounds = (bounds[swapType] ??= {});
|
|
379
|
+
if(swapService.chainTokens!=null && swapService.chainTokens[chainIdentifier]!=null) {
|
|
380
|
+
for(let token of swapService.chainTokens[chainIdentifier]) {
|
|
381
|
+
const tokenMinMax = tokenBounds[token];
|
|
382
|
+
if(tokenMinMax==null) {
|
|
383
|
+
tokenBounds[token] = {
|
|
384
|
+
min: BigInt(swapService.min),
|
|
385
|
+
max: BigInt(swapService.max)
|
|
386
|
+
}
|
|
387
|
+
} else {
|
|
388
|
+
tokenMinMax.min = bigIntMin(tokenMinMax.min, BigInt(swapService.min));
|
|
389
|
+
tokenMinMax.max = bigIntMax(tokenMinMax.max, BigInt(swapService.max));
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
return bounds;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Returns the aggregate swap minimum (in sats - BTC) for a specific swap type & token
|
|
401
|
+
* as indicated by the intermediaries
|
|
402
|
+
*
|
|
403
|
+
* @param chainIdentifier
|
|
404
|
+
* @param swapType
|
|
405
|
+
* @param token
|
|
406
|
+
*/
|
|
407
|
+
getSwapMinimum(chainIdentifier: string, swapType: SwapType, token: any): number | null {
|
|
408
|
+
const tokenStr = token.toString();
|
|
409
|
+
return this.intermediaries.reduce<number | null>((prevMin: number | null, intermediary: Intermediary) => {
|
|
410
|
+
const swapService = intermediary.services[swapType];
|
|
411
|
+
if(swapService==null) return prevMin;
|
|
412
|
+
const chainTokens = swapService.chainTokens?.[chainIdentifier];
|
|
413
|
+
if(chainTokens==null) return prevMin;
|
|
414
|
+
if(!chainTokens.includes(tokenStr)) return prevMin;
|
|
415
|
+
return prevMin==null ? swapService.min : Math.min(prevMin, swapService.min);
|
|
416
|
+
}, null);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Returns the aggregate swap maximum (in sats - BTC) for a specific swap type & token
|
|
421
|
+
* as indicated by the intermediaries
|
|
422
|
+
*
|
|
423
|
+
* @param chainIdentifier
|
|
424
|
+
* @param swapType
|
|
425
|
+
* @param token
|
|
426
|
+
*/
|
|
427
|
+
getSwapMaximum(chainIdentifier: string, swapType: SwapType, token: any): number | null {
|
|
428
|
+
const tokenStr = token.toString();
|
|
429
|
+
return this.intermediaries.reduce<number | null>((prevMax: number | null, intermediary: Intermediary) => {
|
|
430
|
+
const swapService = intermediary.services[swapType];
|
|
431
|
+
if(swapService==null) return prevMax;
|
|
432
|
+
const chainTokens = swapService.chainTokens?.[chainIdentifier];
|
|
433
|
+
if(chainTokens==null) return prevMax;
|
|
434
|
+
if(!chainTokens.includes(tokenStr)) return prevMax;
|
|
435
|
+
return prevMax==null ? swapService.max : Math.max(prevMax, swapService.max);
|
|
436
|
+
}, null);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Returns swap candidates for a specific swap type & token address
|
|
441
|
+
*
|
|
442
|
+
* @param chainIdentifier
|
|
443
|
+
* @param swapType
|
|
444
|
+
* @param tokenAddress
|
|
445
|
+
* @param amount Amount to be swapped in sats - BTC
|
|
446
|
+
* @param count How many intermediaries to return at most
|
|
447
|
+
*/
|
|
448
|
+
getSwapCandidates(chainIdentifier: string, swapType: SwapType, tokenAddress: any, amount?: bigint, count?: number): Intermediary[] {
|
|
449
|
+
const candidates = this.intermediaries.filter(e => {
|
|
450
|
+
const swapService = e.services[swapType];
|
|
451
|
+
if(swapService==null) return false;
|
|
452
|
+
if(amount!=null && amount < BigInt(swapService.min)) return false;
|
|
453
|
+
if(amount!=null && amount > BigInt(swapService.max)) return false;
|
|
454
|
+
if(swapService.chainTokens==null) return false;
|
|
455
|
+
if(swapService.chainTokens[chainIdentifier]==null) return false;
|
|
456
|
+
if(!swapService.chainTokens[chainIdentifier].includes(tokenAddress.toString())) return false;
|
|
457
|
+
return true;
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
candidates.sort(getIntermediaryComparator(swapType, tokenAddress, amount));
|
|
461
|
+
|
|
462
|
+
if(count==null) {
|
|
463
|
+
return candidates;
|
|
464
|
+
} else {
|
|
465
|
+
return candidates.slice(0, count);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Removes a specific intermediary from the list of active intermediaries (used for blacklisting)
|
|
471
|
+
*
|
|
472
|
+
* @param intermediary
|
|
473
|
+
*/
|
|
474
|
+
removeIntermediary(intermediary: Intermediary): boolean {
|
|
475
|
+
const index = this.intermediaries.indexOf(intermediary);
|
|
476
|
+
if(index>=0) {
|
|
477
|
+
logger.info("removeIntermediary(): Removing intermediary: "+intermediary.url);
|
|
478
|
+
this.intermediaries.splice(index, 1);
|
|
479
|
+
this.emit("removed", [intermediary]);
|
|
480
|
+
return true;
|
|
481
|
+
}
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
}
|