@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,13 @@
1
+ /**
2
+ * Type guard to check if an object is an IAddressSwap
3
+ * @category Swaps
4
+ */
5
+ export declare function isIAddressSwap(obj: any): obj is IAddressSwap;
6
+ /**
7
+ * Interface for swaps which require a user to send funds to a specific address
8
+ * @category Swaps
9
+ */
10
+ export interface IAddressSwap {
11
+ getAddress(): string;
12
+ getHyperlink(): string;
13
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIAddressSwap = void 0;
4
+ /**
5
+ * Type guard to check if an object is an IAddressSwap
6
+ * @category Swaps
7
+ */
8
+ function isIAddressSwap(obj) {
9
+ return obj != null &&
10
+ typeof (obj.getAddress) === "function" &&
11
+ typeof (obj.getHyperlink) === "function";
12
+ }
13
+ exports.isIAddressSwap = isIAddressSwap;
@@ -0,0 +1,55 @@
1
+ import { IBitcoinWallet } from "../bitcoin/wallet/IBitcoinWallet";
2
+ import { Transaction } from "@scure/btc-signer";
3
+ import { MinimalBitcoinWalletInterface, MinimalBitcoinWalletInterfaceWithSigner } from "../bitcoin/wallet/MinimalBitcoinWalletInterface";
4
+ import { TokenAmount } from "../types/TokenAmount";
5
+ import { BtcToken } from "../types/Token";
6
+ /**
7
+ * Type guard to check if an object is an IBTCWalletSwap
8
+ * @category Swaps
9
+ */
10
+ export declare function isIBTCWalletSwap(obj: any): obj is IBTCWalletSwap;
11
+ /**
12
+ * Interface for swaps requiring Bitcoin wallet interaction
13
+ * @category Swaps
14
+ */
15
+ export interface IBTCWalletSwap {
16
+ /**
17
+ * Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
18
+ * also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
19
+ * `swap.submitPsbt()`
20
+ *
21
+ * @param _bitcoinWallet Sender's bitcoin wallet
22
+ * @param feeRate Optional fee rate for the transaction, needs to be at least as big as {minimumBtcFeeRate} field
23
+ * @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
24
+ */
25
+ getFundedPsbt(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number, additionalOutputs?: ({
26
+ amount: bigint;
27
+ outputScript: Uint8Array;
28
+ } | {
29
+ amount: bigint;
30
+ address: string;
31
+ })[]): Promise<{
32
+ psbt: Transaction;
33
+ psbtHex: string;
34
+ psbtBase64: string;
35
+ signInputs: number[];
36
+ }>;
37
+ /**
38
+ * Submits a PSBT signed by the wallet back to the SDK
39
+ *
40
+ * @param psbt A psbt - either a Transaction object or a hex or base64 encoded PSBT string
41
+ */
42
+ submitPsbt(psbt: Transaction | string): Promise<string>;
43
+ estimateBitcoinFee(wallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<any, BtcToken<false>> | null>;
44
+ sendBitcoinTransaction(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, feeRate?: number): Promise<string>;
45
+ /**
46
+ * Waits till the bitcoin transaction confirms
47
+ *
48
+ * @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
49
+ * @param checkIntervalSeconds How often to check the bitcoin transaction
50
+ * @param abortSignal Abort signal
51
+ * @throws {Error} if in invalid state (must be CLAIM_COMMITED)
52
+ */
53
+ waitForBitcoinTransaction(updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void, checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<string>;
54
+ getRequiredConfirmationsCount(): number;
55
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIBTCWalletSwap = void 0;
4
+ /**
5
+ * Type guard to check if an object is an IBTCWalletSwap
6
+ * @category Swaps
7
+ */
8
+ function isIBTCWalletSwap(obj) {
9
+ return obj != null &&
10
+ typeof (obj.getFundedPsbt) === "function" &&
11
+ typeof (obj.submitPsbt) === "function" &&
12
+ typeof (obj.estimateBitcoinFee) === "function" &&
13
+ typeof (obj.sendBitcoinTransaction) === "function" &&
14
+ typeof (obj.waitForBitcoinTransaction) === "function" &&
15
+ typeof (obj.getRequiredConfirmationsCount) === "function";
16
+ }
17
+ exports.isIBTCWalletSwap = isIBTCWalletSwap;
@@ -0,0 +1,17 @@
1
+ import { ChainType } from "@atomiqlabs/base";
2
+ import { ISwap } from "./ISwap";
3
+ import { ISwapWrapper, SwapTypeDefinition } from "./ISwapWrapper";
4
+ /**
5
+ * Type guard to check if an object is an IClaimableSwap
6
+ * @category Swaps
7
+ */
8
+ export declare function isIClaimableSwap(obj: any): obj is IClaimableSwap;
9
+ /**
10
+ * Interface for swaps that can be claimed
11
+ * @category Swaps
12
+ */
13
+ export interface IClaimableSwap<T extends ChainType = ChainType, D extends SwapTypeDefinition<T, ISwapWrapper<T, D>, IClaimableSwap<T, D, S>> = SwapTypeDefinition<T, ISwapWrapper<T, any>, IClaimableSwap<T, any, any>>, S extends number = number> extends ISwap<T, D, S> {
14
+ isClaimable(): boolean;
15
+ txsClaim(_signer?: T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
16
+ claim(_signer?: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal): Promise<string>;
17
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIClaimableSwap = void 0;
4
+ /**
5
+ * Type guard to check if an object is an IClaimableSwap
6
+ * @category Swaps
7
+ */
8
+ function isIClaimableSwap(obj) {
9
+ return obj != null &&
10
+ typeof (obj.isClaimable) === "function" &&
11
+ typeof (obj.txsClaim) === "function" &&
12
+ typeof (obj.claim) === "function";
13
+ }
14
+ exports.isIClaimableSwap = isIClaimableSwap;
@@ -0,0 +1,5 @@
1
+ import { ISwap } from "./ISwap";
2
+ import { IClaimableSwap } from "./IClaimableSwap";
3
+ export interface IClaimableSwapWrapper<T extends ISwap & IClaimableSwap = ISwap & IClaimableSwap> {
4
+ claimableSwapStates: T["state"][];
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { ChainType } from "@atomiqlabs/base";
2
+ import { ISwap } from "./ISwap";
3
+ import { ISwapWrapper, SwapTypeDefinition } from "./ISwapWrapper";
4
+ /**
5
+ * Type guard to check if an object is an IRefundableSwap
6
+ * @category Swaps
7
+ */
8
+ export declare function isIRefundableSwap(obj: any): obj is IRefundableSwap;
9
+ /**
10
+ * Interface for swaps that can be refunded
11
+ * @category Swaps
12
+ */
13
+ export interface IRefundableSwap<T extends ChainType = ChainType, D extends SwapTypeDefinition<T, ISwapWrapper<T, D>, IRefundableSwap<T, D, S>> = SwapTypeDefinition<T, ISwapWrapper<T, any>, IRefundableSwap<T, any, any>>, S extends number = number> extends ISwap<T, D, S> {
14
+ isRefundable(): boolean;
15
+ txsRefund(_signer?: T["Signer"] | T["NativeSigner"]): Promise<T["TX"][]>;
16
+ refund(_signer?: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal): Promise<string>;
17
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIRefundableSwap = void 0;
4
+ /**
5
+ * Type guard to check if an object is an IRefundableSwap
6
+ * @category Swaps
7
+ */
8
+ function isIRefundableSwap(obj) {
9
+ return typeof (obj.isRefundable) === "function" &&
10
+ typeof (obj.txsRefund) === "function" &&
11
+ typeof (obj.refund) === "function";
12
+ }
13
+ exports.isIRefundableSwap = isIRefundableSwap;
@@ -0,0 +1,207 @@
1
+ /// <reference types="node" />
2
+ import { SwapType } from "../enums/SwapType";
3
+ import { EventEmitter } from "events";
4
+ import { ISwapWrapper, SwapTypeDefinition } from "./ISwapWrapper";
5
+ import { ChainType } from "@atomiqlabs/base";
6
+ import { SwapDirection } from "../enums/SwapDirection";
7
+ import { Fee } from "../types/fees/Fee";
8
+ import { FeeBreakdown } from "../types/fees/FeeBreakdown";
9
+ import { PercentagePPM } from "../types/fees/PercentagePPM";
10
+ import { TokenAmount } from "../types/TokenAmount";
11
+ import { Token } from "../types/Token";
12
+ import { SwapExecutionAction } from "../types/SwapExecutionAction";
13
+ import { LoggerType } from "../utils/Logger";
14
+ import { PriceInfoType } from "../types/PriceInfoType";
15
+ /**
16
+ * Initialization data for creating a swap
17
+ * @category Swaps
18
+ */
19
+ export type ISwapInit = {
20
+ pricingInfo: PriceInfoType;
21
+ url?: string;
22
+ expiry: number;
23
+ swapFee: bigint;
24
+ swapFeeBtc: bigint;
25
+ exactIn: boolean;
26
+ };
27
+ /**
28
+ * Type guard to check if an object is an ISwapInit
29
+ * @category Swaps
30
+ */
31
+ export declare function isISwapInit(obj: any): obj is ISwapInit;
32
+ /**
33
+ * Base abstract class for all swap types
34
+ * @category Swaps
35
+ */
36
+ export declare abstract class ISwap<T extends ChainType = ChainType, D extends SwapTypeDefinition<T, ISwapWrapper<T, D>, ISwap<T, D, S>> = SwapTypeDefinition<T, ISwapWrapper<T, any>, ISwap<T, any, any>>, S extends number = number> {
37
+ protected readonly abstract TYPE: SwapType;
38
+ protected readonly abstract logger: LoggerType;
39
+ protected readonly currentVersion: number;
40
+ protected readonly wrapper: D["Wrapper"];
41
+ readonly url?: string;
42
+ readonly chainIdentifier: T["ChainId"];
43
+ readonly exactIn: boolean;
44
+ createdAt: number;
45
+ protected version: number;
46
+ protected initiated: boolean;
47
+ state: S;
48
+ expiry: number;
49
+ pricingInfo?: PriceInfoType;
50
+ protected swapFee: bigint;
51
+ protected swapFeeBtc: bigint;
52
+ /**
53
+ * Random nonce to differentiate the swap from others with the same identifier hash (i.e. when quoting the same swap
54
+ * from multiple LPs)
55
+ */
56
+ randomNonce: string;
57
+ /**
58
+ * Event emitter emitting "swapState" event when swap's state changes
59
+ */
60
+ events: EventEmitter<{
61
+ swapState: [D["Swap"]];
62
+ }>;
63
+ protected constructor(wrapper: D["Wrapper"], obj: any);
64
+ protected constructor(wrapper: D["Wrapper"], swapInit: ISwapInit);
65
+ protected abstract upgradeVersion(): void;
66
+ /**
67
+ * Waits till the swap reaches a specific state
68
+ *
69
+ * @param targetState The state to wait for
70
+ * @param type Whether to wait for the state exactly or also to a state with a higher number
71
+ * @param abortSignal
72
+ * @protected
73
+ */
74
+ protected waitTillState(targetState: S, type?: "eq" | "gte" | "neq", abortSignal?: AbortSignal): Promise<void>;
75
+ abstract txsExecute(options?: any): Promise<SwapExecutionAction<T>[]>;
76
+ protected tryRecomputeSwapPrice(): void;
77
+ /**
78
+ * Re-fetches & revalidates the price data
79
+ */
80
+ refreshPriceData(): Promise<void>;
81
+ /**
82
+ * Checks if the pricing for the swap is valid, according to max allowed price difference set in the ISwapPrice
83
+ */
84
+ hasValidPrice(): boolean;
85
+ /**
86
+ * Returns pricing info about the swap
87
+ */
88
+ getPriceInfo(): {
89
+ marketPrice?: number;
90
+ swapPrice: number;
91
+ difference: PercentagePPM;
92
+ };
93
+ abstract _getEscrowHash(): string | null;
94
+ /**
95
+ * @param signer Signer to check with this swap's initiator
96
+ * @throws {Error} When signer's address doesn't match with the swap's initiator one
97
+ */
98
+ protected checkSigner(signer: T["Signer"] | string): void;
99
+ /**
100
+ * Checks if the swap's quote is still valid
101
+ */
102
+ abstract verifyQuoteValid(): Promise<boolean>;
103
+ abstract getInputAddress(): string | null;
104
+ abstract getOutputAddress(): string | null;
105
+ abstract getInputTxId(): string | null;
106
+ abstract getOutputTxId(): string | null;
107
+ /**
108
+ * Returns the ID of the swap, as used in the storage and getSwapById function
109
+ */
110
+ abstract getId(): string;
111
+ /**
112
+ * Checks whether there is some action required from the user for this swap - can mean either refundable or claimable
113
+ */
114
+ abstract requiresAction(): boolean;
115
+ /**
116
+ * Returns whether the swap is finished and in its terminal state (this can mean successful, refunded or failed)
117
+ */
118
+ abstract isFinished(): boolean;
119
+ /**
120
+ * Checks whether the swap's quote has definitely expired and cannot be committed anymore, we can remove such swap
121
+ */
122
+ abstract isQuoteExpired(): boolean;
123
+ /**
124
+ * Checks whether the swap's quote is soft expired (this means there is not enough time buffer for it to commit,
125
+ * but it still can happen)
126
+ */
127
+ abstract isQuoteSoftExpired(): boolean;
128
+ /**
129
+ * Returns whether the swap finished successful
130
+ */
131
+ abstract isSuccessful(): boolean;
132
+ /**
133
+ * Returns whether the swap failed (e.g. was refunded)
134
+ */
135
+ abstract isFailed(): boolean;
136
+ /**
137
+ * Returns the intiator address of the swap - address that created this swap
138
+ */
139
+ abstract _getInitiator(): string;
140
+ isInitiated(): boolean;
141
+ _setInitiated(): void;
142
+ /**
143
+ * Returns quote expiry in UNIX millis
144
+ */
145
+ getQuoteExpiry(): number;
146
+ /**
147
+ * Returns the type of the swap
148
+ */
149
+ getType(): SwapType;
150
+ /**
151
+ * Returns the direction of the swap
152
+ */
153
+ getDirection(): SwapDirection;
154
+ /**
155
+ * Returns the current state of the swap
156
+ */
157
+ getState(): S;
158
+ /**
159
+ * Returns output amount of the swap, user receives this much
160
+ */
161
+ abstract getOutput(): TokenAmount | null;
162
+ /**
163
+ * Returns the output token of the swap
164
+ */
165
+ abstract getOutputToken(): Token<T["ChainId"]>;
166
+ /**
167
+ * Returns input amount of the swap, user needs to pay this much
168
+ */
169
+ abstract getInput(): TokenAmount | null;
170
+ /**
171
+ * Returns the input token of the swap
172
+ */
173
+ abstract getInputToken(): Token<T["ChainId"]>;
174
+ /**
175
+ * Returns input amount if the swap without the fees (swap fee, network fee)
176
+ */
177
+ abstract getInputWithoutFee(): TokenAmount | null;
178
+ /**
179
+ * Returns total fee for the swap, the fee is represented in source currency & destination currency, but is
180
+ * paid only once
181
+ */
182
+ abstract getFee(): Fee;
183
+ /**
184
+ * Returns the breakdown of all the fees paid
185
+ */
186
+ abstract getFeeBreakdown(): FeeBreakdown<T["ChainId"]>;
187
+ serialize(): any;
188
+ _save(): Promise<void>;
189
+ _saveAndEmit(state?: S): Promise<void>;
190
+ _emitEvent(): void;
191
+ /**
192
+ * Synchronizes swap state from chain and/or LP node, usually ran on startup
193
+ *
194
+ * @param save whether to save the new swap state or not
195
+ *
196
+ * @returns {boolean} true if the swap changed, false if the swap hasn't changed
197
+ */
198
+ abstract _sync(save?: boolean): Promise<boolean>;
199
+ /**
200
+ * Runs quick checks on the swap, such as checking the expiry, usually ran periodically every few seconds
201
+ *
202
+ * @param save whether to save the new swap state or not
203
+ *
204
+ * @returns {boolean} true if the swap changed, false if the swap hasn't changed
205
+ */
206
+ abstract _tick(save?: boolean): Promise<boolean>;
207
+ }
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ISwap = exports.isISwapInit = void 0;
4
+ const SwapType_1 = require("../enums/SwapType");
5
+ const events_1 = require("events");
6
+ const Utils_1 = require("../utils/Utils");
7
+ const SwapDirection_1 = require("../enums/SwapDirection");
8
+ const PercentagePPM_1 = require("../types/fees/PercentagePPM");
9
+ const Token_1 = require("../types/Token");
10
+ const PriceInfoType_1 = require("../types/PriceInfoType");
11
+ /**
12
+ * Type guard to check if an object is an ISwapInit
13
+ * @category Swaps
14
+ */
15
+ function isISwapInit(obj) {
16
+ return typeof obj === 'object' &&
17
+ obj != null &&
18
+ (0, PriceInfoType_1.isPriceInfoType)(obj.pricingInfo) &&
19
+ (obj.url == null || typeof obj.url === 'string') &&
20
+ typeof obj.expiry === 'number' &&
21
+ typeof (obj.swapFee) === "bigint" &&
22
+ typeof (obj.swapFeeBtc) === "bigint" &&
23
+ (typeof obj.exactIn === 'boolean');
24
+ }
25
+ exports.isISwapInit = isISwapInit;
26
+ /**
27
+ * Base abstract class for all swap types
28
+ * @category Swaps
29
+ */
30
+ class ISwap {
31
+ constructor(wrapper, swapInitOrObj) {
32
+ this.currentVersion = 1;
33
+ this.initiated = false;
34
+ this.state = 0;
35
+ /**
36
+ * Event emitter emitting "swapState" event when swap's state changes
37
+ */
38
+ this.events = new events_1.EventEmitter();
39
+ this.chainIdentifier = wrapper.chainIdentifier;
40
+ this.wrapper = wrapper;
41
+ if (isISwapInit(swapInitOrObj)) {
42
+ this.pricingInfo = swapInitOrObj.pricingInfo;
43
+ this.url = swapInitOrObj.url;
44
+ this.expiry = swapInitOrObj.expiry;
45
+ this.swapFee = swapInitOrObj.swapFee;
46
+ this.swapFeeBtc = swapInitOrObj.swapFeeBtc;
47
+ this.exactIn = swapInitOrObj.exactIn;
48
+ this.version = this.currentVersion;
49
+ this.createdAt = Date.now();
50
+ this.randomNonce = (0, Utils_1.randomBytes)(16).toString("hex");
51
+ }
52
+ else {
53
+ this.expiry = swapInitOrObj.expiry;
54
+ this.url = swapInitOrObj.url;
55
+ this.state = swapInitOrObj.state;
56
+ if (swapInitOrObj._isValid != null && swapInitOrObj._differencePPM != null && swapInitOrObj._satsBaseFee != null &&
57
+ swapInitOrObj._feePPM != null && swapInitOrObj._swapPriceUSatPerToken != null) {
58
+ this.pricingInfo = {
59
+ isValid: swapInitOrObj._isValid,
60
+ differencePPM: BigInt(swapInitOrObj._differencePPM),
61
+ satsBaseFee: BigInt(swapInitOrObj._satsBaseFee),
62
+ feePPM: BigInt(swapInitOrObj._feePPM),
63
+ realPriceUSatPerToken: (0, Utils_1.toBigInt)(swapInitOrObj._realPriceUSatPerToken),
64
+ realPriceUsdPerBitcoin: swapInitOrObj._realPriceUsdPerBitcoin,
65
+ swapPriceUSatPerToken: BigInt(swapInitOrObj._swapPriceUSatPerToken),
66
+ };
67
+ }
68
+ this.swapFee = (0, Utils_1.toBigInt)(swapInitOrObj.swapFee);
69
+ this.swapFeeBtc = (0, Utils_1.toBigInt)(swapInitOrObj.swapFeeBtc);
70
+ this.version = swapInitOrObj.version;
71
+ this.initiated = swapInitOrObj.initiated;
72
+ this.exactIn = swapInitOrObj.exactIn;
73
+ this.createdAt = swapInitOrObj.createdAt ?? swapInitOrObj.expiry;
74
+ this.randomNonce = swapInitOrObj.randomNonce;
75
+ }
76
+ if (this.version !== this.currentVersion) {
77
+ this.upgradeVersion();
78
+ }
79
+ if (this.initiated == null)
80
+ this.initiated = true;
81
+ }
82
+ /**
83
+ * Waits till the swap reaches a specific state
84
+ *
85
+ * @param targetState The state to wait for
86
+ * @param type Whether to wait for the state exactly or also to a state with a higher number
87
+ * @param abortSignal
88
+ * @protected
89
+ */
90
+ waitTillState(targetState, type = "eq", abortSignal) {
91
+ return new Promise((resolve, reject) => {
92
+ let listener;
93
+ listener = (swap) => {
94
+ if (type === "eq" ? swap.state === targetState : type === "gte" ? swap.state >= targetState : swap.state != targetState) {
95
+ resolve();
96
+ this.events.removeListener("swapState", listener);
97
+ }
98
+ };
99
+ this.events.on("swapState", listener);
100
+ if (abortSignal != null)
101
+ abortSignal.addEventListener("abort", () => {
102
+ this.events.removeListener("swapState", listener);
103
+ reject(abortSignal.reason);
104
+ });
105
+ });
106
+ }
107
+ //////////////////////////////
108
+ //// Pricing
109
+ tryRecomputeSwapPrice() {
110
+ if (this.pricingInfo == null)
111
+ return;
112
+ if (this.pricingInfo.swapPriceUSatPerToken == null) {
113
+ const priceUsdPerBtc = this.pricingInfo.realPriceUsdPerBitcoin;
114
+ const input = this.getInput();
115
+ const output = this.getOutput();
116
+ if (input == null || output == null)
117
+ return;
118
+ if ((0, Token_1.isSCToken)(input.token) && this.getDirection() === SwapDirection_1.SwapDirection.TO_BTC) {
119
+ this.pricingInfo = this.wrapper.prices.recomputePriceInfoSend(this.chainIdentifier, output.rawAmount, this.pricingInfo.satsBaseFee, this.pricingInfo.feePPM, input.rawAmount, input.token.address);
120
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
121
+ }
122
+ else if ((0, Token_1.isSCToken)(output.token) && this.getDirection() === SwapDirection_1.SwapDirection.FROM_BTC) {
123
+ this.pricingInfo = this.wrapper.prices.recomputePriceInfoReceive(this.chainIdentifier, input.rawAmount, this.pricingInfo.satsBaseFee, this.pricingInfo.feePPM, output.rawAmount, output.token.address);
124
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Re-fetches & revalidates the price data
130
+ */
131
+ async refreshPriceData() {
132
+ if (this.pricingInfo == null)
133
+ return;
134
+ const priceUsdPerBtc = this.pricingInfo.realPriceUsdPerBitcoin;
135
+ const input = this.getInput();
136
+ const output = this.getOutput();
137
+ if (input == null || output == null)
138
+ return;
139
+ if ((0, Token_1.isSCToken)(input.token) && this.getDirection() === SwapDirection_1.SwapDirection.TO_BTC) {
140
+ this.pricingInfo = await this.wrapper.prices.isValidAmountSend(this.chainIdentifier, output.rawAmount, this.pricingInfo.satsBaseFee, this.pricingInfo.feePPM, input.rawAmount, input.token.address);
141
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
142
+ }
143
+ else if ((0, Token_1.isSCToken)(output.token) && this.getDirection() === SwapDirection_1.SwapDirection.FROM_BTC) {
144
+ this.pricingInfo = await this.wrapper.prices.isValidAmountReceive(this.chainIdentifier, input.rawAmount, this.pricingInfo.satsBaseFee, this.pricingInfo.feePPM, output.rawAmount, output.token.address);
145
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
146
+ }
147
+ }
148
+ /**
149
+ * Checks if the pricing for the swap is valid, according to max allowed price difference set in the ISwapPrice
150
+ */
151
+ hasValidPrice() {
152
+ if (this.pricingInfo == null)
153
+ throw new Error("Pricing info not found, cannot check price validity!");
154
+ return this.pricingInfo.isValid;
155
+ }
156
+ /**
157
+ * Returns pricing info about the swap
158
+ */
159
+ getPriceInfo() {
160
+ if (this.pricingInfo == null)
161
+ throw new Error("Pricing info not provided and not known!");
162
+ const swapPrice = this.getDirection() === SwapDirection_1.SwapDirection.TO_BTC ?
163
+ 100000000000000 / Number(this.pricingInfo.swapPriceUSatPerToken) :
164
+ Number(this.pricingInfo.swapPriceUSatPerToken) / 100000000000000;
165
+ let marketPrice;
166
+ if (this.pricingInfo.realPriceUSatPerToken != null)
167
+ marketPrice = this.getDirection() === SwapDirection_1.SwapDirection.TO_BTC ?
168
+ 100000000000000 / Number(this.pricingInfo.realPriceUSatPerToken) :
169
+ Number(this.pricingInfo.realPriceUSatPerToken) / 100000000000000;
170
+ return {
171
+ marketPrice,
172
+ swapPrice,
173
+ difference: (0, PercentagePPM_1.ppmToPercentage)(this.pricingInfo.differencePPM)
174
+ };
175
+ }
176
+ /**
177
+ * @param signer Signer to check with this swap's initiator
178
+ * @throws {Error} When signer's address doesn't match with the swap's initiator one
179
+ */
180
+ checkSigner(signer) {
181
+ if ((typeof (signer) === "string" ? signer : signer.getAddress()) !== this._getInitiator())
182
+ throw new Error("Invalid signer provided!");
183
+ }
184
+ isInitiated() {
185
+ return this.initiated;
186
+ }
187
+ _setInitiated() {
188
+ this.initiated = true;
189
+ }
190
+ /**
191
+ * Returns quote expiry in UNIX millis
192
+ */
193
+ getQuoteExpiry() {
194
+ return this.expiry;
195
+ }
196
+ /**
197
+ * Returns the type of the swap
198
+ */
199
+ getType() {
200
+ return this.TYPE;
201
+ }
202
+ /**
203
+ * Returns the direction of the swap
204
+ */
205
+ getDirection() {
206
+ return this.TYPE === SwapType_1.SwapType.TO_BTC || this.TYPE === SwapType_1.SwapType.TO_BTCLN ? SwapDirection_1.SwapDirection.TO_BTC : SwapDirection_1.SwapDirection.FROM_BTC;
207
+ }
208
+ /**
209
+ * Returns the current state of the swap
210
+ */
211
+ getState() {
212
+ return this.state;
213
+ }
214
+ //////////////////////////////
215
+ //// Storage
216
+ serialize() {
217
+ if (this.pricingInfo == null)
218
+ return {};
219
+ return {
220
+ id: this.getId(),
221
+ type: this.getType(),
222
+ escrowHash: this._getEscrowHash(),
223
+ initiator: this._getInitiator(),
224
+ _isValid: this.pricingInfo.isValid,
225
+ _differencePPM: this.pricingInfo.differencePPM == null ? null : this.pricingInfo.differencePPM.toString(10),
226
+ _satsBaseFee: this.pricingInfo.satsBaseFee == null ? null : this.pricingInfo.satsBaseFee.toString(10),
227
+ _feePPM: this.pricingInfo.feePPM == null ? null : this.pricingInfo.feePPM.toString(10),
228
+ _realPriceUSatPerToken: this.pricingInfo.realPriceUSatPerToken == null ? null : this.pricingInfo.realPriceUSatPerToken.toString(10),
229
+ _realPriceUsdPerBitcoin: this.pricingInfo.realPriceUsdPerBitcoin,
230
+ _swapPriceUSatPerToken: this.pricingInfo.swapPriceUSatPerToken == null ? null : this.pricingInfo.swapPriceUSatPerToken.toString(10),
231
+ state: this.state,
232
+ url: this.url,
233
+ swapFee: this.swapFee == null ? null : this.swapFee.toString(10),
234
+ swapFeeBtc: this.swapFeeBtc == null ? null : this.swapFeeBtc.toString(10),
235
+ expiry: this.expiry,
236
+ version: this.version,
237
+ initiated: this.initiated,
238
+ exactIn: this.exactIn,
239
+ createdAt: this.createdAt,
240
+ randomNonce: this.randomNonce
241
+ };
242
+ }
243
+ _save() {
244
+ if (this.isQuoteExpired()) {
245
+ return this.wrapper.removeSwapData(this);
246
+ }
247
+ else {
248
+ return this.wrapper.saveSwapData(this);
249
+ }
250
+ }
251
+ async _saveAndEmit(state) {
252
+ if (state != null)
253
+ this.state = state;
254
+ await this._save();
255
+ this._emitEvent();
256
+ }
257
+ //////////////////////////////
258
+ //// Events
259
+ _emitEvent() {
260
+ this.wrapper.events.emit("swapState", this);
261
+ this.events.emit("swapState", this);
262
+ }
263
+ }
264
+ exports.ISwap = ISwap;
@@ -0,0 +1,15 @@
1
+ import { ChainType } from "@atomiqlabs/base";
2
+ import { TokenAmount } from "../types/TokenAmount";
3
+ import { SCToken } from "../types/Token";
4
+ /**
5
+ * Type guard to check if a swap has gas drop functionality
6
+ * @category Swaps
7
+ */
8
+ export declare function isSwapWithGasDrop(swap: any): swap is ISwapWithGasDrop<any>;
9
+ /**
10
+ * Interface for swaps with gas drop functionality
11
+ * @category Swaps
12
+ */
13
+ export interface ISwapWithGasDrop<T extends ChainType> {
14
+ getGasDropOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
15
+ }