@atomiqlabs/sdk 7.0.11 → 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} +40 -22
- 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} +116 -75
- 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,429 @@
|
|
|
1
|
+
import {FromBTCLNSwap, FromBTCLNSwapInit, FromBTCLNSwapState} from "./FromBTCLNSwap";
|
|
2
|
+
import {decode as bolt11Decode, PaymentRequestObject, TagsObject} from "@atomiqlabs/bolt11";
|
|
3
|
+
import {
|
|
4
|
+
ChainSwapType,
|
|
5
|
+
ChainType,
|
|
6
|
+
ClaimEvent,
|
|
7
|
+
InitializeEvent,
|
|
8
|
+
RefundEvent
|
|
9
|
+
} from "@atomiqlabs/base";
|
|
10
|
+
import {Intermediary} from "../../../../intermediaries/Intermediary";
|
|
11
|
+
import {Buffer} from "buffer";
|
|
12
|
+
import {UserError} from "../../../../errors/UserError";
|
|
13
|
+
import {IntermediaryError} from "../../../../errors/IntermediaryError";
|
|
14
|
+
import {SwapType} from "../../../../enums/SwapType";
|
|
15
|
+
import {
|
|
16
|
+
extendAbortController,
|
|
17
|
+
throwIfUndefined
|
|
18
|
+
} from "../../../../utils/Utils";
|
|
19
|
+
import {FromBTCLNResponseType, IntermediaryAPI} from "../../../../intermediaries/apis/IntermediaryAPI";
|
|
20
|
+
import {RequestError} from "../../../../errors/RequestError";
|
|
21
|
+
import {LightningNetworkApi} from "../../../../bitcoin/LightningNetworkApi";
|
|
22
|
+
import {ISwapPrice} from "../../../../prices/abstract/ISwapPrice";
|
|
23
|
+
import {EventEmitter} from "events";
|
|
24
|
+
import {ISwapWrapperOptions, WrapperCtorTokens} from "../../../ISwapWrapper";
|
|
25
|
+
import {UnifiedSwapEventListener} from "../../../../events/UnifiedSwapEventListener";
|
|
26
|
+
import {UnifiedSwapStorage} from "../../../../storage/UnifiedSwapStorage";
|
|
27
|
+
import {ISwap} from "../../../ISwap";
|
|
28
|
+
import {IFromBTCLNDefinition, IFromBTCLNWrapper} from "../IFromBTCLNWrapper";
|
|
29
|
+
import {IClaimableSwapWrapper} from "../../../IClaimableSwapWrapper";
|
|
30
|
+
import {AmountData} from "../../../../types/AmountData";
|
|
31
|
+
import {LNURLWithdrawParamsWithUrl} from "../../../../types/lnurl/LNURLWithdraw";
|
|
32
|
+
import {tryWithRetries} from "../../../../utils/RetryUtils";
|
|
33
|
+
import {AllOptional, AllRequired} from "../../../../utils/TypeUtils";
|
|
34
|
+
|
|
35
|
+
export type FromBTCLNOptions = {
|
|
36
|
+
descriptionHash?: Buffer,
|
|
37
|
+
unsafeSkipLnNodeCheck?: boolean
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type FromBTCLNWrapperOptions = ISwapWrapperOptions & {
|
|
41
|
+
unsafeSkipLnNodeCheck: boolean,
|
|
42
|
+
safetyFactor: number,
|
|
43
|
+
bitcoinBlocktime: number
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export type FromBTCLNDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNWrapper<T>, FromBTCLNSwap<T>>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Factory wrapper for creating Lightning BTC to Smart Chain swaps
|
|
50
|
+
* @category Swaps
|
|
51
|
+
*/
|
|
52
|
+
export class FromBTCLNWrapper<
|
|
53
|
+
T extends ChainType
|
|
54
|
+
> extends IFromBTCLNWrapper<T, FromBTCLNDefinition<T>, FromBTCLNWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNSwap<T>> {
|
|
55
|
+
|
|
56
|
+
public readonly claimableSwapStates = [FromBTCLNSwapState.CLAIM_COMMITED];
|
|
57
|
+
public readonly TYPE = SwapType.FROM_BTCLN;
|
|
58
|
+
public readonly swapDeserializer = FromBTCLNSwap;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param chainIdentifier
|
|
62
|
+
* @param unifiedStorage Storage interface for the current environment
|
|
63
|
+
* @param unifiedChainEvents On-chain event listener
|
|
64
|
+
* @param chain
|
|
65
|
+
* @param contract Underlying contract handling the swaps
|
|
66
|
+
* @param prices Swap pricing handler
|
|
67
|
+
* @param tokens
|
|
68
|
+
* @param swapDataDeserializer Deserializer for SwapData
|
|
69
|
+
* @param lnApi
|
|
70
|
+
* @param options
|
|
71
|
+
* @param events Instance to use for emitting events
|
|
72
|
+
*/
|
|
73
|
+
constructor(
|
|
74
|
+
chainIdentifier: string,
|
|
75
|
+
unifiedStorage: UnifiedSwapStorage<T>,
|
|
76
|
+
unifiedChainEvents: UnifiedSwapEventListener<T>,
|
|
77
|
+
chain: T["ChainInterface"],
|
|
78
|
+
contract: T["Contract"],
|
|
79
|
+
prices: ISwapPrice,
|
|
80
|
+
tokens: WrapperCtorTokens,
|
|
81
|
+
swapDataDeserializer: new (data: any) => T["Data"],
|
|
82
|
+
lnApi: LightningNetworkApi,
|
|
83
|
+
options?: AllOptional<FromBTCLNWrapperOptions>,
|
|
84
|
+
events?: EventEmitter<{swapState: [ISwap]}>
|
|
85
|
+
) {
|
|
86
|
+
super(
|
|
87
|
+
chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi,
|
|
88
|
+
{
|
|
89
|
+
safetyFactor: options?.safetyFactor ?? 2,
|
|
90
|
+
bitcoinBlocktime: options?.bitcoinBlocktime ?? 10*60,
|
|
91
|
+
unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? false
|
|
92
|
+
},
|
|
93
|
+
events
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public readonly pendingSwapStates = [
|
|
98
|
+
FromBTCLNSwapState.PR_CREATED,
|
|
99
|
+
FromBTCLNSwapState.QUOTE_SOFT_EXPIRED,
|
|
100
|
+
FromBTCLNSwapState.PR_PAID,
|
|
101
|
+
FromBTCLNSwapState.CLAIM_COMMITED,
|
|
102
|
+
FromBTCLNSwapState.EXPIRED
|
|
103
|
+
];
|
|
104
|
+
public readonly tickSwapState = [
|
|
105
|
+
FromBTCLNSwapState.PR_CREATED,
|
|
106
|
+
FromBTCLNSwapState.PR_PAID,
|
|
107
|
+
FromBTCLNSwapState.CLAIM_COMMITED
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
protected processEventInitialize(swap: FromBTCLNSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean> {
|
|
111
|
+
if(swap.state===FromBTCLNSwapState.PR_PAID || swap.state===FromBTCLNSwapState.QUOTE_SOFT_EXPIRED) {
|
|
112
|
+
swap.state = FromBTCLNSwapState.CLAIM_COMMITED;
|
|
113
|
+
return Promise.resolve(true);
|
|
114
|
+
}
|
|
115
|
+
return Promise.resolve(false);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
protected processEventClaim(swap: FromBTCLNSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean> {
|
|
119
|
+
if(swap.state!==FromBTCLNSwapState.FAILED && swap.state!==FromBTCLNSwapState.CLAIM_CLAIMED) {
|
|
120
|
+
swap.state = FromBTCLNSwapState.CLAIM_CLAIMED;
|
|
121
|
+
return Promise.resolve(true);
|
|
122
|
+
}
|
|
123
|
+
return Promise.resolve(false);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
protected processEventRefund(swap: FromBTCLNSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean> {
|
|
127
|
+
if(swap.state!==FromBTCLNSwapState.CLAIM_CLAIMED && swap.state!==FromBTCLNSwapState.FAILED) {
|
|
128
|
+
swap.state = FromBTCLNSwapState.FAILED;
|
|
129
|
+
return Promise.resolve(true);
|
|
130
|
+
}
|
|
131
|
+
return Promise.resolve(false);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Verifies response returned from intermediary
|
|
136
|
+
*
|
|
137
|
+
* @param resp Response as returned by the intermediary
|
|
138
|
+
* @param amountData
|
|
139
|
+
* @param lp Intermediary
|
|
140
|
+
* @param options Options as passed to the swap creation function
|
|
141
|
+
* @param decodedPr Decoded bolt11 lightning network invoice
|
|
142
|
+
* @param paymentHash Expected payment hash of the bolt11 lightning network invoice
|
|
143
|
+
* @private
|
|
144
|
+
* @throws {IntermediaryError} in case the response is invalid
|
|
145
|
+
*/
|
|
146
|
+
private verifyReturnedData(
|
|
147
|
+
resp: FromBTCLNResponseType,
|
|
148
|
+
amountData: AmountData,
|
|
149
|
+
lp: Intermediary,
|
|
150
|
+
options: FromBTCLNOptions,
|
|
151
|
+
decodedPr: PaymentRequestObject & {tagsObject: TagsObject},
|
|
152
|
+
paymentHash: Buffer
|
|
153
|
+
): void {
|
|
154
|
+
if(lp.getAddress(this.chainIdentifier)!==resp.intermediaryKey) throw new IntermediaryError("Invalid intermediary address/pubkey");
|
|
155
|
+
|
|
156
|
+
if(options.descriptionHash!=null && decodedPr.tagsObject.purpose_commit_hash!==options.descriptionHash.toString("hex"))
|
|
157
|
+
throw new IntermediaryError("Invalid pr returned - description hash");
|
|
158
|
+
|
|
159
|
+
if(
|
|
160
|
+
decodedPr.tagsObject.payment_hash==null ||
|
|
161
|
+
!Buffer.from(decodedPr.tagsObject.payment_hash, "hex").equals(paymentHash)
|
|
162
|
+
) throw new IntermediaryError("Invalid pr returned - payment hash");
|
|
163
|
+
|
|
164
|
+
if(decodedPr.millisatoshis==null) throw new IntermediaryError("Invalid pr returned - msat field");
|
|
165
|
+
|
|
166
|
+
if(!amountData.exactIn) {
|
|
167
|
+
if(resp.total != amountData.amount) throw new IntermediaryError("Invalid amount returned");
|
|
168
|
+
} else {
|
|
169
|
+
const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
|
|
170
|
+
if(amountIn !== amountData.amount) throw new IntermediaryError("Invalid payment request returned, amount mismatch");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Returns a newly created swap, receiving 'amount' on lightning network
|
|
176
|
+
*
|
|
177
|
+
* @param signer Smart chain signer's address intiating the swap
|
|
178
|
+
* @param amountData Amount of token & amount to swap
|
|
179
|
+
* @param lps LPs (liquidity providers) to get the quotes from
|
|
180
|
+
* @param options Quote options
|
|
181
|
+
* @param additionalParams Additional parameters sent to the LP when creating the swap
|
|
182
|
+
* @param abortSignal Abort signal for aborting the process
|
|
183
|
+
* @param preFetches
|
|
184
|
+
*/
|
|
185
|
+
create(
|
|
186
|
+
signer: string,
|
|
187
|
+
amountData: AmountData,
|
|
188
|
+
lps: Intermediary[],
|
|
189
|
+
options?: FromBTCLNOptions,
|
|
190
|
+
additionalParams?: Record<string, any>,
|
|
191
|
+
abortSignal?: AbortSignal,
|
|
192
|
+
preFetches?: {
|
|
193
|
+
usdPricePrefetchPromise: Promise<number | undefined>,
|
|
194
|
+
pricePrefetchPromise?: Promise<bigint | undefined>,
|
|
195
|
+
feeRatePromise?: Promise<string | undefined>
|
|
196
|
+
}
|
|
197
|
+
): {
|
|
198
|
+
quote: Promise<FromBTCLNSwap<T>>,
|
|
199
|
+
intermediary: Intermediary
|
|
200
|
+
}[] {
|
|
201
|
+
if(options==null) options = {};
|
|
202
|
+
options.unsafeSkipLnNodeCheck ??= this.options.unsafeSkipLnNodeCheck;
|
|
203
|
+
|
|
204
|
+
if(options.descriptionHash!=null && options.descriptionHash.length!==32)
|
|
205
|
+
throw new UserError("Invalid description hash length");
|
|
206
|
+
|
|
207
|
+
const {secret, paymentHash} = this.getSecretAndHash();
|
|
208
|
+
const claimHash = this.contract.getHashForHtlc(paymentHash);
|
|
209
|
+
|
|
210
|
+
const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
|
|
211
|
+
|
|
212
|
+
const _abortController = extendAbortController(abortSignal);
|
|
213
|
+
const _preFetches = {
|
|
214
|
+
pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
|
|
215
|
+
feeRatePromise: preFetches?.feeRatePromise ?? this.preFetchFeeRate(signer, amountData, claimHash.toString("hex"), _abortController),
|
|
216
|
+
usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return lps.map(lp => {
|
|
220
|
+
return {
|
|
221
|
+
intermediary: lp,
|
|
222
|
+
quote: (async () => {
|
|
223
|
+
if(lp.services[SwapType.FROM_BTCLN]==null) throw new Error("LP service for processing from btcln swaps not found!");
|
|
224
|
+
|
|
225
|
+
const abortController = extendAbortController(_abortController.signal);
|
|
226
|
+
|
|
227
|
+
const liquidityPromise: Promise<bigint | undefined> = this.preFetchIntermediaryLiquidity(amountData, lp, abortController);
|
|
228
|
+
|
|
229
|
+
const {lnCapacityPromise, resp} = await tryWithRetries(async(retryCount: number) => {
|
|
230
|
+
const {lnPublicKey, response} = IntermediaryAPI.initFromBTCLN(
|
|
231
|
+
this.chainIdentifier, lp.url, nativeTokenAddress,
|
|
232
|
+
{
|
|
233
|
+
paymentHash,
|
|
234
|
+
amount: amountData.amount,
|
|
235
|
+
claimer: signer,
|
|
236
|
+
token: amountData.token.toString(),
|
|
237
|
+
descriptionHash: options?.descriptionHash,
|
|
238
|
+
exactOut: !amountData.exactIn,
|
|
239
|
+
feeRate: throwIfUndefined(_preFetches.feeRatePromise),
|
|
240
|
+
additionalParams
|
|
241
|
+
},
|
|
242
|
+
this.options.postRequestTimeout, abortController.signal, retryCount>0 ? false : undefined
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
lnCapacityPromise: options?.unsafeSkipLnNodeCheck ? null : this.preFetchLnCapacity(lnPublicKey),
|
|
247
|
+
resp: await response
|
|
248
|
+
};
|
|
249
|
+
}, undefined, RequestError, abortController.signal);
|
|
250
|
+
|
|
251
|
+
const decodedPr = bolt11Decode(resp.pr);
|
|
252
|
+
if(decodedPr.millisatoshis==null) throw new IntermediaryError("Invalid returned swap invoice, no msat amount field");
|
|
253
|
+
if(decodedPr.timeExpireDate==null) throw new IntermediaryError("Invalid returned swap invoice, no expiry date field");
|
|
254
|
+
const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
|
|
255
|
+
|
|
256
|
+
try {
|
|
257
|
+
this.verifyReturnedData(resp, amountData, lp, options ?? {}, decodedPr, paymentHash);
|
|
258
|
+
const [pricingInfo] = await Promise.all([
|
|
259
|
+
this.verifyReturnedPrice(
|
|
260
|
+
lp.services[SwapType.FROM_BTCLN], false, amountIn, resp.total,
|
|
261
|
+
amountData.token, {}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
|
|
262
|
+
),
|
|
263
|
+
this.verifyIntermediaryLiquidity(resp.total, throwIfUndefined(liquidityPromise)),
|
|
264
|
+
lnCapacityPromise!=null ? this.verifyLnNodeCapacity(lp, decodedPr, lnCapacityPromise, abortController.signal) : Promise.resolve()
|
|
265
|
+
]);
|
|
266
|
+
|
|
267
|
+
const quote = new FromBTCLNSwap<T>(this, {
|
|
268
|
+
pricingInfo,
|
|
269
|
+
url: lp.url,
|
|
270
|
+
expiry: decodedPr.timeExpireDate*1000,
|
|
271
|
+
swapFee: resp.swapFee,
|
|
272
|
+
swapFeeBtc: resp.swapFee * amountIn / (resp.total - resp.swapFee),
|
|
273
|
+
feeRate: (await _preFetches.feeRatePromise)!,
|
|
274
|
+
initialSwapData: await this.contract.createSwapData(
|
|
275
|
+
ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), signer, amountData.token,
|
|
276
|
+
resp.total, claimHash.toString("hex"),
|
|
277
|
+
this.getRandomSequence(), BigInt(Math.floor(Date.now()/1000)), false, true,
|
|
278
|
+
resp.securityDeposit, 0n, nativeTokenAddress
|
|
279
|
+
),
|
|
280
|
+
pr: resp.pr,
|
|
281
|
+
secret: secret.toString("hex"),
|
|
282
|
+
exactIn: amountData.exactIn ?? true
|
|
283
|
+
} as FromBTCLNSwapInit<T["Data"]>);
|
|
284
|
+
await quote._save();
|
|
285
|
+
return quote;
|
|
286
|
+
} catch (e) {
|
|
287
|
+
abortController.abort(e);
|
|
288
|
+
throw e;
|
|
289
|
+
}
|
|
290
|
+
})()
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
|
|
297
|
+
*
|
|
298
|
+
* @param signer Smart chains signer's address intiating the swap
|
|
299
|
+
* @param lnurl LNURL-withdraw to withdraw funds from
|
|
300
|
+
* @param amountData Amount of token & amount to swap
|
|
301
|
+
* @param lps LPs (liquidity providers) to get the quotes from
|
|
302
|
+
* @param additionalParams Additional parameters sent to the LP when creating the swap
|
|
303
|
+
* @param abortSignal Abort signal for aborting the process
|
|
304
|
+
*/
|
|
305
|
+
async createViaLNURL(
|
|
306
|
+
signer: string,
|
|
307
|
+
lnurl: string | LNURLWithdrawParamsWithUrl,
|
|
308
|
+
amountData: AmountData,
|
|
309
|
+
lps: Intermediary[],
|
|
310
|
+
additionalParams?: Record<string, any>,
|
|
311
|
+
abortSignal?: AbortSignal
|
|
312
|
+
): Promise<{
|
|
313
|
+
quote: Promise<FromBTCLNSwap<T>>,
|
|
314
|
+
intermediary: Intermediary
|
|
315
|
+
}[]> {
|
|
316
|
+
if(!this.isInitialized) throw new Error("Not initialized, call init() first!");
|
|
317
|
+
|
|
318
|
+
const abortController = extendAbortController(abortSignal);
|
|
319
|
+
const preFetches = {
|
|
320
|
+
pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
|
|
321
|
+
usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
|
|
322
|
+
feeRatePromise: this.preFetchFeeRate(signer, amountData, undefined, abortController)
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
try {
|
|
326
|
+
const exactOutAmountPromise: Promise<bigint | undefined> | undefined = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price =>
|
|
327
|
+
this.prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)
|
|
328
|
+
).catch(e => {
|
|
329
|
+
abortController.abort(e);
|
|
330
|
+
return undefined;
|
|
331
|
+
}) : undefined;
|
|
332
|
+
|
|
333
|
+
const withdrawRequest = await this.getLNURLWithdraw(lnurl, abortController.signal);
|
|
334
|
+
|
|
335
|
+
const min = BigInt(withdrawRequest.minWithdrawable) / 1000n;
|
|
336
|
+
const max = BigInt(withdrawRequest.maxWithdrawable) / 1000n;
|
|
337
|
+
|
|
338
|
+
if(amountData.exactIn) {
|
|
339
|
+
if(amountData.amount < min) throw new UserError("Amount less than LNURL-withdraw minimum");
|
|
340
|
+
if(amountData.amount > max) throw new UserError("Amount more than LNURL-withdraw maximum");
|
|
341
|
+
} else {
|
|
342
|
+
const amount = (await exactOutAmountPromise)!;
|
|
343
|
+
abortController.signal.throwIfAborted();
|
|
344
|
+
|
|
345
|
+
if((amount * 95n / 100n) < min) throw new UserError("Amount less than LNURL-withdraw minimum");
|
|
346
|
+
if((amount * 105n / 100n) > max) throw new UserError("Amount more than LNURL-withdraw maximum");
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
return this.create(signer, amountData, lps, undefined, additionalParams, abortSignal, preFetches).map(data => {
|
|
350
|
+
return {
|
|
351
|
+
quote: data.quote.then(quote => {
|
|
352
|
+
quote.lnurl = withdrawRequest.url;
|
|
353
|
+
quote.lnurlK1 = withdrawRequest.k1;
|
|
354
|
+
quote.lnurlCallback = withdrawRequest.callback;
|
|
355
|
+
|
|
356
|
+
const amountIn = quote.getInput().rawAmount;
|
|
357
|
+
if(amountIn < min) throw new UserError("Amount less than LNURL-withdraw minimum");
|
|
358
|
+
if(amountIn > max) throw new UserError("Amount more than LNURL-withdraw maximum");
|
|
359
|
+
|
|
360
|
+
return quote;
|
|
361
|
+
}),
|
|
362
|
+
intermediary: data.intermediary
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
} catch (e) {
|
|
366
|
+
abortController.abort(e);
|
|
367
|
+
throw e;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
protected async _checkPastSwaps(pastSwaps: FromBTCLNSwap<T>[]): Promise<{
|
|
372
|
+
changedSwaps: FromBTCLNSwap<T>[];
|
|
373
|
+
removeSwaps: FromBTCLNSwap<T>[]
|
|
374
|
+
}> {
|
|
375
|
+
const changedSwapSet: Set<FromBTCLNSwap<T>> = new Set();
|
|
376
|
+
|
|
377
|
+
const swapExpiredStatus: {[id: string]: boolean} = {};
|
|
378
|
+
const checkStatusSwaps: (FromBTCLNSwap<T> & {data: T["Data"]})[] = [];
|
|
379
|
+
|
|
380
|
+
await Promise.all(pastSwaps.map(async (pastSwap) => {
|
|
381
|
+
if(pastSwap._shouldCheckIntermediary()) {
|
|
382
|
+
try {
|
|
383
|
+
const result = await pastSwap._checkIntermediaryPaymentReceived(false);
|
|
384
|
+
if(result!=null) {
|
|
385
|
+
changedSwapSet.add(pastSwap);
|
|
386
|
+
}
|
|
387
|
+
} catch (e) {
|
|
388
|
+
this.logger.error(`_checkPastSwaps(): Failed to contact LP regarding swap ${pastSwap.getId()}, error: `, e);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if(pastSwap._shouldFetchExpiryStatus()) {
|
|
392
|
+
//Check expiry
|
|
393
|
+
swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
|
|
394
|
+
}
|
|
395
|
+
if(pastSwap._shouldFetchCommitStatus()) {
|
|
396
|
+
//Add to swaps for which status should be checked
|
|
397
|
+
if(pastSwap.data!=null) checkStatusSwaps.push(pastSwap as (FromBTCLNSwap<T> & {data: T["Data"]}));
|
|
398
|
+
}
|
|
399
|
+
}));
|
|
400
|
+
|
|
401
|
+
const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({signer: val._getInitiator(), swapData: val.data})));
|
|
402
|
+
|
|
403
|
+
for(let pastSwap of checkStatusSwaps) {
|
|
404
|
+
const shouldSave = await pastSwap._sync(
|
|
405
|
+
false, swapExpiredStatus[pastSwap.getId()],
|
|
406
|
+
swapStatuses[pastSwap.getEscrowHash()!], true
|
|
407
|
+
);
|
|
408
|
+
if(shouldSave) {
|
|
409
|
+
changedSwapSet.add(pastSwap);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
const changedSwaps: FromBTCLNSwap<T>[] = [];
|
|
414
|
+
const removeSwaps: FromBTCLNSwap<T>[] = [];
|
|
415
|
+
changedSwapSet.forEach(val => {
|
|
416
|
+
if(val.isQuoteExpired()) {
|
|
417
|
+
removeSwaps.push(val);
|
|
418
|
+
} else {
|
|
419
|
+
changedSwaps.push(val);
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
return {
|
|
424
|
+
changedSwaps,
|
|
425
|
+
removeSwaps
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
}
|