@atomiqlabs/sdk 8.7.7 → 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 -6
- package/dist/bitcoin/coinselect2/accumulative.js +52 -52
- package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -6
- package/dist/bitcoin/coinselect2/blackjack.js +38 -38
- package/dist/bitcoin/coinselect2/index.d.ts +20 -19
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +82 -77
- package/dist/bitcoin/coinselect2/utils.js +158 -123
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -130
- package/dist/bitcoin/wallet/BitcoinWallet.js +335 -322
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -78
- package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -101
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -190
- 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 -440
- package/dist/intermediaries/apis/IntermediaryAPI.js +618 -603
- 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 -692
- package/dist/swapper/Swapper.js +1713 -1657
- 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 -631
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1444
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -225
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -822
- 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 -14
- package/dist/utils/BitcoinUtils.js +141 -102
- 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 -68
- package/src/bitcoin/coinselect2/blackjack.ts +50 -49
- package/src/bitcoin/coinselect2/index.ts +93 -92
- package/src/bitcoin/coinselect2/utils.ts +236 -195
- package/src/bitcoin/wallet/BitcoinWallet.ts +439 -427
- package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -99
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -217
- 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 -947
- 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 -2416
- 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 -1799
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1060
- 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 -91
- 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,265 +1,265 @@
|
|
|
1
|
-
import {IPriceProvider} from "./abstract/IPriceProvider";
|
|
2
|
-
import {BinancePriceProvider} from "./providers/BinancePriceProvider";
|
|
3
|
-
import {OKXPriceProvider} from "./providers/OKXPriceProvider";
|
|
4
|
-
import {CoinGeckoPriceProvider} from "./providers/CoinGeckoPriceProvider";
|
|
5
|
-
import {CoinPaprikaPriceProvider} from "./providers/CoinPaprikaPriceProvider";
|
|
6
|
-
import {promiseAny} from "../utils/Utils";
|
|
7
|
-
import {ICachedSwapPrice} from "./abstract/ICachedSwapPrice";
|
|
8
|
-
import {RequestError} from "../errors/RequestError";
|
|
9
|
-
import {ChainIds, MultiChain} from "../swapper/Swapper";
|
|
10
|
-
import {KrakenPriceProvider} from "./providers/KrakenPriceProvider";
|
|
11
|
-
import {getLogger} from "../utils/Logger";
|
|
12
|
-
import {tryWithRetries} from "../utils/RetryUtils";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Asset configuration for redundant swap pricing
|
|
16
|
-
*
|
|
17
|
-
* @category Pricing
|
|
18
|
-
*/
|
|
19
|
-
export type RedundantSwapPriceAssets<T extends MultiChain> = {
|
|
20
|
-
binancePair?: string,
|
|
21
|
-
okxPair?: string,
|
|
22
|
-
coinGeckoCoinId?: string,
|
|
23
|
-
coinPaprikaCoinId?: string,
|
|
24
|
-
krakenPair?: string,
|
|
25
|
-
chains: {
|
|
26
|
-
[chainIdentifier in keyof T]?: {
|
|
27
|
-
address: string,
|
|
28
|
-
decimals: number
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}[];
|
|
32
|
-
|
|
33
|
-
export type CtorCoinDecimals<T extends MultiChain> = {
|
|
34
|
-
chains: {
|
|
35
|
-
[chainIdentifier in keyof T]?: {
|
|
36
|
-
address: string,
|
|
37
|
-
decimals: number
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}[];
|
|
41
|
-
|
|
42
|
-
type CoinDecimals<T extends MultiChain> = {
|
|
43
|
-
[chainIdentifier in keyof T]?: {
|
|
44
|
-
[tokenAddress: string]: number
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const logger = getLogger("RedundantSwapPrice: ");
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Swap price API using multiple price sources, handles errors on the APIs and automatically switches between them, such
|
|
52
|
-
* that there always is a functional API
|
|
53
|
-
*
|
|
54
|
-
* @category Pricing
|
|
55
|
-
*/
|
|
56
|
-
export class RedundantSwapPrice<T extends MultiChain> extends ICachedSwapPrice<T> {
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Creates a new {@link RedundantSwapPrice} instance from an asset list and other data, using all
|
|
60
|
-
* the available price providers: {@link BinancePriceProvider}, {@link OKXPriceProvider},
|
|
61
|
-
* {@link CoinGeckoPriceProvider}, {@link CoinPaprikaPriceProvider}, {@link KrakenPriceProvider}
|
|
62
|
-
*
|
|
63
|
-
* @param maxAllowedFeeDiffPPM Maximum allowed price difference between returned swap prices & market prices
|
|
64
|
-
* @param assets Specifications of the assets
|
|
65
|
-
* @param cacheTimeout Timeout of the internal cache holding prices
|
|
66
|
-
*/
|
|
67
|
-
static createFromTokenMap<T extends MultiChain>(maxAllowedFeeDiffPPM: bigint, assets: RedundantSwapPriceAssets<T>, cacheTimeout?: number): RedundantSwapPrice<T> {
|
|
68
|
-
const priceApis = [
|
|
69
|
-
new BinancePriceProvider(assets.map(coinData => {
|
|
70
|
-
return {
|
|
71
|
-
coinId: coinData.binancePair,
|
|
72
|
-
chains: coinData.chains
|
|
73
|
-
};
|
|
74
|
-
})),
|
|
75
|
-
new OKXPriceProvider(assets.map(coinData => {
|
|
76
|
-
return {
|
|
77
|
-
coinId: coinData.okxPair,
|
|
78
|
-
chains: coinData.chains
|
|
79
|
-
};
|
|
80
|
-
})),
|
|
81
|
-
new CoinGeckoPriceProvider(assets.map(coinData => {
|
|
82
|
-
return {
|
|
83
|
-
coinId: coinData.coinGeckoCoinId,
|
|
84
|
-
chains: coinData.chains
|
|
85
|
-
};
|
|
86
|
-
})),
|
|
87
|
-
new CoinPaprikaPriceProvider(assets.map(coinData => {
|
|
88
|
-
return {
|
|
89
|
-
coinId: coinData.coinPaprikaCoinId,
|
|
90
|
-
chains: coinData.chains
|
|
91
|
-
};
|
|
92
|
-
})),
|
|
93
|
-
new KrakenPriceProvider(assets.map(coinData => {
|
|
94
|
-
return {
|
|
95
|
-
coinId: coinData.krakenPair,
|
|
96
|
-
chains: coinData.chains
|
|
97
|
-
};
|
|
98
|
-
}))
|
|
99
|
-
];
|
|
100
|
-
|
|
101
|
-
return new RedundantSwapPrice(maxAllowedFeeDiffPPM, assets, priceApis, cacheTimeout);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
protected coinsDecimals: CoinDecimals<T> = {};
|
|
105
|
-
protected priceApis: {
|
|
106
|
-
priceApi: IPriceProvider<T>,
|
|
107
|
-
operational?: boolean
|
|
108
|
-
}[];
|
|
109
|
-
|
|
110
|
-
constructor(maxAllowedFeeDiffPPM: bigint, coinsDecimals: CtorCoinDecimals<T>, priceApis: IPriceProvider<T>[], cacheTimeout?: number) {
|
|
111
|
-
super(maxAllowedFeeDiffPPM, cacheTimeout);
|
|
112
|
-
for(let coinData of coinsDecimals) {
|
|
113
|
-
for(let chainId in coinData.chains) {
|
|
114
|
-
const {address, decimals} = coinData.chains[chainId]!;
|
|
115
|
-
this.coinsDecimals[chainId] ??= {};
|
|
116
|
-
(this.coinsDecimals[chainId] as any)[address.toString()] = decimals;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
this.priceApis = priceApis.map(api => {
|
|
120
|
-
return {
|
|
121
|
-
priceApi: api
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Returns price api that should be operational
|
|
128
|
-
*
|
|
129
|
-
* @private
|
|
130
|
-
*/
|
|
131
|
-
private getOperationalPriceApi(): {priceApi: IPriceProvider<T>, operational?: boolean} | undefined {
|
|
132
|
-
return this.priceApis.find(e => e.operational===true);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Returns price apis that are maybe operational, in case none is considered operational returns all of the price
|
|
137
|
-
* apis such that they can be tested again whether they are operational
|
|
138
|
-
*
|
|
139
|
-
* @private
|
|
140
|
-
*/
|
|
141
|
-
private getMaybeOperationalPriceApis(): {priceApi: IPriceProvider<T>, operational?: boolean}[] {
|
|
142
|
-
let operational = this.priceApis.filter(e => e.operational===true || e.operational===undefined);
|
|
143
|
-
if(operational.length===0) {
|
|
144
|
-
this.priceApis.forEach(e => e.operational=undefined);
|
|
145
|
-
operational = this.priceApis;
|
|
146
|
-
}
|
|
147
|
-
return operational;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Fetches price in parallel from multiple maybe operational price APIs
|
|
152
|
-
*
|
|
153
|
-
* @param chainIdentifier
|
|
154
|
-
* @param token
|
|
155
|
-
* @param abortSignal
|
|
156
|
-
* @private
|
|
157
|
-
*/
|
|
158
|
-
private async fetchPriceFromMaybeOperationalPriceApis<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal) {
|
|
159
|
-
try {
|
|
160
|
-
return await promiseAny<bigint>(this.getMaybeOperationalPriceApis().map(
|
|
161
|
-
obj => (async () => {
|
|
162
|
-
try {
|
|
163
|
-
const price = await obj.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
164
|
-
logger.debug("fetchPrice(): Price from "+obj.priceApi.constructor.name+": ", price.toString(10));
|
|
165
|
-
obj.operational = true;
|
|
166
|
-
return price;
|
|
167
|
-
} catch (e) {
|
|
168
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
169
|
-
obj.operational = false;
|
|
170
|
-
throw e;
|
|
171
|
-
}
|
|
172
|
-
})()
|
|
173
|
-
))
|
|
174
|
-
} catch (_e: any) {
|
|
175
|
-
const e = _e as any[];
|
|
176
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
177
|
-
throw e.find(err => !(err instanceof RequestError)) || e[0];
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Fetches the prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
183
|
-
* to using maybe operational price APIs
|
|
184
|
-
*
|
|
185
|
-
* @param chainIdentifier
|
|
186
|
-
* @param token
|
|
187
|
-
* @param abortSignal
|
|
188
|
-
* @protected
|
|
189
|
-
*/
|
|
190
|
-
protected fetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
191
|
-
return tryWithRetries(async () => {
|
|
192
|
-
const operationalPriceApi = this.getOperationalPriceApi();
|
|
193
|
-
if (operationalPriceApi != null) {
|
|
194
|
-
try {
|
|
195
|
-
return await operationalPriceApi.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
196
|
-
} catch (err) {
|
|
197
|
-
if (abortSignal != null)
|
|
198
|
-
abortSignal.throwIfAborted();
|
|
199
|
-
operationalPriceApi.operational = false;
|
|
200
|
-
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
204
|
-
}, undefined, RequestError, abortSignal);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* @inheritDoc
|
|
209
|
-
*/
|
|
210
|
-
protected getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null {
|
|
211
|
-
if(this.coinsDecimals[chainIdentifier]==null) return null;
|
|
212
|
-
return this.coinsDecimals[chainIdentifier]?.[token.toString()] ?? null;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Fetches BTC price in USD in parallel from multiple maybe operational price APIs
|
|
217
|
-
*
|
|
218
|
-
* @param abortSignal
|
|
219
|
-
* @private
|
|
220
|
-
*/
|
|
221
|
-
private async fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal?: AbortSignal): Promise<number> {
|
|
222
|
-
try {
|
|
223
|
-
return await promiseAny<number>(this.getMaybeOperationalPriceApis().map(
|
|
224
|
-
obj => (async () => {
|
|
225
|
-
try {
|
|
226
|
-
const price = await obj.priceApi.getUsdPrice(abortSignal);
|
|
227
|
-
logger.debug("fetchPrice(): USD price from "+obj.priceApi.constructor.name+": ", price.toString(10));
|
|
228
|
-
obj.operational = true;
|
|
229
|
-
return price;
|
|
230
|
-
} catch (e) {
|
|
231
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
232
|
-
obj.operational = false;
|
|
233
|
-
throw e;
|
|
234
|
-
}
|
|
235
|
-
})()
|
|
236
|
-
))
|
|
237
|
-
} catch (_e: any) {
|
|
238
|
-
const e = _e as any[];
|
|
239
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
240
|
-
throw e.find(err => !(err instanceof RequestError)) || e[0];
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Fetches the USD prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
246
|
-
* to using maybe operational price APIs
|
|
247
|
-
*
|
|
248
|
-
* @param abortSignal
|
|
249
|
-
* @protected
|
|
250
|
-
*/
|
|
251
|
-
protected fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
252
|
-
return tryWithRetries(() => {
|
|
253
|
-
const operationalPriceApi = this.getOperationalPriceApi();
|
|
254
|
-
if(operationalPriceApi!=null) {
|
|
255
|
-
return operationalPriceApi.priceApi.getUsdPrice(abortSignal).catch(err => {
|
|
256
|
-
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
257
|
-
operationalPriceApi.operational = false;
|
|
258
|
-
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
262
|
-
}, undefined, RequestError, abortSignal);
|
|
263
|
-
}
|
|
264
|
-
|
|
1
|
+
import {IPriceProvider} from "./abstract/IPriceProvider";
|
|
2
|
+
import {BinancePriceProvider} from "./providers/BinancePriceProvider";
|
|
3
|
+
import {OKXPriceProvider} from "./providers/OKXPriceProvider";
|
|
4
|
+
import {CoinGeckoPriceProvider} from "./providers/CoinGeckoPriceProvider";
|
|
5
|
+
import {CoinPaprikaPriceProvider} from "./providers/CoinPaprikaPriceProvider";
|
|
6
|
+
import {promiseAny} from "../utils/Utils";
|
|
7
|
+
import {ICachedSwapPrice} from "./abstract/ICachedSwapPrice";
|
|
8
|
+
import {RequestError} from "../errors/RequestError";
|
|
9
|
+
import {ChainIds, MultiChain} from "../swapper/Swapper";
|
|
10
|
+
import {KrakenPriceProvider} from "./providers/KrakenPriceProvider";
|
|
11
|
+
import {getLogger} from "../utils/Logger";
|
|
12
|
+
import {tryWithRetries} from "../utils/RetryUtils";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Asset configuration for redundant swap pricing
|
|
16
|
+
*
|
|
17
|
+
* @category Pricing
|
|
18
|
+
*/
|
|
19
|
+
export type RedundantSwapPriceAssets<T extends MultiChain> = {
|
|
20
|
+
binancePair?: string,
|
|
21
|
+
okxPair?: string,
|
|
22
|
+
coinGeckoCoinId?: string,
|
|
23
|
+
coinPaprikaCoinId?: string,
|
|
24
|
+
krakenPair?: string,
|
|
25
|
+
chains: {
|
|
26
|
+
[chainIdentifier in keyof T]?: {
|
|
27
|
+
address: string,
|
|
28
|
+
decimals: number
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}[];
|
|
32
|
+
|
|
33
|
+
export type CtorCoinDecimals<T extends MultiChain> = {
|
|
34
|
+
chains: {
|
|
35
|
+
[chainIdentifier in keyof T]?: {
|
|
36
|
+
address: string,
|
|
37
|
+
decimals: number
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}[];
|
|
41
|
+
|
|
42
|
+
type CoinDecimals<T extends MultiChain> = {
|
|
43
|
+
[chainIdentifier in keyof T]?: {
|
|
44
|
+
[tokenAddress: string]: number
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const logger = getLogger("RedundantSwapPrice: ");
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Swap price API using multiple price sources, handles errors on the APIs and automatically switches between them, such
|
|
52
|
+
* that there always is a functional API
|
|
53
|
+
*
|
|
54
|
+
* @category Pricing
|
|
55
|
+
*/
|
|
56
|
+
export class RedundantSwapPrice<T extends MultiChain> extends ICachedSwapPrice<T> {
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new {@link RedundantSwapPrice} instance from an asset list and other data, using all
|
|
60
|
+
* the available price providers: {@link BinancePriceProvider}, {@link OKXPriceProvider},
|
|
61
|
+
* {@link CoinGeckoPriceProvider}, {@link CoinPaprikaPriceProvider}, {@link KrakenPriceProvider}
|
|
62
|
+
*
|
|
63
|
+
* @param maxAllowedFeeDiffPPM Maximum allowed price difference between returned swap prices & market prices
|
|
64
|
+
* @param assets Specifications of the assets
|
|
65
|
+
* @param cacheTimeout Timeout of the internal cache holding prices
|
|
66
|
+
*/
|
|
67
|
+
static createFromTokenMap<T extends MultiChain>(maxAllowedFeeDiffPPM: bigint, assets: RedundantSwapPriceAssets<T>, cacheTimeout?: number): RedundantSwapPrice<T> {
|
|
68
|
+
const priceApis = [
|
|
69
|
+
new BinancePriceProvider(assets.map(coinData => {
|
|
70
|
+
return {
|
|
71
|
+
coinId: coinData.binancePair,
|
|
72
|
+
chains: coinData.chains
|
|
73
|
+
};
|
|
74
|
+
})),
|
|
75
|
+
new OKXPriceProvider(assets.map(coinData => {
|
|
76
|
+
return {
|
|
77
|
+
coinId: coinData.okxPair,
|
|
78
|
+
chains: coinData.chains
|
|
79
|
+
};
|
|
80
|
+
})),
|
|
81
|
+
new CoinGeckoPriceProvider(assets.map(coinData => {
|
|
82
|
+
return {
|
|
83
|
+
coinId: coinData.coinGeckoCoinId,
|
|
84
|
+
chains: coinData.chains
|
|
85
|
+
};
|
|
86
|
+
})),
|
|
87
|
+
new CoinPaprikaPriceProvider(assets.map(coinData => {
|
|
88
|
+
return {
|
|
89
|
+
coinId: coinData.coinPaprikaCoinId,
|
|
90
|
+
chains: coinData.chains
|
|
91
|
+
};
|
|
92
|
+
})),
|
|
93
|
+
new KrakenPriceProvider(assets.map(coinData => {
|
|
94
|
+
return {
|
|
95
|
+
coinId: coinData.krakenPair,
|
|
96
|
+
chains: coinData.chains
|
|
97
|
+
};
|
|
98
|
+
}))
|
|
99
|
+
];
|
|
100
|
+
|
|
101
|
+
return new RedundantSwapPrice(maxAllowedFeeDiffPPM, assets, priceApis, cacheTimeout);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected coinsDecimals: CoinDecimals<T> = {};
|
|
105
|
+
protected priceApis: {
|
|
106
|
+
priceApi: IPriceProvider<T>,
|
|
107
|
+
operational?: boolean
|
|
108
|
+
}[];
|
|
109
|
+
|
|
110
|
+
constructor(maxAllowedFeeDiffPPM: bigint, coinsDecimals: CtorCoinDecimals<T>, priceApis: IPriceProvider<T>[], cacheTimeout?: number) {
|
|
111
|
+
super(maxAllowedFeeDiffPPM, cacheTimeout);
|
|
112
|
+
for(let coinData of coinsDecimals) {
|
|
113
|
+
for(let chainId in coinData.chains) {
|
|
114
|
+
const {address, decimals} = coinData.chains[chainId]!;
|
|
115
|
+
this.coinsDecimals[chainId] ??= {};
|
|
116
|
+
(this.coinsDecimals[chainId] as any)[address.toString()] = decimals;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
this.priceApis = priceApis.map(api => {
|
|
120
|
+
return {
|
|
121
|
+
priceApi: api
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Returns price api that should be operational
|
|
128
|
+
*
|
|
129
|
+
* @private
|
|
130
|
+
*/
|
|
131
|
+
private getOperationalPriceApi(): {priceApi: IPriceProvider<T>, operational?: boolean} | undefined {
|
|
132
|
+
return this.priceApis.find(e => e.operational===true);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Returns price apis that are maybe operational, in case none is considered operational returns all of the price
|
|
137
|
+
* apis such that they can be tested again whether they are operational
|
|
138
|
+
*
|
|
139
|
+
* @private
|
|
140
|
+
*/
|
|
141
|
+
private getMaybeOperationalPriceApis(): {priceApi: IPriceProvider<T>, operational?: boolean}[] {
|
|
142
|
+
let operational = this.priceApis.filter(e => e.operational===true || e.operational===undefined);
|
|
143
|
+
if(operational.length===0) {
|
|
144
|
+
this.priceApis.forEach(e => e.operational=undefined);
|
|
145
|
+
operational = this.priceApis;
|
|
146
|
+
}
|
|
147
|
+
return operational;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Fetches price in parallel from multiple maybe operational price APIs
|
|
152
|
+
*
|
|
153
|
+
* @param chainIdentifier
|
|
154
|
+
* @param token
|
|
155
|
+
* @param abortSignal
|
|
156
|
+
* @private
|
|
157
|
+
*/
|
|
158
|
+
private async fetchPriceFromMaybeOperationalPriceApis<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal) {
|
|
159
|
+
try {
|
|
160
|
+
return await promiseAny<bigint>(this.getMaybeOperationalPriceApis().map(
|
|
161
|
+
obj => (async () => {
|
|
162
|
+
try {
|
|
163
|
+
const price = await obj.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
164
|
+
logger.debug("fetchPrice(): Price from "+obj.priceApi.constructor.name+": ", price.toString(10));
|
|
165
|
+
obj.operational = true;
|
|
166
|
+
return price;
|
|
167
|
+
} catch (e) {
|
|
168
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
169
|
+
obj.operational = false;
|
|
170
|
+
throw e;
|
|
171
|
+
}
|
|
172
|
+
})()
|
|
173
|
+
))
|
|
174
|
+
} catch (_e: any) {
|
|
175
|
+
const e = _e as any[];
|
|
176
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
177
|
+
throw e.find(err => !(err instanceof RequestError)) || e[0];
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Fetches the prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
183
|
+
* to using maybe operational price APIs
|
|
184
|
+
*
|
|
185
|
+
* @param chainIdentifier
|
|
186
|
+
* @param token
|
|
187
|
+
* @param abortSignal
|
|
188
|
+
* @protected
|
|
189
|
+
*/
|
|
190
|
+
protected fetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
191
|
+
return tryWithRetries(async () => {
|
|
192
|
+
const operationalPriceApi = this.getOperationalPriceApi();
|
|
193
|
+
if (operationalPriceApi != null) {
|
|
194
|
+
try {
|
|
195
|
+
return await operationalPriceApi.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
196
|
+
} catch (err) {
|
|
197
|
+
if (abortSignal != null)
|
|
198
|
+
abortSignal.throwIfAborted();
|
|
199
|
+
operationalPriceApi.operational = false;
|
|
200
|
+
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
204
|
+
}, undefined, RequestError, abortSignal);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* @inheritDoc
|
|
209
|
+
*/
|
|
210
|
+
protected getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null {
|
|
211
|
+
if(this.coinsDecimals[chainIdentifier]==null) return null;
|
|
212
|
+
return this.coinsDecimals[chainIdentifier]?.[token.toString()] ?? null;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Fetches BTC price in USD in parallel from multiple maybe operational price APIs
|
|
217
|
+
*
|
|
218
|
+
* @param abortSignal
|
|
219
|
+
* @private
|
|
220
|
+
*/
|
|
221
|
+
private async fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal?: AbortSignal): Promise<number> {
|
|
222
|
+
try {
|
|
223
|
+
return await promiseAny<number>(this.getMaybeOperationalPriceApis().map(
|
|
224
|
+
obj => (async () => {
|
|
225
|
+
try {
|
|
226
|
+
const price = await obj.priceApi.getUsdPrice(abortSignal);
|
|
227
|
+
logger.debug("fetchPrice(): USD price from "+obj.priceApi.constructor.name+": ", price.toString(10));
|
|
228
|
+
obj.operational = true;
|
|
229
|
+
return price;
|
|
230
|
+
} catch (e) {
|
|
231
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
232
|
+
obj.operational = false;
|
|
233
|
+
throw e;
|
|
234
|
+
}
|
|
235
|
+
})()
|
|
236
|
+
))
|
|
237
|
+
} catch (_e: any) {
|
|
238
|
+
const e = _e as any[];
|
|
239
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
240
|
+
throw e.find(err => !(err instanceof RequestError)) || e[0];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Fetches the USD prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
246
|
+
* to using maybe operational price APIs
|
|
247
|
+
*
|
|
248
|
+
* @param abortSignal
|
|
249
|
+
* @protected
|
|
250
|
+
*/
|
|
251
|
+
protected fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
252
|
+
return tryWithRetries(() => {
|
|
253
|
+
const operationalPriceApi = this.getOperationalPriceApi();
|
|
254
|
+
if(operationalPriceApi!=null) {
|
|
255
|
+
return operationalPriceApi.priceApi.getUsdPrice(abortSignal).catch(err => {
|
|
256
|
+
if(abortSignal!=null) abortSignal.throwIfAborted();
|
|
257
|
+
operationalPriceApi.operational = false;
|
|
258
|
+
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
262
|
+
}, undefined, RequestError, abortSignal);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
265
|
}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import {IPriceProvider} from "./abstract/IPriceProvider";
|
|
2
|
-
import {ICachedSwapPrice} from "./abstract/ICachedSwapPrice";
|
|
3
|
-
import {ChainIds, MultiChain} from "../swapper/Swapper";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Swap price API using a single price source
|
|
7
|
-
*
|
|
8
|
-
* @category Pricing
|
|
9
|
-
*/
|
|
10
|
-
export class SingleSwapPrice<T extends MultiChain> extends ICachedSwapPrice<T> {
|
|
11
|
-
|
|
12
|
-
priceProvider: IPriceProvider<T>;
|
|
13
|
-
|
|
14
|
-
constructor(maxAllowedFeeDiffPPM: bigint, priceProvider: IPriceProvider<T>, cacheTimeout?: number) {
|
|
15
|
-
super(maxAllowedFeeDiffPPM, cacheTimeout);
|
|
16
|
-
this.priceProvider = priceProvider;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Fetch price in uSats (micro sats) for a given token against BTC
|
|
21
|
-
*
|
|
22
|
-
* @param chainIdentifier
|
|
23
|
-
* @param token
|
|
24
|
-
* @param abortSignal
|
|
25
|
-
* @protected
|
|
26
|
-
* @returns token price in uSats (micro sats)
|
|
27
|
-
*/
|
|
28
|
-
protected fetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
29
|
-
return this.priceProvider.getPrice(chainIdentifier, token, abortSignal);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @inheritDoc
|
|
34
|
-
*/
|
|
35
|
-
protected getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null {
|
|
36
|
-
return this.priceProvider.getDecimals(chainIdentifier, token.toString());
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Fetches BTC price in USD
|
|
41
|
-
*
|
|
42
|
-
* @param abortSignal
|
|
43
|
-
* @protected
|
|
44
|
-
* @returns token price in uSats (micro sats)
|
|
45
|
-
*/
|
|
46
|
-
protected fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
47
|
-
return this.priceProvider.getUsdPrice(abortSignal);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
}
|
|
1
|
+
import {IPriceProvider} from "./abstract/IPriceProvider";
|
|
2
|
+
import {ICachedSwapPrice} from "./abstract/ICachedSwapPrice";
|
|
3
|
+
import {ChainIds, MultiChain} from "../swapper/Swapper";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Swap price API using a single price source
|
|
7
|
+
*
|
|
8
|
+
* @category Pricing
|
|
9
|
+
*/
|
|
10
|
+
export class SingleSwapPrice<T extends MultiChain> extends ICachedSwapPrice<T> {
|
|
11
|
+
|
|
12
|
+
priceProvider: IPriceProvider<T>;
|
|
13
|
+
|
|
14
|
+
constructor(maxAllowedFeeDiffPPM: bigint, priceProvider: IPriceProvider<T>, cacheTimeout?: number) {
|
|
15
|
+
super(maxAllowedFeeDiffPPM, cacheTimeout);
|
|
16
|
+
this.priceProvider = priceProvider;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Fetch price in uSats (micro sats) for a given token against BTC
|
|
21
|
+
*
|
|
22
|
+
* @param chainIdentifier
|
|
23
|
+
* @param token
|
|
24
|
+
* @param abortSignal
|
|
25
|
+
* @protected
|
|
26
|
+
* @returns token price in uSats (micro sats)
|
|
27
|
+
*/
|
|
28
|
+
protected fetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
|
|
29
|
+
return this.priceProvider.getPrice(chainIdentifier, token, abortSignal);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @inheritDoc
|
|
34
|
+
*/
|
|
35
|
+
protected getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null {
|
|
36
|
+
return this.priceProvider.getDecimals(chainIdentifier, token.toString());
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Fetches BTC price in USD
|
|
41
|
+
*
|
|
42
|
+
* @param abortSignal
|
|
43
|
+
* @protected
|
|
44
|
+
* @returns token price in uSats (micro sats)
|
|
45
|
+
*/
|
|
46
|
+
protected fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
|
|
47
|
+
return this.priceProvider.getUsdPrice(abortSignal);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|