@atomiqlabs/sdk 8.7.7 → 8.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 -6
  6. package/dist/bitcoin/coinselect2/accumulative.js +52 -52
  7. package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -6
  8. package/dist/bitcoin/coinselect2/blackjack.js +38 -38
  9. package/dist/bitcoin/coinselect2/index.d.ts +20 -19
  10. package/dist/bitcoin/coinselect2/index.js +69 -69
  11. package/dist/bitcoin/coinselect2/utils.d.ts +82 -77
  12. package/dist/bitcoin/coinselect2/utils.js +158 -123
  13. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -130
  14. package/dist/bitcoin/wallet/BitcoinWallet.js +335 -322
  15. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -78
  16. package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
  17. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -101
  18. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -190
  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 -440
  60. package/dist/intermediaries/apis/IntermediaryAPI.js +618 -603
  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 -692
  102. package/dist/swapper/Swapper.js +1713 -1657
  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 -631
  164. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1444
  165. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -225
  166. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -822
  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 -14
  210. package/dist/utils/BitcoinUtils.js +141 -102
  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 -68
  230. package/src/bitcoin/coinselect2/blackjack.ts +50 -49
  231. package/src/bitcoin/coinselect2/index.ts +93 -92
  232. package/src/bitcoin/coinselect2/utils.ts +236 -195
  233. package/src/bitcoin/wallet/BitcoinWallet.ts +439 -427
  234. package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -99
  235. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -217
  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 -947
  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 -2416
  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 -1799
  309. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1060
  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 -91
  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,603 +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
- };
128
- const SpvFromBTCInitResponseSchema = {
129
- txId: SchemaVerifier_1.FieldTypeEnum.String
130
- };
131
- class IntermediaryAPI {
132
- /**
133
- * Returns the information about a specific intermediary
134
- *
135
- * @param baseUrl Base URL of the intermediary
136
- * @param timeout Timeout in milliseconds for the HTTP request
137
- * @param abortSignal
138
- *
139
- * @throws {RequestError} If non-200 http response code is returned
140
- * @throws {Error} If the supplied nonce doesn't match the response
141
- */
142
- static async getIntermediaryInfo(baseUrl, timeout, abortSignal) {
143
- const nonce = (0, Utils_1.randomBytes)(32).toString("hex");
144
- const abortController = (0, Utils_1.extendAbortController)(abortSignal);
145
- //We don't know whether the node supports only POST or also has GET info support enabled
146
- // here we try both, and abort when the first one returns (which should be GET)
147
- const response = await Promise.any([
148
- (0, HttpUtils_1.httpGet)(baseUrl + "/info?nonce=" + nonce, timeout, abortController.signal),
149
- (0, HttpUtils_1.httpPost)(baseUrl + "/info", {
150
- nonce,
151
- }, timeout, abortController.signal)
152
- ]);
153
- abortController.abort();
154
- const info = JSON.parse(response.envelope);
155
- if (nonce !== info.nonce)
156
- throw new Error("Invalid response - nonce");
157
- return response;
158
- }
159
- /**
160
- * Returns the information about an outcome of the To BTC swap
161
- *
162
- * @param url URL of the intermediary
163
- * @param paymentHash Payment hash of the swap
164
- * @param sequence Swap's sequence number
165
- * @param timeout Timeout in milliseconds for the HTTP request
166
- * @param abortSignal
167
- *
168
- * @throws {RequestError} If non-200 http response code is returned
169
- */
170
- static async getRefundAuthorization(url, paymentHash, sequence, timeout, abortSignal) {
171
- return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getRefundAuthorization" +
172
- "?paymentHash=" + encodeURIComponent(paymentHash) +
173
- "&sequence=" + encodeURIComponent(sequence.toString(10)), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
174
- }
175
- /**
176
- * Returns the information about the payment of the From BTCLN swaps
177
- *
178
- * @param url URL of the intermediary
179
- * @param paymentHash Payment hash of the swap
180
- * @param timeout Timeout in milliseconds for the HTTP request
181
- * @param abortSignal
182
- *
183
- * @throws {RequestError} If non-200 http response code is returned
184
- */
185
- static async getPaymentAuthorization(url, paymentHash, timeout, abortSignal) {
186
- return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getInvoicePaymentAuth" +
187
- "?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
188
- }
189
- /**
190
- * Returns the status of the payment of the From BTCLN swaps
191
- *
192
- * @param url URL of the intermediary
193
- * @param paymentHash Payment hash of the swap
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
- */
199
- static async getInvoiceStatus(url, paymentHash, timeout, abortSignal) {
200
- return (0, RetryUtils_1.tryWithRetries)(() => (0, HttpUtils_1.httpGet)(url + "/getInvoiceStatus" +
201
- "?paymentHash=" + encodeURIComponent(paymentHash), timeout, abortSignal), undefined, RequestError_1.RequestError, abortSignal);
202
- }
203
- /**
204
- * Initiate To BTC swap with an intermediary
205
- *
206
- * @param chainIdentifier
207
- * @param baseUrl Base URL of the intermediary
208
- * @param init Swap initialization parameters
209
- * @param timeout Timeout in milliseconds for the HTTP request
210
- * @param abortSignal
211
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
212
- *
213
- * @throws {RequestError} If non-200 http response code is returned
214
- */
215
- static initToBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
216
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtc/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
217
- ...init.additionalParams,
218
- address: init.btcAddress,
219
- amount: init.amount.toString(10),
220
- exactIn: init.exactIn,
221
- confirmationTarget: init.confirmationTarget,
222
- confirmations: init.confirmations,
223
- nonce: init.nonce.toString(10),
224
- token: init.token,
225
- offerer: init.offerer,
226
- feeRate: init.feeRate
227
- }, {
228
- code: SchemaVerifier_1.FieldTypeEnum.Number,
229
- msg: SchemaVerifier_1.FieldTypeEnum.String,
230
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
231
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
232
- }, timeout, abortSignal, streamRequest);
233
- return {
234
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
235
- response: responseBodyPromise.then((responseBody) => Promise.all([
236
- responseBody.code,
237
- responseBody.msg,
238
- responseBody.data,
239
- ])).then(([code, msg, data]) => {
240
- if (code !== 20000) {
241
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
242
- }
243
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCResponseSchema);
244
- if (result == null)
245
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
246
- return result;
247
- })
248
- };
249
- }
250
- /**
251
- * Initiate From BTC swap with an intermediary
252
- *
253
- * @param chainIdentifier
254
- * @param baseUrl Base URL of the intermediary
255
- * @param depositToken
256
- * @param init Swap initialization parameters
257
- * @param timeout Timeout in milliseconds for the HTTP request
258
- * @param abortSignal
259
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
260
- *
261
- * @throws {RequestError} If non-200 http response code is returned
262
- */
263
- static initFromBTC(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
264
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtc/getAddress?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
265
- ...init.additionalParams,
266
- address: init.claimer,
267
- amount: init.amount.toString(10),
268
- token: init.token,
269
- exactOut: init.exactOut,
270
- sequence: init.sequence.toString(10),
271
- claimerBounty: init.claimerBounty.then(claimerBounty => {
272
- return {
273
- feePerBlock: claimerBounty.feePerBlock.toString(10),
274
- safetyFactor: claimerBounty.safetyFactor.toString(10),
275
- startTimestamp: claimerBounty.startTimestamp.toString(10),
276
- addBlock: claimerBounty.addBlock.toString(10),
277
- addFee: claimerBounty.addFee.toString(10)
278
- };
279
- }),
280
- feeRate: init.feeRate
281
- }, {
282
- code: SchemaVerifier_1.FieldTypeEnum.Number,
283
- msg: SchemaVerifier_1.FieldTypeEnum.String,
284
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
285
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
286
- }, timeout, abortSignal, streamRequest);
287
- return {
288
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
289
- response: responseBodyPromise.then((responseBody) => Promise.all([
290
- responseBody.code,
291
- responseBody.msg,
292
- responseBody.data,
293
- ])).then(([code, msg, data]) => {
294
- if (code !== 20000) {
295
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
296
- }
297
- const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCResponseSchema);
298
- if (result == null)
299
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
300
- return result;
301
- })
302
- };
303
- }
304
- /**
305
- * Initiate From BTCLN swap with an intermediary
306
- *
307
- * @param chainIdentifier
308
- * @param baseUrl Base URL of the intermediary
309
- * @param depositToken
310
- * @param init Swap initialization parameters
311
- * @param timeout Timeout in milliseconds for the HTTP request
312
- * @param abortSignal
313
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
314
- *
315
- * @throws {RequestError} If non-200 http response code is returned
316
- */
317
- static initFromBTCLN(chainIdentifier, baseUrl, depositToken, init, timeout, abortSignal, streamRequest) {
318
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtcln/createInvoice?chain=" + encodeURIComponent(chainIdentifier) + "&depositToken=" + encodeURIComponent(depositToken), {
319
- ...init.additionalParams,
320
- paymentHash: init.paymentHash.toString("hex"),
321
- amount: init.amount.toString(),
322
- address: init.claimer,
323
- token: init.token,
324
- description: init.description ?? null,
325
- descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
326
- exactOut: init.exactOut,
327
- feeRate: init.feeRate
328
- }, {
329
- code: SchemaVerifier_1.FieldTypeEnum.Number,
330
- msg: SchemaVerifier_1.FieldTypeEnum.String,
331
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
332
- lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
333
- }, timeout, abortSignal, streamRequest);
334
- return {
335
- lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
336
- response: responseBodyPromise.then((responseBody) => Promise.all([
337
- responseBody.code,
338
- responseBody.msg,
339
- responseBody.data,
340
- ])).then(([code, msg, data]) => {
341
- if (code !== 20000) {
342
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
343
- }
344
- const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNResponseSchema);
345
- if (result == null)
346
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
347
- return result;
348
- })
349
- };
350
- }
351
- /**
352
- * Initiate From BTCLN swap with auto-initilization by an intermediary
353
- *
354
- * @param chainIdentifier
355
- * @param baseUrl Base URL of the intermediary
356
- * @param init Swap initialization parameters
357
- * @param timeout Timeout in milliseconds for the HTTP request
358
- * @param abortSignal
359
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
360
- *
361
- * @throws {RequestError} If non-200 http response code is returned
362
- */
363
- static initFromBTCLNAuto(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
364
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtcln_auto/createInvoice?chain=" + encodeURIComponent(chainIdentifier), {
365
- ...init.additionalParams,
366
- paymentHash: init.paymentHash.toString("hex"),
367
- amount: init.amount.toString(),
368
- address: init.claimer,
369
- token: init.token,
370
- description: init.description ?? null,
371
- descriptionHash: init.descriptionHash == null ? null : init.descriptionHash.toString("hex"),
372
- exactOut: init.exactOut,
373
- gasToken: init.gasToken,
374
- gasAmount: init.gasAmount?.toString(10) ?? "0",
375
- claimerBounty: init.claimerBounty?.then(val => val.toString(10)) ?? "0"
376
- }, {
377
- code: SchemaVerifier_1.FieldTypeEnum.Number,
378
- msg: SchemaVerifier_1.FieldTypeEnum.String,
379
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
380
- lnPublicKey: SchemaVerifier_1.FieldTypeEnum.StringOptional
381
- }, timeout, abortSignal, streamRequest);
382
- return {
383
- lnPublicKey: responseBodyPromise.then(responseBody => responseBody.lnPublicKey),
384
- response: responseBodyPromise.then((responseBody) => Promise.all([
385
- responseBody.code,
386
- responseBody.msg,
387
- responseBody.data,
388
- ])).then(([code, msg, data]) => {
389
- if (code !== 20000) {
390
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
391
- }
392
- const result = (0, SchemaVerifier_1.verifySchema)(data, FromBTCLNAutoResponseSchema);
393
- if (result == null)
394
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
395
- return result;
396
- })
397
- };
398
- }
399
- /**
400
- * Initiate To BTCLN swap with an intermediary
401
- *
402
- * @param chainIdentifier
403
- * @param baseUrl Base URL of the intermediary
404
- * @param init Swap initialization parameters
405
- * @param timeout Timeout in milliseconds for the HTTP request
406
- * @param abortSignal
407
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
408
- *
409
- * @throws {RequestError} If non-200 http response code is returned
410
- */
411
- static initToBTCLN(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
412
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
413
- exactIn: false,
414
- ...init.additionalParams,
415
- pr: init.pr,
416
- maxFee: init.maxFee.toString(10),
417
- expiryTimestamp: init.expiryTimestamp.toString(10),
418
- token: init.token,
419
- offerer: init.offerer,
420
- feeRate: init.feeRate,
421
- amount: null
422
- }, {
423
- code: SchemaVerifier_1.FieldTypeEnum.Number,
424
- msg: SchemaVerifier_1.FieldTypeEnum.String,
425
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
426
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
427
- }, timeout, abortSignal, streamRequest);
428
- return {
429
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
430
- response: responseBodyPromise.then((responseBody) => Promise.all([
431
- responseBody.code,
432
- responseBody.msg,
433
- responseBody.data,
434
- ])).then(([code, msg, data]) => {
435
- if (code !== 20000) {
436
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
437
- }
438
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
439
- if (result == null)
440
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
441
- return result;
442
- })
443
- };
444
- }
445
- /**
446
- * Initiate To BTCLN exact in swap with an intermediary
447
- *
448
- * @param baseUrl Base URL of the intermediary
449
- * @param init Swap initialization parameters
450
- * @param timeout Timeout in milliseconds for the HTTP request
451
- * @param abortSignal
452
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
453
- *
454
- * @throws {RequestError} If non-200 http response code is returned
455
- */
456
- static async initToBTCLNExactIn(baseUrl, init, timeout, abortSignal, streamRequest) {
457
- const responseBody = await (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoiceExactIn", {
458
- ...init.additionalParams,
459
- pr: init.pr,
460
- reqId: init.reqId,
461
- feeRate: init.feeRate
462
- }, {
463
- code: SchemaVerifier_1.FieldTypeEnum.Number,
464
- msg: SchemaVerifier_1.FieldTypeEnum.String,
465
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
466
- }, timeout, abortSignal, streamRequest);
467
- const [code, msg, data] = await Promise.all([
468
- responseBody.code,
469
- responseBody.msg,
470
- responseBody.data,
471
- ]);
472
- if (code !== 20000)
473
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
474
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNResponseSchema);
475
- if (result == null)
476
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
477
- return result;
478
- }
479
- /**
480
- * Prepare To BTCLN exact in swap with an intermediary
481
- *
482
- * @param chainIdentifier
483
- * @param baseUrl Base URL of the intermediary
484
- * @param init Swap initialization parameters
485
- * @param timeout Timeout in milliseconds for the HTTP request
486
- * @param abortSignal
487
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
488
- *
489
- * @throws {RequestError} If non-200 http response code is returned
490
- */
491
- static prepareToBTCLNExactIn(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
492
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/tobtcln/payInvoice?chain=" + encodeURIComponent(chainIdentifier), {
493
- exactIn: true,
494
- ...init.additionalParams,
495
- pr: init.pr,
496
- maxFee: init.maxFee.toString(10),
497
- expiryTimestamp: init.expiryTimestamp.toString(10),
498
- token: init.token,
499
- offerer: init.offerer,
500
- amount: init.amount.toString(10)
501
- }, {
502
- code: SchemaVerifier_1.FieldTypeEnum.Number,
503
- msg: SchemaVerifier_1.FieldTypeEnum.String,
504
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional,
505
- signDataPrefetch: SchemaVerifier_1.FieldTypeEnum.AnyOptional
506
- }, timeout, abortSignal, streamRequest);
507
- return {
508
- signDataPrefetch: responseBodyPromise.then(responseBody => responseBody.signDataPrefetch),
509
- response: responseBodyPromise.then((responseBody) => Promise.all([
510
- responseBody.code,
511
- responseBody.msg,
512
- responseBody.data,
513
- ])).then(([code, msg, data]) => {
514
- if (code !== 20000) {
515
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
516
- }
517
- const result = (0, SchemaVerifier_1.verifySchema)(data, ToBTCLNPrepareExactInSchema);
518
- if (result == null)
519
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
520
- return result;
521
- })
522
- };
523
- }
524
- /**
525
- * Prepare From BTC swap via new spv vault swaps with an intermediary
526
- *
527
- * @param chainIdentifier
528
- * @param baseUrl Base URL of the intermediary
529
- * @param init Swap initialization parameters
530
- * @param timeout Timeout in milliseconds for the HTTP request
531
- * @param abortSignal
532
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
533
- *
534
- * @throws {RequestError} If non-200 http response code is returned
535
- */
536
- static prepareSpvFromBTC(chainIdentifier, baseUrl, init, timeout, abortSignal, streamRequest) {
537
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(baseUrl + "/frombtc_spv/getQuote?chain=" + encodeURIComponent(chainIdentifier), {
538
- exactOut: init.exactOut,
539
- ...init.additionalParams,
540
- address: init.address,
541
- amount: init.amount.toString(10),
542
- token: init.token,
543
- gasAmount: init.gasAmount.toString(10),
544
- gasToken: init.gasToken,
545
- frontingFeeRate: init.frontingFeeRate.toString(10),
546
- callerFeeRate: init.callerFeeRate.then(val => val.toString(10)),
547
- stickyAddress: init.stickyAddress
548
- }, {
549
- code: SchemaVerifier_1.FieldTypeEnum.Number,
550
- msg: SchemaVerifier_1.FieldTypeEnum.String,
551
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
552
- }, timeout, abortSignal, streamRequest);
553
- return responseBodyPromise.then((responseBody) => Promise.all([
554
- responseBody.code,
555
- responseBody.msg,
556
- responseBody.data,
557
- ])).then(([code, msg, data]) => {
558
- if (code !== 20000) {
559
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
560
- }
561
- const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCPrepareResponseSchema);
562
- if (result == null)
563
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
564
- return result;
565
- });
566
- }
567
- /**
568
- * Prepare From BTC swap via new spv vault swaps with an intermediary
569
- *
570
- * @param chainIdentifier
571
- * @param url
572
- * @param init Swap initialization parameters
573
- * @param timeout Timeout in milliseconds for the HTTP request
574
- * @param abortSignal
575
- * @param streamRequest Whether to force streaming (or not streaming) the request, default is autodetect
576
- *
577
- * @throws {RequestError} If non-200 http response code is returned
578
- */
579
- static initSpvFromBTC(chainIdentifier, url, init, timeout, abortSignal, streamRequest) {
580
- const responseBodyPromise = (0, StreamingFetchPromise_1.streamingFetchPromise)(url + "/postQuote?chain=" + encodeURIComponent(chainIdentifier), {
581
- quoteId: init.quoteId,
582
- psbtHex: init.psbtHex
583
- }, {
584
- code: SchemaVerifier_1.FieldTypeEnum.Number,
585
- msg: SchemaVerifier_1.FieldTypeEnum.String,
586
- data: SchemaVerifier_1.FieldTypeEnum.AnyOptional
587
- }, timeout, abortSignal, streamRequest);
588
- return responseBodyPromise.then((responseBody) => Promise.all([
589
- responseBody.code,
590
- responseBody.msg,
591
- responseBody.data,
592
- ])).then(([code, msg, data]) => {
593
- if (code !== 20000) {
594
- throw RequestError_1.RequestError.parse(JSON.stringify({ code, msg, data }), 400);
595
- }
596
- const result = (0, SchemaVerifier_1.verifySchema)(data, SpvFromBTCInitResponseSchema);
597
- if (result == null)
598
- throw new RequestError_1.RequestError("Cannot parse the response with the expected schema", 200);
599
- return result;
600
- });
601
- }
602
- }
603
- 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;