@atomiqlabs/sdk 8.8.3 → 8.8.4
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/LICENSE +201 -201
- package/README.md +1760 -1760
- package/dist/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -7
- package/dist/bitcoin/coinselect2/accumulative.js +52 -52
- package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -7
- package/dist/bitcoin/coinselect2/blackjack.js +38 -38
- package/dist/bitcoin/coinselect2/index.d.ts +20 -20
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +82 -82
- package/dist/bitcoin/coinselect2/utils.js +158 -158
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -113
- package/dist/bitcoin/wallet/BitcoinWallet.js +335 -335
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -116
- package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -106
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -196
- package/dist/enums/FeeType.d.ts +15 -15
- package/dist/enums/FeeType.js +19 -19
- package/dist/enums/SwapAmountType.d.ts +15 -15
- package/dist/enums/SwapAmountType.js +19 -19
- package/dist/enums/SwapDirection.d.ts +15 -15
- package/dist/enums/SwapDirection.js +19 -19
- package/dist/enums/SwapSide.d.ts +15 -15
- package/dist/enums/SwapSide.js +19 -19
- package/dist/enums/SwapType.d.ts +75 -75
- package/dist/enums/SwapType.js +79 -79
- package/dist/errors/IntermediaryError.d.ts +13 -13
- package/dist/errors/IntermediaryError.js +27 -27
- package/dist/errors/RequestError.d.ts +32 -32
- package/dist/errors/RequestError.js +54 -54
- package/dist/errors/UserError.d.ts +8 -8
- package/dist/errors/UserError.js +16 -16
- package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
- package/dist/events/UnifiedSwapEventListener.js +132 -132
- package/dist/http/HttpUtils.d.ts +27 -27
- package/dist/http/HttpUtils.js +91 -91
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
- package/dist/http/paramcoders/ParamEncoder.js +36 -36
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
- package/dist/http/paramcoders/SchemaVerifier.js +145 -145
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -174
- package/dist/index.d.ts +85 -85
- package/dist/index.js +158 -158
- package/dist/intermediaries/Intermediary.d.ts +178 -178
- package/dist/intermediaries/Intermediary.js +166 -166
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +211 -211
- package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +450 -450
- package/dist/intermediaries/apis/IntermediaryAPI.js +618 -618
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- package/dist/lnurl/LNURL.d.ts +102 -102
- package/dist/lnurl/LNURL.js +321 -321
- package/dist/prices/RedundantSwapPrice.d.ts +110 -110
- package/dist/prices/RedundantSwapPrice.js +222 -222
- package/dist/prices/SingleSwapPrice.d.ts +34 -34
- package/dist/prices/SingleSwapPrice.js +44 -44
- package/dist/prices/SwapPriceWithChain.d.ts +107 -107
- package/dist/prices/SwapPriceWithChain.js +128 -128
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
- package/dist/prices/abstract/IPriceProvider.js +74 -74
- package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
- package/dist/prices/abstract/ISwapPrice.js +279 -279
- package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
- package/dist/prices/providers/BinancePriceProvider.js +30 -30
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
- package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
- package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
- package/dist/prices/providers/CustomPriceProvider.js +35 -35
- package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
- package/dist/prices/providers/KrakenPriceProvider.js +45 -45
- package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
- package/dist/prices/providers/OKXPriceProvider.js +29 -29
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
- package/dist/storage/IUnifiedStorage.d.ts +85 -85
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
- package/dist/storage/UnifiedSwapStorage.js +116 -116
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
- package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
- package/dist/storage-browser/LocalStorageManager.js +93 -93
- package/dist/swapper/Swapper.d.ts +732 -732
- package/dist/swapper/Swapper.js +1713 -1713
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +206 -206
- package/dist/swapper/SwapperUtils.js +481 -481
- package/dist/swapper/SwapperWithChain.d.ts +404 -404
- package/dist/swapper/SwapperWithChain.js +469 -469
- package/dist/swapper/SwapperWithSigner.d.ts +322 -322
- package/dist/swapper/SwapperWithSigner.js +318 -318
- package/dist/swaps/IAddressSwap.d.ts +22 -22
- package/dist/swaps/IAddressSwap.js +14 -14
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +18 -18
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +15 -15
- package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
- package/dist/swaps/IClaimableSwapWrapper.js +2 -2
- package/dist/swaps/IRefundableSwap.d.ts +43 -43
- package/dist/swaps/IRefundableSwap.js +14 -14
- package/dist/swaps/ISwap.d.ts +392 -392
- package/dist/swaps/ISwap.js +349 -349
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -12
- package/dist/swaps/ISwapWrapper.d.ts +285 -285
- package/dist/swaps/ISwapWrapper.js +353 -353
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +170 -170
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +128 -128
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +105 -105
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +129 -129
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +531 -531
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +190 -190
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -583
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +235 -235
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +202 -202
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +251 -251
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +536 -536
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +132 -132
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +637 -637
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1448
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -257
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
- package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +83 -83
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -69
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
- package/dist/types/AmountData.d.ts +10 -10
- package/dist/types/AmountData.js +2 -2
- package/dist/types/CustomPriceFunction.d.ts +11 -11
- package/dist/types/CustomPriceFunction.js +2 -2
- package/dist/types/PriceInfoType.d.ts +28 -28
- package/dist/types/PriceInfoType.js +57 -57
- package/dist/types/SwapExecutionAction.d.ts +88 -88
- package/dist/types/SwapExecutionAction.js +2 -2
- package/dist/types/SwapStateInfo.d.ts +5 -5
- package/dist/types/SwapStateInfo.js +2 -2
- package/dist/types/SwapWithSigner.d.ts +17 -17
- package/dist/types/SwapWithSigner.js +43 -43
- package/dist/types/Token.d.ts +99 -99
- package/dist/types/Token.js +76 -76
- package/dist/types/TokenAmount.d.ts +69 -69
- package/dist/types/TokenAmount.js +60 -60
- package/dist/types/fees/Fee.d.ts +50 -50
- package/dist/types/fees/Fee.js +2 -2
- package/dist/types/fees/FeeBreakdown.d.ts +11 -11
- package/dist/types/fees/FeeBreakdown.js +2 -2
- package/dist/types/fees/PercentagePPM.d.ts +17 -17
- package/dist/types/fees/PercentagePPM.js +18 -18
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +31 -31
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +27 -27
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
- package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
- package/dist/utils/BitcoinUtils.d.ts +16 -16
- package/dist/utils/BitcoinUtils.js +141 -141
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +14 -14
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +12 -12
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +67 -67
- package/dist/utils/SwapUtils.d.ts +88 -88
- package/dist/utils/SwapUtils.js +72 -72
- package/dist/utils/TimeoutUtils.d.ts +17 -17
- package/dist/utils/TimeoutUtils.js +55 -55
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +37 -37
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +67 -67
- package/dist/utils/Utils.js +208 -208
- package/package.json +43 -43
- package/src/SmartChainAssets.ts +186 -186
- package/src/bitcoin/coinselect2/accumulative.ts +69 -69
- package/src/bitcoin/coinselect2/blackjack.ts +50 -50
- package/src/bitcoin/coinselect2/index.ts +93 -93
- package/src/bitcoin/coinselect2/utils.ts +236 -236
- package/src/bitcoin/wallet/BitcoinWallet.ts +439 -439
- package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -140
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -225
- package/src/enums/FeeType.ts +15 -15
- package/src/enums/SwapAmountType.ts +16 -16
- package/src/enums/SwapDirection.ts +15 -15
- package/src/enums/SwapSide.ts +16 -16
- package/src/enums/SwapType.ts +75 -75
- package/src/errors/IntermediaryError.ts +28 -28
- package/src/errors/RequestError.ts +64 -64
- package/src/errors/UserError.ts +15 -15
- package/src/events/UnifiedSwapEventListener.ts +173 -173
- package/src/http/HttpUtils.ts +91 -91
- package/src/http/paramcoders/IParamReader.ts +9 -9
- package/src/http/paramcoders/ParamDecoder.ts +145 -145
- package/src/http/paramcoders/ParamEncoder.ts +40 -40
- package/src/http/paramcoders/SchemaVerifier.ts +153 -153
- package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
- package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
- package/src/http/paramcoders/client/StreamingFetchPromise.ts +192 -192
- package/src/index.ts +140 -140
- package/src/intermediaries/Intermediary.ts +280 -280
- package/src/intermediaries/IntermediaryDiscovery.ts +541 -541
- package/src/intermediaries/apis/IntermediaryAPI.ts +963 -963
- package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -257
- package/src/lnurl/LNURL.ts +402 -402
- package/src/prices/RedundantSwapPrice.ts +264 -264
- package/src/prices/SingleSwapPrice.ts +50 -50
- package/src/prices/SwapPriceWithChain.ts +194 -194
- package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
- package/src/prices/abstract/IPriceProvider.ts +127 -127
- package/src/prices/abstract/ISwapPrice.ts +390 -390
- package/src/prices/providers/BinancePriceProvider.ts +48 -48
- package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
- package/src/prices/providers/CustomPriceProvider.ts +40 -40
- package/src/prices/providers/KrakenPriceProvider.ts +83 -83
- package/src/prices/providers/OKXPriceProvider.ts +59 -59
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
- package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
- package/src/storage/IUnifiedStorage.ts +95 -95
- package/src/storage/UnifiedSwapStorage.ts +141 -141
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
- package/src/storage-browser/LocalStorageManager.ts +106 -106
- package/src/swapper/Swapper.ts +2488 -2488
- package/src/swapper/SwapperFactory.ts +307 -307
- package/src/swapper/SwapperUtils.ts +570 -570
- package/src/swapper/SwapperWithChain.ts +707 -707
- package/src/swapper/SwapperWithSigner.ts +511 -511
- package/src/swaps/IAddressSwap.ts +30 -30
- package/src/swaps/IBTCWalletSwap.ts +92 -92
- package/src/swaps/IClaimableSwap.ts +65 -65
- package/src/swaps/IClaimableSwapWrapper.ts +17 -17
- package/src/swaps/IRefundableSwap.ts +58 -58
- package/src/swaps/ISwap.ts +703 -703
- package/src/swaps/ISwapWithGasDrop.ts +25 -25
- package/src/swaps/ISwapWrapper.ts +539 -539
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +269 -269
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +282 -282
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +169 -169
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1473 -1474
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +601 -601
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1582 -1582
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +750 -750
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1299 -1299
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +610 -610
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1096 -1096
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +786 -786
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +401 -401
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1812 -1812
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1236
- package/src/swaps/trusted/ln/LnForGasSwap.ts +589 -589
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +91 -91
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +862 -862
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +131 -131
- package/src/types/AmountData.ts +9 -9
- package/src/types/CustomPriceFunction.ts +11 -11
- package/src/types/PriceInfoType.ts +66 -66
- package/src/types/SwapExecutionAction.ts +99 -99
- package/src/types/SwapStateInfo.ts +6 -6
- package/src/types/SwapWithSigner.ts +61 -61
- package/src/types/Token.ts +163 -163
- package/src/types/TokenAmount.ts +132 -132
- package/src/types/fees/Fee.ts +56 -56
- package/src/types/fees/FeeBreakdown.ts +11 -11
- package/src/types/fees/PercentagePPM.ts +26 -26
- package/src/types/lnurl/LNURLPay.ts +79 -79
- package/src/types/lnurl/LNURLWithdraw.ts +61 -61
- package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
- package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
- package/src/utils/BitcoinUtils.ts +132 -132
- package/src/utils/BitcoinWalletUtils.ts +15 -15
- package/src/utils/Logger.ts +14 -14
- package/src/utils/RetryUtils.ts +78 -78
- package/src/utils/SwapUtils.ts +99 -99
- package/src/utils/TimeoutUtils.ts +49 -49
- package/src/utils/TokenUtils.ts +33 -33
- package/src/utils/TypeUtils.ts +8 -8
- package/src/utils/Utils.ts +212 -212
|
@@ -1,307 +1,307 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChainData,
|
|
3
|
-
BitcoinNetwork,
|
|
4
|
-
ChainType,
|
|
5
|
-
StorageObject,
|
|
6
|
-
IStorageManager, Messenger, ChainInitializer, BtcRelay
|
|
7
|
-
} from "@atomiqlabs/base";
|
|
8
|
-
import {SmartChainAssets, SmartChainAssetTickers} from "../SmartChainAssets";
|
|
9
|
-
import {NostrMessenger} from "@atomiqlabs/messenger-nostr";
|
|
10
|
-
import {Swapper, SwapperOptions} from "./Swapper";
|
|
11
|
-
import {CustomPriceProvider} from "../prices/providers/CustomPriceProvider";
|
|
12
|
-
import {BitcoinTokens, BtcToken, SCToken, Token} from "../types/Token";
|
|
13
|
-
import {SwapType} from "../enums/SwapType";
|
|
14
|
-
import {SwapTypeMapping} from "../utils/SwapUtils";
|
|
15
|
-
import {RedundantSwapPrice, RedundantSwapPriceAssets} from "../prices/RedundantSwapPrice";
|
|
16
|
-
import {LocalStorageManager} from "../storage-browser/LocalStorageManager";
|
|
17
|
-
import {SingleSwapPrice} from "../prices/SingleSwapPrice";
|
|
18
|
-
import {CustomPriceFunction} from "../types/CustomPriceFunction";
|
|
19
|
-
import {MempoolApi, MempoolBitcoinRpc, MempoolBtcRelaySynchronizer} from "@atomiqlabs/btc-mempool";
|
|
20
|
-
|
|
21
|
-
//Helper types
|
|
22
|
-
/**
|
|
23
|
-
* Token definitions for a specific chain
|
|
24
|
-
*/
|
|
25
|
-
type TypedChainTokens<T extends ChainInitializer<any, any, any>> = {
|
|
26
|
-
[val in keyof T["tokens"]]: SCToken<T["chainId"]>
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Token resolver for a specific chain
|
|
30
|
-
*/
|
|
31
|
-
type TypedChainTokenResolver<T extends ChainInitializer<any, any, any>> = {
|
|
32
|
-
getToken: (address: string) => SCToken<T["chainId"]>
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
type ChainTypeDict<T extends ChainInitializer<any, any, any>> = {[K in T["chainId"]]: T["chainType"]};
|
|
36
|
-
type ToMultichain<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
37
|
-
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
38
|
-
? ChainTypeDict<First> & ToMultichain<Rest>
|
|
39
|
-
: {});
|
|
40
|
-
|
|
41
|
-
type TokensDict<T extends ChainInitializer<any, any, any>> = {
|
|
42
|
-
[K in T["chainId"]]: TypedChainTokens<T>
|
|
43
|
-
};
|
|
44
|
-
type GetAllTokens<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
45
|
-
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
46
|
-
? TokensDict<First> & GetAllTokens<Rest>
|
|
47
|
-
: unknown);
|
|
48
|
-
|
|
49
|
-
type TokenResolverDict<T extends ChainInitializer<any, any, any>> = {
|
|
50
|
-
[K in T["chainId"]]: TypedChainTokenResolver<T>
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
type OptionsDict<T extends ChainInitializer<any, any, any>> = {[K in T["chainId"]]: T["options"]};
|
|
54
|
-
type GetAllOptions<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
55
|
-
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
56
|
-
? OptionsDict<First> & GetAllOptions<Rest>
|
|
57
|
-
: unknown);
|
|
58
|
-
|
|
59
|
-
//Exported types
|
|
60
|
-
/**
|
|
61
|
-
* Configuration options for creating a Swapper instance
|
|
62
|
-
*
|
|
63
|
-
* @category Core
|
|
64
|
-
*/
|
|
65
|
-
export type TypedSwapperOptions<T extends readonly ChainInitializer<any, any, any>[]> = {
|
|
66
|
-
/**
|
|
67
|
-
* A dictionary with chain-specific settings, like RPC URLs and others
|
|
68
|
-
*/
|
|
69
|
-
chains: GetAllOptions<T>,
|
|
70
|
-
/**
|
|
71
|
-
* A function callback to retrieve a specific named storage container for key-value persistency. If not present, the
|
|
72
|
-
* default browser Local Storage adapter is used. When you use the SDK in non-browser based environments you need
|
|
73
|
-
* to provide this callback such that the SDK is able to use a custom storage adapter.
|
|
74
|
-
*
|
|
75
|
-
* @param storageName Name of the container to retrieve
|
|
76
|
-
*/
|
|
77
|
-
chainStorageCtor?: <T extends StorageObject>(storageName: string) => IStorageManager<T>,
|
|
78
|
-
/**
|
|
79
|
-
* Maximum allowed pricing difference between intermediary (LP) returned rate and current market rate. In
|
|
80
|
-
* parts-per-million, e.g. 2% is written as `20000`.
|
|
81
|
-
*/
|
|
82
|
-
pricingFeeDifferencePPM?: bigint,
|
|
83
|
-
/**
|
|
84
|
-
* Optional pricing function to use instead of default pricing APIs. See {@link CustomPriceFunction} for details.
|
|
85
|
-
*/
|
|
86
|
-
getPriceFn?: CustomPriceFunction,
|
|
87
|
-
/**
|
|
88
|
-
* Mempool API instance or URLs to use, if not provided the defaults will be used for the specified bitcoin network
|
|
89
|
-
*/
|
|
90
|
-
mempoolApi?: MempoolApi | MempoolBitcoinRpc | string | string[],
|
|
91
|
-
/**
|
|
92
|
-
* Data propagation messenger instance to use for broadcasting data to watchtowers. By default, a Nostr-based
|
|
93
|
-
* messenger is used.
|
|
94
|
-
*/
|
|
95
|
-
messenger?: Messenger,
|
|
96
|
-
} & SwapperOptions;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Token resolvers for all chains, resolve tokens based on their address
|
|
100
|
-
*
|
|
101
|
-
* @category Core
|
|
102
|
-
*/
|
|
103
|
-
export type TypedTokenResolvers<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
104
|
-
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
105
|
-
? TokenResolverDict<First> & TypedTokenResolvers<Rest>
|
|
106
|
-
: unknown);
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* All tokens including Bitcoin tokens
|
|
110
|
-
*
|
|
111
|
-
* @category Core
|
|
112
|
-
*/
|
|
113
|
-
export type TypedTokens<T extends readonly ChainInitializer<any, ChainType, any>[]> = GetAllTokens<T> & {
|
|
114
|
-
BITCOIN: {
|
|
115
|
-
BTC: BtcToken<false>,
|
|
116
|
-
BTCLN: BtcToken<true>
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Type alias for a Swapper instance with typed chain support
|
|
122
|
-
*
|
|
123
|
-
* @category Core
|
|
124
|
-
*/
|
|
125
|
-
export type TypedSwapper<T extends readonly ChainInitializer<any, ChainType, any>[]> = Swapper<ToMultichain<T>>;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Type alias for a specific swap type
|
|
129
|
-
*
|
|
130
|
-
* @category Core
|
|
131
|
-
*/
|
|
132
|
-
export type TypedSwap<
|
|
133
|
-
T extends ChainInitializer<any, ChainType, any>,
|
|
134
|
-
S extends SwapType
|
|
135
|
-
> = SwapTypeMapping<T["chainType"]>[S];
|
|
136
|
-
|
|
137
|
-
const registries: {[key in BitcoinNetwork]?: string} = {
|
|
138
|
-
[BitcoinNetwork.MAINNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main",
|
|
139
|
-
[BitcoinNetwork.TESTNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main",
|
|
140
|
-
[BitcoinNetwork.TESTNET4]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-testnet4.json?ref=main"
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const trustedIntermediaries: {[key in BitcoinNetwork]?: string} = {
|
|
144
|
-
[BitcoinNetwork.MAINNET]: "https://node3.gethopa.com:34100",
|
|
145
|
-
[BitcoinNetwork.TESTNET]: "https://node3.gethopa.com:24100"
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
const mempoolUrls: {[key in BitcoinNetwork]?: string[]} = {
|
|
149
|
-
[BitcoinNetwork.MAINNET]: [
|
|
150
|
-
"https://mempool.space/api/",
|
|
151
|
-
// "https://mempool.holdings/api/",
|
|
152
|
-
"https://mempool.fra.mempool.space/api/",
|
|
153
|
-
"https://mempool.va1.mempool.space/api/",
|
|
154
|
-
"https://mempool.tk7.mempool.space/api/"
|
|
155
|
-
],
|
|
156
|
-
[BitcoinNetwork.TESTNET]: [
|
|
157
|
-
"https://mempool.space/testnet/api/",
|
|
158
|
-
// "https://mempool.holdings/testnet/api/",
|
|
159
|
-
"https://mempool.fra.mempool.space/testnet/api/",
|
|
160
|
-
"https://mempool.va1.mempool.space/testnet/api/",
|
|
161
|
-
"https://mempool.tk7.mempool.space/testnet/api/"
|
|
162
|
-
],
|
|
163
|
-
[BitcoinNetwork.TESTNET4]: [
|
|
164
|
-
"https://mempool.space/testnet4/api/",
|
|
165
|
-
// "https://mempool.holdings/testnet4/api/",
|
|
166
|
-
"https://mempool.fra.mempool.space/testnet4/api/",
|
|
167
|
-
"https://mempool.va1.mempool.space/testnet4/api/",
|
|
168
|
-
"https://mempool.tk7.mempool.space/testnet4/api/"
|
|
169
|
-
]
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const nostrUrls: string[] = [
|
|
173
|
-
"wss://relay.damus.io", "wss://nostr.einundzwanzig.space", "wss://relay01.lnfi.network/", "wss://relay.puresignal.news/", "wss://relay.fountain.fm/", "wss://sendit.nosflare.com/"
|
|
174
|
-
];
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Factory class for creating and initializing Swapper instances with typed chain support
|
|
178
|
-
*
|
|
179
|
-
* @category Core
|
|
180
|
-
*/
|
|
181
|
-
export class SwapperFactory<T extends readonly ChainInitializer<any, ChainType, any>[]> {
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* All available tokens for the atomiq SDK
|
|
185
|
-
*/
|
|
186
|
-
Tokens: TypedTokens<T> = {
|
|
187
|
-
BITCOIN: BitcoinTokens
|
|
188
|
-
} as any;
|
|
189
|
-
/**
|
|
190
|
-
* Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
|
|
191
|
-
*/
|
|
192
|
-
TokenResolver: TypedTokenResolvers<T> = {} as any;
|
|
193
|
-
|
|
194
|
-
private smartChainTokens: SCToken[] = [];
|
|
195
|
-
|
|
196
|
-
constructor(readonly initializers: T) {
|
|
197
|
-
this.initializers = initializers;
|
|
198
|
-
initializers.forEach(initializer => {
|
|
199
|
-
const addressMap: {[tokenAddress: string]: SCToken} = {};
|
|
200
|
-
|
|
201
|
-
const tokens = (this.Tokens[initializer.chainId as keyof GetAllTokens<T>] = {} as any);
|
|
202
|
-
|
|
203
|
-
for(let ticker in initializer.tokens) {
|
|
204
|
-
const assetData = initializer.tokens[ticker] as any;
|
|
205
|
-
const token: SCToken = {
|
|
206
|
-
chain: "SC",
|
|
207
|
-
chainId: initializer.chainId,
|
|
208
|
-
ticker,
|
|
209
|
-
name: SmartChainAssets[ticker as SmartChainAssetTickers]?.name ?? ticker,
|
|
210
|
-
decimals: assetData.decimals,
|
|
211
|
-
displayDecimals: assetData.displayDecimals,
|
|
212
|
-
address: assetData.address,
|
|
213
|
-
equals: (other: Token) => other.chainId===initializer.chainId && other.ticker===ticker && other.address===assetData.address,
|
|
214
|
-
toString: () => `${initializer.chainId}-${ticker}`
|
|
215
|
-
};
|
|
216
|
-
this.smartChainTokens.push(token);
|
|
217
|
-
tokens[ticker] = addressMap[assetData.address] = token;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
this.TokenResolver[initializer.chainId as keyof TypedTokenResolvers<T>] = {
|
|
221
|
-
getToken: (address: string) => addressMap[address]
|
|
222
|
-
} as any;
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Returns a new swapper instance with the passed options.
|
|
228
|
-
*
|
|
229
|
-
* The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
|
|
230
|
-
* calling any other functions in the swapper instance.
|
|
231
|
-
*
|
|
232
|
-
* @param options Options for customizing the swapper instance
|
|
233
|
-
*/
|
|
234
|
-
newSwapper(options: TypedSwapperOptions<T>): TypedSwapper<T> {
|
|
235
|
-
options.bitcoinNetwork ??= BitcoinNetwork.MAINNET;
|
|
236
|
-
options.storagePrefix ??= "atomiqsdk-"+options.bitcoinNetwork+"-";
|
|
237
|
-
options.messenger ??= new NostrMessenger(options.bitcoinNetwork, nostrUrls);
|
|
238
|
-
options.defaultTrustedIntermediaryUrl ??= trustedIntermediaries[options.bitcoinNetwork];
|
|
239
|
-
options.registryUrl ??= registries[options.bitcoinNetwork];
|
|
240
|
-
|
|
241
|
-
let bitcoinRpc: MempoolBitcoinRpc;
|
|
242
|
-
if(options.mempoolApi!=null) {
|
|
243
|
-
bitcoinRpc = options.mempoolApi instanceof MempoolBitcoinRpc ? options.mempoolApi : new MempoolBitcoinRpc(options.mempoolApi, options.bitcoinNetwork);
|
|
244
|
-
} else {
|
|
245
|
-
const urls = mempoolUrls[options.bitcoinNetwork];
|
|
246
|
-
if(urls==null) throw new Error(`No pre-configured urls for ${BitcoinNetwork[options.bitcoinNetwork]} network were found, please explicitly pass mempoolApi parameter!`);
|
|
247
|
-
bitcoinRpc = new MempoolBitcoinRpc(urls, options.bitcoinNetwork);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
const pricingAssets: (RedundantSwapPriceAssets<ToMultichain<T>>[number] & {ticker: string, name: string})[] = [];
|
|
251
|
-
Object.keys(SmartChainAssets).forEach((ticker) => {
|
|
252
|
-
const chains: any = {};
|
|
253
|
-
for(let {tokens, chainId} of this.initializers) {
|
|
254
|
-
if(tokens[ticker]!=null) chains[chainId] = tokens[ticker];
|
|
255
|
-
}
|
|
256
|
-
const assetData = SmartChainAssets[ticker as SmartChainAssetTickers];
|
|
257
|
-
pricingAssets.push({
|
|
258
|
-
...assetData.pricing,
|
|
259
|
-
chains,
|
|
260
|
-
ticker,
|
|
261
|
-
name: assetData.name
|
|
262
|
-
})
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
options.chainStorageCtor ??= <T extends StorageObject>(name: string) => new LocalStorageManager<T>(name);
|
|
266
|
-
|
|
267
|
-
const chains: {[key in T[number]["chainId"]]: ChainData<any>} = {} as any;
|
|
268
|
-
for(let {initializer, chainId} of this.initializers) {
|
|
269
|
-
const chainOptions = options.chains[chainId as keyof GetAllOptions<T>];
|
|
270
|
-
if(chainOptions==null) continue;
|
|
271
|
-
chains[chainId as T[number]["chainId"]] = initializer(chainOptions, bitcoinRpc, options.bitcoinNetwork, options.chainStorageCtor) as any;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
const swapPricing = options.getPriceFn!=null ?
|
|
275
|
-
new SingleSwapPrice(options.pricingFeeDifferencePPM ?? 10000n, new CustomPriceProvider(pricingAssets.map(val => {
|
|
276
|
-
return {
|
|
277
|
-
coinId: val.ticker,
|
|
278
|
-
chains: val.chains
|
|
279
|
-
}
|
|
280
|
-
}), options.getPriceFn)) :
|
|
281
|
-
RedundantSwapPrice.createFromTokenMap<ToMultichain<T>>(options.pricingFeeDifferencePPM ?? 10000n, pricingAssets);
|
|
282
|
-
|
|
283
|
-
return new Swapper<ToMultichain<T>>(
|
|
284
|
-
bitcoinRpc,
|
|
285
|
-
bitcoinRpc,
|
|
286
|
-
(btcRelay: BtcRelay<any, any, any>) => new MempoolBtcRelaySynchronizer(btcRelay, bitcoinRpc),
|
|
287
|
-
chains as any,
|
|
288
|
-
swapPricing,
|
|
289
|
-
this.smartChainTokens,
|
|
290
|
-
options.messenger,
|
|
291
|
-
options
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/**
|
|
296
|
-
* Returns a new and already initialized swapper instance with the passed options. There is no need
|
|
297
|
-
* to call {@link Swapper.init} anymore.
|
|
298
|
-
*
|
|
299
|
-
* @param options Options for customizing the swapper instance
|
|
300
|
-
*/
|
|
301
|
-
async newSwapperInitialized(options: TypedSwapperOptions<T>): Promise<TypedSwapper<T>> {
|
|
302
|
-
const swapper = this.newSwapper(options);
|
|
303
|
-
await swapper.init();
|
|
304
|
-
return swapper;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
ChainData,
|
|
3
|
+
BitcoinNetwork,
|
|
4
|
+
ChainType,
|
|
5
|
+
StorageObject,
|
|
6
|
+
IStorageManager, Messenger, ChainInitializer, BtcRelay
|
|
7
|
+
} from "@atomiqlabs/base";
|
|
8
|
+
import {SmartChainAssets, SmartChainAssetTickers} from "../SmartChainAssets";
|
|
9
|
+
import {NostrMessenger} from "@atomiqlabs/messenger-nostr";
|
|
10
|
+
import {Swapper, SwapperOptions} from "./Swapper";
|
|
11
|
+
import {CustomPriceProvider} from "../prices/providers/CustomPriceProvider";
|
|
12
|
+
import {BitcoinTokens, BtcToken, SCToken, Token} from "../types/Token";
|
|
13
|
+
import {SwapType} from "../enums/SwapType";
|
|
14
|
+
import {SwapTypeMapping} from "../utils/SwapUtils";
|
|
15
|
+
import {RedundantSwapPrice, RedundantSwapPriceAssets} from "../prices/RedundantSwapPrice";
|
|
16
|
+
import {LocalStorageManager} from "../storage-browser/LocalStorageManager";
|
|
17
|
+
import {SingleSwapPrice} from "../prices/SingleSwapPrice";
|
|
18
|
+
import {CustomPriceFunction} from "../types/CustomPriceFunction";
|
|
19
|
+
import {MempoolApi, MempoolBitcoinRpc, MempoolBtcRelaySynchronizer} from "@atomiqlabs/btc-mempool";
|
|
20
|
+
|
|
21
|
+
//Helper types
|
|
22
|
+
/**
|
|
23
|
+
* Token definitions for a specific chain
|
|
24
|
+
*/
|
|
25
|
+
type TypedChainTokens<T extends ChainInitializer<any, any, any>> = {
|
|
26
|
+
[val in keyof T["tokens"]]: SCToken<T["chainId"]>
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Token resolver for a specific chain
|
|
30
|
+
*/
|
|
31
|
+
type TypedChainTokenResolver<T extends ChainInitializer<any, any, any>> = {
|
|
32
|
+
getToken: (address: string) => SCToken<T["chainId"]>
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type ChainTypeDict<T extends ChainInitializer<any, any, any>> = {[K in T["chainId"]]: T["chainType"]};
|
|
36
|
+
type ToMultichain<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
37
|
+
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
38
|
+
? ChainTypeDict<First> & ToMultichain<Rest>
|
|
39
|
+
: {});
|
|
40
|
+
|
|
41
|
+
type TokensDict<T extends ChainInitializer<any, any, any>> = {
|
|
42
|
+
[K in T["chainId"]]: TypedChainTokens<T>
|
|
43
|
+
};
|
|
44
|
+
type GetAllTokens<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
45
|
+
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
46
|
+
? TokensDict<First> & GetAllTokens<Rest>
|
|
47
|
+
: unknown);
|
|
48
|
+
|
|
49
|
+
type TokenResolverDict<T extends ChainInitializer<any, any, any>> = {
|
|
50
|
+
[K in T["chainId"]]: TypedChainTokenResolver<T>
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
type OptionsDict<T extends ChainInitializer<any, any, any>> = {[K in T["chainId"]]: T["options"]};
|
|
54
|
+
type GetAllOptions<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
55
|
+
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
56
|
+
? OptionsDict<First> & GetAllOptions<Rest>
|
|
57
|
+
: unknown);
|
|
58
|
+
|
|
59
|
+
//Exported types
|
|
60
|
+
/**
|
|
61
|
+
* Configuration options for creating a Swapper instance
|
|
62
|
+
*
|
|
63
|
+
* @category Core
|
|
64
|
+
*/
|
|
65
|
+
export type TypedSwapperOptions<T extends readonly ChainInitializer<any, any, any>[]> = {
|
|
66
|
+
/**
|
|
67
|
+
* A dictionary with chain-specific settings, like RPC URLs and others
|
|
68
|
+
*/
|
|
69
|
+
chains: GetAllOptions<T>,
|
|
70
|
+
/**
|
|
71
|
+
* A function callback to retrieve a specific named storage container for key-value persistency. If not present, the
|
|
72
|
+
* default browser Local Storage adapter is used. When you use the SDK in non-browser based environments you need
|
|
73
|
+
* to provide this callback such that the SDK is able to use a custom storage adapter.
|
|
74
|
+
*
|
|
75
|
+
* @param storageName Name of the container to retrieve
|
|
76
|
+
*/
|
|
77
|
+
chainStorageCtor?: <T extends StorageObject>(storageName: string) => IStorageManager<T>,
|
|
78
|
+
/**
|
|
79
|
+
* Maximum allowed pricing difference between intermediary (LP) returned rate and current market rate. In
|
|
80
|
+
* parts-per-million, e.g. 2% is written as `20000`.
|
|
81
|
+
*/
|
|
82
|
+
pricingFeeDifferencePPM?: bigint,
|
|
83
|
+
/**
|
|
84
|
+
* Optional pricing function to use instead of default pricing APIs. See {@link CustomPriceFunction} for details.
|
|
85
|
+
*/
|
|
86
|
+
getPriceFn?: CustomPriceFunction,
|
|
87
|
+
/**
|
|
88
|
+
* Mempool API instance or URLs to use, if not provided the defaults will be used for the specified bitcoin network
|
|
89
|
+
*/
|
|
90
|
+
mempoolApi?: MempoolApi | MempoolBitcoinRpc | string | string[],
|
|
91
|
+
/**
|
|
92
|
+
* Data propagation messenger instance to use for broadcasting data to watchtowers. By default, a Nostr-based
|
|
93
|
+
* messenger is used.
|
|
94
|
+
*/
|
|
95
|
+
messenger?: Messenger,
|
|
96
|
+
} & SwapperOptions;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Token resolvers for all chains, resolve tokens based on their address
|
|
100
|
+
*
|
|
101
|
+
* @category Core
|
|
102
|
+
*/
|
|
103
|
+
export type TypedTokenResolvers<T extends readonly ChainInitializer<any, any, any>[]> =
|
|
104
|
+
(T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
|
|
105
|
+
? TokenResolverDict<First> & TypedTokenResolvers<Rest>
|
|
106
|
+
: unknown);
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* All tokens including Bitcoin tokens
|
|
110
|
+
*
|
|
111
|
+
* @category Core
|
|
112
|
+
*/
|
|
113
|
+
export type TypedTokens<T extends readonly ChainInitializer<any, ChainType, any>[]> = GetAllTokens<T> & {
|
|
114
|
+
BITCOIN: {
|
|
115
|
+
BTC: BtcToken<false>,
|
|
116
|
+
BTCLN: BtcToken<true>
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Type alias for a Swapper instance with typed chain support
|
|
122
|
+
*
|
|
123
|
+
* @category Core
|
|
124
|
+
*/
|
|
125
|
+
export type TypedSwapper<T extends readonly ChainInitializer<any, ChainType, any>[]> = Swapper<ToMultichain<T>>;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Type alias for a specific swap type
|
|
129
|
+
*
|
|
130
|
+
* @category Core
|
|
131
|
+
*/
|
|
132
|
+
export type TypedSwap<
|
|
133
|
+
T extends ChainInitializer<any, ChainType, any>,
|
|
134
|
+
S extends SwapType
|
|
135
|
+
> = SwapTypeMapping<T["chainType"]>[S];
|
|
136
|
+
|
|
137
|
+
const registries: {[key in BitcoinNetwork]?: string} = {
|
|
138
|
+
[BitcoinNetwork.MAINNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main",
|
|
139
|
+
[BitcoinNetwork.TESTNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main",
|
|
140
|
+
[BitcoinNetwork.TESTNET4]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-testnet4.json?ref=main"
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const trustedIntermediaries: {[key in BitcoinNetwork]?: string} = {
|
|
144
|
+
[BitcoinNetwork.MAINNET]: "https://node3.gethopa.com:34100",
|
|
145
|
+
[BitcoinNetwork.TESTNET]: "https://node3.gethopa.com:24100"
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const mempoolUrls: {[key in BitcoinNetwork]?: string[]} = {
|
|
149
|
+
[BitcoinNetwork.MAINNET]: [
|
|
150
|
+
"https://mempool.space/api/",
|
|
151
|
+
// "https://mempool.holdings/api/",
|
|
152
|
+
"https://mempool.fra.mempool.space/api/",
|
|
153
|
+
"https://mempool.va1.mempool.space/api/",
|
|
154
|
+
"https://mempool.tk7.mempool.space/api/"
|
|
155
|
+
],
|
|
156
|
+
[BitcoinNetwork.TESTNET]: [
|
|
157
|
+
"https://mempool.space/testnet/api/",
|
|
158
|
+
// "https://mempool.holdings/testnet/api/",
|
|
159
|
+
"https://mempool.fra.mempool.space/testnet/api/",
|
|
160
|
+
"https://mempool.va1.mempool.space/testnet/api/",
|
|
161
|
+
"https://mempool.tk7.mempool.space/testnet/api/"
|
|
162
|
+
],
|
|
163
|
+
[BitcoinNetwork.TESTNET4]: [
|
|
164
|
+
"https://mempool.space/testnet4/api/",
|
|
165
|
+
// "https://mempool.holdings/testnet4/api/",
|
|
166
|
+
"https://mempool.fra.mempool.space/testnet4/api/",
|
|
167
|
+
"https://mempool.va1.mempool.space/testnet4/api/",
|
|
168
|
+
"https://mempool.tk7.mempool.space/testnet4/api/"
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const nostrUrls: string[] = [
|
|
173
|
+
"wss://relay.damus.io", "wss://nostr.einundzwanzig.space", "wss://relay01.lnfi.network/", "wss://relay.puresignal.news/", "wss://relay.fountain.fm/", "wss://sendit.nosflare.com/"
|
|
174
|
+
];
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Factory class for creating and initializing Swapper instances with typed chain support
|
|
178
|
+
*
|
|
179
|
+
* @category Core
|
|
180
|
+
*/
|
|
181
|
+
export class SwapperFactory<T extends readonly ChainInitializer<any, ChainType, any>[]> {
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* All available tokens for the atomiq SDK
|
|
185
|
+
*/
|
|
186
|
+
Tokens: TypedTokens<T> = {
|
|
187
|
+
BITCOIN: BitcoinTokens
|
|
188
|
+
} as any;
|
|
189
|
+
/**
|
|
190
|
+
* Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
|
|
191
|
+
*/
|
|
192
|
+
TokenResolver: TypedTokenResolvers<T> = {} as any;
|
|
193
|
+
|
|
194
|
+
private smartChainTokens: SCToken[] = [];
|
|
195
|
+
|
|
196
|
+
constructor(readonly initializers: T) {
|
|
197
|
+
this.initializers = initializers;
|
|
198
|
+
initializers.forEach(initializer => {
|
|
199
|
+
const addressMap: {[tokenAddress: string]: SCToken} = {};
|
|
200
|
+
|
|
201
|
+
const tokens = (this.Tokens[initializer.chainId as keyof GetAllTokens<T>] = {} as any);
|
|
202
|
+
|
|
203
|
+
for(let ticker in initializer.tokens) {
|
|
204
|
+
const assetData = initializer.tokens[ticker] as any;
|
|
205
|
+
const token: SCToken = {
|
|
206
|
+
chain: "SC",
|
|
207
|
+
chainId: initializer.chainId,
|
|
208
|
+
ticker,
|
|
209
|
+
name: SmartChainAssets[ticker as SmartChainAssetTickers]?.name ?? ticker,
|
|
210
|
+
decimals: assetData.decimals,
|
|
211
|
+
displayDecimals: assetData.displayDecimals,
|
|
212
|
+
address: assetData.address,
|
|
213
|
+
equals: (other: Token) => other.chainId===initializer.chainId && other.ticker===ticker && other.address===assetData.address,
|
|
214
|
+
toString: () => `${initializer.chainId}-${ticker}`
|
|
215
|
+
};
|
|
216
|
+
this.smartChainTokens.push(token);
|
|
217
|
+
tokens[ticker] = addressMap[assetData.address] = token;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
this.TokenResolver[initializer.chainId as keyof TypedTokenResolvers<T>] = {
|
|
221
|
+
getToken: (address: string) => addressMap[address]
|
|
222
|
+
} as any;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Returns a new swapper instance with the passed options.
|
|
228
|
+
*
|
|
229
|
+
* The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
|
|
230
|
+
* calling any other functions in the swapper instance.
|
|
231
|
+
*
|
|
232
|
+
* @param options Options for customizing the swapper instance
|
|
233
|
+
*/
|
|
234
|
+
newSwapper(options: TypedSwapperOptions<T>): TypedSwapper<T> {
|
|
235
|
+
options.bitcoinNetwork ??= BitcoinNetwork.MAINNET;
|
|
236
|
+
options.storagePrefix ??= "atomiqsdk-"+options.bitcoinNetwork+"-";
|
|
237
|
+
options.messenger ??= new NostrMessenger(options.bitcoinNetwork, nostrUrls);
|
|
238
|
+
options.defaultTrustedIntermediaryUrl ??= trustedIntermediaries[options.bitcoinNetwork];
|
|
239
|
+
options.registryUrl ??= registries[options.bitcoinNetwork];
|
|
240
|
+
|
|
241
|
+
let bitcoinRpc: MempoolBitcoinRpc;
|
|
242
|
+
if(options.mempoolApi!=null) {
|
|
243
|
+
bitcoinRpc = options.mempoolApi instanceof MempoolBitcoinRpc ? options.mempoolApi : new MempoolBitcoinRpc(options.mempoolApi, options.bitcoinNetwork);
|
|
244
|
+
} else {
|
|
245
|
+
const urls = mempoolUrls[options.bitcoinNetwork];
|
|
246
|
+
if(urls==null) throw new Error(`No pre-configured urls for ${BitcoinNetwork[options.bitcoinNetwork]} network were found, please explicitly pass mempoolApi parameter!`);
|
|
247
|
+
bitcoinRpc = new MempoolBitcoinRpc(urls, options.bitcoinNetwork);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const pricingAssets: (RedundantSwapPriceAssets<ToMultichain<T>>[number] & {ticker: string, name: string})[] = [];
|
|
251
|
+
Object.keys(SmartChainAssets).forEach((ticker) => {
|
|
252
|
+
const chains: any = {};
|
|
253
|
+
for(let {tokens, chainId} of this.initializers) {
|
|
254
|
+
if(tokens[ticker]!=null) chains[chainId] = tokens[ticker];
|
|
255
|
+
}
|
|
256
|
+
const assetData = SmartChainAssets[ticker as SmartChainAssetTickers];
|
|
257
|
+
pricingAssets.push({
|
|
258
|
+
...assetData.pricing,
|
|
259
|
+
chains,
|
|
260
|
+
ticker,
|
|
261
|
+
name: assetData.name
|
|
262
|
+
})
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
options.chainStorageCtor ??= <T extends StorageObject>(name: string) => new LocalStorageManager<T>(name);
|
|
266
|
+
|
|
267
|
+
const chains: {[key in T[number]["chainId"]]: ChainData<any>} = {} as any;
|
|
268
|
+
for(let {initializer, chainId} of this.initializers) {
|
|
269
|
+
const chainOptions = options.chains[chainId as keyof GetAllOptions<T>];
|
|
270
|
+
if(chainOptions==null) continue;
|
|
271
|
+
chains[chainId as T[number]["chainId"]] = initializer(chainOptions, bitcoinRpc, options.bitcoinNetwork, options.chainStorageCtor) as any;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const swapPricing = options.getPriceFn!=null ?
|
|
275
|
+
new SingleSwapPrice(options.pricingFeeDifferencePPM ?? 10000n, new CustomPriceProvider(pricingAssets.map(val => {
|
|
276
|
+
return {
|
|
277
|
+
coinId: val.ticker,
|
|
278
|
+
chains: val.chains
|
|
279
|
+
}
|
|
280
|
+
}), options.getPriceFn)) :
|
|
281
|
+
RedundantSwapPrice.createFromTokenMap<ToMultichain<T>>(options.pricingFeeDifferencePPM ?? 10000n, pricingAssets);
|
|
282
|
+
|
|
283
|
+
return new Swapper<ToMultichain<T>>(
|
|
284
|
+
bitcoinRpc,
|
|
285
|
+
bitcoinRpc,
|
|
286
|
+
(btcRelay: BtcRelay<any, any, any>) => new MempoolBtcRelaySynchronizer(btcRelay, bitcoinRpc),
|
|
287
|
+
chains as any,
|
|
288
|
+
swapPricing,
|
|
289
|
+
this.smartChainTokens,
|
|
290
|
+
options.messenger,
|
|
291
|
+
options
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Returns a new and already initialized swapper instance with the passed options. There is no need
|
|
297
|
+
* to call {@link Swapper.init} anymore.
|
|
298
|
+
*
|
|
299
|
+
* @param options Options for customizing the swapper instance
|
|
300
|
+
*/
|
|
301
|
+
async newSwapperInitialized(options: TypedSwapperOptions<T>): Promise<TypedSwapper<T>> {
|
|
302
|
+
const swapper = this.newSwapper(options);
|
|
303
|
+
await swapper.init();
|
|
304
|
+
return swapper;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
}
|