@atomiqlabs/sdk 7.0.12 → 8.0.7

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 (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,125 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import { ChainType, ClaimEvent, InitializeEvent, Messenger, RefundEvent } from "@atomiqlabs/base";
5
+ import { Intermediary } from "../../../../intermediaries/Intermediary";
6
+ import { Buffer } from "buffer";
7
+ import { SwapType } from "../../../../enums/SwapType";
8
+ import { LightningNetworkApi } from "../../../../bitcoin/LightningNetworkApi";
9
+ import { ISwapPrice } from "../../../../prices/abstract/ISwapPrice";
10
+ import { EventEmitter } from "events";
11
+ import { ISwapWrapperOptions, WrapperCtorTokens } from "../../../ISwapWrapper";
12
+ import { UnifiedSwapEventListener } from "../../../../events/UnifiedSwapEventListener";
13
+ import { UnifiedSwapStorage } from "../../../../storage/UnifiedSwapStorage";
14
+ import { ISwap } from "../../../ISwap";
15
+ import { FromBTCLNAutoSwap, FromBTCLNAutoSwapState } from "./FromBTCLNAutoSwap";
16
+ import { IFromBTCLNDefinition, IFromBTCLNWrapper } from "../IFromBTCLNWrapper";
17
+ import { IClaimableSwapWrapper } from "../../../IClaimableSwapWrapper";
18
+ import { AmountData } from "../../../../types/AmountData";
19
+ import { LNURLWithdrawParamsWithUrl } from "../../../../types/lnurl/LNURLWithdraw";
20
+ import { AllOptional } from "../../../../utils/TypeUtils";
21
+ export type FromBTCLNAutoOptions = {
22
+ descriptionHash?: Buffer;
23
+ unsafeSkipLnNodeCheck?: boolean;
24
+ gasAmount?: bigint;
25
+ unsafeZeroWatchtowerFee?: boolean;
26
+ feeSafetyFactor?: number;
27
+ };
28
+ export type FromBTCLNAutoWrapperOptions = ISwapWrapperOptions & {
29
+ safetyFactor: number;
30
+ bitcoinBlocktime: number;
31
+ unsafeSkipLnNodeCheck: boolean;
32
+ };
33
+ export type FromBTCLNAutoDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNAutoWrapper<T>, FromBTCLNAutoSwap<T>>;
34
+ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCLNWrapper<T, FromBTCLNAutoDefinition<T>, FromBTCLNAutoWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNAutoSwap<T>> {
35
+ readonly claimableSwapStates: FromBTCLNAutoSwapState[];
36
+ readonly TYPE = SwapType.FROM_BTCLN_AUTO;
37
+ readonly swapDeserializer: typeof FromBTCLNAutoSwap;
38
+ readonly messenger: Messenger;
39
+ /**
40
+ * @param chainIdentifier
41
+ * @param unifiedStorage Storage interface for the current environment
42
+ * @param unifiedChainEvents On-chain event listener
43
+ * @param chain
44
+ * @param contract Underlying contract handling the swaps
45
+ * @param prices Swap pricing handler
46
+ * @param tokens
47
+ * @param swapDataDeserializer Deserializer for SwapData
48
+ * @param lnApi
49
+ * @param messenger
50
+ * @param options
51
+ * @param events Instance to use for emitting events
52
+ */
53
+ constructor(chainIdentifier: string, unifiedStorage: UnifiedSwapStorage<T>, unifiedChainEvents: UnifiedSwapEventListener<T>, chain: T["ChainInterface"], contract: T["Contract"], prices: ISwapPrice, tokens: WrapperCtorTokens, swapDataDeserializer: new (data: any) => T["Data"], lnApi: LightningNetworkApi, messenger: Messenger, options?: AllOptional<FromBTCLNAutoWrapperOptions>, events?: EventEmitter<{
54
+ swapState: [ISwap];
55
+ }>);
56
+ readonly pendingSwapStates: FromBTCLNAutoSwapState[];
57
+ readonly tickSwapState: FromBTCLNAutoSwapState[];
58
+ protected processEventInitialize(swap: FromBTCLNAutoSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean>;
59
+ protected processEventClaim(swap: FromBTCLNAutoSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean>;
60
+ protected processEventRefund(swap: FromBTCLNAutoSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean>;
61
+ /**
62
+ * Pre-fetches claimer (watchtower) bounty data for the swap. Doesn't throw, instead returns null and aborts the
63
+ * provided abortController
64
+ *
65
+ * @param signer Smartchain signer address initiating the swap
66
+ * @param amountData
67
+ * @param options Options as passed to the swap creation function
68
+ * @param abortController
69
+ * @private
70
+ */
71
+ private preFetchClaimerBounty;
72
+ /**
73
+ * Verifies response returned from intermediary
74
+ *
75
+ * @param resp Response as returned by the intermediary
76
+ * @param amountData
77
+ * @param lp Intermediary
78
+ * @param options Options as passed to the swap creation function
79
+ * @param decodedPr Decoded bolt11 lightning network invoice
80
+ * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
81
+ * @param claimerBounty Claimer bounty as request by the user
82
+ * @private
83
+ * @throws {IntermediaryError} in case the response is invalid
84
+ */
85
+ private verifyReturnedData;
86
+ /**
87
+ * Returns a newly created swap, receiving 'amount' on lightning network
88
+ *
89
+ * @param signer Smart chain signer's address intiating the swap
90
+ * @param amountData Amount of token & amount to swap
91
+ * @param lps LPs (liquidity providers) to get the quotes from
92
+ * @param options Quote options
93
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
94
+ * @param abortSignal Abort signal for aborting the process
95
+ * @param preFetches
96
+ */
97
+ create(signer: string, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
98
+ pricePrefetchPromise?: Promise<bigint | undefined>;
99
+ usdPricePrefetchPromise?: Promise<number | undefined>;
100
+ gasTokenPricePrefetchPromise?: Promise<bigint | undefined>;
101
+ claimerBountyPrefetch?: Promise<bigint | undefined>;
102
+ }): {
103
+ quote: Promise<FromBTCLNAutoSwap<T>>;
104
+ intermediary: Intermediary;
105
+ }[];
106
+ /**
107
+ * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
108
+ *
109
+ * @param signer Smart chains signer's address intiating the swap
110
+ * @param lnurl LNURL-withdraw to withdraw funds from
111
+ * @param amountData Amount of token & amount to swap
112
+ * @param lps LPs (liquidity providers) to get the quotes from
113
+ * @param options
114
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
115
+ * @param abortSignal Abort signal for aborting the process
116
+ */
117
+ createViaLNURL(signer: string, lnurl: string | LNURLWithdrawParamsWithUrl, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
118
+ quote: Promise<FromBTCLNAutoSwap<T>>;
119
+ intermediary: Intermediary;
120
+ }[]>;
121
+ protected _checkPastSwaps(pastSwaps: FromBTCLNAutoSwap<T>[]): Promise<{
122
+ changedSwaps: FromBTCLNAutoSwap<T>[];
123
+ removeSwaps: FromBTCLNAutoSwap<T>[];
124
+ }>;
125
+ }
@@ -0,0 +1,393 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FromBTCLNAutoWrapper = void 0;
4
+ const bolt11_1 = require("@atomiqlabs/bolt11");
5
+ const base_1 = require("@atomiqlabs/base");
6
+ const buffer_1 = require("buffer");
7
+ const UserError_1 = require("../../../../errors/UserError");
8
+ const IntermediaryError_1 = require("../../../../errors/IntermediaryError");
9
+ const SwapType_1 = require("../../../../enums/SwapType");
10
+ const Utils_1 = require("../../../../utils/Utils");
11
+ const IntermediaryAPI_1 = require("../../../../intermediaries/apis/IntermediaryAPI");
12
+ const RequestError_1 = require("../../../../errors/RequestError");
13
+ const FromBTCLNAutoSwap_1 = require("./FromBTCLNAutoSwap");
14
+ const IFromBTCLNWrapper_1 = require("../IFromBTCLNWrapper");
15
+ const RetryUtils_1 = require("../../../../utils/RetryUtils");
16
+ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
17
+ /**
18
+ * @param chainIdentifier
19
+ * @param unifiedStorage Storage interface for the current environment
20
+ * @param unifiedChainEvents On-chain event listener
21
+ * @param chain
22
+ * @param contract Underlying contract handling the swaps
23
+ * @param prices Swap pricing handler
24
+ * @param tokens
25
+ * @param swapDataDeserializer Deserializer for SwapData
26
+ * @param lnApi
27
+ * @param messenger
28
+ * @param options
29
+ * @param events Instance to use for emitting events
30
+ */
31
+ constructor(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi, messenger, options, events) {
32
+ super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi, {
33
+ safetyFactor: options?.safetyFactor ?? 2,
34
+ bitcoinBlocktime: options?.bitcoinBlocktime ?? 10 * 60,
35
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? false
36
+ }, events);
37
+ this.claimableSwapStates = [FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED];
38
+ this.TYPE = SwapType_1.SwapType.FROM_BTCLN_AUTO;
39
+ this.swapDeserializer = FromBTCLNAutoSwap_1.FromBTCLNAutoSwap;
40
+ this.pendingSwapStates = [
41
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED,
42
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED,
43
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID,
44
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED,
45
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.EXPIRED
46
+ ];
47
+ this.tickSwapState = [
48
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED,
49
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED,
50
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID,
51
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED
52
+ ];
53
+ this.messenger = messenger;
54
+ }
55
+ async processEventInitialize(swap, event) {
56
+ if (swap.state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID || swap.state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED || swap.state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED) {
57
+ if (swap.data == null) {
58
+ //Obtain data from the initialize event
59
+ const eventData = await event.swapData();
60
+ if (eventData == null) {
61
+ this.logger.error("processEventInitialize(" + swap.getId() + "): Error when fetching swap data for swap, null returned!");
62
+ return false;
63
+ }
64
+ try {
65
+ await swap._saveRealSwapData(eventData, false);
66
+ this.logger.info("processEventInitialize(" + swap.getId() + "): Successfully taken swap data from on-chain event!");
67
+ }
68
+ catch (e) {
69
+ this.logger.error("processEventInitialize(" + swap.getId() + "): Error when saving swap data for swap: ", e);
70
+ return false;
71
+ }
72
+ }
73
+ if (swap._getEscrowHash() !== event.escrowHash) {
74
+ this.logger.error("processEventInitialize(" + swap.getId() + "): Error when processing event, escrow hashes don't match!");
75
+ return false;
76
+ }
77
+ swap.commitTxId = event.meta?.txId;
78
+ swap.state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED;
79
+ swap._broadcastSecret().catch(e => {
80
+ this.logger.error("processEventInitialize(" + swap.getId() + "): Error when broadcasting swap secret: ", e);
81
+ });
82
+ return true;
83
+ }
84
+ return false;
85
+ }
86
+ processEventClaim(swap, event) {
87
+ if (swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED && swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED) {
88
+ swap.claimTxId = event.meta?.txId;
89
+ swap.state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED;
90
+ return Promise.resolve(true);
91
+ }
92
+ return Promise.resolve(false);
93
+ }
94
+ processEventRefund(swap, event) {
95
+ if (swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED && swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED) {
96
+ swap.refundTxId ??= event.meta?.txId;
97
+ swap.state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED;
98
+ return Promise.resolve(true);
99
+ }
100
+ return Promise.resolve(false);
101
+ }
102
+ /**
103
+ * Pre-fetches claimer (watchtower) bounty data for the swap. Doesn't throw, instead returns null and aborts the
104
+ * provided abortController
105
+ *
106
+ * @param signer Smartchain signer address initiating the swap
107
+ * @param amountData
108
+ * @param options Options as passed to the swap creation function
109
+ * @param abortController
110
+ * @private
111
+ */
112
+ async preFetchClaimerBounty(signer, amountData, options, abortController) {
113
+ if (options.unsafeZeroWatchtowerFee)
114
+ return 0n;
115
+ const dummyAmount = BigInt(Math.floor(Math.random() * 0x1000000));
116
+ const dummySwapData = await this.contract.createSwapData(base_1.ChainSwapType.HTLC, this.chain.randomAddress(), signer, amountData.token, dummyAmount, this.contract.getHashForHtlc((0, Utils_1.randomBytes)(32)).toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, BigInt(Math.floor(Math.random() * 0x10000)), BigInt(Math.floor(Math.random() * 0x10000)));
117
+ try {
118
+ const result = await this.contract.getClaimFee(this.chain.randomAddress(), dummySwapData);
119
+ return result * BigInt(Math.floor(options.feeSafetyFactor * 1000000)) / 1000000n;
120
+ }
121
+ catch (e) {
122
+ abortController.abort(e);
123
+ }
124
+ }
125
+ /**
126
+ * Verifies response returned from intermediary
127
+ *
128
+ * @param resp Response as returned by the intermediary
129
+ * @param amountData
130
+ * @param lp Intermediary
131
+ * @param options Options as passed to the swap creation function
132
+ * @param decodedPr Decoded bolt11 lightning network invoice
133
+ * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
134
+ * @param claimerBounty Claimer bounty as request by the user
135
+ * @private
136
+ * @throws {IntermediaryError} in case the response is invalid
137
+ */
138
+ verifyReturnedData(resp, amountData, lp, options, decodedPr, paymentHash, claimerBounty) {
139
+ if (lp.getAddress(this.chainIdentifier) !== resp.intermediaryKey)
140
+ throw new IntermediaryError_1.IntermediaryError("Invalid intermediary address/pubkey");
141
+ if (options.descriptionHash != null && decodedPr.tagsObject.purpose_commit_hash !== options.descriptionHash.toString("hex"))
142
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - description hash");
143
+ if (decodedPr.tagsObject.payment_hash == null ||
144
+ !buffer_1.Buffer.from(decodedPr.tagsObject.payment_hash, "hex").equals(paymentHash))
145
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - payment hash");
146
+ if (decodedPr.millisatoshis == null)
147
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - msat field");
148
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
149
+ if (resp.btcAmountGas + resp.btcAmountSwap !== amountIn)
150
+ throw new IntermediaryError_1.IntermediaryError("Invalid total btc returned");
151
+ if (resp.gasSwapFeeBtc + resp.swapFeeBtc !== resp.totalFeeBtc)
152
+ throw new IntermediaryError_1.IntermediaryError("Invalid total btc fee returned");
153
+ if (resp.claimerBounty !== claimerBounty)
154
+ throw new IntermediaryError_1.IntermediaryError("Invalid claimer bounty");
155
+ if (resp.totalGas !== options.gasAmount)
156
+ throw new IntermediaryError_1.IntermediaryError("Invalid total gas amount");
157
+ if (!amountData.exactIn) {
158
+ if (resp.total != amountData.amount)
159
+ throw new IntermediaryError_1.IntermediaryError("Invalid amount returned");
160
+ }
161
+ else {
162
+ if (amountIn !== amountData.amount)
163
+ throw new IntermediaryError_1.IntermediaryError("Invalid payment request returned, amount mismatch");
164
+ }
165
+ }
166
+ /**
167
+ * Returns a newly created swap, receiving 'amount' on lightning network
168
+ *
169
+ * @param signer Smart chain signer's address intiating the swap
170
+ * @param amountData Amount of token & amount to swap
171
+ * @param lps LPs (liquidity providers) to get the quotes from
172
+ * @param options Quote options
173
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
174
+ * @param abortSignal Abort signal for aborting the process
175
+ * @param preFetches
176
+ */
177
+ create(signer, amountData, lps, options, additionalParams, abortSignal, preFetches) {
178
+ const _options = {
179
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this.options.unsafeSkipLnNodeCheck,
180
+ gasAmount: options?.gasAmount ?? 0n,
181
+ feeSafetyFactor: options?.feeSafetyFactor ?? 1.25,
182
+ unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false,
183
+ descriptionHash: options?.descriptionHash
184
+ };
185
+ if (preFetches == null)
186
+ preFetches = {};
187
+ if (_options.descriptionHash != null && _options.descriptionHash.length !== 32)
188
+ throw new UserError_1.UserError("Invalid description hash length");
189
+ const { secret, paymentHash } = this.getSecretAndHash();
190
+ const claimHash = this.contract.getHashForHtlc(paymentHash);
191
+ const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
192
+ const _abortController = (0, Utils_1.extendAbortController)(abortSignal);
193
+ const _preFetches = {
194
+ pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
195
+ usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
196
+ claimerBountyPrefetch: preFetches?.claimerBountyPrefetch ?? this.preFetchClaimerBounty(signer, amountData, _options, _abortController),
197
+ gasTokenPricePrefetchPromise: _options.gasAmount !== 0n || !_options.unsafeZeroWatchtowerFee ?
198
+ (preFetches.gasTokenPricePrefetchPromise ??= this.preFetchPrice({ token: nativeTokenAddress }, _abortController.signal)) :
199
+ undefined
200
+ };
201
+ return lps.map(lp => {
202
+ return {
203
+ intermediary: lp,
204
+ quote: (async () => {
205
+ if (lp.services[SwapType_1.SwapType.FROM_BTCLN_AUTO] == null)
206
+ throw new Error("LP service for processing from btcln auto swaps not found!");
207
+ const abortController = (0, Utils_1.extendAbortController)(_abortController.signal);
208
+ const liquidityPromise = this.preFetchIntermediaryLiquidity(amountData, lp, abortController);
209
+ const { lnCapacityPromise, resp } = await (0, RetryUtils_1.tryWithRetries)(async (retryCount) => {
210
+ const { lnPublicKey, response } = IntermediaryAPI_1.IntermediaryAPI.initFromBTCLNAuto(this.chainIdentifier, lp.url, {
211
+ paymentHash,
212
+ amount: amountData.amount,
213
+ claimer: signer,
214
+ token: amountData.token.toString(),
215
+ descriptionHash: _options.descriptionHash,
216
+ exactOut: !amountData.exactIn,
217
+ additionalParams,
218
+ gasToken: this.chain.getNativeCurrencyAddress(),
219
+ gasAmount: _options.gasAmount,
220
+ claimerBounty: (0, Utils_1.throwIfUndefined)(_preFetches.claimerBountyPrefetch)
221
+ }, this.options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
222
+ return {
223
+ lnCapacityPromise: _options.unsafeSkipLnNodeCheck ? undefined : this.preFetchLnCapacity(lnPublicKey),
224
+ resp: await response
225
+ };
226
+ }, undefined, RequestError_1.RequestError, abortController.signal);
227
+ const decodedPr = (0, bolt11_1.decode)(resp.pr);
228
+ if (decodedPr.millisatoshis == null)
229
+ throw new IntermediaryError_1.IntermediaryError("Invalid returned swap invoice, no msat amount field");
230
+ if (decodedPr.timeExpireDate == null)
231
+ throw new IntermediaryError_1.IntermediaryError("Invalid returned swap invoice, no expiry date field");
232
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
233
+ const claimerBounty = (await _preFetches.claimerBountyPrefetch);
234
+ try {
235
+ this.verifyReturnedData(resp, amountData, lp, _options, decodedPr, paymentHash, claimerBounty);
236
+ const [pricingInfo, gasPricingInfo] = await Promise.all([
237
+ this.verifyReturnedPrice(lp.services[SwapType_1.SwapType.FROM_BTCLN_AUTO], false, resp.btcAmountSwap, resp.total, amountData.token, {}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal),
238
+ _options.gasAmount === 0n ? Promise.resolve(undefined) : this.verifyReturnedPrice({ ...lp.services[SwapType_1.SwapType.FROM_BTCLN_AUTO], swapBaseFee: 0 }, //Base fee should be charged only on the amount, not on gas
239
+ false, resp.btcAmountGas, resp.totalGas + resp.claimerBounty, nativeTokenAddress, {}, _preFetches.gasTokenPricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal),
240
+ this.verifyIntermediaryLiquidity(resp.total, (0, Utils_1.throwIfUndefined)(liquidityPromise)),
241
+ _options.unsafeSkipLnNodeCheck ? Promise.resolve() : this.verifyLnNodeCapacity(lp, decodedPr, lnCapacityPromise, abortController.signal)
242
+ ]);
243
+ const swapInit = {
244
+ pricingInfo,
245
+ url: lp.url,
246
+ expiry: decodedPr.timeExpireDate * 1000,
247
+ swapFee: resp.swapFee,
248
+ gasSwapFee: resp.gasSwapFee,
249
+ swapFeeBtc: resp.swapFeeBtc,
250
+ gasSwapFeeBtc: resp.gasSwapFeeBtc,
251
+ btcAmountGas: resp.btcAmountGas,
252
+ btcAmountSwap: resp.btcAmountSwap,
253
+ gasPricingInfo,
254
+ initialSwapData: await this.contract.createSwapData(base_1.ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), signer, amountData.token, resp.total, claimHash.toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, _options.gasAmount + resp.claimerBounty, resp.claimerBounty, nativeTokenAddress),
255
+ pr: resp.pr,
256
+ secret: secret.toString("hex"),
257
+ exactIn: amountData.exactIn ?? true
258
+ };
259
+ const quote = new FromBTCLNAutoSwap_1.FromBTCLNAutoSwap(this, swapInit);
260
+ await quote._save();
261
+ this.logger.debug("create(): Created new FromBTCLNAutoSwap quote, claimHash (pseudo escrowHash): ", quote._getEscrowHash());
262
+ return quote;
263
+ }
264
+ catch (e) {
265
+ abortController.abort(e);
266
+ throw e;
267
+ }
268
+ })()
269
+ };
270
+ });
271
+ }
272
+ /**
273
+ * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
274
+ *
275
+ * @param signer Smart chains signer's address intiating the swap
276
+ * @param lnurl LNURL-withdraw to withdraw funds from
277
+ * @param amountData Amount of token & amount to swap
278
+ * @param lps LPs (liquidity providers) to get the quotes from
279
+ * @param options
280
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
281
+ * @param abortSignal Abort signal for aborting the process
282
+ */
283
+ async createViaLNURL(signer, lnurl, amountData, lps, options, additionalParams, abortSignal) {
284
+ const _options = {
285
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this.options.unsafeSkipLnNodeCheck,
286
+ gasAmount: options?.gasAmount ?? 0n,
287
+ feeSafetyFactor: options?.feeSafetyFactor ?? 1.25,
288
+ unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false,
289
+ descriptionHash: options?.descriptionHash
290
+ };
291
+ const abortController = (0, Utils_1.extendAbortController)(abortSignal);
292
+ const preFetches = {
293
+ pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
294
+ usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
295
+ gasTokenPricePrefetchPromise: _options.gasAmount !== 0n || !_options.unsafeZeroWatchtowerFee ?
296
+ this.preFetchPrice({ token: this.chain.getNativeCurrencyAddress() }, abortController.signal) :
297
+ undefined,
298
+ claimerBountyPrefetch: this.preFetchClaimerBounty(signer, amountData, _options, abortController)
299
+ };
300
+ try {
301
+ const exactOutAmountPromise = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price => this.prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)).catch(e => {
302
+ abortController.abort(e);
303
+ return undefined;
304
+ }) : undefined;
305
+ const withdrawRequest = await this.getLNURLWithdraw(lnurl, abortController.signal);
306
+ const min = BigInt(withdrawRequest.minWithdrawable) / 1000n;
307
+ const max = BigInt(withdrawRequest.maxWithdrawable) / 1000n;
308
+ if (amountData.exactIn) {
309
+ if (amountData.amount < min)
310
+ throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
311
+ if (amountData.amount > max)
312
+ throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
313
+ }
314
+ else {
315
+ const amount = (await exactOutAmountPromise);
316
+ abortController.signal.throwIfAborted();
317
+ if ((amount * 95n / 100n) < min)
318
+ throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
319
+ if ((amount * 105n / 100n) > max)
320
+ throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
321
+ }
322
+ return this.create(signer, amountData, lps, _options, additionalParams, abortSignal, preFetches).map(data => {
323
+ return {
324
+ quote: data.quote.then(quote => {
325
+ quote.lnurl = withdrawRequest.url;
326
+ quote.lnurlK1 = withdrawRequest.k1;
327
+ quote.lnurlCallback = withdrawRequest.callback;
328
+ const amountIn = quote.getInput().rawAmount;
329
+ if (amountIn < min)
330
+ throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
331
+ if (amountIn > max)
332
+ throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
333
+ return quote;
334
+ }),
335
+ intermediary: data.intermediary
336
+ };
337
+ });
338
+ }
339
+ catch (e) {
340
+ abortController.abort(e);
341
+ throw e;
342
+ }
343
+ }
344
+ async _checkPastSwaps(pastSwaps) {
345
+ const changedSwapSet = new Set();
346
+ const swapExpiredStatus = {};
347
+ const checkStatusSwaps = [];
348
+ await Promise.all(pastSwaps.map(async (pastSwap) => {
349
+ if (pastSwap._shouldCheckIntermediary()) {
350
+ try {
351
+ const result = await pastSwap._checkIntermediaryPaymentReceived(false);
352
+ if (result != null) {
353
+ changedSwapSet.add(pastSwap);
354
+ }
355
+ }
356
+ catch (e) {
357
+ this.logger.error(`_checkPastSwaps(): Failed to contact LP regarding swap ${pastSwap.getId()}, error: `, e);
358
+ }
359
+ }
360
+ if (pastSwap._shouldFetchExpiryStatus()) {
361
+ //Check expiry
362
+ swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
363
+ }
364
+ if (pastSwap._shouldFetchCommitStatus()) {
365
+ //Add to swaps for which status should be checked
366
+ if (pastSwap.data != null)
367
+ checkStatusSwaps.push(pastSwap);
368
+ }
369
+ }));
370
+ const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({ signer: val._getInitiator(), swapData: val.data })));
371
+ for (let pastSwap of checkStatusSwaps) {
372
+ const shouldSave = await pastSwap._sync(false, swapExpiredStatus[pastSwap.getId()], swapStatuses[pastSwap.getEscrowHash()], true);
373
+ if (shouldSave) {
374
+ changedSwapSet.add(pastSwap);
375
+ }
376
+ }
377
+ const changedSwaps = [];
378
+ const removeSwaps = [];
379
+ changedSwapSet.forEach(val => {
380
+ if (val.isQuoteExpired()) {
381
+ removeSwaps.push(val);
382
+ }
383
+ else {
384
+ changedSwaps.push(val);
385
+ }
386
+ });
387
+ return {
388
+ changedSwaps,
389
+ removeSwaps
390
+ };
391
+ }
392
+ }
393
+ exports.FromBTCLNAutoWrapper = FromBTCLNAutoWrapper;