@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,32 +1,32 @@
|
|
|
1
|
-
import {HttpPriceProvider} from "./HttpPriceProvider";
|
|
2
|
-
import {CoinType} from "../../abstract/IPriceProvider";
|
|
3
|
-
import {MultiChain} from "../../../swapper/Swapper";
|
|
4
|
-
|
|
5
|
-
export abstract class ExchangePriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Fetches the price on the specific exchange pair
|
|
9
|
-
*
|
|
10
|
-
* @param pair
|
|
11
|
-
* @param abortSignal
|
|
12
|
-
* @protected
|
|
13
|
-
*/
|
|
14
|
-
protected abstract fetchPair(pair: string, abortSignal?: AbortSignal): Promise<number>;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @inheritDoc
|
|
18
|
-
*/
|
|
19
|
-
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
20
|
-
const pairs: string[] = token.coinId.split(";");
|
|
21
|
-
const prices: number[] = await Promise.all(pairs.map(pair => {
|
|
22
|
-
let invert = pair.startsWith("!");
|
|
23
|
-
if(invert) pair = pair.substring(1);
|
|
24
|
-
return this.fetchPair(pair, abortSignal).then(value => invert ? 1/value : value);
|
|
25
|
-
}));
|
|
26
|
-
|
|
27
|
-
const price = prices.reduce((previousValue, currentValue) => previousValue * currentValue, 1);
|
|
28
|
-
|
|
29
|
-
return BigInt(Math.floor(price*100000000000000));
|
|
30
|
-
}
|
|
31
|
-
|
|
1
|
+
import {HttpPriceProvider} from "./HttpPriceProvider";
|
|
2
|
+
import {CoinType} from "../../abstract/IPriceProvider";
|
|
3
|
+
import {MultiChain} from "../../../swapper/Swapper";
|
|
4
|
+
|
|
5
|
+
export abstract class ExchangePriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Fetches the price on the specific exchange pair
|
|
9
|
+
*
|
|
10
|
+
* @param pair
|
|
11
|
+
* @param abortSignal
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
protected abstract fetchPair(pair: string, abortSignal?: AbortSignal): Promise<number>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @inheritDoc
|
|
18
|
+
*/
|
|
19
|
+
protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
|
|
20
|
+
const pairs: string[] = token.coinId.split(";");
|
|
21
|
+
const prices: number[] = await Promise.all(pairs.map(pair => {
|
|
22
|
+
let invert = pair.startsWith("!");
|
|
23
|
+
if(invert) pair = pair.substring(1);
|
|
24
|
+
return this.fetchPair(pair, abortSignal).then(value => invert ? 1/value : value);
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
const price = prices.reduce((previousValue, currentValue) => previousValue * currentValue, 1);
|
|
28
|
+
|
|
29
|
+
return BigInt(Math.floor(price*100000000000000));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
32
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {CtorCoinTypes, IPriceProvider} from "../../abstract/IPriceProvider";
|
|
2
|
-
import {MultiChain} from "../../../swapper/Swapper";
|
|
3
|
-
|
|
4
|
-
export abstract class HttpPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
|
|
5
|
-
|
|
6
|
-
url: string;
|
|
7
|
-
httpRequestTimeout?: number;
|
|
8
|
-
|
|
9
|
-
protected constructor(coinsMap: CtorCoinTypes<T>, url: string, httpRequestTimeout?: number) {
|
|
10
|
-
super(coinsMap);
|
|
11
|
-
this.url = url;
|
|
12
|
-
this.httpRequestTimeout = httpRequestTimeout;
|
|
13
|
-
}
|
|
14
|
-
|
|
1
|
+
import {CtorCoinTypes, IPriceProvider} from "../../abstract/IPriceProvider";
|
|
2
|
+
import {MultiChain} from "../../../swapper/Swapper";
|
|
3
|
+
|
|
4
|
+
export abstract class HttpPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
|
|
5
|
+
|
|
6
|
+
url: string;
|
|
7
|
+
httpRequestTimeout?: number;
|
|
8
|
+
|
|
9
|
+
protected constructor(coinsMap: CtorCoinTypes<T>, url: string, httpRequestTimeout?: number) {
|
|
10
|
+
super(coinsMap);
|
|
11
|
+
this.url = url;
|
|
12
|
+
this.httpRequestTimeout = httpRequestTimeout;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
15
|
}
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Params for querying the storage
|
|
4
|
-
*
|
|
5
|
-
* @category Storage
|
|
6
|
-
*/
|
|
7
|
-
export type QueryParams = {
|
|
8
|
-
/**
|
|
9
|
-
* Key that should be matched
|
|
10
|
-
*/
|
|
11
|
-
key: string,
|
|
12
|
-
/**
|
|
13
|
-
* A value that the key needs to have, if an array is passed, the conditions are `OR`-ed
|
|
14
|
-
*/
|
|
15
|
-
value: any | any[]
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Base type for stored objects, every storage object MUST have an `id` field
|
|
20
|
-
*
|
|
21
|
-
* @category Storage
|
|
22
|
-
*/
|
|
23
|
-
export type UnifiedStoredObject = {id: string} & any;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Defines simple indexes (for queries that use a single key)
|
|
27
|
-
*
|
|
28
|
-
* @category Storage
|
|
29
|
-
*/
|
|
30
|
-
export type UnifiedStorageIndexes = readonly {
|
|
31
|
-
key: string,
|
|
32
|
-
type: "number" | "string" | "boolean",
|
|
33
|
-
unique: boolean,
|
|
34
|
-
nullable: boolean
|
|
35
|
-
}[];
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Defines composite indexes (for queries that use multiple keys)
|
|
39
|
-
*
|
|
40
|
-
* @category Storage
|
|
41
|
-
*/
|
|
42
|
-
export type UnifiedStorageCompositeIndexes = readonly {
|
|
43
|
-
keys: readonly string[],
|
|
44
|
-
unique: boolean
|
|
45
|
-
}[];
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Interface for a generic unified storage implementations
|
|
49
|
-
*
|
|
50
|
-
* @category Storage
|
|
51
|
-
*/
|
|
52
|
-
export interface IUnifiedStorage<I extends UnifiedStorageIndexes, C extends UnifiedStorageCompositeIndexes> {
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Initializes the storage with given indexes and composite indexes
|
|
56
|
-
*
|
|
57
|
-
* @param indexes
|
|
58
|
-
* @param compositeIndexes
|
|
59
|
-
*/
|
|
60
|
-
init(indexes: I, compositeIndexes: C): Promise<void>;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Params are specified in the following way:
|
|
64
|
-
* - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
|
|
65
|
-
* - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
|
|
66
|
-
* - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
|
|
67
|
-
* @param params
|
|
68
|
-
*/
|
|
69
|
-
query(params: Array<Array<QueryParams>>): Promise<Array<UnifiedStoredObject>>;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Saves an object to storage, updating indexes as needed
|
|
73
|
-
* @param value Object to save (must have an id property)
|
|
74
|
-
*/
|
|
75
|
-
save(value: UnifiedStoredObject): Promise<void>;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Saves multiple objects to storage in a batch operation
|
|
79
|
-
* @param value Array of objects to save
|
|
80
|
-
*/
|
|
81
|
-
saveAll(value: UnifiedStoredObject[]): Promise<void>;
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Removes an object from storage
|
|
85
|
-
* @param value Object to remove (must have an id property)
|
|
86
|
-
*/
|
|
87
|
-
remove(value: UnifiedStoredObject): Promise<void>;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Removes multiple objects from storage in a batch operation
|
|
91
|
-
* @param value Array of objects to remove
|
|
92
|
-
*/
|
|
93
|
-
removeAll(value: UnifiedStoredObject[]): Promise<void>;
|
|
94
|
-
|
|
95
|
-
}
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* Params for querying the storage
|
|
4
|
+
*
|
|
5
|
+
* @category Storage
|
|
6
|
+
*/
|
|
7
|
+
export type QueryParams = {
|
|
8
|
+
/**
|
|
9
|
+
* Key that should be matched
|
|
10
|
+
*/
|
|
11
|
+
key: string,
|
|
12
|
+
/**
|
|
13
|
+
* A value that the key needs to have, if an array is passed, the conditions are `OR`-ed
|
|
14
|
+
*/
|
|
15
|
+
value: any | any[]
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Base type for stored objects, every storage object MUST have an `id` field
|
|
20
|
+
*
|
|
21
|
+
* @category Storage
|
|
22
|
+
*/
|
|
23
|
+
export type UnifiedStoredObject = {id: string} & any;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Defines simple indexes (for queries that use a single key)
|
|
27
|
+
*
|
|
28
|
+
* @category Storage
|
|
29
|
+
*/
|
|
30
|
+
export type UnifiedStorageIndexes = readonly {
|
|
31
|
+
key: string,
|
|
32
|
+
type: "number" | "string" | "boolean",
|
|
33
|
+
unique: boolean,
|
|
34
|
+
nullable: boolean
|
|
35
|
+
}[];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Defines composite indexes (for queries that use multiple keys)
|
|
39
|
+
*
|
|
40
|
+
* @category Storage
|
|
41
|
+
*/
|
|
42
|
+
export type UnifiedStorageCompositeIndexes = readonly {
|
|
43
|
+
keys: readonly string[],
|
|
44
|
+
unique: boolean
|
|
45
|
+
}[];
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Interface for a generic unified storage implementations
|
|
49
|
+
*
|
|
50
|
+
* @category Storage
|
|
51
|
+
*/
|
|
52
|
+
export interface IUnifiedStorage<I extends UnifiedStorageIndexes, C extends UnifiedStorageCompositeIndexes> {
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Initializes the storage with given indexes and composite indexes
|
|
56
|
+
*
|
|
57
|
+
* @param indexes
|
|
58
|
+
* @param compositeIndexes
|
|
59
|
+
*/
|
|
60
|
+
init(indexes: I, compositeIndexes: C): Promise<void>;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Params are specified in the following way:
|
|
64
|
+
* - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
|
|
65
|
+
* - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
|
|
66
|
+
* - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
|
|
67
|
+
* @param params
|
|
68
|
+
*/
|
|
69
|
+
query(params: Array<Array<QueryParams>>): Promise<Array<UnifiedStoredObject>>;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Saves an object to storage, updating indexes as needed
|
|
73
|
+
* @param value Object to save (must have an id property)
|
|
74
|
+
*/
|
|
75
|
+
save(value: UnifiedStoredObject): Promise<void>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Saves multiple objects to storage in a batch operation
|
|
79
|
+
* @param value Array of objects to save
|
|
80
|
+
*/
|
|
81
|
+
saveAll(value: UnifiedStoredObject[]): Promise<void>;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Removes an object from storage
|
|
85
|
+
* @param value Object to remove (must have an id property)
|
|
86
|
+
*/
|
|
87
|
+
remove(value: UnifiedStoredObject): Promise<void>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Removes multiple objects from storage in a batch operation
|
|
91
|
+
* @param value Array of objects to remove
|
|
92
|
+
*/
|
|
93
|
+
removeAll(value: UnifiedStoredObject[]): Promise<void>;
|
|
94
|
+
|
|
95
|
+
}
|
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
import {ChainType} from "@atomiqlabs/base";
|
|
2
|
-
import {IUnifiedStorage, QueryParams} from "./IUnifiedStorage";
|
|
3
|
-
import {ISwap} from "../swaps/ISwap";
|
|
4
|
-
|
|
5
|
-
import {getLogger} from "../utils/Logger";
|
|
6
|
-
|
|
7
|
-
const logger = getLogger("UnifiedSwapStorage: ");
|
|
8
|
-
|
|
9
|
-
const indexes = [
|
|
10
|
-
{key: "id", type: "string", unique: true, nullable: false},
|
|
11
|
-
{key: "escrowHash", type: "string", unique: true, nullable: true},
|
|
12
|
-
{key: "type", type: "number", unique: false, nullable: false},
|
|
13
|
-
{key: "initiator", type: "string", unique: false, nullable: false},
|
|
14
|
-
{key: "state", type: "number", unique: false, nullable: false},
|
|
15
|
-
{key: "paymentHash", type: "string", unique: false, nullable: true},
|
|
16
|
-
] as const;
|
|
17
|
-
/**
|
|
18
|
-
* Simple index types for SDK swap storage
|
|
19
|
-
*
|
|
20
|
-
* @category Storage
|
|
21
|
-
* @useDeclaredType
|
|
22
|
-
*/
|
|
23
|
-
export type UnifiedSwapStorageIndexes = typeof indexes;
|
|
24
|
-
|
|
25
|
-
const compositeIndexes = [
|
|
26
|
-
{keys: ["initiator", "id"], unique: false},
|
|
27
|
-
{keys: ["type", "state"], unique: false},
|
|
28
|
-
{keys: ["type", "paymentHash"], unique: false},
|
|
29
|
-
{keys: ["type", "initiator", "state"], unique: false}
|
|
30
|
-
] as const;
|
|
31
|
-
/**
|
|
32
|
-
* Composite index types for SDK swap storage
|
|
33
|
-
*
|
|
34
|
-
* @category Storage
|
|
35
|
-
* @useDeclaredType
|
|
36
|
-
*/
|
|
37
|
-
export type UnifiedSwapStorageCompositeIndexes = typeof compositeIndexes;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Unified swap persistence layer for the SDK utilizing an underlying {@link IUnifiedStorage} instance
|
|
41
|
-
* with optional in-memory caching via weak refs {@link WeakRef}
|
|
42
|
-
*
|
|
43
|
-
* @category Storage
|
|
44
|
-
*/
|
|
45
|
-
export class UnifiedSwapStorage<T extends ChainType> {
|
|
46
|
-
|
|
47
|
-
readonly storage: IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>;
|
|
48
|
-
readonly weakRefCache: Map<string, WeakRef<ISwap<T>>> = new Map();
|
|
49
|
-
readonly noWeakRefMap?: boolean;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @param storage Underlying storage persistence layer
|
|
53
|
-
* @param noWeakRefMap Whether to disable caching of the swap objects in the weak ref map, this
|
|
54
|
-
* should be set when you need multiple different clients accessing the same swap database (such
|
|
55
|
-
* as when running the SDK in a serverless environment like AWS or Azure)
|
|
56
|
-
*/
|
|
57
|
-
constructor(storage: IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>, noWeakRefMap?: boolean) {
|
|
58
|
-
this.storage = storage;
|
|
59
|
-
this.noWeakRefMap = noWeakRefMap;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Initializes the underlying storage
|
|
64
|
-
*/
|
|
65
|
-
init(): Promise<void> {
|
|
66
|
-
return this.storage.init(indexes, compositeIndexes);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Params are specified in the following way:
|
|
71
|
-
* - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
|
|
72
|
-
* - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
|
|
73
|
-
* - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
|
|
74
|
-
* @param params
|
|
75
|
-
* @param reviver
|
|
76
|
-
*/
|
|
77
|
-
async query<S extends ISwap<T>>(params: Array<Array<QueryParams>>, reviver: (obj: any) => S | null | undefined): Promise<Array<S>> {
|
|
78
|
-
const rawSwaps = await this.storage.query(params);
|
|
79
|
-
|
|
80
|
-
const result: Array<S> = [];
|
|
81
|
-
rawSwaps.forEach(rawObj => {
|
|
82
|
-
if(!this.noWeakRefMap) {
|
|
83
|
-
const savedRef = this.weakRefCache.get(rawObj.id)?.deref();
|
|
84
|
-
if(savedRef!=null) {
|
|
85
|
-
result.push(savedRef as S);
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
logger.debug("query(): Reviving new swap instance: "+rawObj.id);
|
|
89
|
-
}
|
|
90
|
-
const value = reviver(rawObj);
|
|
91
|
-
if(value==null) return;
|
|
92
|
-
value._persisted = true;
|
|
93
|
-
if(!this.noWeakRefMap) this.weakRefCache.set(rawObj.id, new WeakRef<ISwap<T>>(value));
|
|
94
|
-
result.push(value);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Saves the swap to storage, updating indexes as needed
|
|
102
|
-
*
|
|
103
|
-
* @param value Swap to save
|
|
104
|
-
*/
|
|
105
|
-
async save<S extends ISwap<T>>(value: S): Promise<void> {
|
|
106
|
-
if(!this.noWeakRefMap) this.weakRefCache.set(value.getId(), new WeakRef<ISwap<T>>(value));
|
|
107
|
-
await this.storage.save(value.serialize());
|
|
108
|
-
value._persisted = true;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Saves multiple swaps to storage in a batch operation
|
|
113
|
-
* @param values Array of swaps to save
|
|
114
|
-
*/
|
|
115
|
-
async saveAll<S extends ISwap<T>>(values: S[]): Promise<void> {
|
|
116
|
-
if(!this.noWeakRefMap) values.forEach(value => this.weakRefCache.set(value.getId(), new WeakRef<ISwap<T>>(value)));
|
|
117
|
-
await this.storage.saveAll(values.map(obj => obj.serialize()));
|
|
118
|
-
values.forEach(value => value._persisted = true);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Removes a swap from storage
|
|
123
|
-
* @param value Swap to remove
|
|
124
|
-
*/
|
|
125
|
-
async remove<S extends ISwap<T>>(value: S): Promise<void> {
|
|
126
|
-
if(!this.noWeakRefMap) this.weakRefCache.delete(value.getId());
|
|
127
|
-
await this.storage.remove(value.serialize());
|
|
128
|
-
value._persisted = false;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Removes multiple swaps from storage in a batch operation
|
|
133
|
-
* @param values Array of swaps to remove
|
|
134
|
-
*/
|
|
135
|
-
async removeAll<S extends ISwap<T>>(values: S[]): Promise<void> {
|
|
136
|
-
if(!this.noWeakRefMap) values.forEach(value => this.weakRefCache.delete(value.getId()));
|
|
137
|
-
await this.storage.removeAll(values.map(obj => obj.serialize()));
|
|
138
|
-
values.forEach(value => value._persisted = false);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
}
|
|
1
|
+
import {ChainType} from "@atomiqlabs/base";
|
|
2
|
+
import {IUnifiedStorage, QueryParams} from "./IUnifiedStorage";
|
|
3
|
+
import {ISwap} from "../swaps/ISwap";
|
|
4
|
+
|
|
5
|
+
import {getLogger} from "../utils/Logger";
|
|
6
|
+
|
|
7
|
+
const logger = getLogger("UnifiedSwapStorage: ");
|
|
8
|
+
|
|
9
|
+
const indexes = [
|
|
10
|
+
{key: "id", type: "string", unique: true, nullable: false},
|
|
11
|
+
{key: "escrowHash", type: "string", unique: true, nullable: true},
|
|
12
|
+
{key: "type", type: "number", unique: false, nullable: false},
|
|
13
|
+
{key: "initiator", type: "string", unique: false, nullable: false},
|
|
14
|
+
{key: "state", type: "number", unique: false, nullable: false},
|
|
15
|
+
{key: "paymentHash", type: "string", unique: false, nullable: true},
|
|
16
|
+
] as const;
|
|
17
|
+
/**
|
|
18
|
+
* Simple index types for SDK swap storage
|
|
19
|
+
*
|
|
20
|
+
* @category Storage
|
|
21
|
+
* @useDeclaredType
|
|
22
|
+
*/
|
|
23
|
+
export type UnifiedSwapStorageIndexes = typeof indexes;
|
|
24
|
+
|
|
25
|
+
const compositeIndexes = [
|
|
26
|
+
{keys: ["initiator", "id"], unique: false},
|
|
27
|
+
{keys: ["type", "state"], unique: false},
|
|
28
|
+
{keys: ["type", "paymentHash"], unique: false},
|
|
29
|
+
{keys: ["type", "initiator", "state"], unique: false}
|
|
30
|
+
] as const;
|
|
31
|
+
/**
|
|
32
|
+
* Composite index types for SDK swap storage
|
|
33
|
+
*
|
|
34
|
+
* @category Storage
|
|
35
|
+
* @useDeclaredType
|
|
36
|
+
*/
|
|
37
|
+
export type UnifiedSwapStorageCompositeIndexes = typeof compositeIndexes;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Unified swap persistence layer for the SDK utilizing an underlying {@link IUnifiedStorage} instance
|
|
41
|
+
* with optional in-memory caching via weak refs {@link WeakRef}
|
|
42
|
+
*
|
|
43
|
+
* @category Storage
|
|
44
|
+
*/
|
|
45
|
+
export class UnifiedSwapStorage<T extends ChainType> {
|
|
46
|
+
|
|
47
|
+
readonly storage: IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>;
|
|
48
|
+
readonly weakRefCache: Map<string, WeakRef<ISwap<T>>> = new Map();
|
|
49
|
+
readonly noWeakRefMap?: boolean;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @param storage Underlying storage persistence layer
|
|
53
|
+
* @param noWeakRefMap Whether to disable caching of the swap objects in the weak ref map, this
|
|
54
|
+
* should be set when you need multiple different clients accessing the same swap database (such
|
|
55
|
+
* as when running the SDK in a serverless environment like AWS or Azure)
|
|
56
|
+
*/
|
|
57
|
+
constructor(storage: IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>, noWeakRefMap?: boolean) {
|
|
58
|
+
this.storage = storage;
|
|
59
|
+
this.noWeakRefMap = noWeakRefMap;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Initializes the underlying storage
|
|
64
|
+
*/
|
|
65
|
+
init(): Promise<void> {
|
|
66
|
+
return this.storage.init(indexes, compositeIndexes);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Params are specified in the following way:
|
|
71
|
+
* - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
|
|
72
|
+
* - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
|
|
73
|
+
* - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
|
|
74
|
+
* @param params
|
|
75
|
+
* @param reviver
|
|
76
|
+
*/
|
|
77
|
+
async query<S extends ISwap<T>>(params: Array<Array<QueryParams>>, reviver: (obj: any) => S | null | undefined): Promise<Array<S>> {
|
|
78
|
+
const rawSwaps = await this.storage.query(params);
|
|
79
|
+
|
|
80
|
+
const result: Array<S> = [];
|
|
81
|
+
rawSwaps.forEach(rawObj => {
|
|
82
|
+
if(!this.noWeakRefMap) {
|
|
83
|
+
const savedRef = this.weakRefCache.get(rawObj.id)?.deref();
|
|
84
|
+
if(savedRef!=null) {
|
|
85
|
+
result.push(savedRef as S);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
logger.debug("query(): Reviving new swap instance: "+rawObj.id);
|
|
89
|
+
}
|
|
90
|
+
const value = reviver(rawObj);
|
|
91
|
+
if(value==null) return;
|
|
92
|
+
value._persisted = true;
|
|
93
|
+
if(!this.noWeakRefMap) this.weakRefCache.set(rawObj.id, new WeakRef<ISwap<T>>(value));
|
|
94
|
+
result.push(value);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Saves the swap to storage, updating indexes as needed
|
|
102
|
+
*
|
|
103
|
+
* @param value Swap to save
|
|
104
|
+
*/
|
|
105
|
+
async save<S extends ISwap<T>>(value: S): Promise<void> {
|
|
106
|
+
if(!this.noWeakRefMap) this.weakRefCache.set(value.getId(), new WeakRef<ISwap<T>>(value));
|
|
107
|
+
await this.storage.save(value.serialize());
|
|
108
|
+
value._persisted = true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Saves multiple swaps to storage in a batch operation
|
|
113
|
+
* @param values Array of swaps to save
|
|
114
|
+
*/
|
|
115
|
+
async saveAll<S extends ISwap<T>>(values: S[]): Promise<void> {
|
|
116
|
+
if(!this.noWeakRefMap) values.forEach(value => this.weakRefCache.set(value.getId(), new WeakRef<ISwap<T>>(value)));
|
|
117
|
+
await this.storage.saveAll(values.map(obj => obj.serialize()));
|
|
118
|
+
values.forEach(value => value._persisted = true);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Removes a swap from storage
|
|
123
|
+
* @param value Swap to remove
|
|
124
|
+
*/
|
|
125
|
+
async remove<S extends ISwap<T>>(value: S): Promise<void> {
|
|
126
|
+
if(!this.noWeakRefMap) this.weakRefCache.delete(value.getId());
|
|
127
|
+
await this.storage.remove(value.serialize());
|
|
128
|
+
value._persisted = false;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Removes multiple swaps from storage in a batch operation
|
|
133
|
+
* @param values Array of swaps to remove
|
|
134
|
+
*/
|
|
135
|
+
async removeAll<S extends ISwap<T>>(values: S[]): Promise<void> {
|
|
136
|
+
if(!this.noWeakRefMap) values.forEach(value => this.weakRefCache.delete(value.getId()));
|
|
137
|
+
await this.storage.removeAll(values.map(obj => obj.serialize()));
|
|
138
|
+
values.forEach(value => value._persisted = false);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|