@atomiqlabs/sdk 8.8.3 → 8.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +1760 -1760
  3. package/dist/SmartChainAssets.d.ts +181 -181
  4. package/dist/SmartChainAssets.js +181 -181
  5. package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -7
  6. package/dist/bitcoin/coinselect2/accumulative.js +52 -52
  7. package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -7
  8. package/dist/bitcoin/coinselect2/blackjack.js +38 -38
  9. package/dist/bitcoin/coinselect2/index.d.ts +20 -20
  10. package/dist/bitcoin/coinselect2/index.js +69 -69
  11. package/dist/bitcoin/coinselect2/utils.d.ts +82 -82
  12. package/dist/bitcoin/coinselect2/utils.js +158 -158
  13. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -113
  14. package/dist/bitcoin/wallet/BitcoinWallet.js +335 -335
  15. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -116
  16. package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
  17. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -106
  18. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -196
  19. package/dist/enums/FeeType.d.ts +15 -15
  20. package/dist/enums/FeeType.js +19 -19
  21. package/dist/enums/SwapAmountType.d.ts +15 -15
  22. package/dist/enums/SwapAmountType.js +19 -19
  23. package/dist/enums/SwapDirection.d.ts +15 -15
  24. package/dist/enums/SwapDirection.js +19 -19
  25. package/dist/enums/SwapSide.d.ts +15 -15
  26. package/dist/enums/SwapSide.js +19 -19
  27. package/dist/enums/SwapType.d.ts +75 -75
  28. package/dist/enums/SwapType.js +79 -79
  29. package/dist/errors/IntermediaryError.d.ts +13 -13
  30. package/dist/errors/IntermediaryError.js +27 -27
  31. package/dist/errors/RequestError.d.ts +32 -32
  32. package/dist/errors/RequestError.js +54 -54
  33. package/dist/errors/UserError.d.ts +8 -8
  34. package/dist/errors/UserError.js +16 -16
  35. package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
  36. package/dist/events/UnifiedSwapEventListener.js +132 -132
  37. package/dist/http/HttpUtils.d.ts +27 -27
  38. package/dist/http/HttpUtils.js +91 -91
  39. package/dist/http/paramcoders/IParamReader.d.ts +8 -8
  40. package/dist/http/paramcoders/IParamReader.js +2 -2
  41. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
  42. package/dist/http/paramcoders/ParamDecoder.js +137 -137
  43. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
  44. package/dist/http/paramcoders/ParamEncoder.js +36 -36
  45. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
  46. package/dist/http/paramcoders/SchemaVerifier.js +145 -145
  47. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
  48. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
  49. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
  50. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
  51. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
  52. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -174
  53. package/dist/index.d.ts +85 -85
  54. package/dist/index.js +158 -158
  55. package/dist/intermediaries/Intermediary.d.ts +178 -178
  56. package/dist/intermediaries/Intermediary.js +166 -166
  57. package/dist/intermediaries/IntermediaryDiscovery.d.ts +211 -211
  58. package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
  59. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +450 -450
  60. package/dist/intermediaries/apis/IntermediaryAPI.js +618 -618
  61. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
  62. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
  63. package/dist/lnurl/LNURL.d.ts +102 -102
  64. package/dist/lnurl/LNURL.js +321 -321
  65. package/dist/prices/RedundantSwapPrice.d.ts +110 -110
  66. package/dist/prices/RedundantSwapPrice.js +222 -222
  67. package/dist/prices/SingleSwapPrice.d.ts +34 -34
  68. package/dist/prices/SingleSwapPrice.js +44 -44
  69. package/dist/prices/SwapPriceWithChain.d.ts +107 -107
  70. package/dist/prices/SwapPriceWithChain.js +128 -128
  71. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
  72. package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
  73. package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
  74. package/dist/prices/abstract/IPriceProvider.js +74 -74
  75. package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
  76. package/dist/prices/abstract/ISwapPrice.js +279 -279
  77. package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
  78. package/dist/prices/providers/BinancePriceProvider.js +30 -30
  79. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
  80. package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
  81. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
  82. package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
  83. package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
  84. package/dist/prices/providers/CustomPriceProvider.js +35 -35
  85. package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
  86. package/dist/prices/providers/KrakenPriceProvider.js +45 -45
  87. package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
  88. package/dist/prices/providers/OKXPriceProvider.js +29 -29
  89. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
  90. package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
  91. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
  92. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
  93. package/dist/storage/IUnifiedStorage.d.ts +85 -85
  94. package/dist/storage/IUnifiedStorage.js +2 -2
  95. package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
  96. package/dist/storage/UnifiedSwapStorage.js +116 -116
  97. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
  98. package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
  99. package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
  100. package/dist/storage-browser/LocalStorageManager.js +93 -93
  101. package/dist/swapper/Swapper.d.ts +732 -732
  102. package/dist/swapper/Swapper.js +1713 -1713
  103. package/dist/swapper/SwapperFactory.d.ts +135 -135
  104. package/dist/swapper/SwapperFactory.js +162 -162
  105. package/dist/swapper/SwapperUtils.d.ts +206 -206
  106. package/dist/swapper/SwapperUtils.js +481 -481
  107. package/dist/swapper/SwapperWithChain.d.ts +404 -404
  108. package/dist/swapper/SwapperWithChain.js +469 -469
  109. package/dist/swapper/SwapperWithSigner.d.ts +322 -322
  110. package/dist/swapper/SwapperWithSigner.js +318 -318
  111. package/dist/swaps/IAddressSwap.d.ts +22 -22
  112. package/dist/swaps/IAddressSwap.js +14 -14
  113. package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
  114. package/dist/swaps/IBTCWalletSwap.js +18 -18
  115. package/dist/swaps/IClaimableSwap.d.ts +49 -49
  116. package/dist/swaps/IClaimableSwap.js +15 -15
  117. package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
  118. package/dist/swaps/IClaimableSwapWrapper.js +2 -2
  119. package/dist/swaps/IRefundableSwap.d.ts +43 -43
  120. package/dist/swaps/IRefundableSwap.js +14 -14
  121. package/dist/swaps/ISwap.d.ts +392 -392
  122. package/dist/swaps/ISwap.js +349 -349
  123. package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
  124. package/dist/swaps/ISwapWithGasDrop.js +12 -12
  125. package/dist/swaps/ISwapWrapper.d.ts +285 -285
  126. package/dist/swaps/ISwapWrapper.js +353 -353
  127. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
  128. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
  129. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
  130. package/dist/swaps/escrow_swaps/IEscrowSwap.js +170 -170
  131. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +128 -128
  132. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
  133. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +105 -105
  134. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +129 -129
  135. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
  136. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
  137. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
  138. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
  139. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +531 -531
  140. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
  141. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +190 -190
  142. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
  143. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -583
  144. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
  145. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +235 -235
  146. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
  147. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
  148. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
  149. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +202 -202
  150. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
  151. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
  152. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
  153. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
  154. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
  155. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
  156. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
  157. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +251 -251
  158. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +536 -536
  159. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
  160. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
  161. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +132 -132
  162. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
  163. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +637 -637
  164. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1448
  165. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -257
  166. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
  167. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
  168. package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
  169. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
  170. package/dist/swaps/trusted/ln/LnForGasWrapper.js +83 -83
  171. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
  172. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
  173. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -69
  174. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
  175. package/dist/types/AmountData.d.ts +10 -10
  176. package/dist/types/AmountData.js +2 -2
  177. package/dist/types/CustomPriceFunction.d.ts +11 -11
  178. package/dist/types/CustomPriceFunction.js +2 -2
  179. package/dist/types/PriceInfoType.d.ts +28 -28
  180. package/dist/types/PriceInfoType.js +57 -57
  181. package/dist/types/SwapExecutionAction.d.ts +88 -88
  182. package/dist/types/SwapExecutionAction.js +2 -2
  183. package/dist/types/SwapStateInfo.d.ts +5 -5
  184. package/dist/types/SwapStateInfo.js +2 -2
  185. package/dist/types/SwapWithSigner.d.ts +17 -17
  186. package/dist/types/SwapWithSigner.js +43 -43
  187. package/dist/types/Token.d.ts +99 -99
  188. package/dist/types/Token.js +76 -76
  189. package/dist/types/TokenAmount.d.ts +69 -69
  190. package/dist/types/TokenAmount.js +60 -60
  191. package/dist/types/fees/Fee.d.ts +50 -50
  192. package/dist/types/fees/Fee.js +2 -2
  193. package/dist/types/fees/FeeBreakdown.d.ts +11 -11
  194. package/dist/types/fees/FeeBreakdown.js +2 -2
  195. package/dist/types/fees/PercentagePPM.d.ts +17 -17
  196. package/dist/types/fees/PercentagePPM.js +18 -18
  197. package/dist/types/lnurl/LNURLPay.d.ts +61 -61
  198. package/dist/types/lnurl/LNURLPay.js +31 -31
  199. package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
  200. package/dist/types/lnurl/LNURLWithdraw.js +27 -27
  201. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
  202. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
  203. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
  204. package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
  205. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
  206. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
  207. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
  208. package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
  209. package/dist/utils/BitcoinUtils.d.ts +16 -16
  210. package/dist/utils/BitcoinUtils.js +141 -141
  211. package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
  212. package/dist/utils/BitcoinWalletUtils.js +14 -14
  213. package/dist/utils/Logger.d.ts +7 -7
  214. package/dist/utils/Logger.js +12 -12
  215. package/dist/utils/RetryUtils.d.ts +22 -22
  216. package/dist/utils/RetryUtils.js +67 -67
  217. package/dist/utils/SwapUtils.d.ts +88 -88
  218. package/dist/utils/SwapUtils.js +72 -72
  219. package/dist/utils/TimeoutUtils.d.ts +17 -17
  220. package/dist/utils/TimeoutUtils.js +55 -55
  221. package/dist/utils/TokenUtils.d.ts +19 -19
  222. package/dist/utils/TokenUtils.js +37 -37
  223. package/dist/utils/TypeUtils.d.ts +7 -7
  224. package/dist/utils/TypeUtils.js +2 -2
  225. package/dist/utils/Utils.d.ts +67 -67
  226. package/dist/utils/Utils.js +208 -208
  227. package/package.json +43 -43
  228. package/src/SmartChainAssets.ts +186 -186
  229. package/src/bitcoin/coinselect2/accumulative.ts +69 -69
  230. package/src/bitcoin/coinselect2/blackjack.ts +50 -50
  231. package/src/bitcoin/coinselect2/index.ts +93 -93
  232. package/src/bitcoin/coinselect2/utils.ts +236 -236
  233. package/src/bitcoin/wallet/BitcoinWallet.ts +439 -439
  234. package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -140
  235. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -225
  236. package/src/enums/FeeType.ts +15 -15
  237. package/src/enums/SwapAmountType.ts +16 -16
  238. package/src/enums/SwapDirection.ts +15 -15
  239. package/src/enums/SwapSide.ts +16 -16
  240. package/src/enums/SwapType.ts +75 -75
  241. package/src/errors/IntermediaryError.ts +28 -28
  242. package/src/errors/RequestError.ts +64 -64
  243. package/src/errors/UserError.ts +15 -15
  244. package/src/events/UnifiedSwapEventListener.ts +173 -173
  245. package/src/http/HttpUtils.ts +91 -91
  246. package/src/http/paramcoders/IParamReader.ts +9 -9
  247. package/src/http/paramcoders/ParamDecoder.ts +145 -145
  248. package/src/http/paramcoders/ParamEncoder.ts +40 -40
  249. package/src/http/paramcoders/SchemaVerifier.ts +153 -153
  250. package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
  251. package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
  252. package/src/http/paramcoders/client/StreamingFetchPromise.ts +192 -192
  253. package/src/index.ts +140 -140
  254. package/src/intermediaries/Intermediary.ts +280 -280
  255. package/src/intermediaries/IntermediaryDiscovery.ts +541 -541
  256. package/src/intermediaries/apis/IntermediaryAPI.ts +963 -963
  257. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -257
  258. package/src/lnurl/LNURL.ts +402 -402
  259. package/src/prices/RedundantSwapPrice.ts +264 -264
  260. package/src/prices/SingleSwapPrice.ts +50 -50
  261. package/src/prices/SwapPriceWithChain.ts +194 -194
  262. package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
  263. package/src/prices/abstract/IPriceProvider.ts +127 -127
  264. package/src/prices/abstract/ISwapPrice.ts +390 -390
  265. package/src/prices/providers/BinancePriceProvider.ts +48 -48
  266. package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
  267. package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
  268. package/src/prices/providers/CustomPriceProvider.ts +40 -40
  269. package/src/prices/providers/KrakenPriceProvider.ts +83 -83
  270. package/src/prices/providers/OKXPriceProvider.ts +59 -59
  271. package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
  272. package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
  273. package/src/storage/IUnifiedStorage.ts +95 -95
  274. package/src/storage/UnifiedSwapStorage.ts +141 -141
  275. package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
  276. package/src/storage-browser/LocalStorageManager.ts +106 -106
  277. package/src/swapper/Swapper.ts +2488 -2488
  278. package/src/swapper/SwapperFactory.ts +307 -307
  279. package/src/swapper/SwapperUtils.ts +570 -570
  280. package/src/swapper/SwapperWithChain.ts +707 -707
  281. package/src/swapper/SwapperWithSigner.ts +511 -511
  282. package/src/swaps/IAddressSwap.ts +30 -30
  283. package/src/swaps/IBTCWalletSwap.ts +92 -92
  284. package/src/swaps/IClaimableSwap.ts +65 -65
  285. package/src/swaps/IClaimableSwapWrapper.ts +17 -17
  286. package/src/swaps/IRefundableSwap.ts +58 -58
  287. package/src/swaps/ISwap.ts +703 -703
  288. package/src/swaps/ISwapWithGasDrop.ts +25 -25
  289. package/src/swaps/ISwapWrapper.ts +539 -539
  290. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
  291. package/src/swaps/escrow_swaps/IEscrowSwap.ts +269 -269
  292. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +282 -282
  293. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +169 -169
  294. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
  295. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
  296. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1473 -1474
  297. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +601 -601
  298. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1582 -1582
  299. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +750 -750
  300. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1299 -1299
  301. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +610 -610
  302. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1096 -1096
  303. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
  304. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
  305. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +786 -786
  306. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
  307. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +401 -401
  308. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1812 -1812
  309. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1236
  310. package/src/swaps/trusted/ln/LnForGasSwap.ts +589 -589
  311. package/src/swaps/trusted/ln/LnForGasWrapper.ts +91 -91
  312. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +862 -862
  313. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +131 -131
  314. package/src/types/AmountData.ts +9 -9
  315. package/src/types/CustomPriceFunction.ts +11 -11
  316. package/src/types/PriceInfoType.ts +66 -66
  317. package/src/types/SwapExecutionAction.ts +99 -99
  318. package/src/types/SwapStateInfo.ts +6 -6
  319. package/src/types/SwapWithSigner.ts +61 -61
  320. package/src/types/Token.ts +163 -163
  321. package/src/types/TokenAmount.ts +132 -132
  322. package/src/types/fees/Fee.ts +56 -56
  323. package/src/types/fees/FeeBreakdown.ts +11 -11
  324. package/src/types/fees/PercentagePPM.ts +26 -26
  325. package/src/types/lnurl/LNURLPay.ts +79 -79
  326. package/src/types/lnurl/LNURLWithdraw.ts +61 -61
  327. package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
  328. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
  329. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
  330. package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
  331. package/src/utils/BitcoinUtils.ts +132 -132
  332. package/src/utils/BitcoinWalletUtils.ts +15 -15
  333. package/src/utils/Logger.ts +14 -14
  334. package/src/utils/RetryUtils.ts +78 -78
  335. package/src/utils/SwapUtils.ts +99 -99
  336. package/src/utils/TimeoutUtils.ts +49 -49
  337. package/src/utils/TokenUtils.ts +33 -33
  338. package/src/utils/TypeUtils.ts +8 -8
  339. package/src/utils/Utils.ts +212 -212
@@ -1,618 +1,618 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IntermediaryAPI = 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
- class IntermediaryAPI {
133
- /**
134
- * Returns the information about a specific intermediary
135
- *
136
- * @param baseUrl Base URL of the intermediary
137
- * @param timeout Timeout in milliseconds for the HTTP request
138
- * @param abortSignal
139
- *
140
- * @throws {RequestError} If non-200 http response code is returned
141
- * @throws {Error} If the supplied nonce doesn't match the response
142
- */
143
- static async getIntermediaryInfo(baseUrl, timeout, abortSignal) {
144
- const nonce = (0, Utils_1.randomBytes)(32).toString("hex");
145
- const abortController = (0, Utils_1.extendAbortController)(abortSignal);
146
- //We don't know whether the node supports only POST or also has GET info support enabled
147
- // here we try both, and abort when the first one returns (which should be GET)
148
- const response = await Promise.any([
149
- (0, HttpUtils_1.httpGet)(baseUrl + "/info?nonce=" + nonce, timeout, abortController.signal),
150
- (0, HttpUtils_1.httpPost)(baseUrl + "/info", {
151
- nonce,
152
- }, timeout, abortController.signal)
153
- ]);
154
- abortController.abort();
155
- const info = JSON.parse(response.envelope);
156
- if (nonce !== info.nonce)
157
- throw new Error("Invalid response - nonce");
158
- return response;
159
- }
160
- /**
161
- * Returns the information about an outcome of the To BTC swap
162
- *
163
- * @param url URL of the intermediary
164
- * @param paymentHash Payment hash of the swap
165
- * @param sequence Swap's sequence number
166
- * @param timeout Timeout in milliseconds for the HTTP request
167
- * @param abortSignal
168
- *
169
- * @throws {RequestError} If non-200 http response code is returned
170
- */
171
- static async getRefundAuthorization(url, paymentHash, sequence, timeout, abortSignal) {
172
- return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getRefundAuthorization" +
173
- "?paymentHash=" + encodeURIComponent(paymentHash) +
174
- "&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
175
- }
176
- /**
177
- * Returns the information about the payment of the From BTCLN swaps
178
- *
179
- * @param url URL of the intermediary
180
- * @param paymentHash Payment hash of the swap
181
- * @param timeout Timeout in milliseconds for the HTTP request
182
- * @param abortSignal
183
- *
184
- * @throws {RequestError} If non-200 http response code is returned
185
- */
186
- static async getPaymentAuthorization(url, paymentHash, timeout, abortSignal) {
187
- return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getInvoicePaymentAuth" +
188
- "?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
189
- }
190
- /**
191
- * Returns the status of the payment of the From BTCLN swaps
192
- *
193
- * @param url URL of the intermediary
194
- * @param paymentHash Payment hash of the swap
195
- * @param timeout Timeout in milliseconds for the HTTP request
196
- * @param abortSignal
197
- *
198
- * @throws {RequestError} If non-200 http response code is returned
199
- */
200
- static async getInvoiceStatus(url, paymentHash, timeout, abortSignal) {
201
- return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getInvoiceStatus" +
202
- "?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
203
- }
204
- /**
205
- * Initiate To BTC swap with an intermediary
206
- *
207
- * @param chainIdentifier
208
- * @param baseUrl Base URL of the intermediary
209
- * @param init Swap initialization parameters
210
- * @param timeout Timeout in milliseconds for the HTTP request
211
- * @param abortSignal
212
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
213
- *
214
- * @throws {RequestError} If non-200 http response code is returned
215
- */
216
- static initToBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
217
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtc/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
218
- ...init.additionalParams,
219
- address: init.btcAddress,
220
- amount: init.amount.toString(10),
221
- exactIn: init.exactIn,
222
- confirmationTarget: init.confirmationTarget,
223
- confirmations: init.confirmations,
224
- nonce: init.nonce.toString(10),
225
- token: init.token,
226
- offerer: init.offerer,
227
- feeRate: init.feeRate
228
- }, {
229
- code: SchemaVerifier_1.FieldTypeEnum.Number,
230
- msg: SchemaVerifier_1.FieldTypeEnum.String,
231
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
232
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
233
- }, timeout, abortSignal, streamRequest);
234
- return {
235
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
236
- response: responseBodyPromise.then((responseBody) => Promise.all([
237
- responseBody.code,
238
- responseBody.msg,
239
- responseBody.data,
240
- ])).then(([code, msg, data]) => {
241
- if (code !== 20000) {
242
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
243
- }
244
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCResponseSchema);
245
- if (result == null)
246
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
247
- return result;
248
- })
249
- };
250
- }
251
- /**
252
- * Initiate From BTC swap with an intermediary
253
- *
254
- * @param chainIdentifier
255
- * @param baseUrl Base URL of the intermediary
256
- * @param depositToken
257
- * @param init Swap initialization parameters
258
- * @param timeout Timeout in milliseconds for the HTTP request
259
- * @param abortSignal
260
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
261
- *
262
- * @throws {RequestError} If non-200 http response code is returned
263
- */
264
- static initFromBTC(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
265
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtc/getAddress?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
266
- ...init.additionalParams,
267
- address: init.claimer,
268
- amount: init.amount.toString(10),
269
- token: init.token,
270
- exactOut: init.exactOut,
271
- sequence: init.sequence.toString(10),
272
- claimerBounty: init.claimerBounty.then(claimerBounty => {
273
- return {
274
- feePerBlock: claimerBounty.feePerBlock.toString(10),
275
- safetyFactor: claimerBounty.safetyFactor.toString(10),
276
- startTimestamp: claimerBounty.startTimestamp.toString(10),
277
- addBlock: claimerBounty.addBlock.toString(10),
278
- addFee: claimerBounty.addFee.toString(10)
279
- };
280
- }),
281
- feeRate: init.feeRate
282
- }, {
283
- code: SchemaVerifier_1.FieldTypeEnum.Number,
284
- msg: SchemaVerifier_1.FieldTypeEnum.String,
285
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
286
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
287
- }, timeout, abortSignal, streamRequest);
288
- return {
289
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
290
- response: responseBodyPromise.then((responseBody) => Promise.all([
291
- responseBody.code,
292
- responseBody.msg,
293
- responseBody.data,
294
- ])).then(([code, msg, data]) => {
295
- if (code !== 20000) {
296
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
297
- }
298
- const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCResponseSchema);
299
- if (result == null)
300
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
301
- return result;
302
- })
303
- };
304
- }
305
- /**
306
- * Initiate From BTCLN swap with an intermediary
307
- *
308
- * @param chainIdentifier
309
- * @param baseUrl Base URL of the intermediary
310
- * @param depositToken
311
- * @param init Swap initialization parameters
312
- * @param timeout Timeout in milliseconds for the HTTP request
313
- * @param abortSignal
314
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
315
- *
316
- * @throws {RequestError} If non-200 http response code is returned
317
- */
318
- static initFromBTCLN(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
319
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtcln/createInvoice?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
320
- ...init.additionalParams,
321
- paymentHash: init.paymentHash.toString("hex"),
322
- amount: init.amount.toString(),
323
- address: init.claimer,
324
- token: init.token,
325
- description: init.description ?? null,
326
- descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
327
- exactOut: init.exactOut,
328
- feeRate: init.feeRate
329
- }, {
330
- code: SchemaVerifier_1.FieldTypeEnum.Number,
331
- msg: SchemaVerifier_1.FieldTypeEnum.String,
332
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
333
- lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
334
- }, timeout, abortSignal, streamRequest);
335
- return {
336
- lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
337
- response: responseBodyPromise.then((responseBody) => Promise.all([
338
- responseBody.code,
339
- responseBody.msg,
340
- responseBody.data,
341
- ])).then(([code, msg, data]) => {
342
- if (code !== 20000) {
343
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
344
- }
345
- const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNResponseSchema);
346
- if (result == null)
347
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
348
- return result;
349
- })
350
- };
351
- }
352
- /**
353
- * Initiate From BTCLN swap with auto-initilization by an intermediary
354
- *
355
- * @param chainIdentifier
356
- * @param baseUrl Base URL of the intermediary
357
- * @param init Swap initialization parameters
358
- * @param timeout Timeout in milliseconds for the HTTP request
359
- * @param abortSignal
360
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
361
- *
362
- * @throws {RequestError} If non-200 http response code is returned
363
- */
364
- static initFromBTCLNAuto(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
365
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtcln_auto/createInvoice?chain=" + encodeURIComponent(chainIdentifier), {
366
- ...init.additionalParams,
367
- paymentHash: init.paymentHash.toString("hex"),
368
- amount: init.amount.toString(),
369
- address: init.claimer,
370
- token: init.token,
371
- description: init.description ?? null,
372
- descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
373
- exactOut: init.exactOut,
374
- gasToken: init.gasToken,
375
- gasAmount: init.gasAmount?.toString(10) ?? "0",
376
- claimerBounty: init.claimerBounty?.then(val => val.toString(10)) ?? "0"
377
- }, {
378
- code: SchemaVerifier_1.FieldTypeEnum.Number,
379
- msg: SchemaVerifier_1.FieldTypeEnum.String,
380
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
381
- lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
382
- }, timeout, abortSignal, streamRequest);
383
- return {
384
- lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
385
- response: responseBodyPromise.then((responseBody) => Promise.all([
386
- responseBody.code,
387
- responseBody.msg,
388
- responseBody.data,
389
- ])).then(([code, msg, data]) => {
390
- if (code !== 20000) {
391
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
392
- }
393
- const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNAutoResponseSchema);
394
- if (result == null)
395
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
396
- return result;
397
- })
398
- };
399
- }
400
- /**
401
- * Initiate To BTCLN swap with an intermediary
402
- *
403
- * @param chainIdentifier
404
- * @param baseUrl Base URL of the intermediary
405
- * @param init Swap initialization parameters
406
- * @param timeout Timeout in milliseconds for the HTTP request
407
- * @param abortSignal
408
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
409
- *
410
- * @throws {RequestError} If non-200 http response code is returned
411
- */
412
- static initToBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
413
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
414
- exactIn: false,
415
- ...init.additionalParams,
416
- pr: init.pr,
417
- maxFee: init.maxFee.toString(10),
418
- expiryTimestamp: init.expiryTimestamp.toString(10),
419
- token: init.token,
420
- offerer: init.offerer,
421
- feeRate: init.feeRate,
422
- amount: null
423
- }, {
424
- code: SchemaVerifier_1.FieldTypeEnum.Number,
425
- msg: SchemaVerifier_1.FieldTypeEnum.String,
426
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
427
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
428
- }, timeout, abortSignal, streamRequest);
429
- return {
430
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
431
- response: responseBodyPromise.then((responseBody) => Promise.all([
432
- responseBody.code,
433
- responseBody.msg,
434
- responseBody.data,
435
- ])).then(([code, msg, data]) => {
436
- if (code !== 20000) {
437
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
438
- }
439
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
440
- if (result == null)
441
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
442
- return result;
443
- })
444
- };
445
- }
446
- /**
447
- * Initiate To BTCLN exact in swap with an intermediary
448
- *
449
- * @param baseUrl Base URL of the intermediary
450
- * @param init Swap initialization parameters
451
- * @param timeout Timeout in milliseconds for the HTTP request
452
- * @param abortSignal
453
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
454
- *
455
- * @throws {RequestError} If non-200 http response code is returned
456
- */
457
- static async initToBTCLNExactIn(baseUrl, init, timeout, abortSignal, streamRequest) {
458
- const responseBody = await (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoiceExactIn", {
459
- ...init.additionalParams,
460
- pr: init.pr,
461
- reqId: init.reqId,
462
- feeRate: init.feeRate
463
- }, {
464
- code: SchemaVerifier_1.FieldTypeEnum.Number,
465
- msg: SchemaVerifier_1.FieldTypeEnum.String,
466
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
467
- }, timeout, abortSignal, streamRequest);
468
- const [code, msg, data] = await Promise.all([
469
- responseBody.code,
470
- responseBody.msg,
471
- responseBody.data,
472
- ]);
473
- if (code !== 20000)
474
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
475
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
476
- if (result == null)
477
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
478
- return result;
479
- }
480
- /**
481
- * Prepare To BTCLN exact in swap with an intermediary
482
- *
483
- * @param chainIdentifier
484
- * @param baseUrl Base URL of the intermediary
485
- * @param init Swap initialization parameters
486
- * @param timeout Timeout in milliseconds for the HTTP request
487
- * @param abortSignal
488
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
489
- *
490
- * @throws {RequestError} If non-200 http response code is returned
491
- */
492
- static prepareToBTCLNExactIn(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
493
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
494
- exactIn: true,
495
- ...init.additionalParams,
496
- pr: init.pr,
497
- maxFee: init.maxFee.toString(10),
498
- expiryTimestamp: init.expiryTimestamp.toString(10),
499
- token: init.token,
500
- offerer: init.offerer,
501
- amount: init.amount.toString(10)
502
- }, {
503
- code: SchemaVerifier_1.FieldTypeEnum.Number,
504
- msg: SchemaVerifier_1.FieldTypeEnum.String,
505
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
506
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
507
- }, timeout, abortSignal, streamRequest);
508
- return {
509
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
510
- response: responseBodyPromise.then((responseBody) => Promise.all([
511
- responseBody.code,
512
- responseBody.msg,
513
- responseBody.data,
514
- ])).then(([code, msg, data]) => {
515
- if (code !== 20000) {
516
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
517
- }
518
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNPrepareExactInSchema);
519
- if (result == null)
520
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
521
- return result;
522
- })
523
- };
524
- }
525
- /**
526
- * Prepare From BTC swap via new spv vault swaps with an intermediary
527
- *
528
- * @param chainIdentifier
529
- * @param baseUrl Base URL of the intermediary
530
- * @param init Swap initialization parameters
531
- * @param timeout Timeout in milliseconds for the HTTP request
532
- * @param abortSignal
533
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
534
- *
535
- * @throws {RequestError} If non-200 http response code is returned
536
- */
537
- static prepareSpvFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
538
- //We need to make sure we only send the amount parameter after the amountUtxos and amountFeeRate resolve
539
- // this is needed, because in the LP code to maintain backwards compatibility the amountUtxos and amountFeeRate
540
- // params are checked immediately after the amount param (and other params) are received, if amount were sent
541
- // first without the amountUtxos or amountFeeRate populated these fields would've been skipped altogether
542
- const amountPromise = (async () => {
543
- if (init.amountUtxos != null)
544
- await init.amountUtxos;
545
- if (init.amountFeeRate != null)
546
- await init.amountFeeRate;
547
- const amount = await init.amount;
548
- return amount.toString(10);
549
- })();
550
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtc_spv/getQuote?chain=" + encodeURIComponent(chainIdentifier), {
551
- exactOut: init.exactOut,
552
- ...init.additionalParams,
553
- address: init.address,
554
- amount: amountPromise,
555
- token: init.token,
556
- gasAmount: init.gasAmount.toString(10),
557
- gasToken: init.gasToken,
558
- frontingFeeRate: init.frontingFeeRate.toString(10),
559
- callerFeeRate: init.callerFeeRate.then(val => val.toString(10)),
560
- stickyAddress: init.stickyAddress,
561
- amountUtxos: init.amountUtxos,
562
- amountFeeRate: init.amountFeeRate
563
- }, {
564
- code: SchemaVerifier_1.FieldTypeEnum.Number,
565
- msg: SchemaVerifier_1.FieldTypeEnum.String,
566
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
567
- }, timeout, abortSignal, streamRequest);
568
- return responseBodyPromise.then((responseBody) => Promise.all([
569
- responseBody.code,
570
- responseBody.msg,
571
- responseBody.data,
572
- ])).then(([code, msg, data]) => {
573
- if (code !== 20000) {
574
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
575
- }
576
- const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCPrepareResponseSchema);
577
- if (result == null)
578
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
579
- return result;
580
- });
581
- }
582
- /**
583
- * Prepare From BTC swap via new spv vault swaps with an intermediary
584
- *
585
- * @param chainIdentifier
586
- * @param url
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
- static initSpvFromBTC(chainIdentifier, url, init, timeout, abortSignal, streamRequest) {
595
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(url + "/postQuote?chain=" + encodeURIComponent(chainIdentifier), {
596
- quoteId: init.quoteId,
597
- psbtHex: init.psbtHex
598
- }, {
599
- code: SchemaVerifier_1.FieldTypeEnum.Number,
600
- msg: SchemaVerifier_1.FieldTypeEnum.String,
601
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
602
- }, timeout, abortSignal, streamRequest);
603
- return responseBodyPromise.then((responseBody) => Promise.all([
604
- responseBody.code,
605
- responseBody.msg,
606
- responseBody.data,
607
- ])).then(([code, msg, data]) => {
608
- if (code !== 20000) {
609
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
610
- }
611
- const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCInitResponseSchema);
612
- if (result == null)
613
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
614
- return result;
615
- });
616
- }
617
- }
618
- exports.IntermediaryAPI = IntermediaryAPI;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntermediaryAPI = 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
+ class IntermediaryAPI {
133
+ /**
134
+ * Returns the information about a specific intermediary
135
+ *
136
+ * @param baseUrl Base URL of the intermediary
137
+ * @param timeout Timeout in milliseconds for the HTTP request
138
+ * @param abortSignal
139
+ *
140
+ * @throws {RequestError} If non-200 http response code is returned
141
+ * @throws {Error} If the supplied nonce doesn't match the response
142
+ */
143
+ static async getIntermediaryInfo(baseUrl, timeout, abortSignal) {
144
+ const nonce = (0, Utils_1.randomBytes)(32).toString("hex");
145
+ const abortController = (0, Utils_1.extendAbortController)(abortSignal);
146
+ //We don't know whether the node supports only POST or also has GET info support enabled
147
+ // here we try both, and abort when the first one returns (which should be GET)
148
+ const response = await Promise.any([
149
+ (0, HttpUtils_1.httpGet)(baseUrl + "/info?nonce=" + nonce, timeout, abortController.signal),
150
+ (0, HttpUtils_1.httpPost)(baseUrl + "/info", {
151
+ nonce,
152
+ }, timeout, abortController.signal)
153
+ ]);
154
+ abortController.abort();
155
+ const info = JSON.parse(response.envelope);
156
+ if (nonce !== info.nonce)
157
+ throw new Error("Invalid response - nonce");
158
+ return response;
159
+ }
160
+ /**
161
+ * Returns the information about an outcome of the To BTC swap
162
+ *
163
+ * @param url URL of the intermediary
164
+ * @param paymentHash Payment hash of the swap
165
+ * @param sequence Swap's sequence number
166
+ * @param timeout Timeout in milliseconds for the HTTP request
167
+ * @param abortSignal
168
+ *
169
+ * @throws {RequestError} If non-200 http response code is returned
170
+ */
171
+ static async getRefundAuthorization(url, paymentHash, sequence, timeout, abortSignal) {
172
+ return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getRefundAuthorization" +
173
+ "?paymentHash=" + encodeURIComponent(paymentHash) +
174
+ "&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
175
+ }
176
+ /**
177
+ * Returns the information about the payment of the From BTCLN swaps
178
+ *
179
+ * @param url URL of the intermediary
180
+ * @param paymentHash Payment hash of the swap
181
+ * @param timeout Timeout in milliseconds for the HTTP request
182
+ * @param abortSignal
183
+ *
184
+ * @throws {RequestError} If non-200 http response code is returned
185
+ */
186
+ static async getPaymentAuthorization(url, paymentHash, timeout, abortSignal) {
187
+ return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getInvoicePaymentAuth" +
188
+ "?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
189
+ }
190
+ /**
191
+ * Returns the status of the payment of the From BTCLN swaps
192
+ *
193
+ * @param url URL of the intermediary
194
+ * @param paymentHash Payment hash of the swap
195
+ * @param timeout Timeout in milliseconds for the HTTP request
196
+ * @param abortSignal
197
+ *
198
+ * @throws {RequestError} If non-200 http response code is returned
199
+ */
200
+ static async getInvoiceStatus(url, paymentHash, timeout, abortSignal) {
201
+ return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getInvoiceStatus" +
202
+ "?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
203
+ }
204
+ /**
205
+ * Initiate To BTC swap with an intermediary
206
+ *
207
+ * @param chainIdentifier
208
+ * @param baseUrl Base URL of the intermediary
209
+ * @param init Swap initialization parameters
210
+ * @param timeout Timeout in milliseconds for the HTTP request
211
+ * @param abortSignal
212
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
213
+ *
214
+ * @throws {RequestError} If non-200 http response code is returned
215
+ */
216
+ static initToBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
217
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtc/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
218
+ ...init.additionalParams,
219
+ address: init.btcAddress,
220
+ amount: init.amount.toString(10),
221
+ exactIn: init.exactIn,
222
+ confirmationTarget: init.confirmationTarget,
223
+ confirmations: init.confirmations,
224
+ nonce: init.nonce.toString(10),
225
+ token: init.token,
226
+ offerer: init.offerer,
227
+ feeRate: init.feeRate
228
+ }, {
229
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
230
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
231
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
232
+ signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
233
+ }, timeout, abortSignal, streamRequest);
234
+ return {
235
+ signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
236
+ response: responseBodyPromise.then((responseBody) => Promise.all([
237
+ responseBody.code,
238
+ responseBody.msg,
239
+ responseBody.data,
240
+ ])).then(([code, msg, data]) => {
241
+ if (code !== 20000) {
242
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
243
+ }
244
+ const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCResponseSchema);
245
+ if (result == null)
246
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
247
+ return result;
248
+ })
249
+ };
250
+ }
251
+ /**
252
+ * Initiate From BTC swap with an intermediary
253
+ *
254
+ * @param chainIdentifier
255
+ * @param baseUrl Base URL of the intermediary
256
+ * @param depositToken
257
+ * @param init Swap initialization parameters
258
+ * @param timeout Timeout in milliseconds for the HTTP request
259
+ * @param abortSignal
260
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
261
+ *
262
+ * @throws {RequestError} If non-200 http response code is returned
263
+ */
264
+ static initFromBTC(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
265
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtc/getAddress?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
266
+ ...init.additionalParams,
267
+ address: init.claimer,
268
+ amount: init.amount.toString(10),
269
+ token: init.token,
270
+ exactOut: init.exactOut,
271
+ sequence: init.sequence.toString(10),
272
+ claimerBounty: init.claimerBounty.then(claimerBounty => {
273
+ return {
274
+ feePerBlock: claimerBounty.feePerBlock.toString(10),
275
+ safetyFactor: claimerBounty.safetyFactor.toString(10),
276
+ startTimestamp: claimerBounty.startTimestamp.toString(10),
277
+ addBlock: claimerBounty.addBlock.toString(10),
278
+ addFee: claimerBounty.addFee.toString(10)
279
+ };
280
+ }),
281
+ feeRate: init.feeRate
282
+ }, {
283
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
284
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
285
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
286
+ signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
287
+ }, timeout, abortSignal, streamRequest);
288
+ return {
289
+ signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
290
+ response: responseBodyPromise.then((responseBody) => Promise.all([
291
+ responseBody.code,
292
+ responseBody.msg,
293
+ responseBody.data,
294
+ ])).then(([code, msg, data]) => {
295
+ if (code !== 20000) {
296
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
297
+ }
298
+ const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCResponseSchema);
299
+ if (result == null)
300
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
301
+ return result;
302
+ })
303
+ };
304
+ }
305
+ /**
306
+ * Initiate From BTCLN swap with an intermediary
307
+ *
308
+ * @param chainIdentifier
309
+ * @param baseUrl Base URL of the intermediary
310
+ * @param depositToken
311
+ * @param init Swap initialization parameters
312
+ * @param timeout Timeout in milliseconds for the HTTP request
313
+ * @param abortSignal
314
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
315
+ *
316
+ * @throws {RequestError} If non-200 http response code is returned
317
+ */
318
+ static initFromBTCLN(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
319
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtcln/createInvoice?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
320
+ ...init.additionalParams,
321
+ paymentHash: init.paymentHash.toString("hex"),
322
+ amount: init.amount.toString(),
323
+ address: init.claimer,
324
+ token: init.token,
325
+ description: init.description ?? null,
326
+ descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
327
+ exactOut: init.exactOut,
328
+ feeRate: init.feeRate
329
+ }, {
330
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
331
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
332
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
333
+ lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
334
+ }, timeout, abortSignal, streamRequest);
335
+ return {
336
+ lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
337
+ response: responseBodyPromise.then((responseBody) => Promise.all([
338
+ responseBody.code,
339
+ responseBody.msg,
340
+ responseBody.data,
341
+ ])).then(([code, msg, data]) => {
342
+ if (code !== 20000) {
343
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
344
+ }
345
+ const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNResponseSchema);
346
+ if (result == null)
347
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
348
+ return result;
349
+ })
350
+ };
351
+ }
352
+ /**
353
+ * Initiate From BTCLN swap with auto-initilization by an intermediary
354
+ *
355
+ * @param chainIdentifier
356
+ * @param baseUrl Base URL of the intermediary
357
+ * @param init Swap initialization parameters
358
+ * @param timeout Timeout in milliseconds for the HTTP request
359
+ * @param abortSignal
360
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
361
+ *
362
+ * @throws {RequestError} If non-200 http response code is returned
363
+ */
364
+ static initFromBTCLNAuto(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
365
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtcln_auto/createInvoice?chain=" + encodeURIComponent(chainIdentifier), {
366
+ ...init.additionalParams,
367
+ paymentHash: init.paymentHash.toString("hex"),
368
+ amount: init.amount.toString(),
369
+ address: init.claimer,
370
+ token: init.token,
371
+ description: init.description ?? null,
372
+ descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
373
+ exactOut: init.exactOut,
374
+ gasToken: init.gasToken,
375
+ gasAmount: init.gasAmount?.toString(10) ?? "0",
376
+ claimerBounty: init.claimerBounty?.then(val => val.toString(10)) ?? "0"
377
+ }, {
378
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
379
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
380
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
381
+ lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
382
+ }, timeout, abortSignal, streamRequest);
383
+ return {
384
+ lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
385
+ response: responseBodyPromise.then((responseBody) => Promise.all([
386
+ responseBody.code,
387
+ responseBody.msg,
388
+ responseBody.data,
389
+ ])).then(([code, msg, data]) => {
390
+ if (code !== 20000) {
391
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
392
+ }
393
+ const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNAutoResponseSchema);
394
+ if (result == null)
395
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
396
+ return result;
397
+ })
398
+ };
399
+ }
400
+ /**
401
+ * Initiate To BTCLN swap with an intermediary
402
+ *
403
+ * @param chainIdentifier
404
+ * @param baseUrl Base URL of the intermediary
405
+ * @param init Swap initialization parameters
406
+ * @param timeout Timeout in milliseconds for the HTTP request
407
+ * @param abortSignal
408
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
409
+ *
410
+ * @throws {RequestError} If non-200 http response code is returned
411
+ */
412
+ static initToBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
413
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
414
+ exactIn: false,
415
+ ...init.additionalParams,
416
+ pr: init.pr,
417
+ maxFee: init.maxFee.toString(10),
418
+ expiryTimestamp: init.expiryTimestamp.toString(10),
419
+ token: init.token,
420
+ offerer: init.offerer,
421
+ feeRate: init.feeRate,
422
+ amount: null
423
+ }, {
424
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
425
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
426
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
427
+ signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
428
+ }, timeout, abortSignal, streamRequest);
429
+ return {
430
+ signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
431
+ response: responseBodyPromise.then((responseBody) => Promise.all([
432
+ responseBody.code,
433
+ responseBody.msg,
434
+ responseBody.data,
435
+ ])).then(([code, msg, data]) => {
436
+ if (code !== 20000) {
437
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
438
+ }
439
+ const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
440
+ if (result == null)
441
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
442
+ return result;
443
+ })
444
+ };
445
+ }
446
+ /**
447
+ * Initiate To BTCLN exact in swap with an intermediary
448
+ *
449
+ * @param baseUrl Base URL of the intermediary
450
+ * @param init Swap initialization parameters
451
+ * @param timeout Timeout in milliseconds for the HTTP request
452
+ * @param abortSignal
453
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
454
+ *
455
+ * @throws {RequestError} If non-200 http response code is returned
456
+ */
457
+ static async initToBTCLNExactIn(baseUrl, init, timeout, abortSignal, streamRequest) {
458
+ const responseBody = await (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoiceExactIn", {
459
+ ...init.additionalParams,
460
+ pr: init.pr,
461
+ reqId: init.reqId,
462
+ feeRate: init.feeRate
463
+ }, {
464
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
465
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
466
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
467
+ }, timeout, abortSignal, streamRequest);
468
+ const [code, msg, data] = await Promise.all([
469
+ responseBody.code,
470
+ responseBody.msg,
471
+ responseBody.data,
472
+ ]);
473
+ if (code !== 20000)
474
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
475
+ const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
476
+ if (result == null)
477
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
478
+ return result;
479
+ }
480
+ /**
481
+ * Prepare To BTCLN exact in swap with an intermediary
482
+ *
483
+ * @param chainIdentifier
484
+ * @param baseUrl Base URL of the intermediary
485
+ * @param init Swap initialization parameters
486
+ * @param timeout Timeout in milliseconds for the HTTP request
487
+ * @param abortSignal
488
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
489
+ *
490
+ * @throws {RequestError} If non-200 http response code is returned
491
+ */
492
+ static prepareToBTCLNExactIn(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
493
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
494
+ exactIn: true,
495
+ ...init.additionalParams,
496
+ pr: init.pr,
497
+ maxFee: init.maxFee.toString(10),
498
+ expiryTimestamp: init.expiryTimestamp.toString(10),
499
+ token: init.token,
500
+ offerer: init.offerer,
501
+ amount: init.amount.toString(10)
502
+ }, {
503
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
504
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
505
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
506
+ signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
507
+ }, timeout, abortSignal, streamRequest);
508
+ return {
509
+ signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
510
+ response: responseBodyPromise.then((responseBody) => Promise.all([
511
+ responseBody.code,
512
+ responseBody.msg,
513
+ responseBody.data,
514
+ ])).then(([code, msg, data]) => {
515
+ if (code !== 20000) {
516
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
517
+ }
518
+ const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNPrepareExactInSchema);
519
+ if (result == null)
520
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
521
+ return result;
522
+ })
523
+ };
524
+ }
525
+ /**
526
+ * Prepare From BTC swap via new spv vault swaps with an intermediary
527
+ *
528
+ * @param chainIdentifier
529
+ * @param baseUrl Base URL of the intermediary
530
+ * @param init Swap initialization parameters
531
+ * @param timeout Timeout in milliseconds for the HTTP request
532
+ * @param abortSignal
533
+ * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
534
+ *
535
+ * @throws {RequestError} If non-200 http response code is returned
536
+ */
537
+ static prepareSpvFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
538
+ //We need to make sure we only send the amount parameter after the amountUtxos and amountFeeRate resolve
539
+ // this is needed, because in the LP code to maintain backwards compatibility the amountUtxos and amountFeeRate
540
+ // params are checked immediately after the amount param (and other params) are received, if amount were sent
541
+ // first without the amountUtxos or amountFeeRate populated these fields would've been skipped altogether
542
+ const amountPromise = (async () => {
543
+ if (init.amountUtxos != null)
544
+ await init.amountUtxos;
545
+ if (init.amountFeeRate != null)
546
+ await init.amountFeeRate;
547
+ const amount = await init.amount;
548
+ return amount.toString(10);
549
+ })();
550
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtc_spv/getQuote?chain=" + encodeURIComponent(chainIdentifier), {
551
+ exactOut: init.exactOut,
552
+ ...init.additionalParams,
553
+ address: init.address,
554
+ amount: amountPromise,
555
+ token: init.token,
556
+ gasAmount: init.gasAmount.toString(10),
557
+ gasToken: init.gasToken,
558
+ frontingFeeRate: init.frontingFeeRate.toString(10),
559
+ callerFeeRate: init.callerFeeRate.then(val => val.toString(10)),
560
+ stickyAddress: init.stickyAddress,
561
+ amountUtxos: init.amountUtxos,
562
+ amountFeeRate: init.amountFeeRate
563
+ }, {
564
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
565
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
566
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
567
+ }, timeout, abortSignal, streamRequest);
568
+ return responseBodyPromise.then((responseBody) => Promise.all([
569
+ responseBody.code,
570
+ responseBody.msg,
571
+ responseBody.data,
572
+ ])).then(([code, msg, data]) => {
573
+ if (code !== 20000) {
574
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
575
+ }
576
+ const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCPrepareResponseSchema);
577
+ if (result == null)
578
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
579
+ return result;
580
+ });
581
+ }
582
+ /**
583
+ * Prepare From BTC swap via new spv vault swaps with an intermediary
584
+ *
585
+ * @param chainIdentifier
586
+ * @param url
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
+ static initSpvFromBTC(chainIdentifier, url, init, timeout, abortSignal, streamRequest) {
595
+ const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(url + "/postQuote?chain=" + encodeURIComponent(chainIdentifier), {
596
+ quoteId: init.quoteId,
597
+ psbtHex: init.psbtHex
598
+ }, {
599
+ code: SchemaVerifier_1.FieldTypeEnum.Number,
600
+ msg: SchemaVerifier_1.FieldTypeEnum.String,
601
+ data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
602
+ }, timeout, abortSignal, streamRequest);
603
+ return responseBodyPromise.then((responseBody) => Promise.all([
604
+ responseBody.code,
605
+ responseBody.msg,
606
+ responseBody.data,
607
+ ])).then(([code, msg, data]) => {
608
+ if (code !== 20000) {
609
+ throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
610
+ }
611
+ const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCInitResponseSchema);
612
+ if (result == null)
613
+ throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
614
+ return result;
615
+ });
616
+ }
617
+ }
618
+ exports.IntermediaryAPI = IntermediaryAPI;