@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,490 @@
1
+ import {SwapType} from "../enums/SwapType";
2
+ import {EventEmitter} from "events";
3
+ import {ISwapWrapper, SwapTypeDefinition} from "./ISwapWrapper";
4
+ import {ChainType} from "@atomiqlabs/base";
5
+ import {randomBytes, toBigInt} from "../utils/Utils";
6
+ import {SwapDirection} from "../enums/SwapDirection";
7
+ import {Fee} from "../types/fees/Fee";
8
+ import {FeeBreakdown} from "../types/fees/FeeBreakdown";
9
+ import {PercentagePPM, ppmToPercentage} from "../types/fees/PercentagePPM";
10
+ import {TokenAmount} from "../types/TokenAmount";
11
+ import {isSCToken, Token} from "../types/Token";
12
+ import {SwapExecutionAction} from "../types/SwapExecutionAction";
13
+ import {LoggerType} from "../utils/Logger";
14
+ import {isPriceInfoType, PriceInfoType} from "../types/PriceInfoType";
15
+
16
+ /**
17
+ * Initialization data for creating a swap
18
+ * @category Swaps
19
+ */
20
+ export type ISwapInit = {
21
+ pricingInfo: PriceInfoType,
22
+ url?: string,
23
+ expiry: number,
24
+ swapFee: bigint,
25
+ swapFeeBtc: bigint,
26
+ exactIn: boolean
27
+ };
28
+
29
+ /**
30
+ * Type guard to check if an object is an ISwapInit
31
+ * @category Swaps
32
+ */
33
+ export function isISwapInit(obj: any): obj is ISwapInit {
34
+ return typeof obj === 'object' &&
35
+ obj != null &&
36
+ isPriceInfoType(obj.pricingInfo) &&
37
+ (obj.url==null || typeof obj.url === 'string') &&
38
+ typeof obj.expiry === 'number' &&
39
+ typeof(obj.swapFee) === "bigint" &&
40
+ typeof(obj.swapFeeBtc) === "bigint" &&
41
+ (typeof obj.exactIn === 'boolean');
42
+ }
43
+
44
+ /**
45
+ * Base abstract class for all swap types
46
+ * @category Swaps
47
+ */
48
+ export abstract class ISwap<
49
+ T extends ChainType = ChainType,
50
+ D extends SwapTypeDefinition<T, ISwapWrapper<T, D>, ISwap<T, D, S>> = SwapTypeDefinition<T, ISwapWrapper<T, any>, ISwap<T, any, any>>,
51
+ S extends number = number
52
+ > {
53
+ protected readonly abstract TYPE: SwapType;
54
+ protected readonly abstract logger: LoggerType;
55
+
56
+ protected readonly currentVersion: number = 1;
57
+ protected readonly wrapper: D["Wrapper"];
58
+
59
+ readonly url?: string;
60
+
61
+ readonly chainIdentifier: T["ChainId"];
62
+ readonly exactIn: boolean;
63
+ createdAt: number;
64
+
65
+ protected version: number;
66
+ protected initiated: boolean = false;
67
+
68
+ state: S = 0 as S;
69
+ expiry: number;
70
+ pricingInfo?: PriceInfoType;
71
+
72
+ protected swapFee: bigint;
73
+ protected swapFeeBtc: bigint;
74
+
75
+ /**
76
+ * Random nonce to differentiate the swap from others with the same identifier hash (i.e. when quoting the same swap
77
+ * from multiple LPs)
78
+ */
79
+ randomNonce: string;
80
+
81
+ /**
82
+ * Event emitter emitting "swapState" event when swap's state changes
83
+ */
84
+ events: EventEmitter<{swapState: [D["Swap"]]}> = new EventEmitter();
85
+
86
+ protected constructor(wrapper: D["Wrapper"], obj: any);
87
+ protected constructor(wrapper: D["Wrapper"], swapInit: ISwapInit);
88
+ protected constructor(
89
+ wrapper: D["Wrapper"],
90
+ swapInitOrObj: ISwapInit | any,
91
+ ) {
92
+ this.chainIdentifier = wrapper.chainIdentifier;
93
+ this.wrapper = wrapper;
94
+ if(isISwapInit(swapInitOrObj)) {
95
+ this.pricingInfo = swapInitOrObj.pricingInfo;
96
+ this.url = swapInitOrObj.url;
97
+ this.expiry = swapInitOrObj.expiry;
98
+ this.swapFee = swapInitOrObj.swapFee;
99
+ this.swapFeeBtc = swapInitOrObj.swapFeeBtc;
100
+ this.exactIn = swapInitOrObj.exactIn;
101
+ this.version = this.currentVersion;
102
+ this.createdAt = Date.now();
103
+ this.randomNonce = randomBytes(16).toString("hex");
104
+ } else {
105
+ this.expiry = swapInitOrObj.expiry;
106
+ this.url = swapInitOrObj.url;
107
+
108
+ this.state = swapInitOrObj.state;
109
+
110
+ if(
111
+ swapInitOrObj._isValid!=null && swapInitOrObj._differencePPM!=null && swapInitOrObj._satsBaseFee!=null &&
112
+ swapInitOrObj._feePPM!=null && swapInitOrObj._swapPriceUSatPerToken!=null
113
+ ) {
114
+ this.pricingInfo = {
115
+ isValid: swapInitOrObj._isValid,
116
+ differencePPM: BigInt(swapInitOrObj._differencePPM),
117
+ satsBaseFee: BigInt(swapInitOrObj._satsBaseFee),
118
+ feePPM: BigInt(swapInitOrObj._feePPM),
119
+ realPriceUSatPerToken: toBigInt(swapInitOrObj._realPriceUSatPerToken),
120
+ realPriceUsdPerBitcoin: swapInitOrObj._realPriceUsdPerBitcoin,
121
+ swapPriceUSatPerToken: BigInt(swapInitOrObj._swapPriceUSatPerToken),
122
+ };
123
+ }
124
+
125
+ this.swapFee = toBigInt(swapInitOrObj.swapFee);
126
+ this.swapFeeBtc = toBigInt(swapInitOrObj.swapFeeBtc);
127
+
128
+ this.version = swapInitOrObj.version;
129
+ this.initiated = swapInitOrObj.initiated;
130
+ this.exactIn = swapInitOrObj.exactIn;
131
+ this.createdAt = swapInitOrObj.createdAt ?? swapInitOrObj.expiry;
132
+
133
+ this.randomNonce = swapInitOrObj.randomNonce;
134
+ }
135
+ if(this.version!==this.currentVersion) {
136
+ this.upgradeVersion();
137
+ }
138
+ if(this.initiated==null) this.initiated = true;
139
+ }
140
+
141
+ protected abstract upgradeVersion(): void;
142
+
143
+ /**
144
+ * Waits till the swap reaches a specific state
145
+ *
146
+ * @param targetState The state to wait for
147
+ * @param type Whether to wait for the state exactly or also to a state with a higher number
148
+ * @param abortSignal
149
+ * @protected
150
+ */
151
+ protected waitTillState(targetState: S, type: "eq" | "gte" | "neq" = "eq", abortSignal?: AbortSignal): Promise<void> {
152
+ return new Promise((resolve, reject) => {
153
+ let listener: (swap: D["Swap"]) => void;
154
+ listener = (swap) => {
155
+ if(type==="eq" ? swap.state===targetState : type==="gte" ? swap.state>=targetState : swap.state!=targetState) {
156
+ resolve();
157
+ this.events.removeListener("swapState", listener);
158
+ }
159
+ };
160
+ this.events.on("swapState", listener);
161
+ if(abortSignal!=null) abortSignal.addEventListener("abort", () => {
162
+ this.events.removeListener("swapState", listener);
163
+ reject(abortSignal.reason);
164
+ });
165
+ });
166
+ }
167
+
168
+ abstract txsExecute(options?: any): Promise<SwapExecutionAction<T>[]>;
169
+
170
+ //////////////////////////////
171
+ //// Pricing
172
+
173
+ protected tryRecomputeSwapPrice(): void {
174
+ if(this.pricingInfo==null) return;
175
+ if(this.pricingInfo.swapPriceUSatPerToken==null) {
176
+ const priceUsdPerBtc = this.pricingInfo.realPriceUsdPerBitcoin;
177
+ const input = this.getInput();
178
+ const output = this.getOutput();
179
+ if(input==null || output==null) return;
180
+ if(isSCToken(input.token) && this.getDirection()===SwapDirection.TO_BTC) {
181
+ this.pricingInfo = this.wrapper.prices.recomputePriceInfoSend(
182
+ this.chainIdentifier,
183
+ output.rawAmount,
184
+ this.pricingInfo.satsBaseFee,
185
+ this.pricingInfo.feePPM,
186
+ input.rawAmount,
187
+ input.token.address
188
+ );
189
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
190
+ } else if(isSCToken(output.token) && this.getDirection()===SwapDirection.FROM_BTC) {
191
+ this.pricingInfo = this.wrapper.prices.recomputePriceInfoReceive(
192
+ this.chainIdentifier,
193
+ input.rawAmount,
194
+ this.pricingInfo.satsBaseFee,
195
+ this.pricingInfo.feePPM,
196
+ output.rawAmount,
197
+ output.token.address
198
+ );
199
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
200
+ }
201
+ }
202
+ }
203
+
204
+ /**
205
+ * Re-fetches & revalidates the price data
206
+ */
207
+ async refreshPriceData(): Promise<void> {
208
+ if(this.pricingInfo==null) return;
209
+ const priceUsdPerBtc = this.pricingInfo.realPriceUsdPerBitcoin;
210
+ const input = this.getInput();
211
+ const output = this.getOutput();
212
+ if(input==null || output==null) return;
213
+
214
+ if(isSCToken(input.token) && this.getDirection()===SwapDirection.TO_BTC) {
215
+ this.pricingInfo = await this.wrapper.prices.isValidAmountSend(
216
+ this.chainIdentifier,
217
+ output.rawAmount,
218
+ this.pricingInfo.satsBaseFee,
219
+ this.pricingInfo.feePPM,
220
+ input.rawAmount,
221
+ input.token.address
222
+ );
223
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
224
+ } else if(isSCToken(output.token) && this.getDirection()===SwapDirection.FROM_BTC) {
225
+ this.pricingInfo = await this.wrapper.prices.isValidAmountReceive(
226
+ this.chainIdentifier,
227
+ input.rawAmount,
228
+ this.pricingInfo.satsBaseFee,
229
+ this.pricingInfo.feePPM,
230
+ output.rawAmount,
231
+ output.token.address
232
+ );
233
+ this.pricingInfo.realPriceUsdPerBitcoin = priceUsdPerBtc;
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Checks if the pricing for the swap is valid, according to max allowed price difference set in the ISwapPrice
239
+ */
240
+ hasValidPrice(): boolean {
241
+ if(this.pricingInfo==null) throw new Error("Pricing info not found, cannot check price validity!");
242
+ return this.pricingInfo.isValid;
243
+ }
244
+
245
+ /**
246
+ * Returns pricing info about the swap
247
+ */
248
+ getPriceInfo(): {
249
+ marketPrice?: number,
250
+ swapPrice: number,
251
+ difference: PercentagePPM
252
+ } {
253
+ if(this.pricingInfo==null) throw new Error("Pricing info not provided and not known!");
254
+
255
+ const swapPrice = this.getDirection()===SwapDirection.TO_BTC ?
256
+ 100_000_000_000_000/Number(this.pricingInfo.swapPriceUSatPerToken) :
257
+ Number(this.pricingInfo.swapPriceUSatPerToken)/100_000_000_000_000;
258
+
259
+ let marketPrice: number | undefined;
260
+ if(this.pricingInfo.realPriceUSatPerToken!=null)
261
+ marketPrice = this.getDirection()===SwapDirection.TO_BTC ?
262
+ 100_000_000_000_000/Number(this.pricingInfo.realPriceUSatPerToken) :
263
+ Number(this.pricingInfo.realPriceUSatPerToken)/100_000_000_000_000;
264
+
265
+ return {
266
+ marketPrice,
267
+ swapPrice,
268
+ difference: ppmToPercentage(this.pricingInfo.differencePPM)
269
+ }
270
+ }
271
+
272
+
273
+ //////////////////////////////
274
+ //// Getters & utils
275
+
276
+ abstract _getEscrowHash(): string | null;
277
+
278
+ /**
279
+ * @param signer Signer to check with this swap's initiator
280
+ * @throws {Error} When signer's address doesn't match with the swap's initiator one
281
+ */
282
+ protected checkSigner(signer: T["Signer"] | string): void {
283
+ if((typeof(signer)==="string" ? signer : signer.getAddress())!==this._getInitiator()) throw new Error("Invalid signer provided!");
284
+ }
285
+
286
+ /**
287
+ * Checks if the swap's quote is still valid
288
+ */
289
+ abstract verifyQuoteValid(): Promise<boolean>;
290
+
291
+ abstract getInputAddress(): string | null;
292
+ abstract getOutputAddress(): string | null;
293
+
294
+ abstract getInputTxId(): string | null;
295
+ abstract getOutputTxId(): string | null;
296
+
297
+ /**
298
+ * Returns the ID of the swap, as used in the storage and getSwapById function
299
+ */
300
+ abstract getId(): string;
301
+
302
+ /**
303
+ * Checks whether there is some action required from the user for this swap - can mean either refundable or claimable
304
+ */
305
+ abstract requiresAction(): boolean;
306
+
307
+ /**
308
+ * Returns whether the swap is finished and in its terminal state (this can mean successful, refunded or failed)
309
+ */
310
+ abstract isFinished(): boolean;
311
+
312
+ /**
313
+ * Checks whether the swap's quote has definitely expired and cannot be committed anymore, we can remove such swap
314
+ */
315
+ abstract isQuoteExpired(): boolean;
316
+
317
+ /**
318
+ * Checks whether the swap's quote is soft expired (this means there is not enough time buffer for it to commit,
319
+ * but it still can happen)
320
+ */
321
+ abstract isQuoteSoftExpired(): boolean;
322
+
323
+ /**
324
+ * Returns whether the swap finished successful
325
+ */
326
+ abstract isSuccessful(): boolean;
327
+
328
+ /**
329
+ * Returns whether the swap failed (e.g. was refunded)
330
+ */
331
+ abstract isFailed(): boolean;
332
+
333
+ /**
334
+ * Returns the intiator address of the swap - address that created this swap
335
+ */
336
+ abstract _getInitiator(): string;
337
+
338
+ isInitiated(): boolean {
339
+ return this.initiated;
340
+ }
341
+
342
+ _setInitiated(): void {
343
+ this.initiated = true;
344
+ }
345
+
346
+ /**
347
+ * Returns quote expiry in UNIX millis
348
+ */
349
+ getQuoteExpiry(): number {
350
+ return this.expiry;
351
+ }
352
+
353
+ /**
354
+ * Returns the type of the swap
355
+ */
356
+ getType(): SwapType {
357
+ return this.TYPE;
358
+ }
359
+
360
+ /**
361
+ * Returns the direction of the swap
362
+ */
363
+ getDirection(): SwapDirection {
364
+ return this.TYPE===SwapType.TO_BTC || this.TYPE===SwapType.TO_BTCLN ? SwapDirection.TO_BTC : SwapDirection.FROM_BTC;
365
+ }
366
+
367
+ /**
368
+ * Returns the current state of the swap
369
+ */
370
+ getState(): S {
371
+ return this.state;
372
+ }
373
+
374
+ //////////////////////////////
375
+ //// Amounts & fees
376
+
377
+ /**
378
+ * Returns output amount of the swap, user receives this much
379
+ */
380
+ abstract getOutput(): TokenAmount | null;
381
+
382
+ /**
383
+ * Returns the output token of the swap
384
+ */
385
+ abstract getOutputToken(): Token<T["ChainId"]>;
386
+
387
+ /**
388
+ * Returns input amount of the swap, user needs to pay this much
389
+ */
390
+ abstract getInput(): TokenAmount | null;
391
+
392
+ /**
393
+ * Returns the input token of the swap
394
+ */
395
+ abstract getInputToken(): Token<T["ChainId"]>;
396
+
397
+ /**
398
+ * Returns input amount if the swap without the fees (swap fee, network fee)
399
+ */
400
+ abstract getInputWithoutFee(): TokenAmount | null;
401
+
402
+ /**
403
+ * Returns total fee for the swap, the fee is represented in source currency & destination currency, but is
404
+ * paid only once
405
+ */
406
+ abstract getFee(): Fee;
407
+
408
+ /**
409
+ * Returns the breakdown of all the fees paid
410
+ */
411
+ abstract getFeeBreakdown(): FeeBreakdown<T["ChainId"]>;
412
+
413
+
414
+ //////////////////////////////
415
+ //// Storage
416
+
417
+ serialize(): any {
418
+ if(this.pricingInfo==null) return {};
419
+ return {
420
+ id: this.getId(),
421
+ type: this.getType(),
422
+ escrowHash: this._getEscrowHash(),
423
+ initiator: this._getInitiator(),
424
+
425
+ _isValid: this.pricingInfo.isValid,
426
+ _differencePPM: this.pricingInfo.differencePPM==null ? null :this.pricingInfo.differencePPM.toString(10),
427
+ _satsBaseFee: this.pricingInfo.satsBaseFee==null ? null :this.pricingInfo.satsBaseFee.toString(10),
428
+ _feePPM: this.pricingInfo.feePPM==null ? null :this.pricingInfo.feePPM.toString(10),
429
+ _realPriceUSatPerToken: this.pricingInfo.realPriceUSatPerToken==null ? null :this.pricingInfo.realPriceUSatPerToken.toString(10),
430
+ _realPriceUsdPerBitcoin: this.pricingInfo.realPriceUsdPerBitcoin,
431
+ _swapPriceUSatPerToken: this.pricingInfo.swapPriceUSatPerToken==null ? null :this.pricingInfo.swapPriceUSatPerToken.toString(10),
432
+ state: this.state,
433
+ url: this.url,
434
+ swapFee: this.swapFee==null ? null : this.swapFee.toString(10),
435
+ swapFeeBtc: this.swapFeeBtc==null ? null : this.swapFeeBtc.toString(10),
436
+ expiry: this.expiry,
437
+ version: this.version,
438
+ initiated: this.initiated,
439
+ exactIn: this.exactIn,
440
+ createdAt: this.createdAt,
441
+ randomNonce: this.randomNonce
442
+ }
443
+ }
444
+
445
+ _save(): Promise<void> {
446
+ if(this.isQuoteExpired()) {
447
+ return this.wrapper.removeSwapData(this);
448
+ } else {
449
+ return this.wrapper.saveSwapData(this);
450
+ }
451
+ }
452
+
453
+ async _saveAndEmit(state?: S): Promise<void> {
454
+ if(state!=null) this.state = state;
455
+ await this._save();
456
+ this._emitEvent();
457
+ }
458
+
459
+
460
+ //////////////////////////////
461
+ //// Events
462
+
463
+ _emitEvent() {
464
+ this.wrapper.events.emit("swapState", this);
465
+ this.events.emit("swapState", this);
466
+ }
467
+
468
+
469
+ //////////////////////////////
470
+ //// Swap ticks & sync
471
+
472
+ /**
473
+ * Synchronizes swap state from chain and/or LP node, usually ran on startup
474
+ *
475
+ * @param save whether to save the new swap state or not
476
+ *
477
+ * @returns {boolean} true if the swap changed, false if the swap hasn't changed
478
+ */
479
+ abstract _sync(save?: boolean): Promise<boolean>;
480
+
481
+ /**
482
+ * Runs quick checks on the swap, such as checking the expiry, usually ran periodically every few seconds
483
+ *
484
+ * @param save whether to save the new swap state or not
485
+ *
486
+ * @returns {boolean} true if the swap changed, false if the swap hasn't changed
487
+ */
488
+ abstract _tick(save?: boolean): Promise<boolean>;
489
+
490
+ }
@@ -0,0 +1,19 @@
1
+ import {ChainType} from "@atomiqlabs/base";
2
+ import {TokenAmount} from "../types/TokenAmount";
3
+ import {SCToken} from "../types/Token";
4
+
5
+ /**
6
+ * Type guard to check if a swap has gas drop functionality
7
+ * @category Swaps
8
+ */
9
+ export function isSwapWithGasDrop(swap: any): swap is ISwapWithGasDrop<any> {
10
+ return swap!=null && typeof(swap.getGasDropOutput)==="function";
11
+ }
12
+
13
+ /**
14
+ * Interface for swaps with gas drop functionality
15
+ * @category Swaps
16
+ */
17
+ export interface ISwapWithGasDrop<T extends ChainType> {
18
+ getGasDropOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
19
+ }