@atomiqlabs/sdk 7.0.12 → 8.0.8

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,110 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import { FromBTCLNSwap, FromBTCLNSwapState } from "./FromBTCLNSwap";
5
+ import { ChainType, ClaimEvent, InitializeEvent, RefundEvent } from "@atomiqlabs/base";
6
+ import { Intermediary } from "../../../../intermediaries/Intermediary";
7
+ import { Buffer } from "buffer";
8
+ import { SwapType } from "../../../../enums/SwapType";
9
+ import { LightningNetworkApi } from "../../../../bitcoin/LightningNetworkApi";
10
+ import { ISwapPrice } from "../../../../prices/abstract/ISwapPrice";
11
+ import { EventEmitter } from "events";
12
+ import { ISwapWrapperOptions, WrapperCtorTokens } from "../../../ISwapWrapper";
13
+ import { UnifiedSwapEventListener } from "../../../../events/UnifiedSwapEventListener";
14
+ import { UnifiedSwapStorage } from "../../../../storage/UnifiedSwapStorage";
15
+ import { ISwap } from "../../../ISwap";
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 FromBTCLNOptions = {
22
+ descriptionHash?: Buffer;
23
+ unsafeSkipLnNodeCheck?: boolean;
24
+ };
25
+ export type FromBTCLNWrapperOptions = ISwapWrapperOptions & {
26
+ unsafeSkipLnNodeCheck: boolean;
27
+ safetyFactor: number;
28
+ bitcoinBlocktime: number;
29
+ };
30
+ export type FromBTCLNDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNWrapper<T>, FromBTCLNSwap<T>>;
31
+ /**
32
+ * Factory wrapper for creating Lightning BTC to Smart Chain swaps
33
+ * @category Swaps
34
+ */
35
+ export declare class FromBTCLNWrapper<T extends ChainType> extends IFromBTCLNWrapper<T, FromBTCLNDefinition<T>, FromBTCLNWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNSwap<T>> {
36
+ readonly claimableSwapStates: FromBTCLNSwapState[];
37
+ readonly TYPE = SwapType.FROM_BTCLN;
38
+ readonly swapDeserializer: typeof FromBTCLNSwap;
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 options
50
+ * @param events Instance to use for emitting events
51
+ */
52
+ 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, options?: AllOptional<FromBTCLNWrapperOptions>, events?: EventEmitter<{
53
+ swapState: [ISwap];
54
+ }>);
55
+ readonly pendingSwapStates: FromBTCLNSwapState[];
56
+ readonly tickSwapState: FromBTCLNSwapState[];
57
+ protected processEventInitialize(swap: FromBTCLNSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean>;
58
+ protected processEventClaim(swap: FromBTCLNSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean>;
59
+ protected processEventRefund(swap: FromBTCLNSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean>;
60
+ /**
61
+ * Verifies response returned from intermediary
62
+ *
63
+ * @param resp Response as returned by the intermediary
64
+ * @param amountData
65
+ * @param lp Intermediary
66
+ * @param options Options as passed to the swap creation function
67
+ * @param decodedPr Decoded bolt11 lightning network invoice
68
+ * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
69
+ * @private
70
+ * @throws {IntermediaryError} in case the response is invalid
71
+ */
72
+ private verifyReturnedData;
73
+ /**
74
+ * Returns a newly created swap, receiving 'amount' on lightning network
75
+ *
76
+ * @param signer Smart chain signer's address intiating the swap
77
+ * @param amountData Amount of token & amount to swap
78
+ * @param lps LPs (liquidity providers) to get the quotes from
79
+ * @param options Quote options
80
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
81
+ * @param abortSignal Abort signal for aborting the process
82
+ * @param preFetches
83
+ */
84
+ create(signer: string, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
85
+ usdPricePrefetchPromise: Promise<number | undefined>;
86
+ pricePrefetchPromise?: Promise<bigint | undefined>;
87
+ feeRatePromise?: Promise<string | undefined>;
88
+ }): {
89
+ quote: Promise<FromBTCLNSwap<T>>;
90
+ intermediary: Intermediary;
91
+ }[];
92
+ /**
93
+ * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
94
+ *
95
+ * @param signer Smart chains signer's address intiating the swap
96
+ * @param lnurl LNURL-withdraw to withdraw funds from
97
+ * @param amountData Amount of token & amount to swap
98
+ * @param lps LPs (liquidity providers) to get the quotes from
99
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
100
+ * @param abortSignal Abort signal for aborting the process
101
+ */
102
+ createViaLNURL(signer: string, lnurl: string | LNURLWithdrawParamsWithUrl, amountData: AmountData, lps: Intermediary[], additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
103
+ quote: Promise<FromBTCLNSwap<T>>;
104
+ intermediary: Intermediary;
105
+ }[]>;
106
+ protected _checkPastSwaps(pastSwaps: FromBTCLNSwap<T>[]): Promise<{
107
+ changedSwaps: FromBTCLNSwap<T>[];
108
+ removeSwaps: FromBTCLNSwap<T>[];
109
+ }>;
110
+ }
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FromBTCLNWrapper = void 0;
4
+ const FromBTCLNSwap_1 = require("./FromBTCLNSwap");
5
+ const bolt11_1 = require("@atomiqlabs/bolt11");
6
+ const base_1 = require("@atomiqlabs/base");
7
+ const buffer_1 = require("buffer");
8
+ const UserError_1 = require("../../../../errors/UserError");
9
+ const IntermediaryError_1 = require("../../../../errors/IntermediaryError");
10
+ const SwapType_1 = require("../../../../enums/SwapType");
11
+ const Utils_1 = require("../../../../utils/Utils");
12
+ const IntermediaryAPI_1 = require("../../../../intermediaries/apis/IntermediaryAPI");
13
+ const RequestError_1 = require("../../../../errors/RequestError");
14
+ const IFromBTCLNWrapper_1 = require("../IFromBTCLNWrapper");
15
+ const RetryUtils_1 = require("../../../../utils/RetryUtils");
16
+ /**
17
+ * Factory wrapper for creating Lightning BTC to Smart Chain swaps
18
+ * @category Swaps
19
+ */
20
+ class FromBTCLNWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
21
+ /**
22
+ * @param chainIdentifier
23
+ * @param unifiedStorage Storage interface for the current environment
24
+ * @param unifiedChainEvents On-chain event listener
25
+ * @param chain
26
+ * @param contract Underlying contract handling the swaps
27
+ * @param prices Swap pricing handler
28
+ * @param tokens
29
+ * @param swapDataDeserializer Deserializer for SwapData
30
+ * @param lnApi
31
+ * @param options
32
+ * @param events Instance to use for emitting events
33
+ */
34
+ constructor(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi, options, events) {
35
+ super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi, {
36
+ safetyFactor: options?.safetyFactor ?? 2,
37
+ bitcoinBlocktime: options?.bitcoinBlocktime ?? 10 * 60,
38
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? false
39
+ }, events);
40
+ this.claimableSwapStates = [FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_COMMITED];
41
+ this.TYPE = SwapType_1.SwapType.FROM_BTCLN;
42
+ this.swapDeserializer = FromBTCLNSwap_1.FromBTCLNSwap;
43
+ this.pendingSwapStates = [
44
+ FromBTCLNSwap_1.FromBTCLNSwapState.PR_CREATED,
45
+ FromBTCLNSwap_1.FromBTCLNSwapState.QUOTE_SOFT_EXPIRED,
46
+ FromBTCLNSwap_1.FromBTCLNSwapState.PR_PAID,
47
+ FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_COMMITED,
48
+ FromBTCLNSwap_1.FromBTCLNSwapState.EXPIRED
49
+ ];
50
+ this.tickSwapState = [
51
+ FromBTCLNSwap_1.FromBTCLNSwapState.PR_CREATED,
52
+ FromBTCLNSwap_1.FromBTCLNSwapState.PR_PAID,
53
+ FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_COMMITED
54
+ ];
55
+ }
56
+ processEventInitialize(swap, event) {
57
+ if (swap.state === FromBTCLNSwap_1.FromBTCLNSwapState.PR_PAID || swap.state === FromBTCLNSwap_1.FromBTCLNSwapState.QUOTE_SOFT_EXPIRED) {
58
+ swap.state = FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_COMMITED;
59
+ return Promise.resolve(true);
60
+ }
61
+ return Promise.resolve(false);
62
+ }
63
+ processEventClaim(swap, event) {
64
+ if (swap.state !== FromBTCLNSwap_1.FromBTCLNSwapState.FAILED && swap.state !== FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_CLAIMED) {
65
+ swap.state = FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_CLAIMED;
66
+ return Promise.resolve(true);
67
+ }
68
+ return Promise.resolve(false);
69
+ }
70
+ processEventRefund(swap, event) {
71
+ if (swap.state !== FromBTCLNSwap_1.FromBTCLNSwapState.CLAIM_CLAIMED && swap.state !== FromBTCLNSwap_1.FromBTCLNSwapState.FAILED) {
72
+ swap.state = FromBTCLNSwap_1.FromBTCLNSwapState.FAILED;
73
+ return Promise.resolve(true);
74
+ }
75
+ return Promise.resolve(false);
76
+ }
77
+ /**
78
+ * Verifies response returned from intermediary
79
+ *
80
+ * @param resp Response as returned by the intermediary
81
+ * @param amountData
82
+ * @param lp Intermediary
83
+ * @param options Options as passed to the swap creation function
84
+ * @param decodedPr Decoded bolt11 lightning network invoice
85
+ * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
86
+ * @private
87
+ * @throws {IntermediaryError} in case the response is invalid
88
+ */
89
+ verifyReturnedData(resp, amountData, lp, options, decodedPr, paymentHash) {
90
+ if (lp.getAddress(this.chainIdentifier) !== resp.intermediaryKey)
91
+ throw new IntermediaryError_1.IntermediaryError("Invalid intermediary address/pubkey");
92
+ if (options.descriptionHash != null && decodedPr.tagsObject.purpose_commit_hash !== options.descriptionHash.toString("hex"))
93
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - description hash");
94
+ if (decodedPr.tagsObject.payment_hash == null ||
95
+ !buffer_1.Buffer.from(decodedPr.tagsObject.payment_hash, "hex").equals(paymentHash))
96
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - payment hash");
97
+ if (decodedPr.millisatoshis == null)
98
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - msat field");
99
+ if (!amountData.exactIn) {
100
+ if (resp.total != amountData.amount)
101
+ throw new IntermediaryError_1.IntermediaryError("Invalid amount returned");
102
+ }
103
+ else {
104
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
105
+ if (amountIn !== amountData.amount)
106
+ throw new IntermediaryError_1.IntermediaryError("Invalid payment request returned, amount mismatch");
107
+ }
108
+ }
109
+ /**
110
+ * Returns a newly created swap, receiving 'amount' on lightning network
111
+ *
112
+ * @param signer Smart chain signer's address intiating the swap
113
+ * @param amountData Amount of token & amount to swap
114
+ * @param lps LPs (liquidity providers) to get the quotes from
115
+ * @param options Quote options
116
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
117
+ * @param abortSignal Abort signal for aborting the process
118
+ * @param preFetches
119
+ */
120
+ create(signer, amountData, lps, options, additionalParams, abortSignal, preFetches) {
121
+ if (options == null)
122
+ options = {};
123
+ options.unsafeSkipLnNodeCheck ??= this.options.unsafeSkipLnNodeCheck;
124
+ if (options.descriptionHash != null && options.descriptionHash.length !== 32)
125
+ throw new UserError_1.UserError("Invalid description hash length");
126
+ const { secret, paymentHash } = this.getSecretAndHash();
127
+ const claimHash = this.contract.getHashForHtlc(paymentHash);
128
+ const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
129
+ const _abortController = (0, Utils_1.extendAbortController)(abortSignal);
130
+ const _preFetches = {
131
+ pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
132
+ feeRatePromise: preFetches?.feeRatePromise ?? this.preFetchFeeRate(signer, amountData, claimHash.toString("hex"), _abortController),
133
+ usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
134
+ };
135
+ return lps.map(lp => {
136
+ return {
137
+ intermediary: lp,
138
+ quote: (async () => {
139
+ if (lp.services[SwapType_1.SwapType.FROM_BTCLN] == null)
140
+ throw new Error("LP service for processing from btcln swaps not found!");
141
+ const abortController = (0, Utils_1.extendAbortController)(_abortController.signal);
142
+ const liquidityPromise = this.preFetchIntermediaryLiquidity(amountData, lp, abortController);
143
+ const { lnCapacityPromise, resp } = await (0, RetryUtils_1.tryWithRetries)(async (retryCount) => {
144
+ const { lnPublicKey, response } = IntermediaryAPI_1.IntermediaryAPI.initFromBTCLN(this.chainIdentifier, lp.url, nativeTokenAddress, {
145
+ paymentHash,
146
+ amount: amountData.amount,
147
+ claimer: signer,
148
+ token: amountData.token.toString(),
149
+ descriptionHash: options?.descriptionHash,
150
+ exactOut: !amountData.exactIn,
151
+ feeRate: (0, Utils_1.throwIfUndefined)(_preFetches.feeRatePromise),
152
+ additionalParams
153
+ }, this.options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
154
+ return {
155
+ lnCapacityPromise: options?.unsafeSkipLnNodeCheck ? null : this.preFetchLnCapacity(lnPublicKey),
156
+ resp: await response
157
+ };
158
+ }, undefined, RequestError_1.RequestError, abortController.signal);
159
+ const decodedPr = (0, bolt11_1.decode)(resp.pr);
160
+ if (decodedPr.millisatoshis == null)
161
+ throw new IntermediaryError_1.IntermediaryError("Invalid returned swap invoice, no msat amount field");
162
+ if (decodedPr.timeExpireDate == null)
163
+ throw new IntermediaryError_1.IntermediaryError("Invalid returned swap invoice, no expiry date field");
164
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
165
+ try {
166
+ this.verifyReturnedData(resp, amountData, lp, options ?? {}, decodedPr, paymentHash);
167
+ const [pricingInfo] = await Promise.all([
168
+ this.verifyReturnedPrice(lp.services[SwapType_1.SwapType.FROM_BTCLN], false, amountIn, resp.total, amountData.token, {}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal),
169
+ this.verifyIntermediaryLiquidity(resp.total, (0, Utils_1.throwIfUndefined)(liquidityPromise)),
170
+ lnCapacityPromise != null ? this.verifyLnNodeCapacity(lp, decodedPr, lnCapacityPromise, abortController.signal) : Promise.resolve()
171
+ ]);
172
+ const quote = new FromBTCLNSwap_1.FromBTCLNSwap(this, {
173
+ pricingInfo,
174
+ url: lp.url,
175
+ expiry: decodedPr.timeExpireDate * 1000,
176
+ swapFee: resp.swapFee,
177
+ swapFeeBtc: resp.swapFee * amountIn / (resp.total - resp.swapFee),
178
+ feeRate: (await _preFetches.feeRatePromise),
179
+ 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, resp.securityDeposit, 0n, nativeTokenAddress),
180
+ pr: resp.pr,
181
+ secret: secret.toString("hex"),
182
+ exactIn: amountData.exactIn ?? true
183
+ });
184
+ await quote._save();
185
+ return quote;
186
+ }
187
+ catch (e) {
188
+ abortController.abort(e);
189
+ throw e;
190
+ }
191
+ })()
192
+ };
193
+ });
194
+ }
195
+ /**
196
+ * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
197
+ *
198
+ * @param signer Smart chains signer's address intiating the swap
199
+ * @param lnurl LNURL-withdraw to withdraw funds from
200
+ * @param amountData Amount of token & amount to swap
201
+ * @param lps LPs (liquidity providers) to get the quotes from
202
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
203
+ * @param abortSignal Abort signal for aborting the process
204
+ */
205
+ async createViaLNURL(signer, lnurl, amountData, lps, additionalParams, abortSignal) {
206
+ if (!this.isInitialized)
207
+ throw new Error("Not initialized, call init() first!");
208
+ const abortController = (0, Utils_1.extendAbortController)(abortSignal);
209
+ const preFetches = {
210
+ pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
211
+ usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
212
+ feeRatePromise: this.preFetchFeeRate(signer, amountData, undefined, abortController)
213
+ };
214
+ try {
215
+ const exactOutAmountPromise = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price => this.prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)).catch(e => {
216
+ abortController.abort(e);
217
+ return undefined;
218
+ }) : undefined;
219
+ const withdrawRequest = await this.getLNURLWithdraw(lnurl, abortController.signal);
220
+ const min = BigInt(withdrawRequest.minWithdrawable) / 1000n;
221
+ const max = BigInt(withdrawRequest.maxWithdrawable) / 1000n;
222
+ if (amountData.exactIn) {
223
+ if (amountData.amount < min)
224
+ throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
225
+ if (amountData.amount > max)
226
+ throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
227
+ }
228
+ else {
229
+ const amount = (await exactOutAmountPromise);
230
+ abortController.signal.throwIfAborted();
231
+ if ((amount * 95n / 100n) < min)
232
+ throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
233
+ if ((amount * 105n / 100n) > max)
234
+ throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
235
+ }
236
+ return this.create(signer, amountData, lps, undefined, additionalParams, abortSignal, preFetches).map(data => {
237
+ return {
238
+ quote: data.quote.then(quote => {
239
+ quote.lnurl = withdrawRequest.url;
240
+ quote.lnurlK1 = withdrawRequest.k1;
241
+ quote.lnurlCallback = withdrawRequest.callback;
242
+ const amountIn = quote.getInput().rawAmount;
243
+ if (amountIn < min)
244
+ throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
245
+ if (amountIn > max)
246
+ throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
247
+ return quote;
248
+ }),
249
+ intermediary: data.intermediary
250
+ };
251
+ });
252
+ }
253
+ catch (e) {
254
+ abortController.abort(e);
255
+ throw e;
256
+ }
257
+ }
258
+ async _checkPastSwaps(pastSwaps) {
259
+ const changedSwapSet = new Set();
260
+ const swapExpiredStatus = {};
261
+ const checkStatusSwaps = [];
262
+ await Promise.all(pastSwaps.map(async (pastSwap) => {
263
+ if (pastSwap._shouldCheckIntermediary()) {
264
+ try {
265
+ const result = await pastSwap._checkIntermediaryPaymentReceived(false);
266
+ if (result != null) {
267
+ changedSwapSet.add(pastSwap);
268
+ }
269
+ }
270
+ catch (e) {
271
+ this.logger.error(`_checkPastSwaps(): Failed to contact LP regarding swap ${pastSwap.getId()}, error: `, e);
272
+ }
273
+ }
274
+ if (pastSwap._shouldFetchExpiryStatus()) {
275
+ //Check expiry
276
+ swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
277
+ }
278
+ if (pastSwap._shouldFetchCommitStatus()) {
279
+ //Add to swaps for which status should be checked
280
+ if (pastSwap.data != null)
281
+ checkStatusSwaps.push(pastSwap);
282
+ }
283
+ }));
284
+ const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({ signer: val._getInitiator(), swapData: val.data })));
285
+ for (let pastSwap of checkStatusSwaps) {
286
+ const shouldSave = await pastSwap._sync(false, swapExpiredStatus[pastSwap.getId()], swapStatuses[pastSwap.getEscrowHash()], true);
287
+ if (shouldSave) {
288
+ changedSwapSet.add(pastSwap);
289
+ }
290
+ }
291
+ const changedSwaps = [];
292
+ const removeSwaps = [];
293
+ changedSwapSet.forEach(val => {
294
+ if (val.isQuoteExpired()) {
295
+ removeSwaps.push(val);
296
+ }
297
+ else {
298
+ changedSwaps.push(val);
299
+ }
300
+ });
301
+ return {
302
+ changedSwaps,
303
+ removeSwaps
304
+ };
305
+ }
306
+ }
307
+ exports.FromBTCLNWrapper = FromBTCLNWrapper;
@@ -0,0 +1,236 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { SwapType } from "../../../../enums/SwapType";
4
+ import { ChainType, SwapCommitState, SwapData } from "@atomiqlabs/base";
5
+ import { Buffer } from "buffer";
6
+ import { Fee } from "../../../../types/fees/Fee";
7
+ import { IAddressSwap } from "../../../IAddressSwap";
8
+ import { FromBTCLNAutoDefinition, FromBTCLNAutoWrapper } from "./FromBTCLNAutoWrapper";
9
+ import { ISwapWithGasDrop } from "../../../ISwapWithGasDrop";
10
+ import { MinimalLightningNetworkWalletInterface } from "../../../../bitcoin/wallet/MinimalLightningNetworkWalletInterface";
11
+ import { IClaimableSwap } from "../../../IClaimableSwap";
12
+ import { IEscrowSwap, IEscrowSwapInit } from "../../IEscrowSwap";
13
+ import { FeeType } from "../../../../enums/FeeType";
14
+ import { TokenAmount } from "../../../../types/TokenAmount";
15
+ import { BtcToken, SCToken } from "../../../../types/Token";
16
+ import { LoggerType } from "../../../../utils/Logger";
17
+ import { LNURLWithdraw } from "../../../../types/lnurl/LNURLWithdraw";
18
+ import { PriceInfoType } from "../../../../types/PriceInfoType";
19
+ /**
20
+ * State enum for FromBTCLNAuto swaps
21
+ * @category Swaps
22
+ */
23
+ export declare enum FromBTCLNAutoSwapState {
24
+ FAILED = -4,
25
+ QUOTE_EXPIRED = -3,
26
+ QUOTE_SOFT_EXPIRED = -2,
27
+ EXPIRED = -1,
28
+ PR_CREATED = 0,
29
+ PR_PAID = 1,
30
+ CLAIM_COMMITED = 2,
31
+ CLAIM_CLAIMED = 3
32
+ }
33
+ export type FromBTCLNAutoSwapInit<T extends SwapData> = IEscrowSwapInit<T> & {
34
+ pr: string;
35
+ secret: string;
36
+ initialSwapData: T;
37
+ btcAmountSwap: bigint;
38
+ btcAmountGas: bigint;
39
+ gasSwapFeeBtc: bigint;
40
+ gasSwapFee: bigint;
41
+ gasPricingInfo?: PriceInfoType;
42
+ lnurl?: string;
43
+ lnurlK1?: string;
44
+ lnurlCallback?: string;
45
+ };
46
+ export declare function isFromBTCLNAutoSwapInit<T extends SwapData>(obj: any): obj is FromBTCLNAutoSwapInit<T>;
47
+ export declare class FromBTCLNAutoSwap<T extends ChainType = ChainType> extends IEscrowSwap<T, FromBTCLNAutoDefinition<T>> implements IAddressSwap, ISwapWithGasDrop<T>, IClaimableSwap<T, FromBTCLNAutoDefinition<T>, FromBTCLNAutoSwapState> {
48
+ protected readonly logger: LoggerType;
49
+ protected readonly inputToken: BtcToken<true>;
50
+ protected readonly TYPE = SwapType.FROM_BTCLN_AUTO;
51
+ protected readonly lnurlFailSignal: AbortController;
52
+ protected readonly pr: string;
53
+ protected readonly secret: string;
54
+ protected initialSwapData: T["Data"];
55
+ protected readonly btcAmountSwap: bigint;
56
+ protected readonly btcAmountGas: bigint;
57
+ protected readonly gasSwapFeeBtc: bigint;
58
+ protected readonly gasSwapFee: bigint;
59
+ gasPricingInfo?: PriceInfoType;
60
+ lnurl?: string;
61
+ lnurlK1?: string;
62
+ lnurlCallback?: string;
63
+ prPosted?: boolean;
64
+ protected getSwapData(): T["Data"];
65
+ constructor(wrapper: FromBTCLNAutoWrapper<T>, init: FromBTCLNAutoSwapInit<T["Data"]>);
66
+ constructor(wrapper: FromBTCLNAutoWrapper<T>, obj: any);
67
+ protected upgradeVersion(): void;
68
+ /**
69
+ * In case swapFee in BTC is not supplied it recalculates it based on swap price
70
+ * @protected
71
+ */
72
+ protected tryRecomputeSwapPrice(): void;
73
+ refreshPriceData(): Promise<void>;
74
+ _getEscrowHash(): string | null;
75
+ _getInitiator(): string;
76
+ getId(): string;
77
+ getOutputAddress(): string | null;
78
+ getOutputTxId(): string | null;
79
+ requiresAction(): boolean;
80
+ protected getIdentifierHashString(): string;
81
+ protected getPaymentHash(): Buffer;
82
+ getInputAddress(): string | null;
83
+ getInputTxId(): string;
84
+ /**
85
+ * Returns the lightning network BOLT11 invoice that needs to be paid as an input to the swap
86
+ */
87
+ getAddress(): string;
88
+ getHyperlink(): string;
89
+ /**
90
+ * Returns the timeout time (in UNIX milliseconds) when the swap will definitelly be considered as expired
91
+ * if the LP doesn't make it expired sooner
92
+ */
93
+ getDefinitiveExpiryTime(): number;
94
+ /**
95
+ * Returns timeout time (in UNIX milliseconds) when the swap htlc will expire
96
+ */
97
+ getHtlcTimeoutTime(): number | null;
98
+ isFinished(): boolean;
99
+ isClaimable(): boolean;
100
+ isSuccessful(): boolean;
101
+ isFailed(): boolean;
102
+ isQuoteExpired(): boolean;
103
+ isQuoteSoftExpired(): boolean;
104
+ _verifyQuoteDefinitelyExpired(): Promise<boolean>;
105
+ verifyQuoteValid(): Promise<boolean>;
106
+ protected getLightningInvoiceSats(): bigint;
107
+ protected getWatchtowerFeeAmountBtc(): bigint;
108
+ protected getInputSwapAmountWithoutFee(): bigint;
109
+ protected getInputGasAmountWithoutFee(): bigint;
110
+ protected getInputAmountWithoutFee(): bigint;
111
+ protected getOutputAmountWithoutFee(): bigint;
112
+ getInputToken(): BtcToken<true>;
113
+ getInput(): TokenAmount<T["ChainId"], BtcToken<true>>;
114
+ getInputWithoutFee(): TokenAmount;
115
+ getOutputToken(): SCToken<T["ChainId"]>;
116
+ getOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
117
+ getGasDropOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
118
+ protected getSwapFee(): Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
119
+ protected getWatchtowerFee(): Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
120
+ getFee(): Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
121
+ getFeeBreakdown(): [
122
+ {
123
+ type: FeeType.SWAP;
124
+ fee: Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
125
+ },
126
+ {
127
+ type: FeeType.NETWORK_OUTPUT;
128
+ fee: Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
129
+ }
130
+ ];
131
+ /**
132
+ * Executes the swap with the provided bitcoin lightning network wallet or LNURL
133
+ *
134
+ * @param walletOrLnurlWithdraw Bitcoin lightning wallet to use to pay the lightning network invoice, or an LNURL-withdraw
135
+ * link, wallet is not required and the LN invoice can be paid externally as well (just pass null or undefined here)
136
+ * @param callbacks Callbacks to track the progress of the swap
137
+ * @param options Optional options for the swap like feeRate, AbortSignal, and timeouts/intervals
138
+ *
139
+ * @returns {boolean} Whether a swap was settled automatically by swap watchtowers or requires manual claim by the
140
+ * user, in case `false` is returned the user should call `swap.claim()` to settle the swap on the destination manually
141
+ */
142
+ execute(walletOrLnurlWithdraw?: MinimalLightningNetworkWalletInterface | LNURLWithdraw | string | null | undefined, callbacks?: {
143
+ onSourceTransactionReceived?: (sourceTxId: string) => void;
144
+ onSwapSettled?: (destinationTxId: string) => void;
145
+ }, options?: {
146
+ abortSignal?: AbortSignal;
147
+ lightningTxCheckIntervalSeconds?: number;
148
+ maxWaitTillAutomaticSettlementSeconds?: number;
149
+ }): Promise<boolean>;
150
+ txsExecute(): Promise<{
151
+ name: "Payment";
152
+ description: string;
153
+ chain: string;
154
+ txs: {
155
+ address: string;
156
+ hyperlink: string;
157
+ }[];
158
+ }[]>;
159
+ /**
160
+ * Checks whether the LP received the LN payment and we can continue by committing & claiming the HTLC on-chain
161
+ *
162
+ * @param save If the new swap state should be saved
163
+ */
164
+ _checkIntermediaryPaymentReceived(save?: boolean): Promise<boolean | null>;
165
+ _saveRealSwapData(data: T["Data"], save?: boolean): Promise<boolean>;
166
+ /**
167
+ * Checks the data returned by the intermediary in the payment auth request
168
+ *
169
+ * @param data Parsed swap data as returned by the intermediary
170
+ * @protected
171
+ * @throws {IntermediaryError} If the returned are not valid
172
+ * @throws {Error} If the swap is already committed on-chain
173
+ */
174
+ protected checkIntermediaryReturnedData(data: T["Data"]): Promise<void>;
175
+ /**
176
+ * Waits till an LN payment is received by the intermediary and client can continue commiting & claiming the HTLC
177
+ *
178
+ * @param onPaymentReceived Callback as for when the LP reports having received the ln payment
179
+ * @param checkIntervalSeconds How often to poll the intermediary for answer (default 5 seconds)
180
+ * @param abortSignal Abort signal to stop waiting for payment
181
+ */
182
+ waitForPayment(onPaymentReceived?: (txId: string) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
183
+ protected waitTillCommited(checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<void>;
184
+ /**
185
+ * Returns transactions required for claiming the HTLC and finishing the swap by revealing the HTLC secret
186
+ * (hash preimage)
187
+ *
188
+ * @param _signer Optional signer address to use for claiming the swap, can also be different from the initializer
189
+ * @throws {Error} If in invalid state (must be CLAIM_COMMITED)
190
+ */
191
+ txsClaim(_signer?: T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
192
+ /**
193
+ * Claims and finishes the swap
194
+ *
195
+ * @param _signer Signer to sign the transactions with, can also be different to the initializer
196
+ * @param abortSignal Abort signal to stop waiting for transaction confirmation
197
+ */
198
+ claim(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal): Promise<string>;
199
+ /**
200
+ * Waits till the swap is successfully claimed
201
+ *
202
+ * @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled
203
+ * @param abortSignal AbortSignal
204
+ * @throws {Error} If swap is in invalid state (must be BTC_TX_CONFIRMED)
205
+ * @throws {Error} If the LP refunded sooner than we were able to claim
206
+ * @returns {boolean} whether the swap was claimed in time or not
207
+ */
208
+ waitTillClaimed(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
209
+ /**
210
+ * Is this an LNURL-withdraw swap?
211
+ */
212
+ isLNURL(): boolean;
213
+ /**
214
+ * Gets the used LNURL or null if this is not an LNURL-withdraw swap
215
+ */
216
+ getLNURL(): string | null;
217
+ /**
218
+ * Pay the generated lightning network invoice with LNURL-withdraw
219
+ */
220
+ settleWithLNURLWithdraw(lnurl: string | LNURLWithdraw): Promise<void>;
221
+ serialize(): any;
222
+ /**
223
+ * Checks the swap's state on-chain and compares it to its internal state, updates/changes it according to on-chain
224
+ * data
225
+ *
226
+ * @private
227
+ */
228
+ private syncStateFromChain;
229
+ _shouldFetchCommitStatus(): boolean;
230
+ _shouldFetchExpiryStatus(): boolean;
231
+ _shouldCheckIntermediary(): boolean;
232
+ _sync(save?: boolean, quoteDefinitelyExpired?: boolean, commitStatus?: SwapCommitState, skipLpCheck?: boolean): Promise<boolean>;
233
+ private broadcastTickCounter;
234
+ _broadcastSecret(noCheckExpiry?: boolean): Promise<void>;
235
+ _tick(save?: boolean): Promise<boolean>;
236
+ }