@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,173 +1,173 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChainEvent,
|
|
3
|
-
ChainSwapType,
|
|
4
|
-
ChainType,
|
|
5
|
-
InitializeEvent,
|
|
6
|
-
SpvVaultClaimEvent,
|
|
7
|
-
SpvVaultCloseEvent,
|
|
8
|
-
SpvVaultFrontEvent,
|
|
9
|
-
SwapEvent
|
|
10
|
-
} from "@atomiqlabs/base";
|
|
11
|
-
import {ISwap} from "../swaps/ISwap";
|
|
12
|
-
import {EventListener} from "@atomiqlabs/base/src/events/ChainEvents";
|
|
13
|
-
import {SwapType} from "../enums/SwapType";
|
|
14
|
-
import {UnifiedSwapStorage} from "../storage/UnifiedSwapStorage";
|
|
15
|
-
|
|
16
|
-
import {getLogger} from "../utils/Logger";
|
|
17
|
-
|
|
18
|
-
function chainEventToEscrowHash(event: ChainEvent<any>): string | undefined {
|
|
19
|
-
if(event instanceof SwapEvent) return event.escrowHash;
|
|
20
|
-
if(
|
|
21
|
-
event instanceof SpvVaultFrontEvent ||
|
|
22
|
-
event instanceof SpvVaultClaimEvent ||
|
|
23
|
-
event instanceof SpvVaultCloseEvent
|
|
24
|
-
) return event.btcTxId;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export type SwapEventListener<
|
|
28
|
-
T extends ChainType,
|
|
29
|
-
S extends ISwap<T>
|
|
30
|
-
> = (event: ChainEvent<T["Data"]>, swap: S) => Promise<void>;
|
|
31
|
-
|
|
32
|
-
const logger = getLogger("UnifiedSwapEventListener: ");
|
|
33
|
-
|
|
34
|
-
export class UnifiedSwapEventListener<
|
|
35
|
-
T extends ChainType
|
|
36
|
-
> {
|
|
37
|
-
|
|
38
|
-
readonly storage: UnifiedSwapStorage<T>;
|
|
39
|
-
readonly events: T["Events"];
|
|
40
|
-
readonly listeners: {
|
|
41
|
-
[key in SwapType]?: {
|
|
42
|
-
listener: SwapEventListener<T, any>,
|
|
43
|
-
reviver: new (obj: any) => ISwap<T>
|
|
44
|
-
}
|
|
45
|
-
} = {};
|
|
46
|
-
|
|
47
|
-
constructor(unifiedStorage: UnifiedSwapStorage<T>, events: T["Events"]) {
|
|
48
|
-
this.storage = unifiedStorage;
|
|
49
|
-
this.events = events;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async processEvents(events: ChainEvent<T["Data"]>[]) {
|
|
53
|
-
const escrowHashesDeduped = new Set<string>();
|
|
54
|
-
events.forEach(event => {
|
|
55
|
-
const escrowHash = chainEventToEscrowHash(event);
|
|
56
|
-
if(escrowHash!=null) escrowHashesDeduped.add(escrowHash);
|
|
57
|
-
});
|
|
58
|
-
const escrowHashes = Array.from(escrowHashesDeduped);
|
|
59
|
-
|
|
60
|
-
logger.debug("processEvents(): Processing events with escrow hashes: ", escrowHashes);
|
|
61
|
-
|
|
62
|
-
const swaps = await this.storage.query<ISwap<T>>(
|
|
63
|
-
[
|
|
64
|
-
[{key: "escrowHash", value: escrowHashes}]
|
|
65
|
-
],
|
|
66
|
-
(val: any) => {
|
|
67
|
-
const obj = this.listeners?.[val.type as SwapType];
|
|
68
|
-
if(obj==null) return null;
|
|
69
|
-
return new obj.reviver(val);
|
|
70
|
-
}
|
|
71
|
-
);
|
|
72
|
-
const swapsByEscrowHash: {[key: string]: ISwap<T>} = {};
|
|
73
|
-
swaps.forEach(swap => {
|
|
74
|
-
const escrowHash = swap._getEscrowHash();
|
|
75
|
-
if(escrowHash!=null) swapsByEscrowHash[escrowHash] = swap;
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
//We need to do this because FromBTCLNAutoSwaps might not yet know its escrowHash
|
|
79
|
-
// hence we try to get the claimHash and try to query based on that, FromBTCLNAutoSwaps
|
|
80
|
-
// will use their claimHash as escrowHash before they know the real escrowHash
|
|
81
|
-
const htlcCheckInitializeEvents: {[claimHash: string]: InitializeEvent<T["Data"]>} = {};
|
|
82
|
-
|
|
83
|
-
for(let event of events) {
|
|
84
|
-
const escrowHash = chainEventToEscrowHash(event);
|
|
85
|
-
const eventVersion = event.contractVersion ?? "v1";
|
|
86
|
-
if(escrowHash!=null) {
|
|
87
|
-
const swap = swapsByEscrowHash[escrowHash];
|
|
88
|
-
if(swap!=null && (swap._contractVersion ?? "v1")===eventVersion) {
|
|
89
|
-
const obj = this.listeners[swap.getType()];
|
|
90
|
-
if(obj==null) continue;
|
|
91
|
-
await obj.listener(event, swap);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if(event instanceof InitializeEvent) {
|
|
96
|
-
if(event.swapType===ChainSwapType.HTLC) {
|
|
97
|
-
const swapData: T["Data"] = await event.swapData();
|
|
98
|
-
htlcCheckInitializeEvents[swapData.getClaimHash()] = event;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
logger.debug("processEvents(): Additionally checking HTLC claim hashes: ", Object.keys(htlcCheckInitializeEvents));
|
|
104
|
-
|
|
105
|
-
if(Object.keys(htlcCheckInitializeEvents).length===0) return;
|
|
106
|
-
|
|
107
|
-
//Try to query based on claimData
|
|
108
|
-
const claimDataSwaps = await this.storage.query<ISwap<T>>(
|
|
109
|
-
[
|
|
110
|
-
[{key: "escrowHash", value: Object.keys(htlcCheckInitializeEvents)}]
|
|
111
|
-
],
|
|
112
|
-
(val: any) => {
|
|
113
|
-
const obj = this.listeners?.[val.type as SwapType];
|
|
114
|
-
if(obj==null) return null;
|
|
115
|
-
return new obj.reviver(val);
|
|
116
|
-
}
|
|
117
|
-
);
|
|
118
|
-
const swapsByClaimDataHash: {[claimData: string]: ISwap<T>} = {};
|
|
119
|
-
claimDataSwaps.forEach(swap => {
|
|
120
|
-
const escrowHash = swap._getEscrowHash();
|
|
121
|
-
if(escrowHash!=null) swapsByClaimDataHash[escrowHash] = swap;
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
logger.debug("processEvents(): Additional HTLC swaps founds: ", swapsByClaimDataHash);
|
|
125
|
-
|
|
126
|
-
for(let claimData in htlcCheckInitializeEvents) {
|
|
127
|
-
const event = htlcCheckInitializeEvents[claimData];
|
|
128
|
-
const eventVersion = event.contractVersion ?? "v1";
|
|
129
|
-
const swap = swapsByClaimDataHash[claimData];
|
|
130
|
-
if(swap!=null && (swap._contractVersion ?? "v1")===eventVersion) {
|
|
131
|
-
const obj = this.listeners[swap.getType()];
|
|
132
|
-
if(obj==null) continue;
|
|
133
|
-
await obj.listener(event, swap);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
listener?: EventListener<T["Data"]>;
|
|
140
|
-
async start() {
|
|
141
|
-
if(this.listener!=null) return;
|
|
142
|
-
logger.info("start(): Starting unified swap event listener");
|
|
143
|
-
await this.storage.init();
|
|
144
|
-
logger.debug("start(): Storage initialized");
|
|
145
|
-
await this.events.init();
|
|
146
|
-
logger.debug("start(): Events initialized");
|
|
147
|
-
this.events.registerListener(this.listener = async (events) => {
|
|
148
|
-
await this.processEvents(events);
|
|
149
|
-
return true;
|
|
150
|
-
});
|
|
151
|
-
logger.info("start(): Successfully initiated the unified swap event listener!");
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
stop(): Promise<void> {
|
|
155
|
-
logger.info("stop(): Stopping unified swap event listener");
|
|
156
|
-
if(this.listener!=null) this.events.unregisterListener(this.listener);
|
|
157
|
-
return this.events.stop();
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
registerListener<S extends ISwap<T>>(type: SwapType, listener: SwapEventListener<T, S>, reviver: new (val: any) => S): void {
|
|
161
|
-
this.listeners[type] = {
|
|
162
|
-
listener,
|
|
163
|
-
reviver
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
unregisterListener(type: SwapType): boolean {
|
|
168
|
-
if(this.listeners[type]) return false;
|
|
169
|
-
delete this.listeners[type];
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
ChainEvent,
|
|
3
|
+
ChainSwapType,
|
|
4
|
+
ChainType,
|
|
5
|
+
InitializeEvent,
|
|
6
|
+
SpvVaultClaimEvent,
|
|
7
|
+
SpvVaultCloseEvent,
|
|
8
|
+
SpvVaultFrontEvent,
|
|
9
|
+
SwapEvent
|
|
10
|
+
} from "@atomiqlabs/base";
|
|
11
|
+
import {ISwap} from "../swaps/ISwap";
|
|
12
|
+
import {EventListener} from "@atomiqlabs/base/src/events/ChainEvents";
|
|
13
|
+
import {SwapType} from "../enums/SwapType";
|
|
14
|
+
import {UnifiedSwapStorage} from "../storage/UnifiedSwapStorage";
|
|
15
|
+
|
|
16
|
+
import {getLogger} from "../utils/Logger";
|
|
17
|
+
|
|
18
|
+
function chainEventToEscrowHash(event: ChainEvent<any>): string | undefined {
|
|
19
|
+
if(event instanceof SwapEvent) return event.escrowHash;
|
|
20
|
+
if(
|
|
21
|
+
event instanceof SpvVaultFrontEvent ||
|
|
22
|
+
event instanceof SpvVaultClaimEvent ||
|
|
23
|
+
event instanceof SpvVaultCloseEvent
|
|
24
|
+
) return event.btcTxId;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type SwapEventListener<
|
|
28
|
+
T extends ChainType,
|
|
29
|
+
S extends ISwap<T>
|
|
30
|
+
> = (event: ChainEvent<T["Data"]>, swap: S) => Promise<void>;
|
|
31
|
+
|
|
32
|
+
const logger = getLogger("UnifiedSwapEventListener: ");
|
|
33
|
+
|
|
34
|
+
export class UnifiedSwapEventListener<
|
|
35
|
+
T extends ChainType
|
|
36
|
+
> {
|
|
37
|
+
|
|
38
|
+
readonly storage: UnifiedSwapStorage<T>;
|
|
39
|
+
readonly events: T["Events"];
|
|
40
|
+
readonly listeners: {
|
|
41
|
+
[key in SwapType]?: {
|
|
42
|
+
listener: SwapEventListener<T, any>,
|
|
43
|
+
reviver: new (obj: any) => ISwap<T>
|
|
44
|
+
}
|
|
45
|
+
} = {};
|
|
46
|
+
|
|
47
|
+
constructor(unifiedStorage: UnifiedSwapStorage<T>, events: T["Events"]) {
|
|
48
|
+
this.storage = unifiedStorage;
|
|
49
|
+
this.events = events;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async processEvents(events: ChainEvent<T["Data"]>[]) {
|
|
53
|
+
const escrowHashesDeduped = new Set<string>();
|
|
54
|
+
events.forEach(event => {
|
|
55
|
+
const escrowHash = chainEventToEscrowHash(event);
|
|
56
|
+
if(escrowHash!=null) escrowHashesDeduped.add(escrowHash);
|
|
57
|
+
});
|
|
58
|
+
const escrowHashes = Array.from(escrowHashesDeduped);
|
|
59
|
+
|
|
60
|
+
logger.debug("processEvents(): Processing events with escrow hashes: ", escrowHashes);
|
|
61
|
+
|
|
62
|
+
const swaps = await this.storage.query<ISwap<T>>(
|
|
63
|
+
[
|
|
64
|
+
[{key: "escrowHash", value: escrowHashes}]
|
|
65
|
+
],
|
|
66
|
+
(val: any) => {
|
|
67
|
+
const obj = this.listeners?.[val.type as SwapType];
|
|
68
|
+
if(obj==null) return null;
|
|
69
|
+
return new obj.reviver(val);
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
const swapsByEscrowHash: {[key: string]: ISwap<T>} = {};
|
|
73
|
+
swaps.forEach(swap => {
|
|
74
|
+
const escrowHash = swap._getEscrowHash();
|
|
75
|
+
if(escrowHash!=null) swapsByEscrowHash[escrowHash] = swap;
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
//We need to do this because FromBTCLNAutoSwaps might not yet know its escrowHash
|
|
79
|
+
// hence we try to get the claimHash and try to query based on that, FromBTCLNAutoSwaps
|
|
80
|
+
// will use their claimHash as escrowHash before they know the real escrowHash
|
|
81
|
+
const htlcCheckInitializeEvents: {[claimHash: string]: InitializeEvent<T["Data"]>} = {};
|
|
82
|
+
|
|
83
|
+
for(let event of events) {
|
|
84
|
+
const escrowHash = chainEventToEscrowHash(event);
|
|
85
|
+
const eventVersion = event.contractVersion ?? "v1";
|
|
86
|
+
if(escrowHash!=null) {
|
|
87
|
+
const swap = swapsByEscrowHash[escrowHash];
|
|
88
|
+
if(swap!=null && (swap._contractVersion ?? "v1")===eventVersion) {
|
|
89
|
+
const obj = this.listeners[swap.getType()];
|
|
90
|
+
if(obj==null) continue;
|
|
91
|
+
await obj.listener(event, swap);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if(event instanceof InitializeEvent) {
|
|
96
|
+
if(event.swapType===ChainSwapType.HTLC) {
|
|
97
|
+
const swapData: T["Data"] = await event.swapData();
|
|
98
|
+
htlcCheckInitializeEvents[swapData.getClaimHash()] = event;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
logger.debug("processEvents(): Additionally checking HTLC claim hashes: ", Object.keys(htlcCheckInitializeEvents));
|
|
104
|
+
|
|
105
|
+
if(Object.keys(htlcCheckInitializeEvents).length===0) return;
|
|
106
|
+
|
|
107
|
+
//Try to query based on claimData
|
|
108
|
+
const claimDataSwaps = await this.storage.query<ISwap<T>>(
|
|
109
|
+
[
|
|
110
|
+
[{key: "escrowHash", value: Object.keys(htlcCheckInitializeEvents)}]
|
|
111
|
+
],
|
|
112
|
+
(val: any) => {
|
|
113
|
+
const obj = this.listeners?.[val.type as SwapType];
|
|
114
|
+
if(obj==null) return null;
|
|
115
|
+
return new obj.reviver(val);
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
const swapsByClaimDataHash: {[claimData: string]: ISwap<T>} = {};
|
|
119
|
+
claimDataSwaps.forEach(swap => {
|
|
120
|
+
const escrowHash = swap._getEscrowHash();
|
|
121
|
+
if(escrowHash!=null) swapsByClaimDataHash[escrowHash] = swap;
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
logger.debug("processEvents(): Additional HTLC swaps founds: ", swapsByClaimDataHash);
|
|
125
|
+
|
|
126
|
+
for(let claimData in htlcCheckInitializeEvents) {
|
|
127
|
+
const event = htlcCheckInitializeEvents[claimData];
|
|
128
|
+
const eventVersion = event.contractVersion ?? "v1";
|
|
129
|
+
const swap = swapsByClaimDataHash[claimData];
|
|
130
|
+
if(swap!=null && (swap._contractVersion ?? "v1")===eventVersion) {
|
|
131
|
+
const obj = this.listeners[swap.getType()];
|
|
132
|
+
if(obj==null) continue;
|
|
133
|
+
await obj.listener(event, swap);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
listener?: EventListener<T["Data"]>;
|
|
140
|
+
async start() {
|
|
141
|
+
if(this.listener!=null) return;
|
|
142
|
+
logger.info("start(): Starting unified swap event listener");
|
|
143
|
+
await this.storage.init();
|
|
144
|
+
logger.debug("start(): Storage initialized");
|
|
145
|
+
await this.events.init();
|
|
146
|
+
logger.debug("start(): Events initialized");
|
|
147
|
+
this.events.registerListener(this.listener = async (events) => {
|
|
148
|
+
await this.processEvents(events);
|
|
149
|
+
return true;
|
|
150
|
+
});
|
|
151
|
+
logger.info("start(): Successfully initiated the unified swap event listener!");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
stop(): Promise<void> {
|
|
155
|
+
logger.info("stop(): Stopping unified swap event listener");
|
|
156
|
+
if(this.listener!=null) this.events.unregisterListener(this.listener);
|
|
157
|
+
return this.events.stop();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
registerListener<S extends ISwap<T>>(type: SwapType, listener: SwapEventListener<T, S>, reviver: new (val: any) => S): void {
|
|
161
|
+
this.listeners[type] = {
|
|
162
|
+
listener,
|
|
163
|
+
reviver
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
unregisterListener(type: SwapType): boolean {
|
|
168
|
+
if(this.listeners[type]) return false;
|
|
169
|
+
delete this.listeners[type];
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
package/src/http/HttpUtils.ts
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
import {RequestError} from "../errors/RequestError";
|
|
2
|
-
|
|
3
|
-
import {timeoutSignal} from "../utils/TimeoutUtils";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Mimics fetch API byt adds a timeout to the request
|
|
7
|
-
*
|
|
8
|
-
* @param input
|
|
9
|
-
* @param init
|
|
10
|
-
*/
|
|
11
|
-
export function fetchWithTimeout(input: RequestInfo | URL, init: RequestInit & {
|
|
12
|
-
timeout?: number
|
|
13
|
-
}): Promise<Response> {
|
|
14
|
-
if (init == null) init = {};
|
|
15
|
-
if (init.timeout != null) init.signal = timeoutSignal(init.timeout, new Error("Network request timed out"), init.signal ?? undefined);
|
|
16
|
-
|
|
17
|
-
return fetch(input, init).catch(e => {
|
|
18
|
-
if (e.name === "AbortError" && init.signal != null) {
|
|
19
|
-
throw init.signal.reason;
|
|
20
|
-
} else {
|
|
21
|
-
throw e;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Sends an HTTP GET request through a fetch API, handles non 200 response codes as errors
|
|
28
|
-
* @param url Send request to this URL
|
|
29
|
-
* @param timeout Timeout (in milliseconds) for the request to conclude
|
|
30
|
-
* @param abortSignal
|
|
31
|
-
* @param allowNon200 Whether to allow non-200 status code HTTP responses
|
|
32
|
-
* @throws {RequestError} if non 200 response code was returned or body cannot be parsed
|
|
33
|
-
*/
|
|
34
|
-
export async function httpGet<T>(url: string, timeout?: number, abortSignal?: AbortSignal, allowNon200: boolean = false): Promise<T> {
|
|
35
|
-
const init = {
|
|
36
|
-
method: "GET",
|
|
37
|
-
timeout,
|
|
38
|
-
signal: abortSignal
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const response: Response = await fetchWithTimeout(url, init);
|
|
42
|
-
|
|
43
|
-
if (response.status !== 200) {
|
|
44
|
-
let resp: string;
|
|
45
|
-
try {
|
|
46
|
-
resp = await response.text();
|
|
47
|
-
} catch (e) {
|
|
48
|
-
throw new RequestError(response.statusText, response.status);
|
|
49
|
-
}
|
|
50
|
-
if (allowNon200) {
|
|
51
|
-
try {
|
|
52
|
-
return JSON.parse(resp);
|
|
53
|
-
} catch (e) {
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
throw RequestError.parse(resp, response.status);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return await response.json();
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Sends an HTTP POST request through a fetch API, handles non 200 response codes as errors
|
|
64
|
-
* @param url Send request to this URL
|
|
65
|
-
* @param body A HTTP request body to send to the server
|
|
66
|
-
* @param timeout Timeout (in milliseconds) for the request to conclude
|
|
67
|
-
* @param abortSignal
|
|
68
|
-
* @throws {RequestError} if non 200 response code was returned
|
|
69
|
-
*/
|
|
70
|
-
export async function httpPost<T>(url: string, body: any, timeout?: number, abortSignal?: AbortSignal): Promise<T> {
|
|
71
|
-
const init = {
|
|
72
|
-
method: "POST",
|
|
73
|
-
timeout,
|
|
74
|
-
body: JSON.stringify(body),
|
|
75
|
-
headers: {'Content-Type': 'application/json'},
|
|
76
|
-
signal: abortSignal
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const response: Response = timeout == null ? await fetch(url, init) : await fetchWithTimeout(url, init);
|
|
80
|
-
|
|
81
|
-
if (response.status !== 200) {
|
|
82
|
-
let resp: string;
|
|
83
|
-
try {
|
|
84
|
-
resp = await response.text();
|
|
85
|
-
} catch (e) {
|
|
86
|
-
throw new RequestError(response.statusText, response.status);
|
|
87
|
-
}
|
|
88
|
-
throw RequestError.parse(resp, response.status);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return await response.json();
|
|
1
|
+
import {RequestError} from "../errors/RequestError";
|
|
2
|
+
|
|
3
|
+
import {timeoutSignal} from "../utils/TimeoutUtils";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Mimics fetch API byt adds a timeout to the request
|
|
7
|
+
*
|
|
8
|
+
* @param input
|
|
9
|
+
* @param init
|
|
10
|
+
*/
|
|
11
|
+
export function fetchWithTimeout(input: RequestInfo | URL, init: RequestInit & {
|
|
12
|
+
timeout?: number
|
|
13
|
+
}): Promise<Response> {
|
|
14
|
+
if (init == null) init = {};
|
|
15
|
+
if (init.timeout != null) init.signal = timeoutSignal(init.timeout, new Error("Network request timed out"), init.signal ?? undefined);
|
|
16
|
+
|
|
17
|
+
return fetch(input, init).catch(e => {
|
|
18
|
+
if (e.name === "AbortError" && init.signal != null) {
|
|
19
|
+
throw init.signal.reason;
|
|
20
|
+
} else {
|
|
21
|
+
throw e;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Sends an HTTP GET request through a fetch API, handles non 200 response codes as errors
|
|
28
|
+
* @param url Send request to this URL
|
|
29
|
+
* @param timeout Timeout (in milliseconds) for the request to conclude
|
|
30
|
+
* @param abortSignal
|
|
31
|
+
* @param allowNon200 Whether to allow non-200 status code HTTP responses
|
|
32
|
+
* @throws {RequestError} if non 200 response code was returned or body cannot be parsed
|
|
33
|
+
*/
|
|
34
|
+
export async function httpGet<T>(url: string, timeout?: number, abortSignal?: AbortSignal, allowNon200: boolean = false): Promise<T> {
|
|
35
|
+
const init = {
|
|
36
|
+
method: "GET",
|
|
37
|
+
timeout,
|
|
38
|
+
signal: abortSignal
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const response: Response = await fetchWithTimeout(url, init);
|
|
42
|
+
|
|
43
|
+
if (response.status !== 200) {
|
|
44
|
+
let resp: string;
|
|
45
|
+
try {
|
|
46
|
+
resp = await response.text();
|
|
47
|
+
} catch (e) {
|
|
48
|
+
throw new RequestError(response.statusText, response.status);
|
|
49
|
+
}
|
|
50
|
+
if (allowNon200) {
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse(resp);
|
|
53
|
+
} catch (e) {
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw RequestError.parse(resp, response.status);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return await response.json();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Sends an HTTP POST request through a fetch API, handles non 200 response codes as errors
|
|
64
|
+
* @param url Send request to this URL
|
|
65
|
+
* @param body A HTTP request body to send to the server
|
|
66
|
+
* @param timeout Timeout (in milliseconds) for the request to conclude
|
|
67
|
+
* @param abortSignal
|
|
68
|
+
* @throws {RequestError} if non 200 response code was returned
|
|
69
|
+
*/
|
|
70
|
+
export async function httpPost<T>(url: string, body: any, timeout?: number, abortSignal?: AbortSignal): Promise<T> {
|
|
71
|
+
const init = {
|
|
72
|
+
method: "POST",
|
|
73
|
+
timeout,
|
|
74
|
+
body: JSON.stringify(body),
|
|
75
|
+
headers: {'Content-Type': 'application/json'},
|
|
76
|
+
signal: abortSignal
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const response: Response = timeout == null ? await fetch(url, init) : await fetchWithTimeout(url, init);
|
|
80
|
+
|
|
81
|
+
if (response.status !== 200) {
|
|
82
|
+
let resp: string;
|
|
83
|
+
try {
|
|
84
|
+
resp = await response.text();
|
|
85
|
+
} catch (e) {
|
|
86
|
+
throw new RequestError(response.statusText, response.status);
|
|
87
|
+
}
|
|
88
|
+
throw RequestError.parse(resp, response.status);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return await response.json();
|
|
92
92
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export interface IParamReader {
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Returns a promise when the specific property with the name is read from the stream
|
|
5
|
-
*
|
|
6
|
-
* @param name Name of the property
|
|
7
|
-
*/
|
|
8
|
-
getParam<T>(name: string): Promise<T>;
|
|
9
|
-
|
|
1
|
+
export interface IParamReader {
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns a promise when the specific property with the name is read from the stream
|
|
5
|
+
*
|
|
6
|
+
* @param name Name of the property
|
|
7
|
+
*/
|
|
8
|
+
getParam<T>(name: string): Promise<T>;
|
|
9
|
+
|
|
10
10
|
}
|