@atomiqlabs/sdk 8.9.0 → 8.9.2
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/api/index.d.ts +1 -1
- package/api/index.js +3 -3
- package/dist/ApiList.d.ts +37 -37
- package/dist/ApiList.js +30 -30
- package/dist/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/api/ApiEndpoints.d.ts +393 -393
- package/dist/api/ApiEndpoints.js +2 -2
- package/dist/api/ApiParser.d.ts +10 -10
- package/dist/api/ApiParser.js +134 -134
- package/dist/api/ApiTypes.d.ts +157 -157
- package/dist/api/ApiTypes.js +75 -75
- package/dist/api/SerializedAction.d.ts +40 -40
- package/dist/api/SerializedAction.js +59 -59
- package/dist/api/SwapperApi.d.ts +50 -50
- package/dist/api/SwapperApi.js +431 -431
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.js +24 -24
- 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 +24 -24
- package/dist/events/UnifiedSwapEventListener.js +138 -138
- package/dist/http/HttpUtils.d.ts +29 -29
- package/dist/http/HttpUtils.js +97 -97
- 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 +17 -17
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +175 -175
- package/dist/index.d.ts +86 -86
- package/dist/index.js +159 -159
- package/dist/intermediaries/Intermediary.d.ts +178 -178
- package/dist/intermediaries/Intermediary.js +166 -166
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +216 -216
- package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +607 -607
- package/dist/intermediaries/apis/IntermediaryAPI.js +764 -764
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- package/dist/intermediaries/auth/SignedKeyBasedAuth.d.ts +14 -14
- package/dist/intermediaries/auth/SignedKeyBasedAuth.js +68 -68
- 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 +127 -127
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +120 -120
- package/dist/storage/UnifiedSwapStorage.js +154 -154
- 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 +765 -765
- package/dist/swapper/Swapper.js +1749 -1749
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +222 -222
- package/dist/swapper/SwapperUtils.js +519 -519
- 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 +453 -453
- package/dist/swaps/ISwap.js +371 -371
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -12
- package/dist/swaps/ISwapWrapper.d.ts +295 -295
- package/dist/swaps/ISwapWrapper.js +373 -373
- 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 +172 -172
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +129 -129
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +107 -107
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
- 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 +547 -547
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1419 -1419
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +192 -192
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +650 -650
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1577 -1577
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +237 -237
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +491 -491
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1463 -1463
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +204 -204
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +446 -446
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +1097 -1097
- 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 +252 -252
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +535 -535
- 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 +134 -134
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +694 -694
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1687 -1687
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +259 -259
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +302 -302
- package/dist/swaps/trusted/ln/LnForGasSwap.js +625 -625
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +343 -343
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +698 -698
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +71 -71
- 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 +195 -195
- package/dist/types/SwapExecutionAction.js +106 -106
- package/dist/types/SwapExecutionStep.d.ts +144 -144
- package/dist/types/SwapExecutionStep.js +87 -87
- 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 +75 -75
- package/dist/types/TokenAmount.js +85 -85
- 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 +18 -18
- package/dist/utils/BitcoinUtils.js +174 -174
- 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 +69 -69
- package/dist/utils/Utils.js +214 -214
- package/package.json +46 -46
- package/src/SmartChainAssets.ts +186 -186
- package/src/api/ApiEndpoints.ts +427 -427
- package/src/api/ApiParser.ts +138 -138
- package/src/api/ApiTypes.ts +229 -229
- package/src/api/SerializedAction.ts +97 -97
- package/src/api/SwapperApi.ts +545 -545
- package/src/api/index.ts +5 -5
- 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 +181 -181
- package/src/http/HttpUtils.ts +97 -97
- 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 +194 -194
- package/src/index.ts +141 -141
- package/src/intermediaries/Intermediary.ts +280 -280
- package/src/intermediaries/IntermediaryDiscovery.ts +548 -548
- package/src/intermediaries/apis/IntermediaryAPI.ts +1247 -1247
- package/src/intermediaries/auth/SignedKeyBasedAuth.ts +69 -69
- 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 +136 -136
- package/src/storage/UnifiedSwapStorage.ts +175 -175
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
- package/src/storage-browser/LocalStorageManager.ts +106 -106
- package/src/swapper/Swapper.ts +2557 -2557
- package/src/swapper/SwapperFactory.ts +307 -307
- package/src/swapper/SwapperUtils.ts +610 -610
- 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 +775 -775
- package/src/swaps/ISwapWithGasDrop.ts +25 -25
- package/src/swaps/ISwapWrapper.ts +564 -564
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +271 -271
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +284 -284
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +172 -172
- 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 +1670 -1671
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +603 -603
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1883 -1883
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +752 -752
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1753 -1753
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +612 -612
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1327 -1327
- 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 +787 -787
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +403 -403
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +2148 -2148
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1238 -1238
- package/src/swaps/trusted/ln/LnForGasSwap.ts +753 -753
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +90 -90
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +843 -843
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +133 -133
- 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 +323 -323
- package/src/types/SwapExecutionStep.ts +224 -224
- 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 +167 -167
- 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 +164 -164
- 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 +221 -221
|
@@ -1,764 +1,764 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.IntermediaryAPI = exports.TrustedAddressStatusResponseCodes = exports.TrustedInvoiceStatusResponseCodes = exports.InvoiceStatusResponseCodes = exports.PaymentAuthorizationResponseCodes = exports.RefundAuthorizationResponseCodes = void 0;
|
|
4
|
-
const RequestError_1 = require("../../errors/RequestError");
|
|
5
|
-
const SchemaVerifier_1 = require("../../http/paramcoders/SchemaVerifier");
|
|
6
|
-
const StreamingFetchPromise_1 = require("../../http/paramcoders/client/StreamingFetchPromise");
|
|
7
|
-
const Utils_1 = require("../../utils/Utils");
|
|
8
|
-
const HttpUtils_1 = require("../../http/HttpUtils");
|
|
9
|
-
const RetryUtils_1 = require("../../utils/RetryUtils");
|
|
10
|
-
var RefundAuthorizationResponseCodes;
|
|
11
|
-
(function (RefundAuthorizationResponseCodes) {
|
|
12
|
-
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["EXPIRED"] = 20010] = "EXPIRED";
|
|
13
|
-
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["REFUND_DATA"] = 20000] = "REFUND_DATA";
|
|
14
|
-
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["NOT_FOUND"] = 20007] = "NOT_FOUND";
|
|
15
|
-
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["PENDING"] = 20008] = "PENDING";
|
|
16
|
-
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["PAID"] = 20006] = "PAID";
|
|
17
|
-
})(RefundAuthorizationResponseCodes = exports.RefundAuthorizationResponseCodes || (exports.RefundAuthorizationResponseCodes = {}));
|
|
18
|
-
var PaymentAuthorizationResponseCodes;
|
|
19
|
-
(function (PaymentAuthorizationResponseCodes) {
|
|
20
|
-
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["AUTH_DATA"] = 10000] = "AUTH_DATA";
|
|
21
|
-
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
22
|
-
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["PAID"] = 10002] = "PAID";
|
|
23
|
-
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["PENDING"] = 10003] = "PENDING";
|
|
24
|
-
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["ALREADY_COMMITTED"] = 10004] = "ALREADY_COMMITTED";
|
|
25
|
-
})(PaymentAuthorizationResponseCodes = exports.PaymentAuthorizationResponseCodes || (exports.PaymentAuthorizationResponseCodes = {}));
|
|
26
|
-
var InvoiceStatusResponseCodes;
|
|
27
|
-
(function (InvoiceStatusResponseCodes) {
|
|
28
|
-
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["PAID"] = 10000] = "PAID";
|
|
29
|
-
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
30
|
-
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["SETTLED"] = 10002] = "SETTLED";
|
|
31
|
-
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["PENDING"] = 10003] = "PENDING";
|
|
32
|
-
})(InvoiceStatusResponseCodes = exports.InvoiceStatusResponseCodes || (exports.InvoiceStatusResponseCodes = {}));
|
|
33
|
-
const SwapResponseSchema = {
|
|
34
|
-
data: SchemaVerifier_1.FieldTypeEnum.Any,
|
|
35
|
-
prefix: SchemaVerifier_1.FieldTypeEnum.String,
|
|
36
|
-
timeout: SchemaVerifier_1.FieldTypeEnum.String,
|
|
37
|
-
signature: SchemaVerifier_1.FieldTypeEnum.String
|
|
38
|
-
};
|
|
39
|
-
/////////////////////////
|
|
40
|
-
///// To BTC
|
|
41
|
-
const ToBTCResponseSchema = {
|
|
42
|
-
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
43
|
-
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
44
|
-
satsPervByte: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
45
|
-
networkFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
46
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
47
|
-
totalFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
48
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
49
|
-
minRequiredExpiry: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
50
|
-
...SwapResponseSchema
|
|
51
|
-
};
|
|
52
|
-
/////////////////////////
|
|
53
|
-
///// To BTCLN
|
|
54
|
-
const ToBTCLNResponseSchema = {
|
|
55
|
-
maxFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
56
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
57
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
58
|
-
confidence: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
59
|
-
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
60
|
-
routingFeeSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
61
|
-
...SwapResponseSchema
|
|
62
|
-
};
|
|
63
|
-
const ToBTCLNPrepareExactInSchema = {
|
|
64
|
-
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
65
|
-
reqId: SchemaVerifier_1.FieldTypeEnum.String
|
|
66
|
-
};
|
|
67
|
-
/////////////////////////
|
|
68
|
-
///// From BTC
|
|
69
|
-
const FromBTCResponseSchema = {
|
|
70
|
-
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
71
|
-
btcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
72
|
-
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
73
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
74
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
75
|
-
confirmations: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
76
|
-
...SwapResponseSchema
|
|
77
|
-
};
|
|
78
|
-
/////////////////////////
|
|
79
|
-
///// From BTCLN
|
|
80
|
-
const FromBTCLNResponseSchema = {
|
|
81
|
-
pr: SchemaVerifier_1.FieldTypeEnum.String,
|
|
82
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
83
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
84
|
-
intermediaryKey: SchemaVerifier_1.FieldTypeEnum.String,
|
|
85
|
-
securityDeposit: SchemaVerifier_1.FieldTypeEnum.BigInt
|
|
86
|
-
};
|
|
87
|
-
/////////////////////////
|
|
88
|
-
///// From BTCLN Auto
|
|
89
|
-
const FromBTCLNAutoResponseSchema = {
|
|
90
|
-
intermediaryKey: SchemaVerifier_1.FieldTypeEnum.String,
|
|
91
|
-
pr: SchemaVerifier_1.FieldTypeEnum.String,
|
|
92
|
-
btcAmountSwap: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
93
|
-
btcAmountGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
94
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
95
|
-
totalGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
96
|
-
totalFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
97
|
-
swapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
98
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
99
|
-
gasSwapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
100
|
-
gasSwapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
101
|
-
claimerBounty: SchemaVerifier_1.FieldTypeEnum.BigInt
|
|
102
|
-
};
|
|
103
|
-
/////////////////////////
|
|
104
|
-
///// Spv vault from BTC
|
|
105
|
-
const SpvFromBTCPrepareResponseSchema = {
|
|
106
|
-
quoteId: SchemaVerifier_1.FieldTypeEnum.String,
|
|
107
|
-
expiry: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
108
|
-
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
109
|
-
vaultId: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
110
|
-
vaultBtcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
111
|
-
btcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
112
|
-
btcUtxo: SchemaVerifier_1.FieldTypeEnum.String,
|
|
113
|
-
btcFeeRate: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
114
|
-
btcAmount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
115
|
-
btcAmountSwap: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
116
|
-
btcAmountGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
117
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
118
|
-
totalGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
119
|
-
totalFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
120
|
-
swapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
121
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
122
|
-
gasSwapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
123
|
-
gasSwapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
124
|
-
callerFeeShare: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
125
|
-
frontingFeeShare: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
126
|
-
executionFeeShare: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
127
|
-
usedUtxoInputCalculation: SchemaVerifier_1.FieldTypeEnum.BooleanOptional
|
|
128
|
-
};
|
|
129
|
-
const SpvFromBTCInitResponseSchema = {
|
|
130
|
-
txId: SchemaVerifier_1.FieldTypeEnum.String
|
|
131
|
-
};
|
|
132
|
-
/////////////////////////
|
|
133
|
-
///// Trusted from BTCLN
|
|
134
|
-
var TrustedInvoiceStatusResponseCodes;
|
|
135
|
-
(function (TrustedInvoiceStatusResponseCodes) {
|
|
136
|
-
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
137
|
-
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["PAID"] = 10000] = "PAID";
|
|
138
|
-
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["AWAIT_PAYMENT"] = 10010] = "AWAIT_PAYMENT";
|
|
139
|
-
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["PENDING"] = 10011] = "PENDING";
|
|
140
|
-
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["TX_SENT"] = 10012] = "TX_SENT";
|
|
141
|
-
})(TrustedInvoiceStatusResponseCodes = exports.TrustedInvoiceStatusResponseCodes || (exports.TrustedInvoiceStatusResponseCodes = {}));
|
|
142
|
-
const TrustedFromBTCLNResponseSchema = {
|
|
143
|
-
pr: SchemaVerifier_1.FieldTypeEnum.String,
|
|
144
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
145
|
-
swapFeeSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
146
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt
|
|
147
|
-
};
|
|
148
|
-
/////////////////////////
|
|
149
|
-
///// Trusted from BTC
|
|
150
|
-
var TrustedAddressStatusResponseCodes;
|
|
151
|
-
(function (TrustedAddressStatusResponseCodes) {
|
|
152
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
153
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["PAID"] = 10000] = "PAID";
|
|
154
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["AWAIT_PAYMENT"] = 10010] = "AWAIT_PAYMENT";
|
|
155
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["AWAIT_CONFIRMATION"] = 10011] = "AWAIT_CONFIRMATION";
|
|
156
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["PENDING"] = 10013] = "PENDING";
|
|
157
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["TX_SENT"] = 10012] = "TX_SENT";
|
|
158
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["REFUNDED"] = 10014] = "REFUNDED";
|
|
159
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["DOUBLE_SPENT"] = 10015] = "DOUBLE_SPENT";
|
|
160
|
-
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["REFUNDABLE"] = 10016] = "REFUNDABLE";
|
|
161
|
-
})(TrustedAddressStatusResponseCodes = exports.TrustedAddressStatusResponseCodes || (exports.TrustedAddressStatusResponseCodes = {}));
|
|
162
|
-
const TrustedFromBTCResponseSchema = {
|
|
163
|
-
paymentHash: SchemaVerifier_1.FieldTypeEnum.String,
|
|
164
|
-
sequence: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
165
|
-
btcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
166
|
-
amountSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
167
|
-
swapFeeSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
168
|
-
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
169
|
-
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
170
|
-
intermediaryKey: SchemaVerifier_1.FieldTypeEnum.String,
|
|
171
|
-
recommendedFee: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
172
|
-
expiresAt: SchemaVerifier_1.FieldTypeEnum.Number
|
|
173
|
-
};
|
|
174
|
-
class IntermediaryAPI {
|
|
175
|
-
constructor(requestHeaders) {
|
|
176
|
-
this.requestHeaders = requestHeaders;
|
|
177
|
-
}
|
|
178
|
-
httpGet(url, timeout, abortSignal, allowNon200 = false) {
|
|
179
|
-
const headers = this.requestHeaders == null ? {} : this.requestHeaders("GET", url);
|
|
180
|
-
return (0, HttpUtils_1.httpGet)(url, timeout, abortSignal, allowNon200, headers);
|
|
181
|
-
}
|
|
182
|
-
httpPost(url, body, timeout, abortSignal) {
|
|
183
|
-
const headers = this.requestHeaders == null ? {} : this.requestHeaders("POST", url, body);
|
|
184
|
-
return (0, HttpUtils_1.httpPost)(url, body, timeout, abortSignal, headers);
|
|
185
|
-
}
|
|
186
|
-
streamingFetchPromise(url, body, schema, timeout, signal, streamRequest) {
|
|
187
|
-
const headers = this.requestHeaders == null ? {} : this.requestHeaders("POST", url);
|
|
188
|
-
return (0, StreamingFetchPromise_1.streamingFetchPromise)(url, body, schema, timeout, signal, streamRequest, headers);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Returns the information about a specific intermediary
|
|
192
|
-
*
|
|
193
|
-
* @param baseUrl Base URL of the intermediary
|
|
194
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
195
|
-
* @param abortSignal
|
|
196
|
-
*
|
|
197
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
198
|
-
* @throws {Error} If the supplied nonce doesn't match the response
|
|
199
|
-
*/
|
|
200
|
-
async getIntermediaryInfo(baseUrl, timeout, abortSignal) {
|
|
201
|
-
const nonce = (0, Utils_1.randomBytes)(32).toString("hex");
|
|
202
|
-
const abortController = (0, Utils_1.extendAbortController)(abortSignal);
|
|
203
|
-
//We don't know whether the node supports only POST or also has GET info support enabled
|
|
204
|
-
// here we try both, and abort when the first one returns (which should be GET)
|
|
205
|
-
const response = await Promise.any([
|
|
206
|
-
this.httpGet(baseUrl + "/info?nonce=" + nonce, timeout, abortController.signal),
|
|
207
|
-
this.httpPost(baseUrl + "/info", {
|
|
208
|
-
nonce,
|
|
209
|
-
}, timeout, abortController.signal)
|
|
210
|
-
]);
|
|
211
|
-
abortController.abort();
|
|
212
|
-
const info = JSON.parse(response.envelope);
|
|
213
|
-
if (nonce !== info.nonce)
|
|
214
|
-
throw new Error("Invalid response - nonce");
|
|
215
|
-
return response;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Returns the information about an outcome of the To BTC swap
|
|
219
|
-
*
|
|
220
|
-
* @param url URL of the intermediary
|
|
221
|
-
* @param paymentHash Payment hash of the swap
|
|
222
|
-
* @param sequence Swap's sequence number
|
|
223
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
224
|
-
* @param abortSignal
|
|
225
|
-
*
|
|
226
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
227
|
-
*/
|
|
228
|
-
async getRefundAuthorization(url, paymentHash, sequence, timeout, abortSignal) {
|
|
229
|
-
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getRefundAuthorization" +
|
|
230
|
-
"?paymentHash=" + encodeURIComponent(paymentHash) +
|
|
231
|
-
"&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Returns the information about the payment of the From BTCLN swaps
|
|
235
|
-
*
|
|
236
|
-
* @param url URL of the intermediary
|
|
237
|
-
* @param paymentHash Payment hash of the swap
|
|
238
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
239
|
-
* @param abortSignal
|
|
240
|
-
*
|
|
241
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
242
|
-
*/
|
|
243
|
-
async getPaymentAuthorization(url, paymentHash, timeout, abortSignal) {
|
|
244
|
-
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getInvoicePaymentAuth" +
|
|
245
|
-
"?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Returns the status of the payment of the From BTCLN swaps
|
|
249
|
-
*
|
|
250
|
-
* @param url URL of the intermediary
|
|
251
|
-
* @param paymentHash Payment hash of the swap
|
|
252
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
253
|
-
* @param abortSignal
|
|
254
|
-
*
|
|
255
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
256
|
-
*/
|
|
257
|
-
async getInvoiceStatus(url, paymentHash, timeout, abortSignal) {
|
|
258
|
-
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getInvoiceStatus" +
|
|
259
|
-
"?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Initiate To BTC swap with an intermediary
|
|
263
|
-
*
|
|
264
|
-
* @param chainIdentifier
|
|
265
|
-
* @param baseUrl Base URL of the intermediary
|
|
266
|
-
* @param init Swap initialization parameters
|
|
267
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
268
|
-
* @param abortSignal
|
|
269
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
270
|
-
*
|
|
271
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
272
|
-
*/
|
|
273
|
-
initToBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
274
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/tobtc/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
275
|
-
...init.additionalParams,
|
|
276
|
-
address: init.btcAddress,
|
|
277
|
-
amount: init.amount.toString(10),
|
|
278
|
-
exactIn: init.exactIn,
|
|
279
|
-
confirmationTarget: init.confirmationTarget,
|
|
280
|
-
confirmations: init.confirmations,
|
|
281
|
-
nonce: init.nonce.toString(10),
|
|
282
|
-
token: init.token,
|
|
283
|
-
offerer: init.offerer,
|
|
284
|
-
feeRate: init.feeRate
|
|
285
|
-
}, {
|
|
286
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
287
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
288
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
289
|
-
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
290
|
-
}, timeout, abortSignal, streamRequest);
|
|
291
|
-
return {
|
|
292
|
-
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
293
|
-
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
294
|
-
responseBody.code,
|
|
295
|
-
responseBody.msg,
|
|
296
|
-
responseBody.data,
|
|
297
|
-
])).then(([code, msg, data]) => {
|
|
298
|
-
if (code !== 20000) {
|
|
299
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
300
|
-
}
|
|
301
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCResponseSchema);
|
|
302
|
-
if (result == null)
|
|
303
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
304
|
-
return result;
|
|
305
|
-
})
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Initiate From BTC swap with an intermediary
|
|
310
|
-
*
|
|
311
|
-
* @param chainIdentifier
|
|
312
|
-
* @param baseUrl Base URL of the intermediary
|
|
313
|
-
* @param depositToken
|
|
314
|
-
* @param init Swap initialization parameters
|
|
315
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
316
|
-
* @param abortSignal
|
|
317
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
318
|
-
*
|
|
319
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
320
|
-
*/
|
|
321
|
-
initFromBTC(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
|
|
322
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtc/getAddress?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
|
|
323
|
-
...init.additionalParams,
|
|
324
|
-
address: init.claimer,
|
|
325
|
-
amount: init.amount.toString(10),
|
|
326
|
-
token: init.token,
|
|
327
|
-
exactOut: init.exactOut,
|
|
328
|
-
sequence: init.sequence.toString(10),
|
|
329
|
-
claimerBounty: init.claimerBounty.then(claimerBounty => {
|
|
330
|
-
return {
|
|
331
|
-
feePerBlock: claimerBounty.feePerBlock.toString(10),
|
|
332
|
-
safetyFactor: claimerBounty.safetyFactor.toString(10),
|
|
333
|
-
startTimestamp: claimerBounty.startTimestamp.toString(10),
|
|
334
|
-
addBlock: claimerBounty.addBlock.toString(10),
|
|
335
|
-
addFee: claimerBounty.addFee.toString(10)
|
|
336
|
-
};
|
|
337
|
-
}),
|
|
338
|
-
feeRate: init.feeRate
|
|
339
|
-
}, {
|
|
340
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
341
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
342
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
343
|
-
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
344
|
-
}, timeout, abortSignal, streamRequest);
|
|
345
|
-
return {
|
|
346
|
-
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
347
|
-
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
348
|
-
responseBody.code,
|
|
349
|
-
responseBody.msg,
|
|
350
|
-
responseBody.data,
|
|
351
|
-
])).then(([code, msg, data]) => {
|
|
352
|
-
if (code !== 20000) {
|
|
353
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
354
|
-
}
|
|
355
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCResponseSchema);
|
|
356
|
-
if (result == null)
|
|
357
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
358
|
-
return result;
|
|
359
|
-
})
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Initiate From BTCLN swap with an intermediary
|
|
364
|
-
*
|
|
365
|
-
* @param chainIdentifier
|
|
366
|
-
* @param baseUrl Base URL of the intermediary
|
|
367
|
-
* @param depositToken
|
|
368
|
-
* @param init Swap initialization parameters
|
|
369
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
370
|
-
* @param abortSignal
|
|
371
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
372
|
-
*
|
|
373
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
374
|
-
*/
|
|
375
|
-
initFromBTCLN(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
|
|
376
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtcln/createInvoice?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
|
|
377
|
-
...init.additionalParams,
|
|
378
|
-
paymentHash: init.paymentHash.toString("hex"),
|
|
379
|
-
amount: init.amount.toString(),
|
|
380
|
-
address: init.claimer,
|
|
381
|
-
token: init.token,
|
|
382
|
-
description: init.description ?? null,
|
|
383
|
-
descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
|
|
384
|
-
exactOut: init.exactOut,
|
|
385
|
-
feeRate: init.feeRate
|
|
386
|
-
}, {
|
|
387
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
388
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
389
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
390
|
-
lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
|
|
391
|
-
}, timeout, abortSignal, streamRequest);
|
|
392
|
-
return {
|
|
393
|
-
lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
|
|
394
|
-
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
395
|
-
responseBody.code,
|
|
396
|
-
responseBody.msg,
|
|
397
|
-
responseBody.data,
|
|
398
|
-
])).then(([code, msg, data]) => {
|
|
399
|
-
if (code !== 20000) {
|
|
400
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
401
|
-
}
|
|
402
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNResponseSchema);
|
|
403
|
-
if (result == null)
|
|
404
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
405
|
-
return result;
|
|
406
|
-
})
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Initiate From BTCLN swap with auto-initilization by an intermediary
|
|
411
|
-
*
|
|
412
|
-
* @param chainIdentifier
|
|
413
|
-
* @param baseUrl Base URL of the intermediary
|
|
414
|
-
* @param init Swap initialization parameters
|
|
415
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
416
|
-
* @param abortSignal
|
|
417
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
418
|
-
*
|
|
419
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
420
|
-
*/
|
|
421
|
-
initFromBTCLNAuto(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
422
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtcln_auto/createInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
423
|
-
...init.additionalParams,
|
|
424
|
-
paymentHash: init.paymentHash.toString("hex"),
|
|
425
|
-
amount: init.amount.toString(),
|
|
426
|
-
address: init.claimer,
|
|
427
|
-
token: init.token,
|
|
428
|
-
description: init.description ?? null,
|
|
429
|
-
descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
|
|
430
|
-
exactOut: init.exactOut,
|
|
431
|
-
gasToken: init.gasToken,
|
|
432
|
-
gasAmount: init.gasAmount?.toString(10) ?? "0",
|
|
433
|
-
claimerBounty: init.claimerBounty?.then(val => val.toString(10)) ?? "0"
|
|
434
|
-
}, {
|
|
435
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
436
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
437
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
438
|
-
lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
|
|
439
|
-
}, timeout, abortSignal, streamRequest);
|
|
440
|
-
return {
|
|
441
|
-
lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
|
|
442
|
-
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
443
|
-
responseBody.code,
|
|
444
|
-
responseBody.msg,
|
|
445
|
-
responseBody.data,
|
|
446
|
-
])).then(([code, msg, data]) => {
|
|
447
|
-
if (code !== 20000) {
|
|
448
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
449
|
-
}
|
|
450
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNAutoResponseSchema);
|
|
451
|
-
if (result == null)
|
|
452
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
453
|
-
return result;
|
|
454
|
-
})
|
|
455
|
-
};
|
|
456
|
-
}
|
|
457
|
-
/**
|
|
458
|
-
* Initiate To BTCLN swap with an intermediary
|
|
459
|
-
*
|
|
460
|
-
* @param chainIdentifier
|
|
461
|
-
* @param baseUrl Base URL of the intermediary
|
|
462
|
-
* @param init Swap initialization parameters
|
|
463
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
464
|
-
* @param abortSignal
|
|
465
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
466
|
-
*
|
|
467
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
468
|
-
*/
|
|
469
|
-
initToBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
470
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
471
|
-
exactIn: false,
|
|
472
|
-
...init.additionalParams,
|
|
473
|
-
pr: init.pr,
|
|
474
|
-
maxFee: init.maxFee.toString(10),
|
|
475
|
-
expiryTimestamp: init.expiryTimestamp.toString(10),
|
|
476
|
-
token: init.token,
|
|
477
|
-
offerer: init.offerer,
|
|
478
|
-
feeRate: init.feeRate,
|
|
479
|
-
amount: null
|
|
480
|
-
}, {
|
|
481
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
482
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
483
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
484
|
-
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
485
|
-
}, timeout, abortSignal, streamRequest);
|
|
486
|
-
return {
|
|
487
|
-
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
488
|
-
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
489
|
-
responseBody.code,
|
|
490
|
-
responseBody.msg,
|
|
491
|
-
responseBody.data,
|
|
492
|
-
])).then(([code, msg, data]) => {
|
|
493
|
-
if (code !== 20000) {
|
|
494
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
495
|
-
}
|
|
496
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
|
|
497
|
-
if (result == null)
|
|
498
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
499
|
-
return result;
|
|
500
|
-
})
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Initiate To BTCLN exact in swap with an intermediary
|
|
505
|
-
*
|
|
506
|
-
* @param baseUrl Base URL of the intermediary
|
|
507
|
-
* @param init Swap initialization parameters
|
|
508
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
509
|
-
* @param abortSignal
|
|
510
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
511
|
-
*
|
|
512
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
513
|
-
*/
|
|
514
|
-
async initToBTCLNExactIn(baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
515
|
-
const responseBody = await this.streamingFetchPromise(baseUrl + "/tobtcln/payInvoiceExactIn", {
|
|
516
|
-
...init.additionalParams,
|
|
517
|
-
pr: init.pr,
|
|
518
|
-
reqId: init.reqId,
|
|
519
|
-
feeRate: init.feeRate
|
|
520
|
-
}, {
|
|
521
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
522
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
523
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
524
|
-
}, timeout, abortSignal, streamRequest);
|
|
525
|
-
const [code, msg, data] = await Promise.all([
|
|
526
|
-
responseBody.code,
|
|
527
|
-
responseBody.msg,
|
|
528
|
-
responseBody.data,
|
|
529
|
-
]);
|
|
530
|
-
if (code !== 20000)
|
|
531
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
532
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
|
|
533
|
-
if (result == null)
|
|
534
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
535
|
-
return result;
|
|
536
|
-
}
|
|
537
|
-
/**
|
|
538
|
-
* Prepare To BTCLN exact in swap with an intermediary
|
|
539
|
-
*
|
|
540
|
-
* @param chainIdentifier
|
|
541
|
-
* @param baseUrl Base URL of the intermediary
|
|
542
|
-
* @param init Swap initialization parameters
|
|
543
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
544
|
-
* @param abortSignal
|
|
545
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
546
|
-
*
|
|
547
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
548
|
-
*/
|
|
549
|
-
prepareToBTCLNExactIn(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
550
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
551
|
-
exactIn: true,
|
|
552
|
-
...init.additionalParams,
|
|
553
|
-
pr: init.pr,
|
|
554
|
-
maxFee: init.maxFee.toString(10),
|
|
555
|
-
expiryTimestamp: init.expiryTimestamp.toString(10),
|
|
556
|
-
token: init.token,
|
|
557
|
-
offerer: init.offerer,
|
|
558
|
-
amount: init.amount.toString(10)
|
|
559
|
-
}, {
|
|
560
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
561
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
562
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
563
|
-
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
564
|
-
}, timeout, abortSignal, streamRequest);
|
|
565
|
-
return {
|
|
566
|
-
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
567
|
-
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
568
|
-
responseBody.code,
|
|
569
|
-
responseBody.msg,
|
|
570
|
-
responseBody.data,
|
|
571
|
-
])).then(([code, msg, data]) => {
|
|
572
|
-
if (code !== 20000) {
|
|
573
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
574
|
-
}
|
|
575
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNPrepareExactInSchema);
|
|
576
|
-
if (result == null)
|
|
577
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
578
|
-
return result;
|
|
579
|
-
})
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
/**
|
|
583
|
-
* Prepare From BTC swap via new spv vault swaps with an intermediary
|
|
584
|
-
*
|
|
585
|
-
* @param chainIdentifier
|
|
586
|
-
* @param baseUrl Base URL of the intermediary
|
|
587
|
-
* @param init Swap initialization parameters
|
|
588
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
589
|
-
* @param abortSignal
|
|
590
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
591
|
-
*
|
|
592
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
593
|
-
*/
|
|
594
|
-
prepareSpvFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
595
|
-
//We need to make sure we only send the amount parameter after the amountUtxos and amountFeeRate resolve
|
|
596
|
-
// this is needed, because in the LP code to maintain backwards compatibility the amountUtxos and amountFeeRate
|
|
597
|
-
// params are checked immediately after the amount param (and other params) are received, if amount were sent
|
|
598
|
-
// first without the amountUtxos or amountFeeRate populated these fields would've been skipped altogether
|
|
599
|
-
const amountPromise = (async () => {
|
|
600
|
-
if (init.amountUtxos != null)
|
|
601
|
-
await init.amountUtxos;
|
|
602
|
-
if (init.amountFeeRate != null)
|
|
603
|
-
await init.amountFeeRate;
|
|
604
|
-
const amount = await init.amount;
|
|
605
|
-
return amount.toString(10);
|
|
606
|
-
})();
|
|
607
|
-
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtc_spv/getQuote?chain=" + encodeURIComponent(chainIdentifier), {
|
|
608
|
-
exactOut: init.exactOut,
|
|
609
|
-
...init.additionalParams,
|
|
610
|
-
address: init.address,
|
|
611
|
-
amount: amountPromise,
|
|
612
|
-
token: init.token,
|
|
613
|
-
gasAmount: init.gasAmount.toString(10),
|
|
614
|
-
gasToken: init.gasToken,
|
|
615
|
-
frontingFeeRate: init.frontingFeeRate.toString(10),
|
|
616
|
-
callerFeeRate: init.callerFeeRate.then(val => val.toString(10)),
|
|
617
|
-
stickyAddress: init.stickyAddress,
|
|
618
|
-
amountUtxos: init.amountUtxos,
|
|
619
|
-
amountFeeRate: init.amountFeeRate
|
|
620
|
-
}, {
|
|
621
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
622
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
623
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
624
|
-
}, timeout, abortSignal, streamRequest);
|
|
625
|
-
return responseBodyPromise.then((responseBody) => Promise.all([
|
|
626
|
-
responseBody.code,
|
|
627
|
-
responseBody.msg,
|
|
628
|
-
responseBody.data,
|
|
629
|
-
])).then(([code, msg, data]) => {
|
|
630
|
-
if (code !== 20000) {
|
|
631
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
632
|
-
}
|
|
633
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCPrepareResponseSchema);
|
|
634
|
-
if (result == null)
|
|
635
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
636
|
-
return result;
|
|
637
|
-
});
|
|
638
|
-
}
|
|
639
|
-
/**
|
|
640
|
-
* Prepare From BTC swap via new spv vault swaps with an intermediary
|
|
641
|
-
*
|
|
642
|
-
* @param chainIdentifier
|
|
643
|
-
* @param url
|
|
644
|
-
* @param init Swap initialization parameters
|
|
645
|
-
* @param timeout Timeout in milliseconds for the HTTP request
|
|
646
|
-
* @param abortSignal
|
|
647
|
-
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
648
|
-
*
|
|
649
|
-
* @throws {RequestError} If non-200 http response code is returned
|
|
650
|
-
*/
|
|
651
|
-
initSpvFromBTC(chainIdentifier, url, init, timeout, abortSignal, streamRequest) {
|
|
652
|
-
const responseBodyPromise = this.streamingFetchPromise(url + "/postQuote?chain=" + encodeURIComponent(chainIdentifier), {
|
|
653
|
-
quoteId: init.quoteId,
|
|
654
|
-
psbtHex: init.psbtHex
|
|
655
|
-
}, {
|
|
656
|
-
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
657
|
-
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
658
|
-
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
659
|
-
}, timeout, abortSignal, streamRequest);
|
|
660
|
-
return responseBodyPromise.then((responseBody) => Promise.all([
|
|
661
|
-
responseBody.code,
|
|
662
|
-
responseBody.msg,
|
|
663
|
-
responseBody.data,
|
|
664
|
-
])).then(([code, msg, data]) => {
|
|
665
|
-
if (code !== 20000) {
|
|
666
|
-
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
667
|
-
}
|
|
668
|
-
const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCInitResponseSchema);
|
|
669
|
-
if (result == null)
|
|
670
|
-
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
671
|
-
return result;
|
|
672
|
-
});
|
|
673
|
-
}
|
|
674
|
-
/**
|
|
675
|
-
* Fetches the invoice status from the intermediary node
|
|
676
|
-
*
|
|
677
|
-
* @param url Url of the trusted intermediary
|
|
678
|
-
* @param paymentHash Payment hash of the lightning invoice
|
|
679
|
-
* @param timeout Timeout in milliseconds
|
|
680
|
-
* @param abortSignal
|
|
681
|
-
* @throws {RequestError} if non-200 http response is returned
|
|
682
|
-
*/
|
|
683
|
-
async getTrustedInvoiceStatus(url, paymentHash, timeout, abortSignal) {
|
|
684
|
-
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getInvoiceStatus?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
685
|
-
}
|
|
686
|
-
/**
|
|
687
|
-
* Initiate a trusted swap from BTCLN to SC native currency, retries!
|
|
688
|
-
*
|
|
689
|
-
* @param chainIdentifier
|
|
690
|
-
* @param baseUrl Base url of the trusted swap intermediary
|
|
691
|
-
* @param init Initialization parameters
|
|
692
|
-
* @param timeout Timeout in milliseconds for the request
|
|
693
|
-
* @param abortSignal
|
|
694
|
-
* @throws {RequestError} If the response is non-200
|
|
695
|
-
*/
|
|
696
|
-
async initTrustedFromBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal) {
|
|
697
|
-
const resp = await (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(baseUrl + "/lnforgas/createInvoice" +
|
|
698
|
-
"?address=" + encodeURIComponent(init.address) +
|
|
699
|
-
"&amount=" + encodeURIComponent(init.amount.toString(10)) +
|
|
700
|
-
"&chain=" + encodeURIComponent(chainIdentifier) +
|
|
701
|
-
"&token=" + encodeURIComponent(init.token), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
702
|
-
if (resp.code !== 10000)
|
|
703
|
-
throw RequestError_1.RequestError.parse(JSON.stringify(resp), 400);
|
|
704
|
-
const res = (0, SchemaVerifier_1.verifySchema)(resp.data, TrustedFromBTCLNResponseSchema);
|
|
705
|
-
if (res == null)
|
|
706
|
-
throw new Error("Invalid response returned from LP");
|
|
707
|
-
return res;
|
|
708
|
-
}
|
|
709
|
-
/**
|
|
710
|
-
* Fetches the address status from the intermediary node
|
|
711
|
-
*
|
|
712
|
-
* @param url Url of the trusted intermediary
|
|
713
|
-
* @param paymentHash Payment hash of the swap
|
|
714
|
-
* @param sequence Sequence number of the swap
|
|
715
|
-
* @param timeout Timeout in milliseconds
|
|
716
|
-
* @param abortSignal
|
|
717
|
-
* @throws {RequestError} if non-200 http response is returned
|
|
718
|
-
*/
|
|
719
|
-
async getTrustedAddressStatus(url, paymentHash, sequence, timeout, abortSignal) {
|
|
720
|
-
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getAddressStatus?paymentHash=" + encodeURIComponent(paymentHash) + "&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Sets the refund address for an on-chain gas swap
|
|
724
|
-
*
|
|
725
|
-
* @param url Url of the trusted intermediary
|
|
726
|
-
* @param paymentHash Payment hash of the swap
|
|
727
|
-
* @param sequence Sequence number of the swap
|
|
728
|
-
* @param refundAddress Refund address to set for the swap
|
|
729
|
-
* @param timeout Timeout in milliseconds
|
|
730
|
-
* @param abortSignal
|
|
731
|
-
* @throws {RequestError} if non-200 http response is returned
|
|
732
|
-
*/
|
|
733
|
-
async setTrustedRefundAddress(url, paymentHash, sequence, refundAddress, timeout, abortSignal) {
|
|
734
|
-
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/setRefundAddress" +
|
|
735
|
-
"?paymentHash=" + encodeURIComponent(paymentHash) +
|
|
736
|
-
"&sequence=" + encodeURIComponent(sequence.toString(10)) +
|
|
737
|
-
"&refundAddress=" + encodeURIComponent(refundAddress), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
738
|
-
}
|
|
739
|
-
/**
|
|
740
|
-
* Initiate a trusted swap from BTC to SC native currency, retries!
|
|
741
|
-
*
|
|
742
|
-
* @param chainIdentifier
|
|
743
|
-
* @param baseUrl Base url of the trusted swap intermediary
|
|
744
|
-
* @param init Initialization parameters
|
|
745
|
-
* @param timeout Timeout in milliseconds for the request
|
|
746
|
-
* @param abortSignal
|
|
747
|
-
* @throws {RequestError} If the response is non-200
|
|
748
|
-
*/
|
|
749
|
-
async initTrustedFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal) {
|
|
750
|
-
const resp = await (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(baseUrl + "/frombtc_trusted/getAddress?chain=" + encodeURIComponent(chainIdentifier) +
|
|
751
|
-
"&address=" + encodeURIComponent(init.address) +
|
|
752
|
-
"&amount=" + encodeURIComponent(init.amount.toString(10)) +
|
|
753
|
-
(init.refundAddress == null ? "" : "&refundAddress=" + encodeURIComponent(init.refundAddress)) +
|
|
754
|
-
"&exactIn=true" +
|
|
755
|
-
"&token=" + encodeURIComponent(init.token), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
756
|
-
if (resp.code !== 10000)
|
|
757
|
-
throw RequestError_1.RequestError.parse(JSON.stringify(resp), 400);
|
|
758
|
-
const res = (0, SchemaVerifier_1.verifySchema)(resp.data, TrustedFromBTCResponseSchema);
|
|
759
|
-
if (res == null)
|
|
760
|
-
throw new Error("Invalid response returned from LP");
|
|
761
|
-
return res;
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
exports.IntermediaryAPI = IntermediaryAPI;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IntermediaryAPI = exports.TrustedAddressStatusResponseCodes = exports.TrustedInvoiceStatusResponseCodes = exports.InvoiceStatusResponseCodes = exports.PaymentAuthorizationResponseCodes = exports.RefundAuthorizationResponseCodes = void 0;
|
|
4
|
+
const RequestError_1 = require("../../errors/RequestError");
|
|
5
|
+
const SchemaVerifier_1 = require("../../http/paramcoders/SchemaVerifier");
|
|
6
|
+
const StreamingFetchPromise_1 = require("../../http/paramcoders/client/StreamingFetchPromise");
|
|
7
|
+
const Utils_1 = require("../../utils/Utils");
|
|
8
|
+
const HttpUtils_1 = require("../../http/HttpUtils");
|
|
9
|
+
const RetryUtils_1 = require("../../utils/RetryUtils");
|
|
10
|
+
var RefundAuthorizationResponseCodes;
|
|
11
|
+
(function (RefundAuthorizationResponseCodes) {
|
|
12
|
+
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["EXPIRED"] = 20010] = "EXPIRED";
|
|
13
|
+
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["REFUND_DATA"] = 20000] = "REFUND_DATA";
|
|
14
|
+
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["NOT_FOUND"] = 20007] = "NOT_FOUND";
|
|
15
|
+
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["PENDING"] = 20008] = "PENDING";
|
|
16
|
+
RefundAuthorizationResponseCodes[RefundAuthorizationResponseCodes["PAID"] = 20006] = "PAID";
|
|
17
|
+
})(RefundAuthorizationResponseCodes = exports.RefundAuthorizationResponseCodes || (exports.RefundAuthorizationResponseCodes = {}));
|
|
18
|
+
var PaymentAuthorizationResponseCodes;
|
|
19
|
+
(function (PaymentAuthorizationResponseCodes) {
|
|
20
|
+
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["AUTH_DATA"] = 10000] = "AUTH_DATA";
|
|
21
|
+
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
22
|
+
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["PAID"] = 10002] = "PAID";
|
|
23
|
+
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["PENDING"] = 10003] = "PENDING";
|
|
24
|
+
PaymentAuthorizationResponseCodes[PaymentAuthorizationResponseCodes["ALREADY_COMMITTED"] = 10004] = "ALREADY_COMMITTED";
|
|
25
|
+
})(PaymentAuthorizationResponseCodes = exports.PaymentAuthorizationResponseCodes || (exports.PaymentAuthorizationResponseCodes = {}));
|
|
26
|
+
var InvoiceStatusResponseCodes;
|
|
27
|
+
(function (InvoiceStatusResponseCodes) {
|
|
28
|
+
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["PAID"] = 10000] = "PAID";
|
|
29
|
+
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
30
|
+
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["SETTLED"] = 10002] = "SETTLED";
|
|
31
|
+
InvoiceStatusResponseCodes[InvoiceStatusResponseCodes["PENDING"] = 10003] = "PENDING";
|
|
32
|
+
})(InvoiceStatusResponseCodes = exports.InvoiceStatusResponseCodes || (exports.InvoiceStatusResponseCodes = {}));
|
|
33
|
+
const SwapResponseSchema = {
|
|
34
|
+
data: SchemaVerifier_1.FieldTypeEnum.Any,
|
|
35
|
+
prefix: SchemaVerifier_1.FieldTypeEnum.String,
|
|
36
|
+
timeout: SchemaVerifier_1.FieldTypeEnum.String,
|
|
37
|
+
signature: SchemaVerifier_1.FieldTypeEnum.String
|
|
38
|
+
};
|
|
39
|
+
/////////////////////////
|
|
40
|
+
///// To BTC
|
|
41
|
+
const ToBTCResponseSchema = {
|
|
42
|
+
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
43
|
+
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
44
|
+
satsPervByte: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
45
|
+
networkFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
46
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
47
|
+
totalFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
48
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
49
|
+
minRequiredExpiry: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
50
|
+
...SwapResponseSchema
|
|
51
|
+
};
|
|
52
|
+
/////////////////////////
|
|
53
|
+
///// To BTCLN
|
|
54
|
+
const ToBTCLNResponseSchema = {
|
|
55
|
+
maxFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
56
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
57
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
58
|
+
confidence: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
59
|
+
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
60
|
+
routingFeeSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
61
|
+
...SwapResponseSchema
|
|
62
|
+
};
|
|
63
|
+
const ToBTCLNPrepareExactInSchema = {
|
|
64
|
+
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
65
|
+
reqId: SchemaVerifier_1.FieldTypeEnum.String
|
|
66
|
+
};
|
|
67
|
+
/////////////////////////
|
|
68
|
+
///// From BTC
|
|
69
|
+
const FromBTCResponseSchema = {
|
|
70
|
+
amount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
71
|
+
btcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
72
|
+
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
73
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
74
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
75
|
+
confirmations: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
76
|
+
...SwapResponseSchema
|
|
77
|
+
};
|
|
78
|
+
/////////////////////////
|
|
79
|
+
///// From BTCLN
|
|
80
|
+
const FromBTCLNResponseSchema = {
|
|
81
|
+
pr: SchemaVerifier_1.FieldTypeEnum.String,
|
|
82
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
83
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
84
|
+
intermediaryKey: SchemaVerifier_1.FieldTypeEnum.String,
|
|
85
|
+
securityDeposit: SchemaVerifier_1.FieldTypeEnum.BigInt
|
|
86
|
+
};
|
|
87
|
+
/////////////////////////
|
|
88
|
+
///// From BTCLN Auto
|
|
89
|
+
const FromBTCLNAutoResponseSchema = {
|
|
90
|
+
intermediaryKey: SchemaVerifier_1.FieldTypeEnum.String,
|
|
91
|
+
pr: SchemaVerifier_1.FieldTypeEnum.String,
|
|
92
|
+
btcAmountSwap: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
93
|
+
btcAmountGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
94
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
95
|
+
totalGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
96
|
+
totalFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
97
|
+
swapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
98
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
99
|
+
gasSwapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
100
|
+
gasSwapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
101
|
+
claimerBounty: SchemaVerifier_1.FieldTypeEnum.BigInt
|
|
102
|
+
};
|
|
103
|
+
/////////////////////////
|
|
104
|
+
///// Spv vault from BTC
|
|
105
|
+
const SpvFromBTCPrepareResponseSchema = {
|
|
106
|
+
quoteId: SchemaVerifier_1.FieldTypeEnum.String,
|
|
107
|
+
expiry: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
108
|
+
address: SchemaVerifier_1.FieldTypeEnum.String,
|
|
109
|
+
vaultId: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
110
|
+
vaultBtcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
111
|
+
btcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
112
|
+
btcUtxo: SchemaVerifier_1.FieldTypeEnum.String,
|
|
113
|
+
btcFeeRate: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
114
|
+
btcAmount: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
115
|
+
btcAmountSwap: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
116
|
+
btcAmountGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
117
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
118
|
+
totalGas: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
119
|
+
totalFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
120
|
+
swapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
121
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
122
|
+
gasSwapFeeBtc: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
123
|
+
gasSwapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
124
|
+
callerFeeShare: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
125
|
+
frontingFeeShare: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
126
|
+
executionFeeShare: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
127
|
+
usedUtxoInputCalculation: SchemaVerifier_1.FieldTypeEnum.BooleanOptional
|
|
128
|
+
};
|
|
129
|
+
const SpvFromBTCInitResponseSchema = {
|
|
130
|
+
txId: SchemaVerifier_1.FieldTypeEnum.String
|
|
131
|
+
};
|
|
132
|
+
/////////////////////////
|
|
133
|
+
///// Trusted from BTCLN
|
|
134
|
+
var TrustedInvoiceStatusResponseCodes;
|
|
135
|
+
(function (TrustedInvoiceStatusResponseCodes) {
|
|
136
|
+
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
137
|
+
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["PAID"] = 10000] = "PAID";
|
|
138
|
+
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["AWAIT_PAYMENT"] = 10010] = "AWAIT_PAYMENT";
|
|
139
|
+
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["PENDING"] = 10011] = "PENDING";
|
|
140
|
+
TrustedInvoiceStatusResponseCodes[TrustedInvoiceStatusResponseCodes["TX_SENT"] = 10012] = "TX_SENT";
|
|
141
|
+
})(TrustedInvoiceStatusResponseCodes = exports.TrustedInvoiceStatusResponseCodes || (exports.TrustedInvoiceStatusResponseCodes = {}));
|
|
142
|
+
const TrustedFromBTCLNResponseSchema = {
|
|
143
|
+
pr: SchemaVerifier_1.FieldTypeEnum.String,
|
|
144
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
145
|
+
swapFeeSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
146
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt
|
|
147
|
+
};
|
|
148
|
+
/////////////////////////
|
|
149
|
+
///// Trusted from BTC
|
|
150
|
+
var TrustedAddressStatusResponseCodes;
|
|
151
|
+
(function (TrustedAddressStatusResponseCodes) {
|
|
152
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["EXPIRED"] = 10001] = "EXPIRED";
|
|
153
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["PAID"] = 10000] = "PAID";
|
|
154
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["AWAIT_PAYMENT"] = 10010] = "AWAIT_PAYMENT";
|
|
155
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["AWAIT_CONFIRMATION"] = 10011] = "AWAIT_CONFIRMATION";
|
|
156
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["PENDING"] = 10013] = "PENDING";
|
|
157
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["TX_SENT"] = 10012] = "TX_SENT";
|
|
158
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["REFUNDED"] = 10014] = "REFUNDED";
|
|
159
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["DOUBLE_SPENT"] = 10015] = "DOUBLE_SPENT";
|
|
160
|
+
TrustedAddressStatusResponseCodes[TrustedAddressStatusResponseCodes["REFUNDABLE"] = 10016] = "REFUNDABLE";
|
|
161
|
+
})(TrustedAddressStatusResponseCodes = exports.TrustedAddressStatusResponseCodes || (exports.TrustedAddressStatusResponseCodes = {}));
|
|
162
|
+
const TrustedFromBTCResponseSchema = {
|
|
163
|
+
paymentHash: SchemaVerifier_1.FieldTypeEnum.String,
|
|
164
|
+
sequence: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
165
|
+
btcAddress: SchemaVerifier_1.FieldTypeEnum.String,
|
|
166
|
+
amountSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
167
|
+
swapFeeSats: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
168
|
+
swapFee: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
169
|
+
total: SchemaVerifier_1.FieldTypeEnum.BigInt,
|
|
170
|
+
intermediaryKey: SchemaVerifier_1.FieldTypeEnum.String,
|
|
171
|
+
recommendedFee: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
172
|
+
expiresAt: SchemaVerifier_1.FieldTypeEnum.Number
|
|
173
|
+
};
|
|
174
|
+
class IntermediaryAPI {
|
|
175
|
+
constructor(requestHeaders) {
|
|
176
|
+
this.requestHeaders = requestHeaders;
|
|
177
|
+
}
|
|
178
|
+
httpGet(url, timeout, abortSignal, allowNon200 = false) {
|
|
179
|
+
const headers = this.requestHeaders == null ? {} : this.requestHeaders("GET", url);
|
|
180
|
+
return (0, HttpUtils_1.httpGet)(url, timeout, abortSignal, allowNon200, headers);
|
|
181
|
+
}
|
|
182
|
+
httpPost(url, body, timeout, abortSignal) {
|
|
183
|
+
const headers = this.requestHeaders == null ? {} : this.requestHeaders("POST", url, body);
|
|
184
|
+
return (0, HttpUtils_1.httpPost)(url, body, timeout, abortSignal, headers);
|
|
185
|
+
}
|
|
186
|
+
streamingFetchPromise(url, body, schema, timeout, signal, streamRequest) {
|
|
187
|
+
const headers = this.requestHeaders == null ? {} : this.requestHeaders("POST", url);
|
|
188
|
+
return (0, StreamingFetchPromise_1.streamingFetchPromise)(url, body, schema, timeout, signal, streamRequest, headers);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Returns the information about a specific intermediary
|
|
192
|
+
*
|
|
193
|
+
* @param baseUrl Base URL of the intermediary
|
|
194
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
195
|
+
* @param abortSignal
|
|
196
|
+
*
|
|
197
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
198
|
+
* @throws {Error} If the supplied nonce doesn't match the response
|
|
199
|
+
*/
|
|
200
|
+
async getIntermediaryInfo(baseUrl, timeout, abortSignal) {
|
|
201
|
+
const nonce = (0, Utils_1.randomBytes)(32).toString("hex");
|
|
202
|
+
const abortController = (0, Utils_1.extendAbortController)(abortSignal);
|
|
203
|
+
//We don't know whether the node supports only POST or also has GET info support enabled
|
|
204
|
+
// here we try both, and abort when the first one returns (which should be GET)
|
|
205
|
+
const response = await Promise.any([
|
|
206
|
+
this.httpGet(baseUrl + "/info?nonce=" + nonce, timeout, abortController.signal),
|
|
207
|
+
this.httpPost(baseUrl + "/info", {
|
|
208
|
+
nonce,
|
|
209
|
+
}, timeout, abortController.signal)
|
|
210
|
+
]);
|
|
211
|
+
abortController.abort();
|
|
212
|
+
const info = JSON.parse(response.envelope);
|
|
213
|
+
if (nonce !== info.nonce)
|
|
214
|
+
throw new Error("Invalid response - nonce");
|
|
215
|
+
return response;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Returns the information about an outcome of the To BTC swap
|
|
219
|
+
*
|
|
220
|
+
* @param url URL of the intermediary
|
|
221
|
+
* @param paymentHash Payment hash of the swap
|
|
222
|
+
* @param sequence Swap's sequence number
|
|
223
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
224
|
+
* @param abortSignal
|
|
225
|
+
*
|
|
226
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
227
|
+
*/
|
|
228
|
+
async getRefundAuthorization(url, paymentHash, sequence, timeout, abortSignal) {
|
|
229
|
+
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getRefundAuthorization" +
|
|
230
|
+
"?paymentHash=" + encodeURIComponent(paymentHash) +
|
|
231
|
+
"&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Returns the information about the payment of the From BTCLN swaps
|
|
235
|
+
*
|
|
236
|
+
* @param url URL of the intermediary
|
|
237
|
+
* @param paymentHash Payment hash of the swap
|
|
238
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
239
|
+
* @param abortSignal
|
|
240
|
+
*
|
|
241
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
242
|
+
*/
|
|
243
|
+
async getPaymentAuthorization(url, paymentHash, timeout, abortSignal) {
|
|
244
|
+
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getInvoicePaymentAuth" +
|
|
245
|
+
"?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Returns the status of the payment of the From BTCLN swaps
|
|
249
|
+
*
|
|
250
|
+
* @param url URL of the intermediary
|
|
251
|
+
* @param paymentHash Payment hash of the swap
|
|
252
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
253
|
+
* @param abortSignal
|
|
254
|
+
*
|
|
255
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
256
|
+
*/
|
|
257
|
+
async getInvoiceStatus(url, paymentHash, timeout, abortSignal) {
|
|
258
|
+
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getInvoiceStatus" +
|
|
259
|
+
"?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Initiate To BTC swap with an intermediary
|
|
263
|
+
*
|
|
264
|
+
* @param chainIdentifier
|
|
265
|
+
* @param baseUrl Base URL of the intermediary
|
|
266
|
+
* @param init Swap initialization parameters
|
|
267
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
268
|
+
* @param abortSignal
|
|
269
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
270
|
+
*
|
|
271
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
272
|
+
*/
|
|
273
|
+
initToBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
274
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/tobtc/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
275
|
+
...init.additionalParams,
|
|
276
|
+
address: init.btcAddress,
|
|
277
|
+
amount: init.amount.toString(10),
|
|
278
|
+
exactIn: init.exactIn,
|
|
279
|
+
confirmationTarget: init.confirmationTarget,
|
|
280
|
+
confirmations: init.confirmations,
|
|
281
|
+
nonce: init.nonce.toString(10),
|
|
282
|
+
token: init.token,
|
|
283
|
+
offerer: init.offerer,
|
|
284
|
+
feeRate: init.feeRate
|
|
285
|
+
}, {
|
|
286
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
287
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
288
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
289
|
+
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
290
|
+
}, timeout, abortSignal, streamRequest);
|
|
291
|
+
return {
|
|
292
|
+
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
293
|
+
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
294
|
+
responseBody.code,
|
|
295
|
+
responseBody.msg,
|
|
296
|
+
responseBody.data,
|
|
297
|
+
])).then(([code, msg, data]) => {
|
|
298
|
+
if (code !== 20000) {
|
|
299
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
300
|
+
}
|
|
301
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCResponseSchema);
|
|
302
|
+
if (result == null)
|
|
303
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
304
|
+
return result;
|
|
305
|
+
})
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Initiate From BTC swap with an intermediary
|
|
310
|
+
*
|
|
311
|
+
* @param chainIdentifier
|
|
312
|
+
* @param baseUrl Base URL of the intermediary
|
|
313
|
+
* @param depositToken
|
|
314
|
+
* @param init Swap initialization parameters
|
|
315
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
316
|
+
* @param abortSignal
|
|
317
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
318
|
+
*
|
|
319
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
320
|
+
*/
|
|
321
|
+
initFromBTC(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
|
|
322
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtc/getAddress?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
|
|
323
|
+
...init.additionalParams,
|
|
324
|
+
address: init.claimer,
|
|
325
|
+
amount: init.amount.toString(10),
|
|
326
|
+
token: init.token,
|
|
327
|
+
exactOut: init.exactOut,
|
|
328
|
+
sequence: init.sequence.toString(10),
|
|
329
|
+
claimerBounty: init.claimerBounty.then(claimerBounty => {
|
|
330
|
+
return {
|
|
331
|
+
feePerBlock: claimerBounty.feePerBlock.toString(10),
|
|
332
|
+
safetyFactor: claimerBounty.safetyFactor.toString(10),
|
|
333
|
+
startTimestamp: claimerBounty.startTimestamp.toString(10),
|
|
334
|
+
addBlock: claimerBounty.addBlock.toString(10),
|
|
335
|
+
addFee: claimerBounty.addFee.toString(10)
|
|
336
|
+
};
|
|
337
|
+
}),
|
|
338
|
+
feeRate: init.feeRate
|
|
339
|
+
}, {
|
|
340
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
341
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
342
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
343
|
+
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
344
|
+
}, timeout, abortSignal, streamRequest);
|
|
345
|
+
return {
|
|
346
|
+
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
347
|
+
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
348
|
+
responseBody.code,
|
|
349
|
+
responseBody.msg,
|
|
350
|
+
responseBody.data,
|
|
351
|
+
])).then(([code, msg, data]) => {
|
|
352
|
+
if (code !== 20000) {
|
|
353
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
354
|
+
}
|
|
355
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCResponseSchema);
|
|
356
|
+
if (result == null)
|
|
357
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
358
|
+
return result;
|
|
359
|
+
})
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Initiate From BTCLN swap with an intermediary
|
|
364
|
+
*
|
|
365
|
+
* @param chainIdentifier
|
|
366
|
+
* @param baseUrl Base URL of the intermediary
|
|
367
|
+
* @param depositToken
|
|
368
|
+
* @param init Swap initialization parameters
|
|
369
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
370
|
+
* @param abortSignal
|
|
371
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
372
|
+
*
|
|
373
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
374
|
+
*/
|
|
375
|
+
initFromBTCLN(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
|
|
376
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtcln/createInvoice?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
|
|
377
|
+
...init.additionalParams,
|
|
378
|
+
paymentHash: init.paymentHash.toString("hex"),
|
|
379
|
+
amount: init.amount.toString(),
|
|
380
|
+
address: init.claimer,
|
|
381
|
+
token: init.token,
|
|
382
|
+
description: init.description ?? null,
|
|
383
|
+
descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
|
|
384
|
+
exactOut: init.exactOut,
|
|
385
|
+
feeRate: init.feeRate
|
|
386
|
+
}, {
|
|
387
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
388
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
389
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
390
|
+
lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
|
|
391
|
+
}, timeout, abortSignal, streamRequest);
|
|
392
|
+
return {
|
|
393
|
+
lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
|
|
394
|
+
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
395
|
+
responseBody.code,
|
|
396
|
+
responseBody.msg,
|
|
397
|
+
responseBody.data,
|
|
398
|
+
])).then(([code, msg, data]) => {
|
|
399
|
+
if (code !== 20000) {
|
|
400
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
401
|
+
}
|
|
402
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNResponseSchema);
|
|
403
|
+
if (result == null)
|
|
404
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
405
|
+
return result;
|
|
406
|
+
})
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Initiate From BTCLN swap with auto-initilization by an intermediary
|
|
411
|
+
*
|
|
412
|
+
* @param chainIdentifier
|
|
413
|
+
* @param baseUrl Base URL of the intermediary
|
|
414
|
+
* @param init Swap initialization parameters
|
|
415
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
416
|
+
* @param abortSignal
|
|
417
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
418
|
+
*
|
|
419
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
420
|
+
*/
|
|
421
|
+
initFromBTCLNAuto(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
422
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtcln_auto/createInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
423
|
+
...init.additionalParams,
|
|
424
|
+
paymentHash: init.paymentHash.toString("hex"),
|
|
425
|
+
amount: init.amount.toString(),
|
|
426
|
+
address: init.claimer,
|
|
427
|
+
token: init.token,
|
|
428
|
+
description: init.description ?? null,
|
|
429
|
+
descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
|
|
430
|
+
exactOut: init.exactOut,
|
|
431
|
+
gasToken: init.gasToken,
|
|
432
|
+
gasAmount: init.gasAmount?.toString(10) ?? "0",
|
|
433
|
+
claimerBounty: init.claimerBounty?.then(val => val.toString(10)) ?? "0"
|
|
434
|
+
}, {
|
|
435
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
436
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
437
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
438
|
+
lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
|
|
439
|
+
}, timeout, abortSignal, streamRequest);
|
|
440
|
+
return {
|
|
441
|
+
lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
|
|
442
|
+
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
443
|
+
responseBody.code,
|
|
444
|
+
responseBody.msg,
|
|
445
|
+
responseBody.data,
|
|
446
|
+
])).then(([code, msg, data]) => {
|
|
447
|
+
if (code !== 20000) {
|
|
448
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
449
|
+
}
|
|
450
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNAutoResponseSchema);
|
|
451
|
+
if (result == null)
|
|
452
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
453
|
+
return result;
|
|
454
|
+
})
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Initiate To BTCLN swap with an intermediary
|
|
459
|
+
*
|
|
460
|
+
* @param chainIdentifier
|
|
461
|
+
* @param baseUrl Base URL of the intermediary
|
|
462
|
+
* @param init Swap initialization parameters
|
|
463
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
464
|
+
* @param abortSignal
|
|
465
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
466
|
+
*
|
|
467
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
468
|
+
*/
|
|
469
|
+
initToBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
470
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
471
|
+
exactIn: false,
|
|
472
|
+
...init.additionalParams,
|
|
473
|
+
pr: init.pr,
|
|
474
|
+
maxFee: init.maxFee.toString(10),
|
|
475
|
+
expiryTimestamp: init.expiryTimestamp.toString(10),
|
|
476
|
+
token: init.token,
|
|
477
|
+
offerer: init.offerer,
|
|
478
|
+
feeRate: init.feeRate,
|
|
479
|
+
amount: null
|
|
480
|
+
}, {
|
|
481
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
482
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
483
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
484
|
+
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
485
|
+
}, timeout, abortSignal, streamRequest);
|
|
486
|
+
return {
|
|
487
|
+
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
488
|
+
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
489
|
+
responseBody.code,
|
|
490
|
+
responseBody.msg,
|
|
491
|
+
responseBody.data,
|
|
492
|
+
])).then(([code, msg, data]) => {
|
|
493
|
+
if (code !== 20000) {
|
|
494
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
495
|
+
}
|
|
496
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
|
|
497
|
+
if (result == null)
|
|
498
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
499
|
+
return result;
|
|
500
|
+
})
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Initiate To BTCLN exact in swap with an intermediary
|
|
505
|
+
*
|
|
506
|
+
* @param baseUrl Base URL of the intermediary
|
|
507
|
+
* @param init Swap initialization parameters
|
|
508
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
509
|
+
* @param abortSignal
|
|
510
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
511
|
+
*
|
|
512
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
513
|
+
*/
|
|
514
|
+
async initToBTCLNExactIn(baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
515
|
+
const responseBody = await this.streamingFetchPromise(baseUrl + "/tobtcln/payInvoiceExactIn", {
|
|
516
|
+
...init.additionalParams,
|
|
517
|
+
pr: init.pr,
|
|
518
|
+
reqId: init.reqId,
|
|
519
|
+
feeRate: init.feeRate
|
|
520
|
+
}, {
|
|
521
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
522
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
523
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
524
|
+
}, timeout, abortSignal, streamRequest);
|
|
525
|
+
const [code, msg, data] = await Promise.all([
|
|
526
|
+
responseBody.code,
|
|
527
|
+
responseBody.msg,
|
|
528
|
+
responseBody.data,
|
|
529
|
+
]);
|
|
530
|
+
if (code !== 20000)
|
|
531
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
532
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
|
|
533
|
+
if (result == null)
|
|
534
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
535
|
+
return result;
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Prepare To BTCLN exact in swap with an intermediary
|
|
539
|
+
*
|
|
540
|
+
* @param chainIdentifier
|
|
541
|
+
* @param baseUrl Base URL of the intermediary
|
|
542
|
+
* @param init Swap initialization parameters
|
|
543
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
544
|
+
* @param abortSignal
|
|
545
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
546
|
+
*
|
|
547
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
548
|
+
*/
|
|
549
|
+
prepareToBTCLNExactIn(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
550
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
|
|
551
|
+
exactIn: true,
|
|
552
|
+
...init.additionalParams,
|
|
553
|
+
pr: init.pr,
|
|
554
|
+
maxFee: init.maxFee.toString(10),
|
|
555
|
+
expiryTimestamp: init.expiryTimestamp.toString(10),
|
|
556
|
+
token: init.token,
|
|
557
|
+
offerer: init.offerer,
|
|
558
|
+
amount: init.amount.toString(10)
|
|
559
|
+
}, {
|
|
560
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
561
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
562
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
|
|
563
|
+
signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
564
|
+
}, timeout, abortSignal, streamRequest);
|
|
565
|
+
return {
|
|
566
|
+
signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
|
|
567
|
+
response: responseBodyPromise.then((responseBody) => Promise.all([
|
|
568
|
+
responseBody.code,
|
|
569
|
+
responseBody.msg,
|
|
570
|
+
responseBody.data,
|
|
571
|
+
])).then(([code, msg, data]) => {
|
|
572
|
+
if (code !== 20000) {
|
|
573
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
574
|
+
}
|
|
575
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNPrepareExactInSchema);
|
|
576
|
+
if (result == null)
|
|
577
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
578
|
+
return result;
|
|
579
|
+
})
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Prepare From BTC swap via new spv vault swaps with an intermediary
|
|
584
|
+
*
|
|
585
|
+
* @param chainIdentifier
|
|
586
|
+
* @param baseUrl Base URL of the intermediary
|
|
587
|
+
* @param init Swap initialization parameters
|
|
588
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
589
|
+
* @param abortSignal
|
|
590
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
591
|
+
*
|
|
592
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
593
|
+
*/
|
|
594
|
+
prepareSpvFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
|
|
595
|
+
//We need to make sure we only send the amount parameter after the amountUtxos and amountFeeRate resolve
|
|
596
|
+
// this is needed, because in the LP code to maintain backwards compatibility the amountUtxos and amountFeeRate
|
|
597
|
+
// params are checked immediately after the amount param (and other params) are received, if amount were sent
|
|
598
|
+
// first without the amountUtxos or amountFeeRate populated these fields would've been skipped altogether
|
|
599
|
+
const amountPromise = (async () => {
|
|
600
|
+
if (init.amountUtxos != null)
|
|
601
|
+
await init.amountUtxos;
|
|
602
|
+
if (init.amountFeeRate != null)
|
|
603
|
+
await init.amountFeeRate;
|
|
604
|
+
const amount = await init.amount;
|
|
605
|
+
return amount.toString(10);
|
|
606
|
+
})();
|
|
607
|
+
const responseBodyPromise = this.streamingFetchPromise(baseUrl + "/frombtc_spv/getQuote?chain=" + encodeURIComponent(chainIdentifier), {
|
|
608
|
+
exactOut: init.exactOut,
|
|
609
|
+
...init.additionalParams,
|
|
610
|
+
address: init.address,
|
|
611
|
+
amount: amountPromise,
|
|
612
|
+
token: init.token,
|
|
613
|
+
gasAmount: init.gasAmount.toString(10),
|
|
614
|
+
gasToken: init.gasToken,
|
|
615
|
+
frontingFeeRate: init.frontingFeeRate.toString(10),
|
|
616
|
+
callerFeeRate: init.callerFeeRate.then(val => val.toString(10)),
|
|
617
|
+
stickyAddress: init.stickyAddress,
|
|
618
|
+
amountUtxos: init.amountUtxos,
|
|
619
|
+
amountFeeRate: init.amountFeeRate
|
|
620
|
+
}, {
|
|
621
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
622
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
623
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
624
|
+
}, timeout, abortSignal, streamRequest);
|
|
625
|
+
return responseBodyPromise.then((responseBody) => Promise.all([
|
|
626
|
+
responseBody.code,
|
|
627
|
+
responseBody.msg,
|
|
628
|
+
responseBody.data,
|
|
629
|
+
])).then(([code, msg, data]) => {
|
|
630
|
+
if (code !== 20000) {
|
|
631
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
632
|
+
}
|
|
633
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCPrepareResponseSchema);
|
|
634
|
+
if (result == null)
|
|
635
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
636
|
+
return result;
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Prepare From BTC swap via new spv vault swaps with an intermediary
|
|
641
|
+
*
|
|
642
|
+
* @param chainIdentifier
|
|
643
|
+
* @param url
|
|
644
|
+
* @param init Swap initialization parameters
|
|
645
|
+
* @param timeout Timeout in milliseconds for the HTTP request
|
|
646
|
+
* @param abortSignal
|
|
647
|
+
* @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
|
|
648
|
+
*
|
|
649
|
+
* @throws {RequestError} If non-200 http response code is returned
|
|
650
|
+
*/
|
|
651
|
+
initSpvFromBTC(chainIdentifier, url, init, timeout, abortSignal, streamRequest) {
|
|
652
|
+
const responseBodyPromise = this.streamingFetchPromise(url + "/postQuote?chain=" + encodeURIComponent(chainIdentifier), {
|
|
653
|
+
quoteId: init.quoteId,
|
|
654
|
+
psbtHex: init.psbtHex
|
|
655
|
+
}, {
|
|
656
|
+
code: SchemaVerifier_1.FieldTypeEnum.Number,
|
|
657
|
+
msg: SchemaVerifier_1.FieldTypeEnum.String,
|
|
658
|
+
data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
|
|
659
|
+
}, timeout, abortSignal, streamRequest);
|
|
660
|
+
return responseBodyPromise.then((responseBody) => Promise.all([
|
|
661
|
+
responseBody.code,
|
|
662
|
+
responseBody.msg,
|
|
663
|
+
responseBody.data,
|
|
664
|
+
])).then(([code, msg, data]) => {
|
|
665
|
+
if (code !== 20000) {
|
|
666
|
+
throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
|
|
667
|
+
}
|
|
668
|
+
const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCInitResponseSchema);
|
|
669
|
+
if (result == null)
|
|
670
|
+
throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
|
|
671
|
+
return result;
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* Fetches the invoice status from the intermediary node
|
|
676
|
+
*
|
|
677
|
+
* @param url Url of the trusted intermediary
|
|
678
|
+
* @param paymentHash Payment hash of the lightning invoice
|
|
679
|
+
* @param timeout Timeout in milliseconds
|
|
680
|
+
* @param abortSignal
|
|
681
|
+
* @throws {RequestError} if non-200 http response is returned
|
|
682
|
+
*/
|
|
683
|
+
async getTrustedInvoiceStatus(url, paymentHash, timeout, abortSignal) {
|
|
684
|
+
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getInvoiceStatus?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Initiate a trusted swap from BTCLN to SC native currency, retries!
|
|
688
|
+
*
|
|
689
|
+
* @param chainIdentifier
|
|
690
|
+
* @param baseUrl Base url of the trusted swap intermediary
|
|
691
|
+
* @param init Initialization parameters
|
|
692
|
+
* @param timeout Timeout in milliseconds for the request
|
|
693
|
+
* @param abortSignal
|
|
694
|
+
* @throws {RequestError} If the response is non-200
|
|
695
|
+
*/
|
|
696
|
+
async initTrustedFromBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal) {
|
|
697
|
+
const resp = await (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(baseUrl + "/lnforgas/createInvoice" +
|
|
698
|
+
"?address=" + encodeURIComponent(init.address) +
|
|
699
|
+
"&amount=" + encodeURIComponent(init.amount.toString(10)) +
|
|
700
|
+
"&chain=" + encodeURIComponent(chainIdentifier) +
|
|
701
|
+
"&token=" + encodeURIComponent(init.token), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
702
|
+
if (resp.code !== 10000)
|
|
703
|
+
throw RequestError_1.RequestError.parse(JSON.stringify(resp), 400);
|
|
704
|
+
const res = (0, SchemaVerifier_1.verifySchema)(resp.data, TrustedFromBTCLNResponseSchema);
|
|
705
|
+
if (res == null)
|
|
706
|
+
throw new Error("Invalid response returned from LP");
|
|
707
|
+
return res;
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* Fetches the address status from the intermediary node
|
|
711
|
+
*
|
|
712
|
+
* @param url Url of the trusted intermediary
|
|
713
|
+
* @param paymentHash Payment hash of the swap
|
|
714
|
+
* @param sequence Sequence number of the swap
|
|
715
|
+
* @param timeout Timeout in milliseconds
|
|
716
|
+
* @param abortSignal
|
|
717
|
+
* @throws {RequestError} if non-200 http response is returned
|
|
718
|
+
*/
|
|
719
|
+
async getTrustedAddressStatus(url, paymentHash, sequence, timeout, abortSignal) {
|
|
720
|
+
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/getAddressStatus?paymentHash=" + encodeURIComponent(paymentHash) + "&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* Sets the refund address for an on-chain gas swap
|
|
724
|
+
*
|
|
725
|
+
* @param url Url of the trusted intermediary
|
|
726
|
+
* @param paymentHash Payment hash of the swap
|
|
727
|
+
* @param sequence Sequence number of the swap
|
|
728
|
+
* @param refundAddress Refund address to set for the swap
|
|
729
|
+
* @param timeout Timeout in milliseconds
|
|
730
|
+
* @param abortSignal
|
|
731
|
+
* @throws {RequestError} if non-200 http response is returned
|
|
732
|
+
*/
|
|
733
|
+
async setTrustedRefundAddress(url, paymentHash, sequence, refundAddress, timeout, abortSignal) {
|
|
734
|
+
return (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(url + "/setRefundAddress" +
|
|
735
|
+
"?paymentHash=" + encodeURIComponent(paymentHash) +
|
|
736
|
+
"&sequence=" + encodeURIComponent(sequence.toString(10)) +
|
|
737
|
+
"&refundAddress=" + encodeURIComponent(refundAddress), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* Initiate a trusted swap from BTC to SC native currency, retries!
|
|
741
|
+
*
|
|
742
|
+
* @param chainIdentifier
|
|
743
|
+
* @param baseUrl Base url of the trusted swap intermediary
|
|
744
|
+
* @param init Initialization parameters
|
|
745
|
+
* @param timeout Timeout in milliseconds for the request
|
|
746
|
+
* @param abortSignal
|
|
747
|
+
* @throws {RequestError} If the response is non-200
|
|
748
|
+
*/
|
|
749
|
+
async initTrustedFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal) {
|
|
750
|
+
const resp = await (0, RetryUtils_1.tryWithRetries)(() => this.httpGet(baseUrl + "/frombtc_trusted/getAddress?chain=" + encodeURIComponent(chainIdentifier) +
|
|
751
|
+
"&address=" + encodeURIComponent(init.address) +
|
|
752
|
+
"&amount=" + encodeURIComponent(init.amount.toString(10)) +
|
|
753
|
+
(init.refundAddress == null ? "" : "&refundAddress=" + encodeURIComponent(init.refundAddress)) +
|
|
754
|
+
"&exactIn=true" +
|
|
755
|
+
"&token=" + encodeURIComponent(init.token), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
|
|
756
|
+
if (resp.code !== 10000)
|
|
757
|
+
throw RequestError_1.RequestError.parse(JSON.stringify(resp), 400);
|
|
758
|
+
const res = (0, SchemaVerifier_1.verifySchema)(resp.data, TrustedFromBTCResponseSchema);
|
|
759
|
+
if (res == null)
|
|
760
|
+
throw new Error("Invalid response returned from LP");
|
|
761
|
+
return res;
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
exports.IntermediaryAPI = IntermediaryAPI;
|