@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,344 @@
1
+ import {ChainEvent, ChainType} from "@atomiqlabs/base";
2
+ import {EventEmitter} from "events";
3
+ import {ISwap} from "./ISwap";
4
+ import {ISwapPrice} from "../prices/abstract/ISwapPrice";
5
+ import {IntermediaryError} from "../errors/IntermediaryError";
6
+ import {ChainIds, MultiChain} from "../swapper/Swapper";
7
+ import {UnifiedSwapEventListener} from "../events/UnifiedSwapEventListener";
8
+ import {SwapType} from "../enums/SwapType";
9
+ import {UnifiedSwapStorage} from "../storage/UnifiedSwapStorage";
10
+ import {SCToken} from "../types/Token";
11
+ import {getLogger} from "../utils/Logger";
12
+ import {PriceInfoType} from "../types/PriceInfoType";
13
+
14
+ /**
15
+ * Options for swap wrapper configuration
16
+ * @category Swaps
17
+ */
18
+ export type ISwapWrapperOptions = {
19
+ getRequestTimeout?: number,
20
+ postRequestTimeout?: number
21
+ };
22
+
23
+ /**
24
+ * Token configuration for wrapper constructors
25
+ * @category Swaps
26
+ */
27
+ export type WrapperCtorTokens<T extends MultiChain = MultiChain> = {
28
+ ticker: string,
29
+ name: string,
30
+ chains: {[chainId in ChainIds<T>]?: {
31
+ address: string,
32
+ decimals: number,
33
+ displayDecimals?: number
34
+ }}
35
+ }[];
36
+
37
+ /**
38
+ * Type definition linking wrapper and swap types
39
+ * @category Swaps
40
+ */
41
+ export type SwapTypeDefinition<T extends ChainType, W extends ISwapWrapper<T, any>, S extends ISwap<T>> = {
42
+ Wrapper: W;
43
+ Swap: S;
44
+ };
45
+
46
+ /**
47
+ * Base abstract class for swap wrapper implementations
48
+ * @category Swaps
49
+ */
50
+ export abstract class ISwapWrapper<
51
+ T extends ChainType,
52
+ D extends SwapTypeDefinition<T, ISwapWrapper<T, D>, ISwap<T, D>>,
53
+ O extends ISwapWrapperOptions = ISwapWrapperOptions
54
+ > {
55
+ abstract readonly TYPE: SwapType;
56
+ protected readonly logger = getLogger(this.constructor.name+": ");
57
+
58
+ public readonly abstract swapDeserializer: new (wrapper: D["Wrapper"], data: any) => D["Swap"];
59
+
60
+ readonly unifiedStorage: UnifiedSwapStorage<T>;
61
+ readonly unifiedChainEvents: UnifiedSwapEventListener<T>;
62
+
63
+ readonly chainIdentifier: T["ChainId"];
64
+ readonly chain: T["ChainInterface"];
65
+ readonly prices: ISwapPrice;
66
+ readonly events: EventEmitter<{swapState: [D["Swap"]]}>;
67
+ readonly options: O;
68
+ readonly tokens: {
69
+ [tokenAddress: string]: SCToken<T["ChainId"]>
70
+ };
71
+ readonly pendingSwaps: Map<string, WeakRef<D["Swap"]>> = new Map();
72
+
73
+ isInitialized: boolean = false;
74
+ tickInterval?: NodeJS.Timeout;
75
+
76
+ /**
77
+ * @param chainIdentifier
78
+ * @param unifiedStorage
79
+ * @param unifiedChainEvents
80
+ * @param chain
81
+ * @param prices Swap pricing handler
82
+ * @param tokens Chain specific token data
83
+ * @param options
84
+ * @param events Instance to use for emitting events
85
+ */
86
+ constructor(
87
+ chainIdentifier: T["ChainId"],
88
+ unifiedStorage: UnifiedSwapStorage<T>,
89
+ unifiedChainEvents: UnifiedSwapEventListener<T>,
90
+ chain: T["ChainInterface"],
91
+ prices: ISwapPrice,
92
+ tokens: WrapperCtorTokens,
93
+ options: O,
94
+ events?: EventEmitter<{swapState: [ISwap]}>
95
+ ) {
96
+ this.unifiedStorage = unifiedStorage;
97
+ this.unifiedChainEvents = unifiedChainEvents;
98
+
99
+ this.chainIdentifier = chainIdentifier;
100
+ this.chain = chain;
101
+ this.prices = prices;
102
+ this.events = events || new EventEmitter();
103
+ this.options = options;
104
+ this.tokens = {};
105
+ for(let tokenData of tokens) {
106
+ const chainData = tokenData.chains[chainIdentifier];
107
+ if(chainData==null) continue;
108
+ this.tokens[chainData.address] = {
109
+ chain: "SC",
110
+ chainId: this.chainIdentifier,
111
+ address: chainData.address,
112
+ decimals: chainData.decimals,
113
+ ticker: tokenData.ticker,
114
+ name: tokenData.name,
115
+ displayDecimals: chainData.displayDecimals
116
+ };
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Pre-fetches swap price for a given swap
122
+ *
123
+ * @param amountData
124
+ * @param abortSignal
125
+ * @protected
126
+ * @returns Price of the token in uSats (micro sats)
127
+ */
128
+ protected preFetchPrice(amountData: { token: string }, abortSignal?: AbortSignal): Promise<bigint | undefined> {
129
+ return this.prices.preFetchPrice(this.chainIdentifier, amountData.token, abortSignal).catch(e => {
130
+ this.logger.error("preFetchPrice.token(): Error: ", e);
131
+ return undefined;
132
+ });
133
+ }
134
+
135
+ /**
136
+ * Pre-fetches bitcoin's USD price
137
+ *
138
+ * @param abortSignal
139
+ * @protected
140
+ */
141
+ protected preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number | undefined> {
142
+ return this.prices.preFetchUsdPrice(abortSignal).catch(e => {
143
+ this.logger.error("preFetchPrice.usd(): Error: ", e);
144
+ return undefined;
145
+ })
146
+ }
147
+
148
+ /**
149
+ * Verifies returned price for swaps
150
+ *
151
+ * @param lpServiceData Service data for the service in question (TO_BTCLN, TO_BTC, etc.) of the given intermediary
152
+ * @param send Whether this is a send (SOL -> SC) or receive (BTC -> SC) swap
153
+ * @param amountSats Amount in BTC
154
+ * @param amountToken Amount in token
155
+ * @param token Token used in the swap
156
+ * @param feeData Fee data as returned by the intermediary
157
+ * @param pricePrefetchPromise Price pre-fetch promise
158
+ * @param usdPricePrefetchPromise
159
+ * @param abortSignal
160
+ * @protected
161
+ * @returns Price info object
162
+ * @throws {IntermediaryError} if the calculated fee is too high
163
+ */
164
+ protected async verifyReturnedPrice(
165
+ lpServiceData: {swapBaseFee: number, swapFeePPM: number},
166
+ send: boolean,
167
+ amountSats: bigint,
168
+ amountToken: bigint,
169
+ token: string,
170
+ feeData: {
171
+ networkFee?: bigint
172
+ },
173
+ pricePrefetchPromise: Promise<bigint | undefined> = Promise.resolve(undefined),
174
+ usdPricePrefetchPromise: Promise<number | undefined> = Promise.resolve(undefined),
175
+ abortSignal?: AbortSignal
176
+ ): Promise<PriceInfoType> {
177
+ const swapBaseFee = BigInt(lpServiceData.swapBaseFee);
178
+ const swapFeePPM = BigInt(lpServiceData.swapFeePPM);
179
+ if(send && feeData.networkFee!=null) amountToken = amountToken - feeData.networkFee;
180
+
181
+ const [isValidAmount, usdPrice] = await Promise.all([
182
+ send ?
183
+ this.prices.isValidAmountSend(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise) :
184
+ this.prices.isValidAmountReceive(this.chainIdentifier, amountSats, swapBaseFee, swapFeePPM, amountToken, token, abortSignal, await pricePrefetchPromise),
185
+ usdPricePrefetchPromise.then(value => {
186
+ if(value!=null) return value;
187
+ return this.prices.preFetchUsdPrice(abortSignal);
188
+ })
189
+ ]);
190
+ if(!isValidAmount.isValid) throw new IntermediaryError("Fee too high");
191
+ isValidAmount.realPriceUsdPerBitcoin = usdPrice;
192
+
193
+ return isValidAmount;
194
+ }
195
+
196
+ public abstract readonly pendingSwapStates: Array<D["Swap"]["state"]>;
197
+ public abstract readonly tickSwapState?: Array<D["Swap"]["state"]>;
198
+
199
+ /**
200
+ * Processes a single SC on-chain event
201
+ * @private
202
+ * @param event
203
+ * @param swap
204
+ */
205
+ protected abstract processEvent?(event: ChainEvent<T["Data"]>, swap: D["Swap"]): Promise<void>;
206
+
207
+ /**
208
+ * Initializes the swap wrapper, needs to be called before any other action can be taken
209
+ */
210
+ public async init(noTimers: boolean = false, noCheckPastSwaps: boolean = false): Promise<void> {
211
+ if(this.isInitialized) return;
212
+
213
+ if(!noCheckPastSwaps) {
214
+ //Save events received in the meantime into the event queue and process them only after we've checked and
215
+ // processed all the past swaps
216
+ let eventQueue: {
217
+ event: ChainEvent<T["Data"]>,
218
+ swap: D["Swap"]
219
+ }[] = [];
220
+ const initListener = (event: ChainEvent<T["Data"]>, swap: D["Swap"]) => {
221
+ eventQueue.push({event, swap});
222
+ return Promise.resolve();
223
+ }
224
+ if(this.processEvent!=null) this.unifiedChainEvents.registerListener(this.TYPE, initListener, this.swapDeserializer.bind(null, this));
225
+
226
+ await this.checkPastSwaps();
227
+
228
+ if(this.processEvent!=null) {
229
+ //Process accumulated event queue
230
+ for(let event of eventQueue) {
231
+ await this.processEvent(event.event, event.swap);
232
+ }
233
+
234
+ //Unregister the temporary event handler
235
+ this.unifiedChainEvents.unregisterListener(this.TYPE);
236
+ }
237
+ }
238
+
239
+ if(this.processEvent!=null) this.unifiedChainEvents.registerListener(this.TYPE, this.processEvent.bind(this), this.swapDeserializer.bind(null, this));
240
+
241
+ if(!noTimers) this.startTickInterval();
242
+
243
+ // this.logger.info("init(): Swap wrapper initialized");
244
+
245
+ this.isInitialized = true;
246
+ }
247
+
248
+ protected startTickInterval(): void {
249
+ if(this.tickSwapState==null || this.tickSwapState.length===0) return;
250
+ this.tickInterval = setInterval(() => {
251
+ this.tick();
252
+ }, 1000);
253
+ }
254
+
255
+ protected async _checkPastSwaps(pastSwaps: D["Swap"][]): Promise<{changedSwaps: D["Swap"][], removeSwaps: D["Swap"][]}> {
256
+ const changedSwaps: D["Swap"][] = [];
257
+ const removeSwaps: D["Swap"][] = [];
258
+
259
+ await Promise.all(pastSwaps.map((swap: D["Swap"]) =>
260
+ swap._sync(false).then(changed => {
261
+ if(swap.isQuoteExpired()) {
262
+ removeSwaps.push(swap);
263
+ this.logger.debug("_checkPastSwaps(): Removing expired swap: "+swap.getId());
264
+ } else {
265
+ if(changed) changedSwaps.push(swap);
266
+ }
267
+ }).catch(e => this.logger.error("_checkPastSwaps(): Error when checking swap "+swap.getId()+": ", e))
268
+ ));
269
+
270
+ return {changedSwaps, removeSwaps};
271
+ }
272
+
273
+ async checkPastSwaps(pastSwaps?: D["Swap"][], noSave?: boolean): Promise<{ removeSwaps: D["Swap"][], changedSwaps: D["Swap"][] }> {
274
+ if (pastSwaps == null) pastSwaps = await this.unifiedStorage.query<D["Swap"]>(
275
+ [[{key: "type", value: this.TYPE}, {key: "state", value: this.pendingSwapStates}]],
276
+ (val: any) => new this.swapDeserializer(this, val)
277
+ );
278
+
279
+ const {removeSwaps, changedSwaps} = await this._checkPastSwaps(pastSwaps);
280
+
281
+ if (!noSave) {
282
+ await this.unifiedStorage.removeAll(removeSwaps);
283
+ await this.unifiedStorage.saveAll(changedSwaps);
284
+ changedSwaps.forEach(swap => swap._emitEvent());
285
+ removeSwaps.forEach(swap => swap._emitEvent());
286
+ }
287
+
288
+ return {
289
+ removeSwaps,
290
+ changedSwaps
291
+ }
292
+ }
293
+
294
+ async tick(swaps?: D["Swap"][]): Promise<void> {
295
+ if(swaps==null) swaps = await this.unifiedStorage.query<D["Swap"]>(
296
+ [[{key: "type", value: this.TYPE}, {key: "state", value: this.tickSwapState}]],
297
+ (val: any) => new this.swapDeserializer(this, val)
298
+ );
299
+
300
+ for(let pendingSwap of this.pendingSwaps.values()) {
301
+ const value = pendingSwap.deref();
302
+ if(value != null) value._tick(true);
303
+ }
304
+
305
+ swaps.forEach(value => {
306
+ value._tick(true)
307
+ });
308
+ }
309
+
310
+ saveSwapData(swap: D["Swap"]): Promise<void> {
311
+ if(!swap.isInitiated()) {
312
+ this.logger.debug("saveSwapData(): Swap "+swap.getId()+" not initiated, saving to pending swaps");
313
+ this.pendingSwaps.set(swap.getId(), new WeakRef<D["Swap"]>(swap));
314
+ return Promise.resolve();
315
+ } else {
316
+ this.pendingSwaps.delete(swap.getId());
317
+ }
318
+ return this.unifiedStorage.save(swap);
319
+ }
320
+
321
+ removeSwapData(swap: D["Swap"]): Promise<void> {
322
+ this.pendingSwaps.delete(swap.getId());
323
+ if(!swap.isInitiated()) return Promise.resolve();
324
+ return this.unifiedStorage.remove(swap);
325
+ }
326
+
327
+ /**
328
+ * Un-subscribes from event listeners on Solana
329
+ */
330
+ public async stop() {
331
+ this.isInitialized = false;
332
+ this.unifiedChainEvents.unregisterListener(this.TYPE);
333
+ this.logger.info("stop(): Swap wrapper stopped");
334
+ if(this.tickInterval!=null) clearInterval(this.tickInterval);
335
+ }
336
+
337
+ /**
338
+ * Returns the smart chain's native token used to pay for fees
339
+ */
340
+ public getNativeToken(): SCToken<T["ChainId"]> {
341
+ return this.tokens[this.chain.getNativeCurrencyAddress()];
342
+ }
343
+
344
+ }
@@ -0,0 +1,168 @@
1
+ import {IEscrowSwap, IEscrowSwapInit, isIEscrowSwapInit} from "./IEscrowSwap";
2
+ import {ChainType, SignatureData, SignatureVerificationError, SwapData} from "@atomiqlabs/base";
3
+ import {IEscrowSwapDefinition, IEscrowSwapWrapper} from "./IEscrowSwapWrapper";
4
+ import {SwapTypeDefinition} from "../ISwapWrapper";
5
+ import {TokenAmount, toTokenAmount} from "../../types/TokenAmount";
6
+ import {SCToken} from "../../types/Token";
7
+ import {timeoutPromise} from "../../utils/TimeoutUtils";
8
+
9
+ export type IEscrowSelfInitSwapInit<T extends SwapData> = IEscrowSwapInit<T> & {
10
+ feeRate: string,
11
+ signatureData?: SignatureData,
12
+ };
13
+
14
+ export function isIEscrowSelfInitSwapInit<T extends SwapData>(obj: any): obj is IEscrowSelfInitSwapInit<T> {
15
+ return typeof obj === "object" &&
16
+ typeof(obj.feeRate) === "string" &&
17
+ (obj.signatureData == null || (
18
+ typeof(obj.signatureData) === "object" &&
19
+ typeof(obj.signatureData.prefix)==="string" &&
20
+ typeof(obj.signatureData.timeout)==="string" &&
21
+ typeof(obj.signatureData.signature)==="string"
22
+ )) &&
23
+ isIEscrowSwapInit(obj);
24
+ }
25
+
26
+ export type IEscrowSelfInitSwapDefinition<T extends ChainType, W extends IEscrowSwapWrapper<T, any>, S extends IEscrowSelfInitSwap<T>> = SwapTypeDefinition<T, W, S>;
27
+
28
+ export abstract class IEscrowSelfInitSwap<
29
+ T extends ChainType = ChainType,
30
+ D extends IEscrowSelfInitSwapDefinition<T, IEscrowSwapWrapper<T, D>, IEscrowSelfInitSwap<T, D, S>> = IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, any>, IEscrowSelfInitSwap<T, any, any>>,
31
+ S extends number = number
32
+ > extends IEscrowSwap<T, D, S> {
33
+
34
+ feeRate: string;
35
+ signatureData?: SignatureData;
36
+
37
+ protected constructor(wrapper: D["Wrapper"], obj: any);
38
+ protected constructor(wrapper: D["Wrapper"], swapInit: IEscrowSelfInitSwapInit<T["Data"]>);
39
+ protected constructor(
40
+ wrapper: D["Wrapper"],
41
+ swapInitOrObj: IEscrowSelfInitSwapInit<T["Data"]> | any,
42
+ ) {
43
+ super(wrapper, swapInitOrObj);
44
+
45
+ if(isIEscrowSelfInitSwapInit(swapInitOrObj)) {
46
+ this.feeRate = swapInitOrObj.feeRate;
47
+ this.signatureData = swapInitOrObj.signatureData;
48
+ } else {
49
+ if(swapInitOrObj.signature!=null) this.signatureData ={
50
+ prefix: swapInitOrObj.prefix,
51
+ timeout: swapInitOrObj.timeout,
52
+ signature: swapInitOrObj.signature
53
+ };
54
+ this.feeRate = swapInitOrObj.feeRate;
55
+ }
56
+ }
57
+
58
+ //////////////////////////////
59
+ //// Watchdogs
60
+
61
+ /**
62
+ * Periodically checks for init signature's expiry
63
+ *
64
+ * @param intervalSeconds How often to check (in seconds), default to 5s
65
+ * @param abortSignal
66
+ * @protected
67
+ */
68
+ protected async watchdogWaitTillSignatureExpiry(intervalSeconds?: number, abortSignal?: AbortSignal): Promise<void> {
69
+ if(this.data==null || this.signatureData==null)
70
+ throw new Error("Tried to await signature expiry but data or signature is null, invalid state?");
71
+
72
+ intervalSeconds ??= 5;
73
+ let expired = false
74
+ while(!expired) {
75
+ await timeoutPromise(intervalSeconds*1000, abortSignal);
76
+ try {
77
+ expired = await this.wrapper.contract.isInitAuthorizationExpired(this.data, this.signatureData);
78
+ } catch (e) {
79
+ this.logger.error("watchdogWaitTillSignatureExpiry(): Error when checking signature expiry: ", e);
80
+ }
81
+ }
82
+ if(abortSignal!=null) abortSignal.throwIfAborted();
83
+ }
84
+
85
+
86
+ //////////////////////////////
87
+ //// Amounts & fees
88
+
89
+ /**
90
+ * Get the estimated smart chain fee of the commit transaction
91
+ */
92
+ protected getCommitFee(): Promise<bigint> {
93
+ return this.wrapper.contract.getCommitFee(this._getInitiator(), this.getSwapData(), this.feeRate);
94
+ }
95
+
96
+ /**
97
+ * Returns the transaction fee paid on the smart chain
98
+ */
99
+ async getSmartChainNetworkFee(): Promise<TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>> {
100
+ const swapContract: T["Contract"] = this.wrapper.contract;
101
+ return toTokenAmount(
102
+ await (
103
+ swapContract.getRawCommitFee!=null ?
104
+ swapContract.getRawCommitFee(this._getInitiator(), this.getSwapData(), this.feeRate) :
105
+ swapContract.getCommitFee(this._getInitiator(), this.getSwapData(), this.feeRate)
106
+ ),
107
+ this.wrapper.getNativeToken(),
108
+ this.wrapper.prices
109
+ );
110
+ }
111
+
112
+ /**
113
+ * Checks if the initiator/sender has enough balance to cover the transaction fee for processing the swap
114
+ */
115
+ abstract hasEnoughForTxFees(): Promise<{enoughBalance: boolean, balance: TokenAmount, required: TokenAmount}>;
116
+
117
+
118
+ //////////////////////////////
119
+ //// Commit and claim
120
+
121
+ abstract txsCommit(skipChecks?: boolean): Promise<T["TX"][]>;
122
+ abstract commit(_signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, skipChecks?: boolean, onBeforeTxSent?: (txId: string) => void): Promise<string>;
123
+
124
+
125
+ //////////////////////////////
126
+ //// Quote verification
127
+
128
+ /**
129
+ * Checks if the swap's quote is expired for good (i.e. the swap strictly cannot be committed on-chain anymore)
130
+ */
131
+ async _verifyQuoteDefinitelyExpired(): Promise<boolean> {
132
+ if(this.data==null || this.signatureData==null) throw new Error("data or signature data are null!");
133
+
134
+ return this.wrapper.contract.isInitAuthorizationExpired(
135
+ this.data!, this.signatureData!
136
+ );
137
+ }
138
+
139
+ /**
140
+ * Checks if the swap's quote is still valid
141
+ */
142
+ async verifyQuoteValid(): Promise<boolean> {
143
+ if(this.data==null || this.signatureData==null) throw new Error("data or signature data are null!");
144
+
145
+ try {
146
+ await this.wrapper.contract.isValidInitAuthorization(
147
+ this._getInitiator(), this.data!, this.signatureData!, this.feeRate
148
+ );
149
+ return true;
150
+ } catch (e) {
151
+ if(e instanceof SignatureVerificationError) {
152
+ return false;
153
+ }
154
+ throw e;
155
+ }
156
+ }
157
+
158
+ serialize(): any {
159
+ return {
160
+ ...super.serialize(),
161
+ prefix: this.signatureData?.prefix,
162
+ timeout: this.signatureData?.timeout,
163
+ signature: this.signatureData?.signature,
164
+ feeRate: this.feeRate==null ? null : this.feeRate.toString(),
165
+ }
166
+ };
167
+
168
+ }