@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,110 @@
|
|
|
1
|
+
import {ISwapWrapper, ISwapWrapperOptions, SwapTypeDefinition, WrapperCtorTokens} from "../../ISwapWrapper";
|
|
2
|
+
import {TrustedIntermediaryAPI} from "../../../intermediaries/apis/TrustedIntermediaryAPI";
|
|
3
|
+
import {IntermediaryError} from "../../../errors/IntermediaryError";
|
|
4
|
+
import {ChainType} from "@atomiqlabs/base";
|
|
5
|
+
import {OnchainForGasSwap, OnchainForGasSwapInit, OnchainForGasSwapState} from "./OnchainForGasSwap";
|
|
6
|
+
import {BitcoinRpcWithAddressIndex} from "../../../bitcoin/BitcoinRpcWithAddressIndex";
|
|
7
|
+
import {ISwapPrice} from "../../../prices/abstract/ISwapPrice";
|
|
8
|
+
import {EventEmitter} from "events";
|
|
9
|
+
import {Intermediary} from "../../../intermediaries/Intermediary";
|
|
10
|
+
import {SwapType} from "../../../enums/SwapType";
|
|
11
|
+
import {UnifiedSwapEventListener} from "../../../events/UnifiedSwapEventListener";
|
|
12
|
+
import {UnifiedSwapStorage} from "../../../storage/UnifiedSwapStorage";
|
|
13
|
+
import {ISwap} from "../../ISwap";
|
|
14
|
+
import {BTC_NETWORK} from "@scure/btc-signer/utils";
|
|
15
|
+
|
|
16
|
+
export type OnchainForGasWrapperOptions = ISwapWrapperOptions & {
|
|
17
|
+
bitcoinNetwork: BTC_NETWORK
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type OnchainForGasSwapTypeDefinition<T extends ChainType> = SwapTypeDefinition<T, OnchainForGasWrapper<T>, OnchainForGasSwap<T>>;
|
|
21
|
+
|
|
22
|
+
export class OnchainForGasWrapper<T extends ChainType> extends ISwapWrapper<T, OnchainForGasSwapTypeDefinition<T>, OnchainForGasWrapperOptions> {
|
|
23
|
+
public readonly TYPE = SwapType.TRUSTED_FROM_BTC;
|
|
24
|
+
public readonly swapDeserializer = OnchainForGasSwap;
|
|
25
|
+
|
|
26
|
+
readonly btcRpc: BitcoinRpcWithAddressIndex<any>;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @param chainIdentifier
|
|
30
|
+
* @param unifiedStorage Storage interface for the current environment
|
|
31
|
+
* @param unifiedChainEvents On-chain event listener
|
|
32
|
+
* @param chain
|
|
33
|
+
* @param prices Pricing to use
|
|
34
|
+
* @param tokens
|
|
35
|
+
* @param btcRpc Bitcoin RPC which also supports getting transactions by txoHash
|
|
36
|
+
* @param options
|
|
37
|
+
* @param events Instance to use for emitting events
|
|
38
|
+
*/
|
|
39
|
+
constructor(
|
|
40
|
+
chainIdentifier: string,
|
|
41
|
+
unifiedStorage: UnifiedSwapStorage<T>,
|
|
42
|
+
unifiedChainEvents: UnifiedSwapEventListener<T>,
|
|
43
|
+
chain: T["ChainInterface"],
|
|
44
|
+
prices: ISwapPrice,
|
|
45
|
+
tokens: WrapperCtorTokens,
|
|
46
|
+
btcRpc: BitcoinRpcWithAddressIndex<any>,
|
|
47
|
+
options: OnchainForGasWrapperOptions,
|
|
48
|
+
events?: EventEmitter<{swapState: [ISwap]}>
|
|
49
|
+
) {
|
|
50
|
+
super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, prices, tokens, options, events);
|
|
51
|
+
this.btcRpc = btcRpc;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Returns a newly created swap, receiving 'amount' base units of gas token
|
|
56
|
+
*
|
|
57
|
+
* @param signer
|
|
58
|
+
* @param amount Amount you wish to receive in base units
|
|
59
|
+
* @param lpOrUrl Intermediary/Counterparty swap service Intermediary object or raw url
|
|
60
|
+
* @param refundAddress Bitcoin address to receive refund on in case the counterparty cannot execute the swap
|
|
61
|
+
*/
|
|
62
|
+
async create(signer: string, amount: bigint, lpOrUrl: Intermediary | string, refundAddress?: string): Promise<OnchainForGasSwap<T>> {
|
|
63
|
+
if(!this.isInitialized) throw new Error("Not initialized, call init() first!");
|
|
64
|
+
|
|
65
|
+
const lpUrl = typeof(lpOrUrl)==="string" ? lpOrUrl : lpOrUrl.url;
|
|
66
|
+
|
|
67
|
+
const token = this.chain.getNativeCurrencyAddress();
|
|
68
|
+
|
|
69
|
+
const resp = await TrustedIntermediaryAPI.initTrustedFromBTC(this.chainIdentifier, lpUrl, {
|
|
70
|
+
address: signer,
|
|
71
|
+
amount,
|
|
72
|
+
refundAddress,
|
|
73
|
+
token
|
|
74
|
+
}, this.options.getRequestTimeout);
|
|
75
|
+
|
|
76
|
+
if(resp.total !== amount) throw new IntermediaryError("Invalid total returned");
|
|
77
|
+
|
|
78
|
+
const pricingInfo = await this.verifyReturnedPrice(
|
|
79
|
+
typeof(lpOrUrl)==="string" || lpOrUrl.services[SwapType.TRUSTED_FROM_BTC]==null ?
|
|
80
|
+
{swapFeePPM: 10000, swapBaseFee: 10} :
|
|
81
|
+
lpOrUrl.services[SwapType.TRUSTED_FROM_BTC],
|
|
82
|
+
false, resp.amountSats,
|
|
83
|
+
amount, this.chain.getNativeCurrencyAddress(), {}
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const quote = new OnchainForGasSwap(this, {
|
|
87
|
+
paymentHash: resp.paymentHash,
|
|
88
|
+
sequence: resp.sequence,
|
|
89
|
+
address: resp.btcAddress,
|
|
90
|
+
inputAmount: resp.amountSats,
|
|
91
|
+
outputAmount: resp.total,
|
|
92
|
+
recipient: signer,
|
|
93
|
+
refundAddress,
|
|
94
|
+
pricingInfo,
|
|
95
|
+
url: lpUrl,
|
|
96
|
+
expiry: resp.expiresAt,
|
|
97
|
+
swapFee: resp.swapFee,
|
|
98
|
+
swapFeeBtc: resp.swapFeeSats,
|
|
99
|
+
exactIn: false,
|
|
100
|
+
token
|
|
101
|
+
} as OnchainForGasSwapInit);
|
|
102
|
+
await quote._save();
|
|
103
|
+
return quote;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public readonly pendingSwapStates = [OnchainForGasSwapState.PR_CREATED];
|
|
107
|
+
public readonly tickSwapState = undefined;
|
|
108
|
+
protected processEvent = undefined;
|
|
109
|
+
|
|
110
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {toBigInt} from "../utils/Utils";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pricing information for swap validation
|
|
5
|
+
* @category Pricing and LPs
|
|
6
|
+
*/
|
|
7
|
+
export type PriceInfoType = {
|
|
8
|
+
isValid: boolean,
|
|
9
|
+
differencePPM: bigint,
|
|
10
|
+
satsBaseFee: bigint,
|
|
11
|
+
feePPM: bigint,
|
|
12
|
+
realPriceUSatPerToken?: bigint,
|
|
13
|
+
realPriceUsdPerBitcoin?: number,
|
|
14
|
+
swapPriceUSatPerToken: bigint
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Type guard for PriceInfoType
|
|
19
|
+
* @category Pricing and LPs
|
|
20
|
+
*/
|
|
21
|
+
export function isPriceInfoType(obj: any): obj is PriceInfoType {
|
|
22
|
+
return obj != null &&
|
|
23
|
+
typeof (obj.isValid) === "boolean" &&
|
|
24
|
+
typeof (obj.differencePPM) === "bigint" &&
|
|
25
|
+
typeof (obj.satsBaseFee) === "bigint" &&
|
|
26
|
+
typeof (obj.feePPM) === "bigint" &&
|
|
27
|
+
(obj.realPriceUSatPerToken == null || typeof (obj.realPriceUSatPerToken) === "bigint") &&
|
|
28
|
+
(obj.realPriceUsdPerBitcoin == null || typeof (obj.realPriceUsdPerBitcoin) === "number") &&
|
|
29
|
+
typeof (obj.swapPriceUSatPerToken) === "bigint";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Serializes PriceInfoType for storage
|
|
34
|
+
* @category Pricing and LPs
|
|
35
|
+
*/
|
|
36
|
+
export function serializePriceInfoType(obj: PriceInfoType | undefined): any {
|
|
37
|
+
if (obj == null) return null;
|
|
38
|
+
return {
|
|
39
|
+
isValid: obj.isValid,
|
|
40
|
+
differencePPM: obj.differencePPM == null ? null : obj.differencePPM.toString(10),
|
|
41
|
+
satsBaseFee: obj.satsBaseFee == null ? null : obj.satsBaseFee.toString(10),
|
|
42
|
+
feePPM: obj.feePPM == null ? null : obj.feePPM.toString(10),
|
|
43
|
+
realPriceUSatPerToken: obj.realPriceUSatPerToken == null ? null : obj.realPriceUSatPerToken.toString(10),
|
|
44
|
+
realPriceUsdPerBitcoin: obj.realPriceUsdPerBitcoin,
|
|
45
|
+
swapPriceUSatPerToken: obj.swapPriceUSatPerToken == null ? null : obj.swapPriceUSatPerToken.toString(10),
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Deserializes PriceInfoType from storage
|
|
51
|
+
* @category Pricing and LPs
|
|
52
|
+
*/
|
|
53
|
+
export function deserializePriceInfoType(obj: any): PriceInfoType | undefined {
|
|
54
|
+
if (obj == null) return;
|
|
55
|
+
if (
|
|
56
|
+
obj.isValid != null && obj.differencePPM != null && obj.satsBaseFee != null &&
|
|
57
|
+
obj.feePPM != null && obj.swapPriceUSatPerToken != null
|
|
58
|
+
) return {
|
|
59
|
+
isValid: obj.isValid,
|
|
60
|
+
differencePPM: toBigInt(obj.differencePPM),
|
|
61
|
+
satsBaseFee: toBigInt(obj.satsBaseFee),
|
|
62
|
+
feePPM: toBigInt(obj.feePPM),
|
|
63
|
+
realPriceUSatPerToken: toBigInt(obj.realPriceUSatPerToken),
|
|
64
|
+
realPriceUsdPerBitcoin: obj.realPriceUsdPerBitcoin,
|
|
65
|
+
swapPriceUSatPerToken: toBigInt(obj.swapPriceUSatPerToken),
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import {ISwap} from "../swaps/ISwap";
|
|
2
|
+
import {ChainType} from "@atomiqlabs/base";
|
|
3
|
+
import {IToBTCSwap} from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
|
|
4
|
+
import {IFromBTCSelfInitSwap} from "../swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap";
|
|
5
|
+
import {FromBTCLNSwap} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Proxy type that auto-injects signer into swap methods
|
|
9
|
+
* @category Swaps
|
|
10
|
+
*/
|
|
11
|
+
export type SwapWithSigner<T extends ISwap> = {
|
|
12
|
+
[K in keyof T]:
|
|
13
|
+
K extends "commit" ? (abortSignal?: AbortSignal, skipChecks?: boolean) => Promise<string> :
|
|
14
|
+
K extends "refund" ? (abortSignal?: AbortSignal) => Promise<string> :
|
|
15
|
+
K extends "claim" ? (abortSignal?: AbortSignal) => Promise<string> :
|
|
16
|
+
K extends "commitAndClaim" ? (abortSignal?: AbortSignal, skipChecks?: boolean) => Promise<string> :
|
|
17
|
+
T[K];
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Wraps a swap with automatic signer injection for methods like commit, refund, and claim
|
|
22
|
+
* @category Swaps
|
|
23
|
+
*/
|
|
24
|
+
export function wrapSwapWithSigner<C extends ChainType, T extends ISwap<C>>(swap: T, signer: C["Signer"]): SwapWithSigner<T> {
|
|
25
|
+
return new Proxy(swap, {
|
|
26
|
+
get: (target, prop, receiver) => {
|
|
27
|
+
// Override the "sayGoodbye" method
|
|
28
|
+
if (prop === "commit") {
|
|
29
|
+
if(swap instanceof IToBTCSwap || swap instanceof IFromBTCSelfInitSwap) {
|
|
30
|
+
return (abortSignal?: AbortSignal, skipChecks?: boolean) =>
|
|
31
|
+
swap.commit(signer, abortSignal, skipChecks);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (prop === "refund") {
|
|
35
|
+
if(swap instanceof IToBTCSwap) {
|
|
36
|
+
return (abortSignal?: AbortSignal) =>
|
|
37
|
+
swap.refund(signer, abortSignal);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (prop === "claim") {
|
|
41
|
+
if(swap instanceof IFromBTCSelfInitSwap) {
|
|
42
|
+
return (abortSignal?: AbortSignal) =>
|
|
43
|
+
swap.claim(signer, abortSignal);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (prop === "commitAndClaim") {
|
|
47
|
+
if(swap instanceof FromBTCLNSwap) {
|
|
48
|
+
return (abortSignal?: AbortSignal, skipChecks?: boolean) =>
|
|
49
|
+
swap.commitAndClaim(signer, abortSignal, skipChecks);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Delegate other properties and methods to the original instance
|
|
54
|
+
return Reflect.get(target, prop, receiver);
|
|
55
|
+
}
|
|
56
|
+
}) as SwapWithSigner<T>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitcoin token type (on-chain or lightning)
|
|
3
|
+
* @category Tokens
|
|
4
|
+
*/
|
|
5
|
+
export type BtcToken<L = boolean> = {
|
|
6
|
+
chain: "BTC",
|
|
7
|
+
lightning: L,
|
|
8
|
+
ticker: "BTC",
|
|
9
|
+
decimals: 8,
|
|
10
|
+
name: L extends true ? "Bitcoin (lightning L2)" : "Bitcoin (on-chain L1)",
|
|
11
|
+
displayDecimals?: number
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Type guard for BtcToken
|
|
16
|
+
* @category Tokens
|
|
17
|
+
*/
|
|
18
|
+
export function isBtcToken(obj: any): obj is BtcToken {
|
|
19
|
+
return typeof (obj) === "object" &&
|
|
20
|
+
obj.chain === "BTC" &&
|
|
21
|
+
typeof (obj.lightning) === "boolean" &&
|
|
22
|
+
typeof (obj.ticker) === "string" &&
|
|
23
|
+
typeof (obj.decimals) === "number" &&
|
|
24
|
+
typeof (obj.name) === "string";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Predefined Bitcoin token constants
|
|
29
|
+
* @category Tokens
|
|
30
|
+
*/
|
|
31
|
+
export const BitcoinTokens: {
|
|
32
|
+
BTC: BtcToken<false>,
|
|
33
|
+
BTCLN: BtcToken<true>
|
|
34
|
+
} = {
|
|
35
|
+
BTC: {
|
|
36
|
+
chain: "BTC",
|
|
37
|
+
lightning: false,
|
|
38
|
+
ticker: "BTC",
|
|
39
|
+
decimals: 8,
|
|
40
|
+
name: "Bitcoin (on-chain L1)"
|
|
41
|
+
},
|
|
42
|
+
BTCLN: {
|
|
43
|
+
chain: "BTC",
|
|
44
|
+
lightning: true,
|
|
45
|
+
ticker: "BTC",
|
|
46
|
+
decimals: 8,
|
|
47
|
+
name: "Bitcoin (lightning L2)"
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Smart Chain token type
|
|
52
|
+
* @category Tokens
|
|
53
|
+
*/
|
|
54
|
+
export type SCToken<ChainIdentifier extends string = string> = {
|
|
55
|
+
chain: "SC",
|
|
56
|
+
chainId: ChainIdentifier,
|
|
57
|
+
address: string,
|
|
58
|
+
ticker: string,
|
|
59
|
+
decimals: number,
|
|
60
|
+
displayDecimals?: number,
|
|
61
|
+
name: string
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Type guard for SCToken
|
|
66
|
+
* @category Tokens
|
|
67
|
+
*/
|
|
68
|
+
export function isSCToken(obj: any): obj is SCToken {
|
|
69
|
+
return typeof (obj) === "object" &&
|
|
70
|
+
obj.chain === "SC" &&
|
|
71
|
+
typeof (obj.chainId) === "string" &&
|
|
72
|
+
typeof (obj.address) === "string" &&
|
|
73
|
+
typeof (obj.ticker) === "string" &&
|
|
74
|
+
typeof (obj.decimals) === "number" &&
|
|
75
|
+
typeof (obj.name) === "string";
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Union type for all token types (BTC or smart chain)
|
|
80
|
+
* @category Tokens
|
|
81
|
+
*/
|
|
82
|
+
export type Token<ChainIdentifier extends string = string> = BtcToken | SCToken<ChainIdentifier>;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Type guard for Token
|
|
86
|
+
* @category Tokens
|
|
87
|
+
*/
|
|
88
|
+
export function isToken(obj: any): obj is Token {
|
|
89
|
+
return isBtcToken(obj) || isSCToken(obj);
|
|
90
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {ISwapPrice} from "../prices/abstract/ISwapPrice";
|
|
2
|
+
import {Token} from "./Token";
|
|
3
|
+
import {PriceInfoType} from "./PriceInfoType";
|
|
4
|
+
import {toDecimal} from "../utils/Utils";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents a token amount along with its formatted values and USD valuation helpers
|
|
8
|
+
* @category Tokens
|
|
9
|
+
*/
|
|
10
|
+
export type TokenAmount<
|
|
11
|
+
ChainIdentifier extends string = string,
|
|
12
|
+
T extends Token<ChainIdentifier> = Token<ChainIdentifier>
|
|
13
|
+
> = {
|
|
14
|
+
/**
|
|
15
|
+
* Raw amount in base units represented as bigint
|
|
16
|
+
*/
|
|
17
|
+
rawAmount: bigint,
|
|
18
|
+
/**
|
|
19
|
+
* Human readable amount with decimal places
|
|
20
|
+
*/
|
|
21
|
+
amount: string,
|
|
22
|
+
/**
|
|
23
|
+
* Number representation of the decimal token amount (can lose precision!)
|
|
24
|
+
*/
|
|
25
|
+
_amount: number,
|
|
26
|
+
/**
|
|
27
|
+
* Token associated with this amount
|
|
28
|
+
*/
|
|
29
|
+
token: T,
|
|
30
|
+
/**
|
|
31
|
+
* Fetches the current USD value of the amount
|
|
32
|
+
*
|
|
33
|
+
* @param abortSignal
|
|
34
|
+
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
35
|
+
* @returns A promise resolving to the current USD value of the token amount
|
|
36
|
+
*/
|
|
37
|
+
currentUsdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
38
|
+
/**
|
|
39
|
+
* Gets USD value of the amount, if this amount was returned from a swap it uses the USD value
|
|
40
|
+
* when the swap was created, otherwise fetches the usd value on-demand
|
|
41
|
+
*
|
|
42
|
+
* @param abortSignal
|
|
43
|
+
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
44
|
+
* @returns A promise resolving to the current USD value of the token amount
|
|
45
|
+
*/
|
|
46
|
+
usdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
47
|
+
/**
|
|
48
|
+
* USD value of the amount when swap was created - only present for token amounts obtained
|
|
49
|
+
* from swaps, left for convenience only, use usdValue() instead, which automatically
|
|
50
|
+
* recognizes which pricing to use (either past value if available or fetches it on-demand)
|
|
51
|
+
*/
|
|
52
|
+
pastUsdValue?: number,
|
|
53
|
+
/**
|
|
54
|
+
* Returns the string representation of the amount along with the token ticker in format: {amount} {ticker}
|
|
55
|
+
*/
|
|
56
|
+
toString: () => string
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Factory function to create a TokenAmount
|
|
61
|
+
* @category Tokens
|
|
62
|
+
*/
|
|
63
|
+
export function toTokenAmount<
|
|
64
|
+
ChainIdentifier extends string = string,
|
|
65
|
+
T extends Token<ChainIdentifier> = Token<ChainIdentifier>
|
|
66
|
+
>(
|
|
67
|
+
amount: bigint,
|
|
68
|
+
token: T,
|
|
69
|
+
prices: ISwapPrice,
|
|
70
|
+
pricingInfo?: PriceInfoType
|
|
71
|
+
): TokenAmount<ChainIdentifier, T> {
|
|
72
|
+
if (amount == null) return null!; //Shouldn't happen
|
|
73
|
+
const amountStr = toDecimal(amount, token.decimals, undefined, token.displayDecimals);
|
|
74
|
+
const _amount = parseFloat(amountStr);
|
|
75
|
+
|
|
76
|
+
let usdValue: number | undefined = undefined;
|
|
77
|
+
if (pricingInfo != null) {
|
|
78
|
+
if (token.chain === "BTC" && token.ticker === "BTC") {
|
|
79
|
+
if (pricingInfo.realPriceUsdPerBitcoin != null) {
|
|
80
|
+
usdValue = Number(amount) * pricingInfo.realPriceUsdPerBitcoin;
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
if (pricingInfo.realPriceUsdPerBitcoin != null && pricingInfo.realPriceUSatPerToken != null) {
|
|
84
|
+
usdValue = _amount
|
|
85
|
+
* pricingInfo.realPriceUsdPerBitcoin
|
|
86
|
+
* Number(pricingInfo.realPriceUSatPerToken)
|
|
87
|
+
/ 1_000_000;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const currentUsdValue = (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) =>
|
|
93
|
+
prices.getUsdValue(amount, token, abortSignal, preFetchedUsdPrice);
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
rawAmount: amount,
|
|
97
|
+
amount: amountStr,
|
|
98
|
+
_amount,
|
|
99
|
+
token,
|
|
100
|
+
currentUsdValue,
|
|
101
|
+
pastUsdValue: usdValue,
|
|
102
|
+
usdValue: async (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => {
|
|
103
|
+
if (usdValue == null) {
|
|
104
|
+
usdValue = await currentUsdValue(abortSignal, preFetchedUsdPrice);
|
|
105
|
+
}
|
|
106
|
+
return usdValue;
|
|
107
|
+
},
|
|
108
|
+
toString: () => amountStr + " " + token.ticker
|
|
109
|
+
};
|
|
110
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {PercentagePPM} from "./PercentagePPM";
|
|
2
|
+
import {TokenAmount} from "../TokenAmount";
|
|
3
|
+
import {Token} from "../Token";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents a fee in both source and destination tokens, as well as providing USD valuation helpers and
|
|
7
|
+
* fee composition
|
|
8
|
+
* @category Pricing and LPs
|
|
9
|
+
*/
|
|
10
|
+
export type Fee<
|
|
11
|
+
ChainIdentifier extends string = string,
|
|
12
|
+
TSrc extends Token<ChainIdentifier> = Token<ChainIdentifier>,
|
|
13
|
+
TDst extends Token<ChainIdentifier> = Token<ChainIdentifier>
|
|
14
|
+
> = {
|
|
15
|
+
/**
|
|
16
|
+
* Fee value equivalent in source token
|
|
17
|
+
*/
|
|
18
|
+
amountInSrcToken: TokenAmount<ChainIdentifier, TSrc>,
|
|
19
|
+
/**
|
|
20
|
+
* Fee value equivalent in destination token
|
|
21
|
+
*/
|
|
22
|
+
amountInDstToken: TokenAmount<ChainIdentifier, TDst>,
|
|
23
|
+
/**
|
|
24
|
+
* Fetches the current USD value of the fee
|
|
25
|
+
*
|
|
26
|
+
* @param abortSignal
|
|
27
|
+
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
28
|
+
* @returns A promise resolving to the current USD value of the token amount
|
|
29
|
+
*/
|
|
30
|
+
currentUsdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
31
|
+
/**
|
|
32
|
+
* Gets USD value of the fee, if the USD value when the swap was created is known (newer swaps) it returns this value,
|
|
33
|
+
* otherwise fetches the usd value on-demand
|
|
34
|
+
*
|
|
35
|
+
* @param abortSignal
|
|
36
|
+
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
37
|
+
* @returns A promise resolving to the current USD value of the fee
|
|
38
|
+
*/
|
|
39
|
+
usdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
40
|
+
/**
|
|
41
|
+
* USD value of the fee when swap was created - only present for newer swaps where the USD value at create
|
|
42
|
+
* time is known. Left for convenience only, use usdValue() instead, which automatically
|
|
43
|
+
* recognizes which pricing to use (either past value if available or fetches it on-demand)
|
|
44
|
+
*/
|
|
45
|
+
pastUsdValue?: number,
|
|
46
|
+
/**
|
|
47
|
+
* Returns the composition of the fee (base fee + percentage fee) if known, the total fee is calculated as:
|
|
48
|
+
* base_fee + amount * percentage_fee
|
|
49
|
+
*/
|
|
50
|
+
composition?: {
|
|
51
|
+
base: TokenAmount<ChainIdentifier>,
|
|
52
|
+
percentage: PercentagePPM
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {FeeType} from "../../enums/FeeType";
|
|
2
|
+
import {Fee} from "./Fee";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Breakdown of fees by type (swap fee vs network fee)
|
|
6
|
+
* @category Pricing and LPs
|
|
7
|
+
*/
|
|
8
|
+
export type FeeBreakdown<ChainIdentifier extends string = string> = {
|
|
9
|
+
type: FeeType,
|
|
10
|
+
fee: Fee<ChainIdentifier>
|
|
11
|
+
}[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parts-per-million fee representation with conversion helpers
|
|
3
|
+
* @category Pricing and LPs
|
|
4
|
+
*/
|
|
5
|
+
export type PercentagePPM = {
|
|
6
|
+
ppm: bigint,
|
|
7
|
+
decimal: number,
|
|
8
|
+
percentage: number,
|
|
9
|
+
toString: (decimal?: number) => string
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Converts parts-per-million to percentage representation
|
|
14
|
+
* @category Pricing and LPs
|
|
15
|
+
*/
|
|
16
|
+
export function ppmToPercentage(ppm: bigint): PercentagePPM {
|
|
17
|
+
const percentage = Number(ppm) / 10_000;
|
|
18
|
+
return {
|
|
19
|
+
ppm,
|
|
20
|
+
decimal: Number(ppm) / 1_000_000,
|
|
21
|
+
percentage: percentage,
|
|
22
|
+
toString: (decimals?: number) => (decimals != null ? percentage.toFixed(decimals) : percentage) + "%"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LNURL-pay request parameters
|
|
3
|
+
* @category Bitcoin
|
|
4
|
+
*/
|
|
5
|
+
export type LNURLPayParams = {
|
|
6
|
+
tag: "payRequest";
|
|
7
|
+
callback: string;
|
|
8
|
+
domain: string;
|
|
9
|
+
minSendable: number;
|
|
10
|
+
maxSendable: number;
|
|
11
|
+
metadata: string;
|
|
12
|
+
decodedMetadata: string[][];
|
|
13
|
+
commentAllowed: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* LNURL-pay parameters with URL
|
|
18
|
+
* @category Bitcoin
|
|
19
|
+
*/
|
|
20
|
+
export type LNURLPayParamsWithUrl = LNURLPayParams & { url: string };
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* LNURL-pay specification
|
|
24
|
+
* @category Bitcoin
|
|
25
|
+
*/
|
|
26
|
+
export type LNURLPay = {
|
|
27
|
+
type: "pay",
|
|
28
|
+
min: bigint,
|
|
29
|
+
max: bigint,
|
|
30
|
+
commentMaxLength: number,
|
|
31
|
+
shortDescription?: string,
|
|
32
|
+
longDescription?: string,
|
|
33
|
+
icon?: string,
|
|
34
|
+
params: LNURLPayParamsWithUrl
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Type guard for LNURL-pay parameters
|
|
39
|
+
* @category Bitcoin
|
|
40
|
+
*/
|
|
41
|
+
export function isLNURLPayParams(obj: any): obj is LNURLPayParams {
|
|
42
|
+
return obj.tag === "payRequest";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Type guard for LNURL-pay
|
|
47
|
+
* @category Bitcoin
|
|
48
|
+
*/
|
|
49
|
+
export function isLNURLPay(value: any): value is LNURLPay {
|
|
50
|
+
return (
|
|
51
|
+
typeof value === "object" &&
|
|
52
|
+
value != null &&
|
|
53
|
+
value.type === "pay" &&
|
|
54
|
+
typeof (value.min) === "bigint" &&
|
|
55
|
+
typeof (value.max) === "bigint" &&
|
|
56
|
+
typeof value.commentMaxLength === "number" &&
|
|
57
|
+
(value.shortDescription === undefined || typeof value.shortDescription === "string") &&
|
|
58
|
+
(value.longDescription === undefined || typeof value.longDescription === "string") &&
|
|
59
|
+
(value.icon === undefined || typeof value.icon === "string") &&
|
|
60
|
+
isLNURLPayParams(value.params)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Decoded LNURL-pay success action
|
|
66
|
+
* @category Bitcoin
|
|
67
|
+
*/
|
|
68
|
+
export type LNURLDecodedSuccessAction = {
|
|
69
|
+
description: string,
|
|
70
|
+
text?: string,
|
|
71
|
+
url?: string
|
|
72
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LNURL-withdraw request parameters
|
|
3
|
+
* @category Bitcoin
|
|
4
|
+
*/
|
|
5
|
+
export type LNURLWithdrawParams = {
|
|
6
|
+
tag: "withdrawRequest";
|
|
7
|
+
k1: string;
|
|
8
|
+
callback: string;
|
|
9
|
+
domain: string;
|
|
10
|
+
minWithdrawable: number;
|
|
11
|
+
maxWithdrawable: number;
|
|
12
|
+
defaultDescription: string;
|
|
13
|
+
balanceCheck?: string;
|
|
14
|
+
payLink?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* LNURL-withdraw parameters with URL
|
|
19
|
+
* @category Bitcoin
|
|
20
|
+
*/
|
|
21
|
+
export type LNURLWithdrawParamsWithUrl = LNURLWithdrawParams & { url: string };
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* LNURL-withdraw specification
|
|
25
|
+
* @category Bitcoin
|
|
26
|
+
*/
|
|
27
|
+
export type LNURLWithdraw = {
|
|
28
|
+
type: "withdraw",
|
|
29
|
+
min: bigint,
|
|
30
|
+
max: bigint,
|
|
31
|
+
params: LNURLWithdrawParamsWithUrl
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Type guard for LNURL-withdraw
|
|
36
|
+
* @category Bitcoin
|
|
37
|
+
*/
|
|
38
|
+
export function isLNURLWithdraw(value: any): value is LNURLWithdraw {
|
|
39
|
+
return (
|
|
40
|
+
typeof value === "object" &&
|
|
41
|
+
value != null &&
|
|
42
|
+
value.type === "withdraw" &&
|
|
43
|
+
typeof (value.min) === "bigint" &&
|
|
44
|
+
typeof (value.max) === "bigint" &&
|
|
45
|
+
isLNURLWithdrawParams(value.params)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Type guard for LNURL-withdraw parameters
|
|
51
|
+
* @category Bitcoin
|
|
52
|
+
*/
|
|
53
|
+
export function isLNURLWithdrawParams(obj: any): obj is LNURLWithdrawParams {
|
|
54
|
+
return obj.tag === "withdrawRequest";
|
|
55
|
+
}
|