@atomiqlabs/sdk 7.0.12 → 8.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SwapperUtils = void 0;
4
+ const bolt11_1 = require("@atomiqlabs/bolt11");
5
+ const btc_signer_1 = require("@scure/btc-signer");
6
+ const LNURL_1 = require("../lnurl/LNURL");
7
+ const SwapType_1 = require("../enums/SwapType");
8
+ const SingleAddressBitcoinWallet_1 = require("../bitcoin/wallet/SingleAddressBitcoinWallet");
9
+ const base_1 = require("@atomiqlabs/base");
10
+ const Utils_1 = require("../utils/Utils");
11
+ const TokenAmount_1 = require("../types/TokenAmount");
12
+ const Token_1 = require("../types/Token");
13
+ const LNURLWithdraw_1 = require("../types/lnurl/LNURLWithdraw");
14
+ const LNURLPay_1 = require("../types/lnurl/LNURLPay");
15
+ const BitcoinWalletUtils_1 = require("../utils/BitcoinWalletUtils");
16
+ /**
17
+ * Utility class providing helper methods for swap operations
18
+ * @category Core
19
+ */
20
+ class SwapperUtils {
21
+ constructor(root) {
22
+ this.bitcoinNetwork = root.bitcoinNetwork;
23
+ this.root = root;
24
+ }
25
+ isValidSmartChainAddress(address, chainId) {
26
+ if (chainId != null) {
27
+ if (this.root.chains[chainId] == null)
28
+ throw new Error(`Unknown chain id: ${chainId}`);
29
+ return this.root.chains[chainId].chainInterface.isValidAddress(address);
30
+ }
31
+ for (let chainId of this.root.getSmartChains()) {
32
+ if (this.root.chains[chainId].chainInterface.isValidAddress(address))
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ /**
38
+ * Returns true if string is a valid BOLT11 bitcoin lightning invoice
39
+ *
40
+ * @param lnpr
41
+ */
42
+ isLightningInvoice(lnpr) {
43
+ try {
44
+ (0, bolt11_1.decode)(lnpr);
45
+ return true;
46
+ }
47
+ catch (e) { }
48
+ return false;
49
+ }
50
+ /**
51
+ * Returns true if string is a valid bitcoin address
52
+ *
53
+ * @param addr
54
+ */
55
+ isValidBitcoinAddress(addr) {
56
+ try {
57
+ (0, btc_signer_1.Address)(this.bitcoinNetwork).decode(addr);
58
+ return true;
59
+ }
60
+ catch (e) {
61
+ return false;
62
+ }
63
+ }
64
+ /**
65
+ * Returns true if string is a valid BOLT11 bitcoin lightning invoice WITH AMOUNT
66
+ *
67
+ * @param lnpr
68
+ */
69
+ isValidLightningInvoice(lnpr) {
70
+ try {
71
+ const parsed = (0, bolt11_1.decode)(lnpr);
72
+ if (parsed.millisatoshis != null)
73
+ return true;
74
+ }
75
+ catch (e) { }
76
+ return false;
77
+ }
78
+ /**
79
+ * Returns true if string is a valid LNURL (no checking on type is performed)
80
+ *
81
+ * @param lnurl
82
+ */
83
+ isValidLNURL(lnurl) {
84
+ return LNURL_1.LNURL.isLNURL(lnurl);
85
+ }
86
+ /**
87
+ * Returns type and data about an LNURL
88
+ *
89
+ * @param lnurl
90
+ * @param shouldRetry
91
+ */
92
+ getLNURLTypeAndData(lnurl, shouldRetry) {
93
+ return LNURL_1.LNURL.getLNURLType(lnurl, shouldRetry);
94
+ }
95
+ /**
96
+ * Returns satoshi value of BOLT11 bitcoin lightning invoice WITH AMOUNT, returns null otherwise
97
+ *
98
+ * @param lnpr
99
+ */
100
+ getLightningInvoiceValue(lnpr) {
101
+ const parsed = (0, bolt11_1.decode)(lnpr);
102
+ if (parsed.millisatoshis != null)
103
+ return (BigInt(parsed.millisatoshis) + 999n) / 1000n;
104
+ return null;
105
+ }
106
+ parseBitcoinAddress(resultText) {
107
+ let _amount = undefined;
108
+ if (resultText.includes("?")) {
109
+ const arr = resultText.split("?");
110
+ resultText = arr[0];
111
+ const params = arr[1].split("&");
112
+ for (let param of params) {
113
+ const arr2 = param.split("=");
114
+ const key = arr2[0];
115
+ const value = decodeURIComponent(arr2[1]);
116
+ if (key === "amount") {
117
+ _amount = (0, Utils_1.fromDecimal)(parseFloat(value).toFixed(8), 8);
118
+ }
119
+ }
120
+ }
121
+ if (this.isValidBitcoinAddress(resultText)) {
122
+ return {
123
+ address: resultText,
124
+ type: "BITCOIN",
125
+ swapType: SwapType_1.SwapType.TO_BTC,
126
+ amount: _amount == null ? undefined : (0, TokenAmount_1.toTokenAmount)(_amount, Token_1.BitcoinTokens.BTC, this.root.prices)
127
+ };
128
+ }
129
+ return null;
130
+ }
131
+ parseLNURLSync(resultText) {
132
+ if (this.isValidLNURL(resultText)) {
133
+ return {
134
+ address: resultText,
135
+ type: "LNURL",
136
+ swapType: null
137
+ };
138
+ }
139
+ return null;
140
+ }
141
+ async parseLNURL(resultText) {
142
+ if (this.isValidLNURL(resultText)) {
143
+ try {
144
+ const result = await this.getLNURLTypeAndData(resultText);
145
+ if (result == null)
146
+ throw new Error("Invalid LNURL specified!");
147
+ const swapType = (0, LNURLPay_1.isLNURLPay)(result) ? SwapType_1.SwapType.TO_BTCLN : (0, LNURLWithdraw_1.isLNURLWithdraw)(result) ? SwapType_1.SwapType.FROM_BTCLN : null;
148
+ if (swapType == null)
149
+ return null;
150
+ const response = {
151
+ address: resultText,
152
+ type: "LNURL",
153
+ swapType,
154
+ lnurl: result
155
+ };
156
+ if (result.min === result.max) {
157
+ return {
158
+ ...response,
159
+ amount: result.min == null ? undefined : (0, TokenAmount_1.toTokenAmount)(result.min, Token_1.BitcoinTokens.BTCLN, this.root.prices)
160
+ };
161
+ }
162
+ else {
163
+ return {
164
+ ...response,
165
+ min: result.min == null ? undefined : (0, TokenAmount_1.toTokenAmount)(result.min, Token_1.BitcoinTokens.BTCLN, this.root.prices),
166
+ max: result.min == null ? undefined : (0, TokenAmount_1.toTokenAmount)(result.max, Token_1.BitcoinTokens.BTCLN, this.root.prices)
167
+ };
168
+ }
169
+ }
170
+ catch (e) {
171
+ throw new Error("Failed to contact LNURL service, check your internet connection and retry later.");
172
+ }
173
+ }
174
+ return null;
175
+ }
176
+ parseLightningInvoice(resultText) {
177
+ if (this.isLightningInvoice(resultText)) {
178
+ if (this.isValidLightningInvoice(resultText)) {
179
+ const amount = this.getLightningInvoiceValue(resultText);
180
+ if (amount == null)
181
+ throw new Error();
182
+ return {
183
+ address: resultText,
184
+ type: "LIGHTNING",
185
+ swapType: SwapType_1.SwapType.TO_BTCLN,
186
+ amount: (0, TokenAmount_1.toTokenAmount)(amount, Token_1.BitcoinTokens.BTCLN, this.root.prices)
187
+ };
188
+ }
189
+ else {
190
+ throw new Error("Lightning invoice needs to contain an amount!");
191
+ }
192
+ }
193
+ return null;
194
+ }
195
+ parseSmartchainAddress(resultText) {
196
+ for (let chainId of this.root.getSmartChains()) {
197
+ if (this.root.chains[chainId].chainInterface.isValidAddress(resultText)) {
198
+ return {
199
+ address: resultText,
200
+ type: chainId,
201
+ swapType: null
202
+ };
203
+ }
204
+ }
205
+ return null;
206
+ }
207
+ /**
208
+ * General parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses, also fetches LNURL data
209
+ * (hence returns Promise)
210
+ *
211
+ * @param addressString Address to parse
212
+ * @throws {Error} Error in address parsing
213
+ * @returns Address data or null if address doesn't conform to any known format
214
+ */
215
+ async parseAddress(addressString) {
216
+ if (addressString.startsWith("bitcoin:")) {
217
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString.substring(8));
218
+ if (parsedBitcoinAddress != null)
219
+ return parsedBitcoinAddress;
220
+ throw new Error("Invalid bitcoin address!");
221
+ }
222
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString);
223
+ if (parsedBitcoinAddress != null)
224
+ return parsedBitcoinAddress;
225
+ if (addressString.startsWith("lightning:")) {
226
+ const resultText = addressString.substring(10);
227
+ const resultLnurl = await this.parseLNURL(resultText);
228
+ if (resultLnurl != null)
229
+ return resultLnurl;
230
+ const resultLightningInvoice = this.parseLightningInvoice(resultText);
231
+ if (resultLightningInvoice != null)
232
+ return resultLightningInvoice;
233
+ throw new Error("Invalid lightning network invoice or LNURL!");
234
+ }
235
+ const resultLnurl = await this.parseLNURL(addressString);
236
+ if (resultLnurl != null)
237
+ return resultLnurl;
238
+ const resultLightningInvoice = this.parseLightningInvoice(addressString);
239
+ if (resultLightningInvoice != null)
240
+ return resultLightningInvoice;
241
+ return this.parseSmartchainAddress(addressString);
242
+ }
243
+ /**
244
+ * Synchronous general parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses, doesn't fetch
245
+ * LNURL data, reports swapType: null instead to prevent returning a Promise
246
+ *
247
+ * @param addressString Address to parse
248
+ * @throws {Error} Error in address parsing
249
+ * @returns Address data or null if address doesn't conform to any known format
250
+ */
251
+ parseAddressSync(addressString) {
252
+ if (addressString.startsWith("bitcoin:")) {
253
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString.substring(8));
254
+ if (parsedBitcoinAddress != null)
255
+ return parsedBitcoinAddress;
256
+ throw new Error("Invalid bitcoin address!");
257
+ }
258
+ const parsedBitcoinAddress = this.parseBitcoinAddress(addressString);
259
+ if (parsedBitcoinAddress != null)
260
+ return parsedBitcoinAddress;
261
+ if (addressString.startsWith("lightning:")) {
262
+ const resultText = addressString.substring(10);
263
+ const resultLnurl = this.parseLNURLSync(resultText);
264
+ if (resultLnurl != null)
265
+ return resultLnurl;
266
+ const resultLightningInvoice = this.parseLightningInvoice(resultText);
267
+ if (resultLightningInvoice != null)
268
+ return resultLightningInvoice;
269
+ throw new Error("Invalid lightning network invoice or LNURL!");
270
+ }
271
+ const resultLnurl = this.parseLNURLSync(addressString);
272
+ if (resultLnurl != null)
273
+ return resultLnurl;
274
+ const resultLightningInvoice = this.parseLightningInvoice(addressString);
275
+ if (resultLightningInvoice != null)
276
+ return resultLightningInvoice;
277
+ return this.parseSmartchainAddress(addressString);
278
+ }
279
+ /**
280
+ * Returns a random PSBT that can be used for fee estimation, the last output (the LP output) is omitted
281
+ * to allow for coinselection algorithm to determine maximum sendable amount there
282
+ *
283
+ * @param chainIdentifier
284
+ * @param includeGasToken Whether to return the PSBT also with the gas token amount (increases the vSize by 8)
285
+ */
286
+ getRandomSpvVaultPsbt(chainIdentifier, includeGasToken) {
287
+ const wrapper = this.root.chains[chainIdentifier].wrappers[SwapType_1.SwapType.SPV_VAULT_FROM_BTC];
288
+ if (wrapper == null)
289
+ throw new Error("Chain doesn't support spv vault swaps!");
290
+ return wrapper.getDummySwapPsbt(includeGasToken);
291
+ }
292
+ /**
293
+ * Returns the spendable balance of a bitcoin wallet
294
+ *
295
+ * @param wallet
296
+ * @param targetChain
297
+ * @param options Additional options
298
+ */
299
+ async getBitcoinSpendableBalance(wallet, targetChain, options) {
300
+ let bitcoinWallet;
301
+ if (typeof (wallet) === "string") {
302
+ bitcoinWallet = new SingleAddressBitcoinWallet_1.SingleAddressBitcoinWallet(this.root.bitcoinRpc, this.bitcoinNetwork, { address: wallet, publicKey: "" });
303
+ }
304
+ else {
305
+ bitcoinWallet = (0, BitcoinWalletUtils_1.toBitcoinWallet)(wallet, this.root.bitcoinRpc, this.bitcoinNetwork);
306
+ }
307
+ let feeRate = options?.feeRate ?? await bitcoinWallet.getFeeRate();
308
+ if (options?.minFeeRate != null)
309
+ feeRate = Math.max(feeRate, options.minFeeRate);
310
+ let result;
311
+ if (targetChain != null && this.root.supportsSwapType(targetChain, SwapType_1.SwapType.SPV_VAULT_FROM_BTC)) {
312
+ result = await bitcoinWallet.getSpendableBalance(this.getRandomSpvVaultPsbt(targetChain, options?.gasDrop), feeRate);
313
+ }
314
+ else {
315
+ result = await bitcoinWallet.getSpendableBalance(undefined, feeRate);
316
+ }
317
+ return {
318
+ balance: (0, TokenAmount_1.toTokenAmount)(result.balance, Token_1.BitcoinTokens.BTC, this.root.prices),
319
+ feeRate: result.feeRate
320
+ };
321
+ }
322
+ /**
323
+ * Returns the maximum spendable balance of the wallet, deducting the fee needed to initiate a swap for native balances
324
+ */
325
+ async getSpendableBalance(wallet, token, options) {
326
+ if (this.root.chains[token.chainId] == null)
327
+ throw new Error("Invalid chain identifier! Unknown chain: " + token.chainId);
328
+ const { swapContract, chainInterface } = this.root.chains[token.chainId];
329
+ let signer;
330
+ if (typeof (wallet) === "string") {
331
+ signer = wallet;
332
+ }
333
+ else {
334
+ const abstractSigner = (0, base_1.isAbstractSigner)(wallet) ? wallet : await chainInterface.wrapSigner(wallet);
335
+ signer = abstractSigner.getAddress();
336
+ }
337
+ let finalBalance;
338
+ if (chainInterface.getNativeCurrencyAddress() !== token.address) {
339
+ finalBalance = await chainInterface.getBalance(signer, token.address);
340
+ }
341
+ else {
342
+ let [balance, commitFee] = await Promise.all([
343
+ chainInterface.getBalance(signer, token.address),
344
+ swapContract.getCommitFee(signer,
345
+ //Use large amount, such that the fee for wrapping more tokens is always included!
346
+ await swapContract.createSwapData(base_1.ChainSwapType.HTLC, signer, chainInterface.randomAddress(), token.address, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn, swapContract.getHashForHtlc((0, Utils_1.randomBytes)(32)).toString("hex"), base_1.BigIntBufferUtils.fromBuffer((0, Utils_1.randomBytes)(8)), BigInt(Math.floor(Date.now() / 1000)), true, false, base_1.BigIntBufferUtils.fromBuffer((0, Utils_1.randomBytes)(2)), base_1.BigIntBufferUtils.fromBuffer((0, Utils_1.randomBytes)(2))), options?.feeRate)
347
+ ]);
348
+ if (options?.feeMultiplier != null) {
349
+ commitFee = commitFee * (BigInt(Math.floor(options.feeMultiplier * 1000000))) / 1000000n;
350
+ }
351
+ finalBalance = (0, Utils_1.bigIntMax)(balance - commitFee, 0n);
352
+ }
353
+ return (0, TokenAmount_1.toTokenAmount)(finalBalance, token, this.root.prices);
354
+ }
355
+ /**
356
+ * Returns the address of the native currency of the chain
357
+ */
358
+ getNativeToken(chainIdentifier) {
359
+ if (this.root.chains[chainIdentifier] == null)
360
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
361
+ return this.root.tokens[chainIdentifier][this.root.chains[chainIdentifier].chainInterface.getNativeCurrencyAddress()];
362
+ }
363
+ /**
364
+ * Returns a random signer for a given smart chain
365
+ *
366
+ * @param chainIdentifier
367
+ */
368
+ randomSigner(chainIdentifier) {
369
+ if (this.root.chains[chainIdentifier] == null)
370
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
371
+ return this.root.chains[chainIdentifier].chainInterface.randomSigner();
372
+ }
373
+ /**
374
+ * Returns a random address for a given smart chain
375
+ *
376
+ * @param chainIdentifier
377
+ */
378
+ randomAddress(chainIdentifier) {
379
+ if (this.root.chains[chainIdentifier] == null)
380
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
381
+ return this.root.chains[chainIdentifier].chainInterface.randomAddress();
382
+ }
383
+ /**
384
+ * Signs and broadcasts the supplied smart chain transaction
385
+ */
386
+ sendAndConfirm(chainIdentifier, signer, txs, abortSignal, onBeforePublish) {
387
+ if (this.root.chains[chainIdentifier] == null)
388
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
389
+ return this.root.chains[chainIdentifier].chainInterface.sendAndConfirm(signer, txs, true, abortSignal, false, onBeforePublish);
390
+ }
391
+ /**
392
+ * Broadcasts already signed smart chain transactions
393
+ */
394
+ sendSignedAndConfirm(chainIdentifier, txs, abortSignal, onBeforePublish) {
395
+ if (this.root.chains[chainIdentifier] == null)
396
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
397
+ return this.root.chains[chainIdentifier].chainInterface.sendSignedAndConfirm(txs, true, abortSignal, false, onBeforePublish);
398
+ }
399
+ serializeUnsignedTransaction(chainIdentifier, tx) {
400
+ if (this.root.chains[chainIdentifier] == null)
401
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
402
+ return this.root.chains[chainIdentifier].chainInterface.serializeTx(tx);
403
+ }
404
+ deserializeUnsignedTransaction(chainIdentifier, tx) {
405
+ if (this.root.chains[chainIdentifier] == null)
406
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
407
+ return this.root.chains[chainIdentifier].chainInterface.deserializeTx(tx);
408
+ }
409
+ serializeSignedTransaction(chainIdentifier, tx) {
410
+ if (this.root.chains[chainIdentifier] == null)
411
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
412
+ return this.root.chains[chainIdentifier].chainInterface.serializeSignedTx(tx);
413
+ }
414
+ deserializeSignedTransaction(chainIdentifier, tx) {
415
+ if (this.root.chains[chainIdentifier] == null)
416
+ throw new Error("Invalid chain identifier! Unknown chain: " + chainIdentifier);
417
+ return this.root.chains[chainIdentifier].chainInterface.deserializeSignedTx(tx);
418
+ }
419
+ }
420
+ exports.SwapperUtils = SwapperUtils;
@@ -0,0 +1,214 @@
1
+ import { IntermediaryDiscovery, SwapBounds } from "../intermediaries/IntermediaryDiscovery";
2
+ import { SwapType } from "../enums/SwapType";
3
+ import { LnForGasSwap } from "../swaps/trusted/ln/LnForGasSwap";
4
+ import { ISwap } from "../swaps/ISwap";
5
+ import { IToBTCSwap } from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
6
+ import { ChainIds, MultiChain, SupportsSwapType, Swapper } from "./Swapper";
7
+ import { FromBTCLNSwap } from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
8
+ import { FromBTCSwap } from "../swaps/escrow_swaps/frombtc/onchain/FromBTCSwap";
9
+ import { ToBTCLNSwap } from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap";
10
+ import { ToBTCSwap } from "../swaps/escrow_swaps/tobtc/onchain/ToBTCSwap";
11
+ import { SwapPriceWithChain } from "../prices/SwapPriceWithChain";
12
+ import { MempoolApi } from "../bitcoin/mempool/MempoolApi";
13
+ import { MempoolBitcoinRpc } from "../bitcoin/mempool/MempoolBitcoinRpc";
14
+ import { BTC_NETWORK } from "@scure/btc-signer/utils";
15
+ import { ToBTCOptions } from "../swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper";
16
+ import { InvoiceCreateService, ToBTCLNOptions } from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper";
17
+ import { FromBTCOptions } from "../swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper";
18
+ import { FromBTCLNOptions } from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper";
19
+ import { SwapperUtils } from "./SwapperUtils";
20
+ import { SpvFromBTCOptions } from "../swaps/spv_swaps/SpvFromBTCWrapper";
21
+ import { SpvFromBTCSwap } from "../swaps/spv_swaps/SpvFromBTCSwap";
22
+ import { OnchainForGasSwap } from "../swaps/trusted/onchain/OnchainForGasSwap";
23
+ import { SwapperWithSigner } from "./SwapperWithSigner";
24
+ import { FromBTCLNAutoOptions } from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper";
25
+ import { FromBTCLNAutoSwap } from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap";
26
+ import { SwapAmountType } from "../enums/SwapAmountType";
27
+ import { IClaimableSwap } from "../swaps/IClaimableSwap";
28
+ import { TokenAmount } from "../types/TokenAmount";
29
+ import { BtcToken, SCToken, Token } from "../types/Token";
30
+ import { LNURLWithdraw } from "../types/lnurl/LNURLWithdraw";
31
+ import { LNURLPay } from "../types/lnurl/LNURLPay";
32
+ /**
33
+ * Chain-specific wrapper around Swapper for a particular blockchain
34
+ * @category Core
35
+ */
36
+ export declare class SwapperWithChain<T extends MultiChain, ChainIdentifier extends ChainIds<T>> {
37
+ readonly chainIdentifier: ChainIdentifier;
38
+ readonly swapper: Swapper<T>;
39
+ readonly prices: SwapPriceWithChain<T, ChainIdentifier>;
40
+ get intermediaryDiscovery(): IntermediaryDiscovery;
41
+ get mempoolApi(): MempoolApi;
42
+ get bitcoinRpc(): MempoolBitcoinRpc;
43
+ get bitcoinNetwork(): BTC_NETWORK;
44
+ get Utils(): SwapperUtils<T>;
45
+ get SwapTypeInfo(): {
46
+ readonly 2: {
47
+ readonly requiresInputWallet: true;
48
+ readonly requiresOutputWallet: false;
49
+ readonly supportsGasDrop: false;
50
+ };
51
+ readonly 3: {
52
+ readonly requiresInputWallet: true;
53
+ readonly requiresOutputWallet: false;
54
+ readonly supportsGasDrop: false;
55
+ };
56
+ readonly 0: {
57
+ readonly requiresInputWallet: false;
58
+ readonly requiresOutputWallet: true;
59
+ readonly supportsGasDrop: false;
60
+ };
61
+ readonly 1: {
62
+ readonly requiresInputWallet: false;
63
+ readonly requiresOutputWallet: true;
64
+ readonly supportsGasDrop: false;
65
+ };
66
+ readonly 6: {
67
+ readonly requiresInputWallet: true;
68
+ readonly requiresOutputWallet: false;
69
+ readonly supportsGasDrop: true;
70
+ };
71
+ readonly 7: {
72
+ readonly requiresInputWallet: false;
73
+ readonly requiresOutputWallet: false;
74
+ readonly supportsGasDrop: true;
75
+ };
76
+ readonly 4: {
77
+ readonly requiresInputWallet: false;
78
+ readonly requiresOutputWallet: false;
79
+ readonly supportsGasDrop: false;
80
+ };
81
+ readonly 5: {
82
+ readonly requiresInputWallet: false;
83
+ readonly requiresOutputWallet: false;
84
+ readonly supportsGasDrop: false;
85
+ };
86
+ };
87
+ constructor(swapper: Swapper<T>, chainIdentifier: ChainIdentifier);
88
+ createToBTCSwap(signer: string, tokenAddress: string, address: string, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any>, options?: ToBTCOptions): Promise<ToBTCSwap<T[ChainIdentifier]>>;
89
+ createToBTCLNSwap(signer: string, tokenAddress: string, paymentRequest: string, additionalParams?: Record<string, any>, options?: ToBTCLNOptions & {
90
+ comment?: string;
91
+ }): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
92
+ createToBTCLNSwapViaLNURL(signer: string, tokenAddress: string, lnurlPay: string | LNURLPay, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any>, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
93
+ createToBTCLNSwapViaInvoiceCreateService(signer: string, tokenAddress: string, service: InvoiceCreateService, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any>, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
94
+ createFromBTCSwap(signer: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any>, options?: FromBTCOptions): Promise<FromBTCSwap<T[ChainIdentifier]>>;
95
+ createFromBTCLNSwap(signer: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any>, options?: FromBTCLNOptions): Promise<FromBTCLNSwap<T[ChainIdentifier]>>;
96
+ createFromBTCLNSwapViaLNURL(signer: string, tokenAddress: string, lnurl: string | LNURLWithdraw, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any>): Promise<FromBTCLNSwap<T[ChainIdentifier]>>;
97
+ createFromBTCLNSwapNew(signer: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any>, options?: FromBTCLNAutoOptions): Promise<FromBTCLNAutoSwap<T[ChainIdentifier]>>;
98
+ createFromBTCLNSwapNewViaLNURL(signer: string, tokenAddress: string, lnurl: string | LNURLWithdraw, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any>, options?: FromBTCLNAutoOptions): Promise<FromBTCLNAutoSwap<T[ChainIdentifier]>>;
99
+ createTrustedLNForGasSwap(signer: string, amount: bigint, trustedIntermediaryUrl?: string): Promise<LnForGasSwap<T[ChainIdentifier]>>;
100
+ createTrustedOnchainForGasSwap(signer: string, amount: bigint, refundAddress?: string, trustedIntermediaryUrl?: string): Promise<OnchainForGasSwap<T[ChainIdentifier]>>;
101
+ create(signer: string, srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>, amount: bigint, exactIn: boolean, lnurlWithdraw?: string | LNURLWithdraw): Promise<SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[ChainIdentifier]> : FromBTCLNSwap<T[ChainIdentifier]>>;
102
+ create(signer: string, srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>, amount: bigint, exactIn: boolean): Promise<(SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[ChainIdentifier]> : FromBTCSwap<T[ChainIdentifier]>)>;
103
+ create(signer: string, srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>, amount: bigint, exactIn: boolean, address: string): Promise<ToBTCSwap<T[ChainIdentifier]>>;
104
+ create(signer: string, srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: bigint, exactIn: boolean, lnurlPay: string | LNURLPay): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
105
+ create(signer: string, srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: bigint, exactIn: false, lightningInvoice: string | LNURLWithdraw | LNURLPay): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
106
+ swap(srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string | LNURLWithdraw, dstSmartchainWallet: string, options?: (SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoOptions : FromBTCLNOptions)): Promise<SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[ChainIdentifier]> : FromBTCLNSwap<T[ChainIdentifier]>>;
107
+ swap(srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string, dstSmartchainWallet: string, options?: (SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCOptions : FromBTCOptions)): Promise<(SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[ChainIdentifier]> : FromBTCSwap<T[ChainIdentifier]>)>;
108
+ swap(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>, amount: bigint | string, exactIn: boolean | SwapAmountType, src: string, dstAddress: string, options?: ToBTCOptions): Promise<ToBTCSwap<T[ChainIdentifier]>>;
109
+ swap(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: bigint | string, exactIn: boolean | SwapAmountType, src: string, dstLnurlPayOrInvoiceCreateService: string | LNURLPay | InvoiceCreateService, options?: ToBTCLNOptions & {
110
+ comment?: string;
111
+ }): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
112
+ swap(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: bigint | string, exactIn: false | SwapAmountType.EXACT_OUT, src: string, dstLightningInvoice: string, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
113
+ swap(srcToken: Token<ChainIdentifier> | string, dstToken: Token<ChainIdentifier> | string, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string | LNURLWithdraw, dst: string | LNURLPay | InvoiceCreateService, options?: FromBTCLNOptions | SpvFromBTCOptions | FromBTCOptions | ToBTCOptions | (ToBTCLNOptions & {
114
+ comment?: string;
115
+ }) | FromBTCLNAutoOptions): Promise<ISwap<T[ChainIdentifier]>>;
116
+ /**
117
+ * Returns swaps that are in-progress and are claimable for the specific chain, optionally also for a specific signer's address
118
+ */
119
+ getAllSwaps(signer?: string): Promise<ISwap<T[ChainIdentifier]>[]>;
120
+ /**
121
+ * Returns swaps that are in-progress and are claimable for the specific chain, optionally also for a specific signer's address
122
+ */
123
+ getActionableSwaps(signer?: string): Promise<ISwap<T[ChainIdentifier]>[]>;
124
+ /**
125
+ * Returns swaps that are refundable for the specific chain, optionally also for a specific signer's address
126
+ */
127
+ getRefundableSwaps(signer?: string): Promise<IToBTCSwap<T[ChainIdentifier]>[]>;
128
+ /**
129
+ * Returns swaps that are due to be claimed/settled manually for the specific chain,
130
+ * optionally also for a specific signer's address
131
+ */
132
+ getClaimableSwaps(signer?: string): Promise<IClaimableSwap<T[ChainIdentifier]>[]>;
133
+ /**
134
+ * Returns swap with a specific id (identifier) on a specific chain and optionally with a signer
135
+ */
136
+ getSwapById(id: string, signer?: string): Promise<ISwap<T[ChainIdentifier]>>;
137
+ getToken(tickerOrAddress: string): Token<ChainIdentifier>;
138
+ /**
139
+ * Synchronizes swaps from chain, this is usually ran when SDK is initialized, deletes expired quotes
140
+ */
141
+ _syncSwaps(signer?: string): Promise<void>;
142
+ supportsSwapType<Type extends SwapType>(swapType: Type): SupportsSwapType<T[ChainIdentifier], Type>;
143
+ /**
144
+ * Returns type of the swap based on input and output tokens specified
145
+ *
146
+ * @param srcToken
147
+ * @param dstToken
148
+ */
149
+ getSwapType(srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>): (SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? SwapType.FROM_BTCLN_AUTO : SwapType.FROM_BTCLN);
150
+ getSwapType(srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>): (SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SwapType.SPV_VAULT_FROM_BTC : SwapType.FROM_BTC);
151
+ getSwapType(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>): SwapType.TO_BTC;
152
+ getSwapType(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>): SwapType.TO_BTCLN;
153
+ getSwapType(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN;
154
+ /**
155
+ * Returns minimum/maximum limits for inputs and outputs for a swap between given tokens
156
+ *
157
+ * @param srcToken
158
+ * @param dstToken
159
+ */
160
+ getSwapLimits<A extends Token<ChainIdentifier>, B extends Token<ChainIdentifier>>(srcToken: A, dstToken: B): {
161
+ input: {
162
+ min: TokenAmount<string, A>;
163
+ max?: TokenAmount<string, A>;
164
+ };
165
+ output: {
166
+ min: TokenAmount<string, B>;
167
+ max?: TokenAmount<string, B>;
168
+ };
169
+ };
170
+ /**
171
+ * Returns a set of supported tokens by all the intermediaries offering a specific swap service
172
+ *
173
+ * @param _swapType Swap service type to check supported tokens for
174
+ */
175
+ private getSupportedTokens;
176
+ /**
177
+ * Returns the set of supported tokens by all the intermediaries we know of offering a specific swapType service
178
+ *
179
+ * @param swapType Specific swap type for which to obtain supported tokens
180
+ */
181
+ private getSupportedTokenAddresses;
182
+ /**
183
+ * Returns tokens that you can swap to (if input=true) from a given token,
184
+ * or tokens that you can swap from (if input=false) to a given token
185
+ */
186
+ getSwapCounterTokens(token: Token, input: boolean): Token<ChainIdentifier>[];
187
+ /**
188
+ * Creates a child swapper instance with a signer
189
+ *
190
+ * @param signer Signer to use for the new swapper instance
191
+ */
192
+ withChain(signer: T[ChainIdentifier]["Signer"]): SwapperWithSigner<T, ChainIdentifier>;
193
+ /**
194
+ * Returns swap bounds (minimums & maximums) for different swap types & tokens
195
+ * @deprecated Use getSwapLimits() instead!
196
+ */
197
+ getSwapBounds(): SwapBounds;
198
+ /**
199
+ * Returns maximum possible swap amount
200
+ * @deprecated Use getSwapLimits() instead!
201
+ *
202
+ * @param type Type of the swap
203
+ * @param token Token of the swap
204
+ */
205
+ getMaximum(type: SwapType, token: string): bigint;
206
+ /**
207
+ * Returns minimum possible swap amount
208
+ * @deprecated Use getSwapLimits() instead!
209
+ *
210
+ * @param type Type of swap
211
+ * @param token Token of the swap
212
+ */
213
+ getMinimum(type: SwapType, token: string): bigint;
214
+ }