@atomiqlabs/sdk 7.0.12 → 8.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSwapWithGasDrop = void 0;
4
+ /**
5
+ * Type guard to check if a swap has gas drop functionality
6
+ * @category Swaps
7
+ */
8
+ function isSwapWithGasDrop(swap) {
9
+ return swap != null && typeof (swap.getGasDropOutput) === "function";
10
+ }
11
+ exports.isSwapWithGasDrop = isSwapWithGasDrop;
@@ -0,0 +1,153 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { ChainEvent, ChainType } from "@atomiqlabs/base";
4
+ import { EventEmitter } from "events";
5
+ import { ISwap } from "./ISwap";
6
+ import { ISwapPrice } from "../prices/abstract/ISwapPrice";
7
+ import { ChainIds, MultiChain } from "../swapper/Swapper";
8
+ import { UnifiedSwapEventListener } from "../events/UnifiedSwapEventListener";
9
+ import { SwapType } from "../enums/SwapType";
10
+ import { UnifiedSwapStorage } from "../storage/UnifiedSwapStorage";
11
+ import { SCToken } from "../types/Token";
12
+ import { PriceInfoType } from "../types/PriceInfoType";
13
+ /**
14
+ * Options for swap wrapper configuration
15
+ * @category Swaps
16
+ */
17
+ export type ISwapWrapperOptions = {
18
+ getRequestTimeout?: number;
19
+ postRequestTimeout?: number;
20
+ };
21
+ /**
22
+ * Token configuration for wrapper constructors
23
+ * @category Swaps
24
+ */
25
+ export type WrapperCtorTokens<T extends MultiChain = MultiChain> = {
26
+ ticker: string;
27
+ name: string;
28
+ chains: {
29
+ [chainId in ChainIds<T>]?: {
30
+ address: string;
31
+ decimals: number;
32
+ displayDecimals?: number;
33
+ };
34
+ };
35
+ }[];
36
+ /**
37
+ * Type definition linking wrapper and swap types
38
+ * @category Swaps
39
+ */
40
+ export type SwapTypeDefinition<T extends ChainType, W extends ISwapWrapper<T, any>, S extends ISwap<T>> = {
41
+ Wrapper: W;
42
+ Swap: S;
43
+ };
44
+ /**
45
+ * Base abstract class for swap wrapper implementations
46
+ * @category Swaps
47
+ */
48
+ export declare abstract class ISwapWrapper<T extends ChainType, D extends SwapTypeDefinition<T, ISwapWrapper<T, D>, ISwap<T, D>>, O extends ISwapWrapperOptions = ISwapWrapperOptions> {
49
+ abstract readonly TYPE: SwapType;
50
+ protected readonly logger: import("../utils/Logger").LoggerType;
51
+ abstract readonly swapDeserializer: new (wrapper: D["Wrapper"], data: any) => D["Swap"];
52
+ readonly unifiedStorage: UnifiedSwapStorage<T>;
53
+ readonly unifiedChainEvents: UnifiedSwapEventListener<T>;
54
+ readonly chainIdentifier: T["ChainId"];
55
+ readonly chain: T["ChainInterface"];
56
+ readonly prices: ISwapPrice;
57
+ readonly events: EventEmitter<{
58
+ swapState: [D["Swap"]];
59
+ }>;
60
+ readonly options: O;
61
+ readonly tokens: {
62
+ [tokenAddress: string]: SCToken<T["ChainId"]>;
63
+ };
64
+ readonly pendingSwaps: Map<string, WeakRef<D["Swap"]>>;
65
+ isInitialized: boolean;
66
+ tickInterval?: NodeJS.Timeout;
67
+ /**
68
+ * @param chainIdentifier
69
+ * @param unifiedStorage
70
+ * @param unifiedChainEvents
71
+ * @param chain
72
+ * @param prices Swap pricing handler
73
+ * @param tokens Chain specific token data
74
+ * @param options
75
+ * @param events Instance to use for emitting events
76
+ */
77
+ constructor(chainIdentifier: T["ChainId"], unifiedStorage: UnifiedSwapStorage<T>, unifiedChainEvents: UnifiedSwapEventListener<T>, chain: T["ChainInterface"], prices: ISwapPrice, tokens: WrapperCtorTokens, options: O, events?: EventEmitter<{
78
+ swapState: [ISwap];
79
+ }>);
80
+ /**
81
+ * Pre-fetches swap price for a given swap
82
+ *
83
+ * @param amountData
84
+ * @param abortSignal
85
+ * @protected
86
+ * @returns Price of the token in uSats (micro sats)
87
+ */
88
+ protected preFetchPrice(amountData: {
89
+ token: string;
90
+ }, abortSignal?: AbortSignal): Promise<bigint | undefined>;
91
+ /**
92
+ * Pre-fetches bitcoin's USD price
93
+ *
94
+ * @param abortSignal
95
+ * @protected
96
+ */
97
+ protected preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number | undefined>;
98
+ /**
99
+ * Verifies returned price for swaps
100
+ *
101
+ * @param lpServiceData Service data for the service in question (TO_BTCLN, TO_BTC, etc.) of the given intermediary
102
+ * @param send Whether this is a send (SOL -> SC) or receive (BTC -> SC) swap
103
+ * @param amountSats Amount in BTC
104
+ * @param amountToken Amount in token
105
+ * @param token Token used in the swap
106
+ * @param feeData Fee data as returned by the intermediary
107
+ * @param pricePrefetchPromise Price pre-fetch promise
108
+ * @param usdPricePrefetchPromise
109
+ * @param abortSignal
110
+ * @protected
111
+ * @returns Price info object
112
+ * @throws {IntermediaryError} if the calculated fee is too high
113
+ */
114
+ protected verifyReturnedPrice(lpServiceData: {
115
+ swapBaseFee: number;
116
+ swapFeePPM: number;
117
+ }, send: boolean, amountSats: bigint, amountToken: bigint, token: string, feeData: {
118
+ networkFee?: bigint;
119
+ }, pricePrefetchPromise?: Promise<bigint | undefined>, usdPricePrefetchPromise?: Promise<number | undefined>, abortSignal?: AbortSignal): Promise<PriceInfoType>;
120
+ abstract readonly pendingSwapStates: Array<D["Swap"]["state"]>;
121
+ abstract readonly tickSwapState?: Array<D["Swap"]["state"]>;
122
+ /**
123
+ * Processes a single SC on-chain event
124
+ * @private
125
+ * @param event
126
+ * @param swap
127
+ */
128
+ protected abstract processEvent?(event: ChainEvent<T["Data"]>, swap: D["Swap"]): Promise<void>;
129
+ /**
130
+ * Initializes the swap wrapper, needs to be called before any other action can be taken
131
+ */
132
+ init(noTimers?: boolean, noCheckPastSwaps?: boolean): Promise<void>;
133
+ protected startTickInterval(): void;
134
+ protected _checkPastSwaps(pastSwaps: D["Swap"][]): Promise<{
135
+ changedSwaps: D["Swap"][];
136
+ removeSwaps: D["Swap"][];
137
+ }>;
138
+ checkPastSwaps(pastSwaps?: D["Swap"][], noSave?: boolean): Promise<{
139
+ removeSwaps: D["Swap"][];
140
+ changedSwaps: D["Swap"][];
141
+ }>;
142
+ tick(swaps?: D["Swap"][]): Promise<void>;
143
+ saveSwapData(swap: D["Swap"]): Promise<void>;
144
+ removeSwapData(swap: D["Swap"]): Promise<void>;
145
+ /**
146
+ * Un-subscribes from event listeners on Solana
147
+ */
148
+ stop(): Promise<void>;
149
+ /**
150
+ * Returns the smart chain's native token used to pay for fees
151
+ */
152
+ getNativeToken(): SCToken<T["ChainId"]>;
153
+ }
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ISwapWrapper = void 0;
4
+ const events_1 = require("events");
5
+ const IntermediaryError_1 = require("../errors/IntermediaryError");
6
+ const Logger_1 = require("../utils/Logger");
7
+ /**
8
+ * Base abstract class for swap wrapper implementations
9
+ * @category Swaps
10
+ */
11
+ class ISwapWrapper {
12
+ /**
13
+ * @param chainIdentifier
14
+ * @param unifiedStorage
15
+ * @param unifiedChainEvents
16
+ * @param chain
17
+ * @param prices Swap pricing handler
18
+ * @param tokens Chain specific token data
19
+ * @param options
20
+ * @param events Instance to use for emitting events
21
+ */
22
+ constructor(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, prices, tokens, options, events) {
23
+ this.logger = (0, Logger_1.getLogger)(this.constructor.name + ": ");
24
+ this.pendingSwaps = new Map();
25
+ this.isInitialized = false;
26
+ this.unifiedStorage = unifiedStorage;
27
+ this.unifiedChainEvents = unifiedChainEvents;
28
+ this.chainIdentifier = chainIdentifier;
29
+ this.chain = chain;
30
+ this.prices = prices;
31
+ this.events = events || new events_1.EventEmitter();
32
+ this.options = options;
33
+ this.tokens = {};
34
+ for (let tokenData of tokens) {
35
+ const chainData = tokenData.chains[chainIdentifier];
36
+ if (chainData == null)
37
+ continue;
38
+ this.tokens[chainData.address] = {
39
+ chain: "SC",
40
+ chainId: this.chainIdentifier,
41
+ address: chainData.address,
42
+ decimals: chainData.decimals,
43
+ ticker: tokenData.ticker,
44
+ name: tokenData.name,
45
+ displayDecimals: chainData.displayDecimals
46
+ };
47
+ }
48
+ }
49
+ /**
50
+ * Pre-fetches swap price for a given swap
51
+ *
52
+ * @param amountData
53
+ * @param abortSignal
54
+ * @protected
55
+ * @returns Price of the token in uSats (micro sats)
56
+ */
57
+ preFetchPrice(amountData, abortSignal) {
58
+ return this.prices.preFetchPrice(this.chainIdentifier, amountData.token, abortSignal).catch(e => {
59
+ this.logger.error("preFetchPrice.token(): Error: ", e);
60
+ return undefined;
61
+ });
62
+ }
63
+ /**
64
+ * Pre-fetches bitcoin's USD price
65
+ *
66
+ * @param abortSignal
67
+ * @protected
68
+ */
69
+ preFetchUsdPrice(abortSignal) {
70
+ return this.prices.preFetchUsdPrice(abortSignal).catch(e => {
71
+ this.logger.error("preFetchPrice.usd(): Error: ", e);
72
+ return undefined;
73
+ });
74
+ }
75
+ /**
76
+ * Verifies returned price for swaps
77
+ *
78
+ * @param lpServiceData Service data for the service in question (TO_BTCLN, TO_BTC, etc.) of the given intermediary
79
+ * @param send Whether this is a send (SOL -> SC) or receive (BTC -> SC) swap
80
+ * @param amountSats Amount in BTC
81
+ * @param amountToken Amount in token
82
+ * @param token Token used in the swap
83
+ * @param feeData Fee data as returned by the intermediary
84
+ * @param pricePrefetchPromise Price pre-fetch promise
85
+ * @param usdPricePrefetchPromise
86
+ * @param abortSignal
87
+ * @protected
88
+ * @returns Price info object
89
+ * @throws {IntermediaryError} if the calculated fee is too high
90
+ */
91
+ async verifyReturnedPrice(lpServiceData, send, amountSats, amountToken, token, feeData, pricePrefetchPromise = Promise.resolve(undefined), usdPricePrefetchPromise = Promise.resolve(undefined), abortSignal) {
92
+ const swapBaseFee = BigInt(lpServiceData.swapBaseFee);
93
+ const swapFeePPM = BigInt(lpServiceData.swapFeePPM);
94
+ if (send && feeData.networkFee != null)
95
+ amountToken = amountToken - feeData.networkFee;
96
+ const [isValidAmount, usdPrice] = await Promise.all([
97
+ send ?
98
+ this.prices.isValidAmountSend(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise) :
99
+ this.prices.isValidAmountReceive(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise),
100
+ usdPricePrefetchPromise.then(value => {
101
+ if (value != null)
102
+ return value;
103
+ return this.prices.preFetchUsdPrice(abortSignal);
104
+ })
105
+ ]);
106
+ if (!isValidAmount.isValid)
107
+ throw new IntermediaryError_1.IntermediaryError("Fee too high");
108
+ isValidAmount.realPriceUsdPerBitcoin = usdPrice;
109
+ return isValidAmount;
110
+ }
111
+ /**
112
+ * Initializes the swap wrapper, needs to be called before any other action can be taken
113
+ */
114
+ async init(noTimers = false, noCheckPastSwaps = false) {
115
+ if (this.isInitialized)
116
+ return;
117
+ if (!noCheckPastSwaps) {
118
+ //Save events received in the meantime into the event queue and process them only after we've checked and
119
+ // processed all the past swaps
120
+ let eventQueue = [];
121
+ const initListener = (event, swap) => {
122
+ eventQueue.push({ event, swap });
123
+ return Promise.resolve();
124
+ };
125
+ if (this.processEvent != null)
126
+ this.unifiedChainEvents.registerListener(this.TYPE, initListener, this.swapDeserializer.bind(null, this));
127
+ await this.checkPastSwaps();
128
+ if (this.processEvent != null) {
129
+ //Process accumulated event queue
130
+ for (let event of eventQueue) {
131
+ await this.processEvent(event.event, event.swap);
132
+ }
133
+ //Unregister the temporary event handler
134
+ this.unifiedChainEvents.unregisterListener(this.TYPE);
135
+ }
136
+ }
137
+ if (this.processEvent != null)
138
+ this.unifiedChainEvents.registerListener(this.TYPE, this.processEvent.bind(this), this.swapDeserializer.bind(null, this));
139
+ if (!noTimers)
140
+ this.startTickInterval();
141
+ // this.logger.info("init(): Swap wrapper initialized");
142
+ this.isInitialized = true;
143
+ }
144
+ startTickInterval() {
145
+ if (this.tickSwapState == null || this.tickSwapState.length === 0)
146
+ return;
147
+ this.tickInterval = setInterval(() => {
148
+ this.tick();
149
+ }, 1000);
150
+ }
151
+ async _checkPastSwaps(pastSwaps) {
152
+ const changedSwaps = [];
153
+ const removeSwaps = [];
154
+ await Promise.all(pastSwaps.map((swap) => swap._sync(false).then(changed => {
155
+ if (swap.isQuoteExpired()) {
156
+ removeSwaps.push(swap);
157
+ this.logger.debug("_checkPastSwaps(): Removing expired swap: " + swap.getId());
158
+ }
159
+ else {
160
+ if (changed)
161
+ changedSwaps.push(swap);
162
+ }
163
+ }).catch(e => this.logger.error("_checkPastSwaps(): Error when checking swap " + swap.getId() + ": ", e))));
164
+ return { changedSwaps, removeSwaps };
165
+ }
166
+ async checkPastSwaps(pastSwaps, noSave) {
167
+ if (pastSwaps == null)
168
+ pastSwaps = await this.unifiedStorage.query([[{ key: "type", value: this.TYPE }, { key: "state", value: this.pendingSwapStates }]], (val) => new this.swapDeserializer(this, val));
169
+ const { removeSwaps, changedSwaps } = await this._checkPastSwaps(pastSwaps);
170
+ if (!noSave) {
171
+ await this.unifiedStorage.removeAll(removeSwaps);
172
+ await this.unifiedStorage.saveAll(changedSwaps);
173
+ changedSwaps.forEach(swap => swap._emitEvent());
174
+ removeSwaps.forEach(swap => swap._emitEvent());
175
+ }
176
+ return {
177
+ removeSwaps,
178
+ changedSwaps
179
+ };
180
+ }
181
+ async tick(swaps) {
182
+ if (swaps == null)
183
+ swaps = await this.unifiedStorage.query([[{ key: "type", value: this.TYPE }, { key: "state", value: this.tickSwapState }]], (val) => new this.swapDeserializer(this, val));
184
+ for (let pendingSwap of this.pendingSwaps.values()) {
185
+ const value = pendingSwap.deref();
186
+ if (value != null)
187
+ value._tick(true);
188
+ }
189
+ swaps.forEach(value => {
190
+ value._tick(true);
191
+ });
192
+ }
193
+ saveSwapData(swap) {
194
+ if (!swap.isInitiated()) {
195
+ this.logger.debug("saveSwapData(): Swap " + swap.getId() + " not initiated, saving to pending swaps");
196
+ this.pendingSwaps.set(swap.getId(), new WeakRef(swap));
197
+ return Promise.resolve();
198
+ }
199
+ else {
200
+ this.pendingSwaps.delete(swap.getId());
201
+ }
202
+ return this.unifiedStorage.save(swap);
203
+ }
204
+ removeSwapData(swap) {
205
+ this.pendingSwaps.delete(swap.getId());
206
+ if (!swap.isInitiated())
207
+ return Promise.resolve();
208
+ return this.unifiedStorage.remove(swap);
209
+ }
210
+ /**
211
+ * Un-subscribes from event listeners on Solana
212
+ */
213
+ async stop() {
214
+ this.isInitialized = false;
215
+ this.unifiedChainEvents.unregisterListener(this.TYPE);
216
+ this.logger.info("stop(): Swap wrapper stopped");
217
+ if (this.tickInterval != null)
218
+ clearInterval(this.tickInterval);
219
+ }
220
+ /**
221
+ * Returns the smart chain's native token used to pay for fees
222
+ */
223
+ getNativeToken() {
224
+ return this.tokens[this.chain.getNativeCurrencyAddress()];
225
+ }
226
+ }
227
+ exports.ISwapWrapper = ISwapWrapper;
@@ -0,0 +1,53 @@
1
+ import { IEscrowSwap, IEscrowSwapInit } from "./IEscrowSwap";
2
+ import { ChainType, SignatureData, SwapData } from "@atomiqlabs/base";
3
+ import { IEscrowSwapDefinition, IEscrowSwapWrapper } from "./IEscrowSwapWrapper";
4
+ import { SwapTypeDefinition } from "../ISwapWrapper";
5
+ import { TokenAmount } from "../../types/TokenAmount";
6
+ import { SCToken } from "../../types/Token";
7
+ export type IEscrowSelfInitSwapInit<T extends SwapData> = IEscrowSwapInit<T> & {
8
+ feeRate: string;
9
+ signatureData?: SignatureData;
10
+ };
11
+ export declare function isIEscrowSelfInitSwapInit<T extends SwapData>(obj: any): obj is IEscrowSelfInitSwapInit<T>;
12
+ export type IEscrowSelfInitSwapDefinition<T extends ChainType, W extends IEscrowSwapWrapper<T, any>, S extends IEscrowSelfInitSwap<T>> = SwapTypeDefinition<T, W, S>;
13
+ export declare abstract class IEscrowSelfInitSwap<T extends ChainType = ChainType, D extends IEscrowSelfInitSwapDefinition<T, IEscrowSwapWrapper<T, D>, IEscrowSelfInitSwap<T, D, S>> = IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, any>, IEscrowSelfInitSwap<T, any, any>>, S extends number = number> extends IEscrowSwap<T, D, S> {
14
+ feeRate: string;
15
+ signatureData?: SignatureData;
16
+ protected constructor(wrapper: D["Wrapper"], obj: any);
17
+ protected constructor(wrapper: D["Wrapper"], swapInit: IEscrowSelfInitSwapInit<T["Data"]>);
18
+ /**
19
+ * Periodically checks for init signature's expiry
20
+ *
21
+ * @param intervalSeconds How often to check (in seconds), default to 5s
22
+ * @param abortSignal
23
+ * @protected
24
+ */
25
+ protected watchdogWaitTillSignatureExpiry(intervalSeconds?: number, abortSignal?: AbortSignal): Promise<void>;
26
+ /**
27
+ * Get the estimated smart chain fee of the commit transaction
28
+ */
29
+ protected getCommitFee(): Promise<bigint>;
30
+ /**
31
+ * Returns the transaction fee paid on the smart chain
32
+ */
33
+ getSmartChainNetworkFee(): Promise<TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>>;
34
+ /**
35
+ * Checks if the initiator/sender has enough balance to cover the transaction fee for processing the swap
36
+ */
37
+ abstract hasEnoughForTxFees(): Promise<{
38
+ enoughBalance: boolean;
39
+ balance: TokenAmount;
40
+ required: TokenAmount;
41
+ }>;
42
+ abstract txsCommit(skipChecks?: boolean): Promise<T["TX"][]>;
43
+ abstract commit(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, skipChecks?: boolean, onBeforeTxSent?: (txId: string) => void): Promise<string>;
44
+ /**
45
+ * Checks if the swap's quote is expired for good (i.e. the swap strictly cannot be committed on-chain anymore)
46
+ */
47
+ _verifyQuoteDefinitelyExpired(): Promise<boolean>;
48
+ /**
49
+ * Checks if the swap's quote is still valid
50
+ */
51
+ verifyQuoteValid(): Promise<boolean>;
52
+ serialize(): any;
53
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IEscrowSelfInitSwap = exports.isIEscrowSelfInitSwapInit = void 0;
4
+ const IEscrowSwap_1 = require("./IEscrowSwap");
5
+ const base_1 = require("@atomiqlabs/base");
6
+ const TokenAmount_1 = require("../../types/TokenAmount");
7
+ const TimeoutUtils_1 = require("../../utils/TimeoutUtils");
8
+ function isIEscrowSelfInitSwapInit(obj) {
9
+ return typeof obj === "object" &&
10
+ typeof (obj.feeRate) === "string" &&
11
+ (obj.signatureData == null || (typeof (obj.signatureData) === "object" &&
12
+ typeof (obj.signatureData.prefix) === "string" &&
13
+ typeof (obj.signatureData.timeout) === "string" &&
14
+ typeof (obj.signatureData.signature) === "string")) &&
15
+ (0, IEscrowSwap_1.isIEscrowSwapInit)(obj);
16
+ }
17
+ exports.isIEscrowSelfInitSwapInit = isIEscrowSelfInitSwapInit;
18
+ class IEscrowSelfInitSwap extends IEscrowSwap_1.IEscrowSwap {
19
+ constructor(wrapper, swapInitOrObj) {
20
+ super(wrapper, swapInitOrObj);
21
+ if (isIEscrowSelfInitSwapInit(swapInitOrObj)) {
22
+ this.feeRate = swapInitOrObj.feeRate;
23
+ this.signatureData = swapInitOrObj.signatureData;
24
+ }
25
+ else {
26
+ if (swapInitOrObj.signature != null)
27
+ this.signatureData = {
28
+ prefix: swapInitOrObj.prefix,
29
+ timeout: swapInitOrObj.timeout,
30
+ signature: swapInitOrObj.signature
31
+ };
32
+ this.feeRate = swapInitOrObj.feeRate;
33
+ }
34
+ }
35
+ //////////////////////////////
36
+ //// Watchdogs
37
+ /**
38
+ * Periodically checks for init signature's expiry
39
+ *
40
+ * @param intervalSeconds How often to check (in seconds), default to 5s
41
+ * @param abortSignal
42
+ * @protected
43
+ */
44
+ async watchdogWaitTillSignatureExpiry(intervalSeconds, abortSignal) {
45
+ if (this.data == null || this.signatureData == null)
46
+ throw new Error("Tried to await signature expiry but data or signature is null, invalid state?");
47
+ intervalSeconds ??= 5;
48
+ let expired = false;
49
+ while (!expired) {
50
+ await (0, TimeoutUtils_1.timeoutPromise)(intervalSeconds * 1000, abortSignal);
51
+ try {
52
+ expired = await this.wrapper.contract.isInitAuthorizationExpired(this.data, this.signatureData);
53
+ }
54
+ catch (e) {
55
+ this.logger.error("watchdogWaitTillSignatureExpiry(): Error when checking signature expiry: ", e);
56
+ }
57
+ }
58
+ if (abortSignal != null)
59
+ abortSignal.throwIfAborted();
60
+ }
61
+ //////////////////////////////
62
+ //// Amounts & fees
63
+ /**
64
+ * Get the estimated smart chain fee of the commit transaction
65
+ */
66
+ getCommitFee() {
67
+ return this.wrapper.contract.getCommitFee(this._getInitiator(), this.getSwapData(), this.feeRate);
68
+ }
69
+ /**
70
+ * Returns the transaction fee paid on the smart chain
71
+ */
72
+ async getSmartChainNetworkFee() {
73
+ const swapContract = this.wrapper.contract;
74
+ return (0, TokenAmount_1.toTokenAmount)(await (swapContract.getRawCommitFee != null ?
75
+ swapContract.getRawCommitFee(this._getInitiator(), this.getSwapData(), this.feeRate) :
76
+ swapContract.getCommitFee(this._getInitiator(), this.getSwapData(), this.feeRate)), this.wrapper.getNativeToken(), this.wrapper.prices);
77
+ }
78
+ //////////////////////////////
79
+ //// Quote verification
80
+ /**
81
+ * Checks if the swap's quote is expired for good (i.e. the swap strictly cannot be committed on-chain anymore)
82
+ */
83
+ async _verifyQuoteDefinitelyExpired() {
84
+ if (this.data == null || this.signatureData == null)
85
+ throw new Error("data or signature data are null!");
86
+ return this.wrapper.contract.isInitAuthorizationExpired(this.data, this.signatureData);
87
+ }
88
+ /**
89
+ * Checks if the swap's quote is still valid
90
+ */
91
+ async verifyQuoteValid() {
92
+ if (this.data == null || this.signatureData == null)
93
+ throw new Error("data or signature data are null!");
94
+ try {
95
+ await this.wrapper.contract.isValidInitAuthorization(this._getInitiator(), this.data, this.signatureData, this.feeRate);
96
+ return true;
97
+ }
98
+ catch (e) {
99
+ if (e instanceof base_1.SignatureVerificationError) {
100
+ return false;
101
+ }
102
+ throw e;
103
+ }
104
+ }
105
+ serialize() {
106
+ return {
107
+ ...super.serialize(),
108
+ prefix: this.signatureData?.prefix,
109
+ timeout: this.signatureData?.timeout,
110
+ signature: this.signatureData?.signature,
111
+ feeRate: this.feeRate == null ? null : this.feeRate.toString(),
112
+ };
113
+ }
114
+ ;
115
+ }
116
+ exports.IEscrowSelfInitSwap = IEscrowSelfInitSwap;
@@ -0,0 +1,70 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { ISwap, ISwapInit } from "../ISwap";
4
+ import { ChainType, SwapCommitState, SwapData, SwapExpiredState, SwapNotCommitedState, SwapPaidState } from "@atomiqlabs/base";
5
+ import { IEscrowSwapDefinition, IEscrowSwapWrapper } from "./IEscrowSwapWrapper";
6
+ import { Buffer } from "buffer";
7
+ export type IEscrowSwapInit<T extends SwapData> = ISwapInit & {
8
+ data?: T;
9
+ };
10
+ export declare function isIEscrowSwapInit<T extends SwapData>(obj: any): obj is IEscrowSwapInit<T>;
11
+ export declare abstract class IEscrowSwap<T extends ChainType = ChainType, D extends IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, D>, IEscrowSwap<T, D, S>> = IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, any>, IEscrowSwap<T, any, any>>, S extends number = number> extends ISwap<T, D, S> {
12
+ data?: T["Data"];
13
+ /**
14
+ * Transaction IDs for the swap on the smart chain side
15
+ */
16
+ commitTxId?: string;
17
+ refundTxId?: string;
18
+ claimTxId?: string;
19
+ protected constructor(wrapper: D["Wrapper"], obj: any);
20
+ protected constructor(wrapper: D["Wrapper"], swapInit: IEscrowSwapInit<T["Data"]>);
21
+ protected abstract getSwapData(): T["Data"];
22
+ /**
23
+ * Returns the identification hash of the swap, usually claim data hash, but can be overriden, e.g. for
24
+ * lightning swaps the identifier hash is used instead of claim data hash
25
+ */
26
+ protected getIdentifierHash(): Buffer;
27
+ /**
28
+ * Returns the identification hash of the swap, usually claim data hash, but can be overriden, e.g. for
29
+ * lightning swaps the identifier hash is used instead of claim data hash
30
+ */
31
+ protected getIdentifierHashString(): string;
32
+ _getEscrowHash(): string | null;
33
+ /**
34
+ * Returns the escrow hash - i.e. hash of the escrow data
35
+ */
36
+ getEscrowHash(): string | null;
37
+ /**
38
+ * Returns the claim data hash - i.e. hash passed to the claim handler
39
+ */
40
+ getClaimHash(): string;
41
+ getId(): string;
42
+ /**
43
+ * Periodically checks the chain to see whether the swap is committed
44
+ *
45
+ * @param intervalSeconds How often to check (in seconds), default to 5s
46
+ * @param abortSignal
47
+ * @protected
48
+ */
49
+ protected watchdogWaitTillCommited(intervalSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
50
+ /**
51
+ * Periodically checks the chain to see whether the swap was finished (claimed or refunded)
52
+ *
53
+ * @param intervalSeconds How often to check (in seconds), default to 5s
54
+ * @param abortSignal
55
+ * @protected
56
+ */
57
+ protected watchdogWaitTillResult(intervalSeconds?: number, abortSignal?: AbortSignal): Promise<SwapPaidState | SwapExpiredState | SwapNotCommitedState>;
58
+ /**
59
+ * Checks if the swap's quote is expired for good (i.e. the swap strictly cannot be committed on-chain anymore)
60
+ */
61
+ abstract _verifyQuoteDefinitelyExpired(): Promise<boolean>;
62
+ /**
63
+ * Checks if the swap's quote is still valid
64
+ */
65
+ abstract verifyQuoteValid(): Promise<boolean>;
66
+ abstract _shouldFetchCommitStatus(): boolean;
67
+ abstract _shouldFetchExpiryStatus(): boolean;
68
+ abstract _sync(save?: boolean, quoteDefinitelyExpired?: boolean, commitStatus?: SwapCommitState): Promise<boolean>;
69
+ serialize(): any;
70
+ }