@atomiqlabs/sdk 7.0.11 → 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} +40 -22
  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} +116 -75
  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,429 @@
1
+ import {FromBTCLNSwap, FromBTCLNSwapInit, FromBTCLNSwapState} from "./FromBTCLNSwap";
2
+ import {decode as bolt11Decode, PaymentRequestObject, TagsObject} from "@atomiqlabs/bolt11";
3
+ import {
4
+ ChainSwapType,
5
+ ChainType,
6
+ ClaimEvent,
7
+ InitializeEvent,
8
+ RefundEvent
9
+ } from "@atomiqlabs/base";
10
+ import {Intermediary} from "../../../../intermediaries/Intermediary";
11
+ import {Buffer} from "buffer";
12
+ import {UserError} from "../../../../errors/UserError";
13
+ import {IntermediaryError} from "../../../../errors/IntermediaryError";
14
+ import {SwapType} from "../../../../enums/SwapType";
15
+ import {
16
+ extendAbortController,
17
+ throwIfUndefined
18
+ } from "../../../../utils/Utils";
19
+ import {FromBTCLNResponseType, IntermediaryAPI} from "../../../../intermediaries/apis/IntermediaryAPI";
20
+ import {RequestError} from "../../../../errors/RequestError";
21
+ import {LightningNetworkApi} from "../../../../bitcoin/LightningNetworkApi";
22
+ import {ISwapPrice} from "../../../../prices/abstract/ISwapPrice";
23
+ import {EventEmitter} from "events";
24
+ import {ISwapWrapperOptions, WrapperCtorTokens} from "../../../ISwapWrapper";
25
+ import {UnifiedSwapEventListener} from "../../../../events/UnifiedSwapEventListener";
26
+ import {UnifiedSwapStorage} from "../../../../storage/UnifiedSwapStorage";
27
+ import {ISwap} from "../../../ISwap";
28
+ import {IFromBTCLNDefinition, IFromBTCLNWrapper} from "../IFromBTCLNWrapper";
29
+ import {IClaimableSwapWrapper} from "../../../IClaimableSwapWrapper";
30
+ import {AmountData} from "../../../../types/AmountData";
31
+ import {LNURLWithdrawParamsWithUrl} from "../../../../types/lnurl/LNURLWithdraw";
32
+ import {tryWithRetries} from "../../../../utils/RetryUtils";
33
+ import {AllOptional, AllRequired} from "../../../../utils/TypeUtils";
34
+
35
+ export type FromBTCLNOptions = {
36
+ descriptionHash?: Buffer,
37
+ unsafeSkipLnNodeCheck?: boolean
38
+ };
39
+
40
+ export type FromBTCLNWrapperOptions = ISwapWrapperOptions & {
41
+ unsafeSkipLnNodeCheck: boolean,
42
+ safetyFactor: number,
43
+ bitcoinBlocktime: number
44
+ };
45
+
46
+ export type FromBTCLNDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNWrapper<T>, FromBTCLNSwap<T>>;
47
+
48
+ /**
49
+ * Factory wrapper for creating Lightning BTC to Smart Chain swaps
50
+ * @category Swaps
51
+ */
52
+ export class FromBTCLNWrapper<
53
+ T extends ChainType
54
+ > extends IFromBTCLNWrapper<T, FromBTCLNDefinition<T>, FromBTCLNWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNSwap<T>> {
55
+
56
+ public readonly claimableSwapStates = [FromBTCLNSwapState.CLAIM_COMMITED];
57
+ public readonly TYPE = SwapType.FROM_BTCLN;
58
+ public readonly swapDeserializer = FromBTCLNSwap;
59
+
60
+ /**
61
+ * @param chainIdentifier
62
+ * @param unifiedStorage Storage interface for the current environment
63
+ * @param unifiedChainEvents On-chain event listener
64
+ * @param chain
65
+ * @param contract Underlying contract handling the swaps
66
+ * @param prices Swap pricing handler
67
+ * @param tokens
68
+ * @param swapDataDeserializer Deserializer for SwapData
69
+ * @param lnApi
70
+ * @param options
71
+ * @param events Instance to use for emitting events
72
+ */
73
+ constructor(
74
+ chainIdentifier: string,
75
+ unifiedStorage: UnifiedSwapStorage<T>,
76
+ unifiedChainEvents: UnifiedSwapEventListener<T>,
77
+ chain: T["ChainInterface"],
78
+ contract: T["Contract"],
79
+ prices: ISwapPrice,
80
+ tokens: WrapperCtorTokens,
81
+ swapDataDeserializer: new (data: any) => T["Data"],
82
+ lnApi: LightningNetworkApi,
83
+ options?: AllOptional<FromBTCLNWrapperOptions>,
84
+ events?: EventEmitter<{swapState: [ISwap]}>
85
+ ) {
86
+ super(
87
+ chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi,
88
+ {
89
+ safetyFactor: options?.safetyFactor ?? 2,
90
+ bitcoinBlocktime: options?.bitcoinBlocktime ?? 10*60,
91
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? false
92
+ },
93
+ events
94
+ );
95
+ }
96
+
97
+ public readonly pendingSwapStates = [
98
+ FromBTCLNSwapState.PR_CREATED,
99
+ FromBTCLNSwapState.QUOTE_SOFT_EXPIRED,
100
+ FromBTCLNSwapState.PR_PAID,
101
+ FromBTCLNSwapState.CLAIM_COMMITED,
102
+ FromBTCLNSwapState.EXPIRED
103
+ ];
104
+ public readonly tickSwapState = [
105
+ FromBTCLNSwapState.PR_CREATED,
106
+ FromBTCLNSwapState.PR_PAID,
107
+ FromBTCLNSwapState.CLAIM_COMMITED
108
+ ];
109
+
110
+ protected processEventInitialize(swap: FromBTCLNSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean> {
111
+ if(swap.state===FromBTCLNSwapState.PR_PAID || swap.state===FromBTCLNSwapState.QUOTE_SOFT_EXPIRED) {
112
+ swap.state = FromBTCLNSwapState.CLAIM_COMMITED;
113
+ return Promise.resolve(true);
114
+ }
115
+ return Promise.resolve(false);
116
+ }
117
+
118
+ protected processEventClaim(swap: FromBTCLNSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean> {
119
+ if(swap.state!==FromBTCLNSwapState.FAILED && swap.state!==FromBTCLNSwapState.CLAIM_CLAIMED) {
120
+ swap.state = FromBTCLNSwapState.CLAIM_CLAIMED;
121
+ return Promise.resolve(true);
122
+ }
123
+ return Promise.resolve(false);
124
+ }
125
+
126
+ protected processEventRefund(swap: FromBTCLNSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean> {
127
+ if(swap.state!==FromBTCLNSwapState.CLAIM_CLAIMED && swap.state!==FromBTCLNSwapState.FAILED) {
128
+ swap.state = FromBTCLNSwapState.FAILED;
129
+ return Promise.resolve(true);
130
+ }
131
+ return Promise.resolve(false);
132
+ }
133
+
134
+ /**
135
+ * Verifies response returned from intermediary
136
+ *
137
+ * @param resp Response as returned by the intermediary
138
+ * @param amountData
139
+ * @param lp Intermediary
140
+ * @param options Options as passed to the swap creation function
141
+ * @param decodedPr Decoded bolt11 lightning network invoice
142
+ * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
143
+ * @private
144
+ * @throws {IntermediaryError} in case the response is invalid
145
+ */
146
+ private verifyReturnedData(
147
+ resp: FromBTCLNResponseType,
148
+ amountData: AmountData,
149
+ lp: Intermediary,
150
+ options: FromBTCLNOptions,
151
+ decodedPr: PaymentRequestObject & {tagsObject: TagsObject},
152
+ paymentHash: Buffer
153
+ ): void {
154
+ if(lp.getAddress(this.chainIdentifier)!==resp.intermediaryKey) throw new IntermediaryError("Invalid intermediary address/pubkey");
155
+
156
+ if(options.descriptionHash!=null && decodedPr.tagsObject.purpose_commit_hash!==options.descriptionHash.toString("hex"))
157
+ throw new IntermediaryError("Invalid pr returned - description hash");
158
+
159
+ if(
160
+ decodedPr.tagsObject.payment_hash==null ||
161
+ !Buffer.from(decodedPr.tagsObject.payment_hash, "hex").equals(paymentHash)
162
+ ) throw new IntermediaryError("Invalid pr returned - payment hash");
163
+
164
+ if(decodedPr.millisatoshis==null) throw new IntermediaryError("Invalid pr returned - msat field");
165
+
166
+ if(!amountData.exactIn) {
167
+ if(resp.total != amountData.amount) throw new IntermediaryError("Invalid amount returned");
168
+ } else {
169
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
170
+ if(amountIn !== amountData.amount) throw new IntermediaryError("Invalid payment request returned, amount mismatch");
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Returns a newly created swap, receiving 'amount' on lightning network
176
+ *
177
+ * @param signer Smart chain signer's address intiating the swap
178
+ * @param amountData Amount of token & amount to swap
179
+ * @param lps LPs (liquidity providers) to get the quotes from
180
+ * @param options Quote options
181
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
182
+ * @param abortSignal Abort signal for aborting the process
183
+ * @param preFetches
184
+ */
185
+ create(
186
+ signer: string,
187
+ amountData: AmountData,
188
+ lps: Intermediary[],
189
+ options?: FromBTCLNOptions,
190
+ additionalParams?: Record<string, any>,
191
+ abortSignal?: AbortSignal,
192
+ preFetches?: {
193
+ usdPricePrefetchPromise: Promise<number | undefined>,
194
+ pricePrefetchPromise?: Promise<bigint | undefined>,
195
+ feeRatePromise?: Promise<string | undefined>
196
+ }
197
+ ): {
198
+ quote: Promise<FromBTCLNSwap<T>>,
199
+ intermediary: Intermediary
200
+ }[] {
201
+ if(options==null) options = {};
202
+ options.unsafeSkipLnNodeCheck ??= this.options.unsafeSkipLnNodeCheck;
203
+
204
+ if(options.descriptionHash!=null && options.descriptionHash.length!==32)
205
+ throw new UserError("Invalid description hash length");
206
+
207
+ const {secret, paymentHash} = this.getSecretAndHash();
208
+ const claimHash = this.contract.getHashForHtlc(paymentHash);
209
+
210
+ const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
211
+
212
+ const _abortController = extendAbortController(abortSignal);
213
+ const _preFetches = {
214
+ pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
215
+ feeRatePromise: preFetches?.feeRatePromise ?? this.preFetchFeeRate(signer, amountData, claimHash.toString("hex"), _abortController),
216
+ usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
217
+ }
218
+
219
+ return lps.map(lp => {
220
+ return {
221
+ intermediary: lp,
222
+ quote: (async () => {
223
+ if(lp.services[SwapType.FROM_BTCLN]==null) throw new Error("LP service for processing from btcln swaps not found!");
224
+
225
+ const abortController = extendAbortController(_abortController.signal);
226
+
227
+ const liquidityPromise: Promise<bigint | undefined> = this.preFetchIntermediaryLiquidity(amountData, lp, abortController);
228
+
229
+ const {lnCapacityPromise, resp} = await tryWithRetries(async(retryCount: number) => {
230
+ const {lnPublicKey, response} = IntermediaryAPI.initFromBTCLN(
231
+ this.chainIdentifier, lp.url, nativeTokenAddress,
232
+ {
233
+ paymentHash,
234
+ amount: amountData.amount,
235
+ claimer: signer,
236
+ token: amountData.token.toString(),
237
+ descriptionHash: options?.descriptionHash,
238
+ exactOut: !amountData.exactIn,
239
+ feeRate: throwIfUndefined(_preFetches.feeRatePromise),
240
+ additionalParams
241
+ },
242
+ this.options.postRequestTimeout, abortController.signal, retryCount>0 ? false : undefined
243
+ );
244
+
245
+ return {
246
+ lnCapacityPromise: options?.unsafeSkipLnNodeCheck ? null : this.preFetchLnCapacity(lnPublicKey),
247
+ resp: await response
248
+ };
249
+ }, undefined, RequestError, abortController.signal);
250
+
251
+ const decodedPr = bolt11Decode(resp.pr);
252
+ if(decodedPr.millisatoshis==null) throw new IntermediaryError("Invalid returned swap invoice, no msat amount field");
253
+ if(decodedPr.timeExpireDate==null) throw new IntermediaryError("Invalid returned swap invoice, no expiry date field");
254
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
255
+
256
+ try {
257
+ this.verifyReturnedData(resp, amountData, lp, options ?? {}, decodedPr, paymentHash);
258
+ const [pricingInfo] = await Promise.all([
259
+ this.verifyReturnedPrice(
260
+ lp.services[SwapType.FROM_BTCLN], false, amountIn, resp.total,
261
+ amountData.token, {}, _preFetches.pricePrefetchPromise, _preFetches.usdPricePrefetchPromise, abortController.signal
262
+ ),
263
+ this.verifyIntermediaryLiquidity(resp.total, throwIfUndefined(liquidityPromise)),
264
+ lnCapacityPromise!=null ? this.verifyLnNodeCapacity(lp, decodedPr, lnCapacityPromise, abortController.signal) : Promise.resolve()
265
+ ]);
266
+
267
+ const quote = new FromBTCLNSwap<T>(this, {
268
+ pricingInfo,
269
+ url: lp.url,
270
+ expiry: decodedPr.timeExpireDate*1000,
271
+ swapFee: resp.swapFee,
272
+ swapFeeBtc: resp.swapFee * amountIn / (resp.total - resp.swapFee),
273
+ feeRate: (await _preFetches.feeRatePromise)!,
274
+ initialSwapData: await this.contract.createSwapData(
275
+ ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), signer, amountData.token,
276
+ resp.total, claimHash.toString("hex"),
277
+ this.getRandomSequence(), BigInt(Math.floor(Date.now()/1000)), false, true,
278
+ resp.securityDeposit, 0n, nativeTokenAddress
279
+ ),
280
+ pr: resp.pr,
281
+ secret: secret.toString("hex"),
282
+ exactIn: amountData.exactIn ?? true
283
+ } as FromBTCLNSwapInit<T["Data"]>);
284
+ await quote._save();
285
+ return quote;
286
+ } catch (e) {
287
+ abortController.abort(e);
288
+ throw e;
289
+ }
290
+ })()
291
+ }
292
+ });
293
+ }
294
+
295
+ /**
296
+ * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
297
+ *
298
+ * @param signer Smart chains signer's address intiating the swap
299
+ * @param lnurl LNURL-withdraw to withdraw funds from
300
+ * @param amountData Amount of token & amount to swap
301
+ * @param lps LPs (liquidity providers) to get the quotes from
302
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
303
+ * @param abortSignal Abort signal for aborting the process
304
+ */
305
+ async createViaLNURL(
306
+ signer: string,
307
+ lnurl: string | LNURLWithdrawParamsWithUrl,
308
+ amountData: AmountData,
309
+ lps: Intermediary[],
310
+ additionalParams?: Record<string, any>,
311
+ abortSignal?: AbortSignal
312
+ ): Promise<{
313
+ quote: Promise<FromBTCLNSwap<T>>,
314
+ intermediary: Intermediary
315
+ }[]> {
316
+ if(!this.isInitialized) throw new Error("Not initialized, call init() first!");
317
+
318
+ const abortController = extendAbortController(abortSignal);
319
+ const preFetches = {
320
+ pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
321
+ usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
322
+ feeRatePromise: this.preFetchFeeRate(signer, amountData, undefined, abortController)
323
+ };
324
+
325
+ try {
326
+ const exactOutAmountPromise: Promise<bigint | undefined> | undefined = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price =>
327
+ this.prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)
328
+ ).catch(e => {
329
+ abortController.abort(e);
330
+ return undefined;
331
+ }) : undefined;
332
+
333
+ const withdrawRequest = await this.getLNURLWithdraw(lnurl, abortController.signal);
334
+
335
+ const min = BigInt(withdrawRequest.minWithdrawable) / 1000n;
336
+ const max = BigInt(withdrawRequest.maxWithdrawable) / 1000n;
337
+
338
+ if(amountData.exactIn) {
339
+ if(amountData.amount < min) throw new UserError("Amount less than LNURL-withdraw minimum");
340
+ if(amountData.amount > max) throw new UserError("Amount more than LNURL-withdraw maximum");
341
+ } else {
342
+ const amount = (await exactOutAmountPromise)!;
343
+ abortController.signal.throwIfAborted();
344
+
345
+ if((amount * 95n / 100n) < min) throw new UserError("Amount less than LNURL-withdraw minimum");
346
+ if((amount * 105n / 100n) > max) throw new UserError("Amount more than LNURL-withdraw maximum");
347
+ }
348
+
349
+ return this.create(signer, amountData, lps, undefined, additionalParams, abortSignal, preFetches).map(data => {
350
+ return {
351
+ quote: data.quote.then(quote => {
352
+ quote.lnurl = withdrawRequest.url;
353
+ quote.lnurlK1 = withdrawRequest.k1;
354
+ quote.lnurlCallback = withdrawRequest.callback;
355
+
356
+ const amountIn = quote.getInput().rawAmount;
357
+ if(amountIn < min) throw new UserError("Amount less than LNURL-withdraw minimum");
358
+ if(amountIn > max) throw new UserError("Amount more than LNURL-withdraw maximum");
359
+
360
+ return quote;
361
+ }),
362
+ intermediary: data.intermediary
363
+ }
364
+ });
365
+ } catch (e) {
366
+ abortController.abort(e);
367
+ throw e;
368
+ }
369
+ }
370
+
371
+ protected async _checkPastSwaps(pastSwaps: FromBTCLNSwap<T>[]): Promise<{
372
+ changedSwaps: FromBTCLNSwap<T>[];
373
+ removeSwaps: FromBTCLNSwap<T>[]
374
+ }> {
375
+ const changedSwapSet: Set<FromBTCLNSwap<T>> = new Set();
376
+
377
+ const swapExpiredStatus: {[id: string]: boolean} = {};
378
+ const checkStatusSwaps: (FromBTCLNSwap<T> & {data: T["Data"]})[] = [];
379
+
380
+ await Promise.all(pastSwaps.map(async (pastSwap) => {
381
+ if(pastSwap._shouldCheckIntermediary()) {
382
+ try {
383
+ const result = await pastSwap._checkIntermediaryPaymentReceived(false);
384
+ if(result!=null) {
385
+ changedSwapSet.add(pastSwap);
386
+ }
387
+ } catch (e) {
388
+ this.logger.error(`_checkPastSwaps(): Failed to contact LP regarding swap ${pastSwap.getId()}, error: `, e);
389
+ }
390
+ }
391
+ if(pastSwap._shouldFetchExpiryStatus()) {
392
+ //Check expiry
393
+ swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
394
+ }
395
+ if(pastSwap._shouldFetchCommitStatus()) {
396
+ //Add to swaps for which status should be checked
397
+ if(pastSwap.data!=null) checkStatusSwaps.push(pastSwap as (FromBTCLNSwap<T> & {data: T["Data"]}));
398
+ }
399
+ }));
400
+
401
+ const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({signer: val._getInitiator(), swapData: val.data})));
402
+
403
+ for(let pastSwap of checkStatusSwaps) {
404
+ const shouldSave = await pastSwap._sync(
405
+ false, swapExpiredStatus[pastSwap.getId()],
406
+ swapStatuses[pastSwap.getEscrowHash()!], true
407
+ );
408
+ if(shouldSave) {
409
+ changedSwapSet.add(pastSwap);
410
+ }
411
+ }
412
+
413
+ const changedSwaps: FromBTCLNSwap<T>[] = [];
414
+ const removeSwaps: FromBTCLNSwap<T>[] = [];
415
+ changedSwapSet.forEach(val => {
416
+ if(val.isQuoteExpired()) {
417
+ removeSwaps.push(val);
418
+ } else {
419
+ changedSwaps.push(val);
420
+ }
421
+ });
422
+
423
+ return {
424
+ changedSwaps,
425
+ removeSwaps
426
+ };
427
+ }
428
+
429
+ }