@atomiqlabs/sdk 8.8.3 → 8.8.4

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 (339) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +1760 -1760
  3. package/dist/SmartChainAssets.d.ts +181 -181
  4. package/dist/SmartChainAssets.js +181 -181
  5. package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -7
  6. package/dist/bitcoin/coinselect2/accumulative.js +52 -52
  7. package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -7
  8. package/dist/bitcoin/coinselect2/blackjack.js +38 -38
  9. package/dist/bitcoin/coinselect2/index.d.ts +20 -20
  10. package/dist/bitcoin/coinselect2/index.js +69 -69
  11. package/dist/bitcoin/coinselect2/utils.d.ts +82 -82
  12. package/dist/bitcoin/coinselect2/utils.js +158 -158
  13. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -113
  14. package/dist/bitcoin/wallet/BitcoinWallet.js +335 -335
  15. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -116
  16. package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
  17. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -106
  18. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -196
  19. package/dist/enums/FeeType.d.ts +15 -15
  20. package/dist/enums/FeeType.js +19 -19
  21. package/dist/enums/SwapAmountType.d.ts +15 -15
  22. package/dist/enums/SwapAmountType.js +19 -19
  23. package/dist/enums/SwapDirection.d.ts +15 -15
  24. package/dist/enums/SwapDirection.js +19 -19
  25. package/dist/enums/SwapSide.d.ts +15 -15
  26. package/dist/enums/SwapSide.js +19 -19
  27. package/dist/enums/SwapType.d.ts +75 -75
  28. package/dist/enums/SwapType.js +79 -79
  29. package/dist/errors/IntermediaryError.d.ts +13 -13
  30. package/dist/errors/IntermediaryError.js +27 -27
  31. package/dist/errors/RequestError.d.ts +32 -32
  32. package/dist/errors/RequestError.js +54 -54
  33. package/dist/errors/UserError.d.ts +8 -8
  34. package/dist/errors/UserError.js +16 -16
  35. package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
  36. package/dist/events/UnifiedSwapEventListener.js +132 -132
  37. package/dist/http/HttpUtils.d.ts +27 -27
  38. package/dist/http/HttpUtils.js +91 -91
  39. package/dist/http/paramcoders/IParamReader.d.ts +8 -8
  40. package/dist/http/paramcoders/IParamReader.js +2 -2
  41. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
  42. package/dist/http/paramcoders/ParamDecoder.js +137 -137
  43. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
  44. package/dist/http/paramcoders/ParamEncoder.js +36 -36
  45. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
  46. package/dist/http/paramcoders/SchemaVerifier.js +145 -145
  47. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
  48. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
  49. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
  50. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
  51. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
  52. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -174
  53. package/dist/index.d.ts +85 -85
  54. package/dist/index.js +158 -158
  55. package/dist/intermediaries/Intermediary.d.ts +178 -178
  56. package/dist/intermediaries/Intermediary.js +166 -166
  57. package/dist/intermediaries/IntermediaryDiscovery.d.ts +211 -211
  58. package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
  59. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +450 -450
  60. package/dist/intermediaries/apis/IntermediaryAPI.js +618 -618
  61. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
  62. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
  63. package/dist/lnurl/LNURL.d.ts +102 -102
  64. package/dist/lnurl/LNURL.js +321 -321
  65. package/dist/prices/RedundantSwapPrice.d.ts +110 -110
  66. package/dist/prices/RedundantSwapPrice.js +222 -222
  67. package/dist/prices/SingleSwapPrice.d.ts +34 -34
  68. package/dist/prices/SingleSwapPrice.js +44 -44
  69. package/dist/prices/SwapPriceWithChain.d.ts +107 -107
  70. package/dist/prices/SwapPriceWithChain.js +128 -128
  71. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
  72. package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
  73. package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
  74. package/dist/prices/abstract/IPriceProvider.js +74 -74
  75. package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
  76. package/dist/prices/abstract/ISwapPrice.js +279 -279
  77. package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
  78. package/dist/prices/providers/BinancePriceProvider.js +30 -30
  79. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
  80. package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
  81. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
  82. package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
  83. package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
  84. package/dist/prices/providers/CustomPriceProvider.js +35 -35
  85. package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
  86. package/dist/prices/providers/KrakenPriceProvider.js +45 -45
  87. package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
  88. package/dist/prices/providers/OKXPriceProvider.js +29 -29
  89. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
  90. package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
  91. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
  92. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
  93. package/dist/storage/IUnifiedStorage.d.ts +85 -85
  94. package/dist/storage/IUnifiedStorage.js +2 -2
  95. package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
  96. package/dist/storage/UnifiedSwapStorage.js +116 -116
  97. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
  98. package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
  99. package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
  100. package/dist/storage-browser/LocalStorageManager.js +93 -93
  101. package/dist/swapper/Swapper.d.ts +732 -732
  102. package/dist/swapper/Swapper.js +1713 -1713
  103. package/dist/swapper/SwapperFactory.d.ts +135 -135
  104. package/dist/swapper/SwapperFactory.js +162 -162
  105. package/dist/swapper/SwapperUtils.d.ts +206 -206
  106. package/dist/swapper/SwapperUtils.js +481 -481
  107. package/dist/swapper/SwapperWithChain.d.ts +404 -404
  108. package/dist/swapper/SwapperWithChain.js +469 -469
  109. package/dist/swapper/SwapperWithSigner.d.ts +322 -322
  110. package/dist/swapper/SwapperWithSigner.js +318 -318
  111. package/dist/swaps/IAddressSwap.d.ts +22 -22
  112. package/dist/swaps/IAddressSwap.js +14 -14
  113. package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
  114. package/dist/swaps/IBTCWalletSwap.js +18 -18
  115. package/dist/swaps/IClaimableSwap.d.ts +49 -49
  116. package/dist/swaps/IClaimableSwap.js +15 -15
  117. package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
  118. package/dist/swaps/IClaimableSwapWrapper.js +2 -2
  119. package/dist/swaps/IRefundableSwap.d.ts +43 -43
  120. package/dist/swaps/IRefundableSwap.js +14 -14
  121. package/dist/swaps/ISwap.d.ts +392 -392
  122. package/dist/swaps/ISwap.js +349 -349
  123. package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
  124. package/dist/swaps/ISwapWithGasDrop.js +12 -12
  125. package/dist/swaps/ISwapWrapper.d.ts +285 -285
  126. package/dist/swaps/ISwapWrapper.js +353 -353
  127. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
  128. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
  129. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
  130. package/dist/swaps/escrow_swaps/IEscrowSwap.js +170 -170
  131. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +128 -128
  132. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
  133. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +105 -105
  134. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +129 -129
  135. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
  136. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
  137. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
  138. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
  139. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +531 -531
  140. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
  141. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +190 -190
  142. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
  143. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -583
  144. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
  145. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +235 -235
  146. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
  147. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
  148. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
  149. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +202 -202
  150. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
  151. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
  152. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
  153. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
  154. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
  155. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
  156. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
  157. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +251 -251
  158. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +536 -536
  159. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
  160. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
  161. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +132 -132
  162. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
  163. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +637 -637
  164. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1448 -1448
  165. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +257 -257
  166. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
  167. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
  168. package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
  169. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
  170. package/dist/swaps/trusted/ln/LnForGasWrapper.js +83 -83
  171. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
  172. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
  173. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -69
  174. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
  175. package/dist/types/AmountData.d.ts +10 -10
  176. package/dist/types/AmountData.js +2 -2
  177. package/dist/types/CustomPriceFunction.d.ts +11 -11
  178. package/dist/types/CustomPriceFunction.js +2 -2
  179. package/dist/types/PriceInfoType.d.ts +28 -28
  180. package/dist/types/PriceInfoType.js +57 -57
  181. package/dist/types/SwapExecutionAction.d.ts +88 -88
  182. package/dist/types/SwapExecutionAction.js +2 -2
  183. package/dist/types/SwapStateInfo.d.ts +5 -5
  184. package/dist/types/SwapStateInfo.js +2 -2
  185. package/dist/types/SwapWithSigner.d.ts +17 -17
  186. package/dist/types/SwapWithSigner.js +43 -43
  187. package/dist/types/Token.d.ts +99 -99
  188. package/dist/types/Token.js +76 -76
  189. package/dist/types/TokenAmount.d.ts +69 -69
  190. package/dist/types/TokenAmount.js +60 -60
  191. package/dist/types/fees/Fee.d.ts +50 -50
  192. package/dist/types/fees/Fee.js +2 -2
  193. package/dist/types/fees/FeeBreakdown.d.ts +11 -11
  194. package/dist/types/fees/FeeBreakdown.js +2 -2
  195. package/dist/types/fees/PercentagePPM.d.ts +17 -17
  196. package/dist/types/fees/PercentagePPM.js +18 -18
  197. package/dist/types/lnurl/LNURLPay.d.ts +61 -61
  198. package/dist/types/lnurl/LNURLPay.js +31 -31
  199. package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
  200. package/dist/types/lnurl/LNURLWithdraw.js +27 -27
  201. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
  202. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
  203. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
  204. package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
  205. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
  206. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
  207. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
  208. package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
  209. package/dist/utils/BitcoinUtils.d.ts +16 -16
  210. package/dist/utils/BitcoinUtils.js +141 -141
  211. package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
  212. package/dist/utils/BitcoinWalletUtils.js +14 -14
  213. package/dist/utils/Logger.d.ts +7 -7
  214. package/dist/utils/Logger.js +12 -12
  215. package/dist/utils/RetryUtils.d.ts +22 -22
  216. package/dist/utils/RetryUtils.js +67 -67
  217. package/dist/utils/SwapUtils.d.ts +88 -88
  218. package/dist/utils/SwapUtils.js +72 -72
  219. package/dist/utils/TimeoutUtils.d.ts +17 -17
  220. package/dist/utils/TimeoutUtils.js +55 -55
  221. package/dist/utils/TokenUtils.d.ts +19 -19
  222. package/dist/utils/TokenUtils.js +37 -37
  223. package/dist/utils/TypeUtils.d.ts +7 -7
  224. package/dist/utils/TypeUtils.js +2 -2
  225. package/dist/utils/Utils.d.ts +67 -67
  226. package/dist/utils/Utils.js +208 -208
  227. package/package.json +43 -43
  228. package/src/SmartChainAssets.ts +186 -186
  229. package/src/bitcoin/coinselect2/accumulative.ts +69 -69
  230. package/src/bitcoin/coinselect2/blackjack.ts +50 -50
  231. package/src/bitcoin/coinselect2/index.ts +93 -93
  232. package/src/bitcoin/coinselect2/utils.ts +236 -236
  233. package/src/bitcoin/wallet/BitcoinWallet.ts +439 -439
  234. package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -140
  235. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -225
  236. package/src/enums/FeeType.ts +15 -15
  237. package/src/enums/SwapAmountType.ts +16 -16
  238. package/src/enums/SwapDirection.ts +15 -15
  239. package/src/enums/SwapSide.ts +16 -16
  240. package/src/enums/SwapType.ts +75 -75
  241. package/src/errors/IntermediaryError.ts +28 -28
  242. package/src/errors/RequestError.ts +64 -64
  243. package/src/errors/UserError.ts +15 -15
  244. package/src/events/UnifiedSwapEventListener.ts +173 -173
  245. package/src/http/HttpUtils.ts +91 -91
  246. package/src/http/paramcoders/IParamReader.ts +9 -9
  247. package/src/http/paramcoders/ParamDecoder.ts +145 -145
  248. package/src/http/paramcoders/ParamEncoder.ts +40 -40
  249. package/src/http/paramcoders/SchemaVerifier.ts +153 -153
  250. package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
  251. package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
  252. package/src/http/paramcoders/client/StreamingFetchPromise.ts +192 -192
  253. package/src/index.ts +140 -140
  254. package/src/intermediaries/Intermediary.ts +280 -280
  255. package/src/intermediaries/IntermediaryDiscovery.ts +541 -541
  256. package/src/intermediaries/apis/IntermediaryAPI.ts +963 -963
  257. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -257
  258. package/src/lnurl/LNURL.ts +402 -402
  259. package/src/prices/RedundantSwapPrice.ts +264 -264
  260. package/src/prices/SingleSwapPrice.ts +50 -50
  261. package/src/prices/SwapPriceWithChain.ts +194 -194
  262. package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
  263. package/src/prices/abstract/IPriceProvider.ts +127 -127
  264. package/src/prices/abstract/ISwapPrice.ts +390 -390
  265. package/src/prices/providers/BinancePriceProvider.ts +48 -48
  266. package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
  267. package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
  268. package/src/prices/providers/CustomPriceProvider.ts +40 -40
  269. package/src/prices/providers/KrakenPriceProvider.ts +83 -83
  270. package/src/prices/providers/OKXPriceProvider.ts +59 -59
  271. package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
  272. package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
  273. package/src/storage/IUnifiedStorage.ts +95 -95
  274. package/src/storage/UnifiedSwapStorage.ts +141 -141
  275. package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
  276. package/src/storage-browser/LocalStorageManager.ts +106 -106
  277. package/src/swapper/Swapper.ts +2488 -2488
  278. package/src/swapper/SwapperFactory.ts +307 -307
  279. package/src/swapper/SwapperUtils.ts +570 -570
  280. package/src/swapper/SwapperWithChain.ts +707 -707
  281. package/src/swapper/SwapperWithSigner.ts +511 -511
  282. package/src/swaps/IAddressSwap.ts +30 -30
  283. package/src/swaps/IBTCWalletSwap.ts +92 -92
  284. package/src/swaps/IClaimableSwap.ts +65 -65
  285. package/src/swaps/IClaimableSwapWrapper.ts +17 -17
  286. package/src/swaps/IRefundableSwap.ts +58 -58
  287. package/src/swaps/ISwap.ts +703 -703
  288. package/src/swaps/ISwapWithGasDrop.ts +25 -25
  289. package/src/swaps/ISwapWrapper.ts +539 -539
  290. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
  291. package/src/swaps/escrow_swaps/IEscrowSwap.ts +269 -269
  292. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +282 -282
  293. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +169 -169
  294. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
  295. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
  296. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1473 -1474
  297. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +601 -601
  298. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1582 -1582
  299. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +750 -750
  300. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1299 -1299
  301. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +610 -610
  302. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1096 -1096
  303. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
  304. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
  305. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +786 -786
  306. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
  307. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +401 -401
  308. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1812 -1812
  309. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1236 -1236
  310. package/src/swaps/trusted/ln/LnForGasSwap.ts +589 -589
  311. package/src/swaps/trusted/ln/LnForGasWrapper.ts +91 -91
  312. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +862 -862
  313. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +131 -131
  314. package/src/types/AmountData.ts +9 -9
  315. package/src/types/CustomPriceFunction.ts +11 -11
  316. package/src/types/PriceInfoType.ts +66 -66
  317. package/src/types/SwapExecutionAction.ts +99 -99
  318. package/src/types/SwapStateInfo.ts +6 -6
  319. package/src/types/SwapWithSigner.ts +61 -61
  320. package/src/types/Token.ts +163 -163
  321. package/src/types/TokenAmount.ts +132 -132
  322. package/src/types/fees/Fee.ts +56 -56
  323. package/src/types/fees/FeeBreakdown.ts +11 -11
  324. package/src/types/fees/PercentagePPM.ts +26 -26
  325. package/src/types/lnurl/LNURLPay.ts +79 -79
  326. package/src/types/lnurl/LNURLWithdraw.ts +61 -61
  327. package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
  328. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
  329. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
  330. package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
  331. package/src/utils/BitcoinUtils.ts +132 -132
  332. package/src/utils/BitcoinWalletUtils.ts +15 -15
  333. package/src/utils/Logger.ts +14 -14
  334. package/src/utils/RetryUtils.ts +78 -78
  335. package/src/utils/SwapUtils.ts +99 -99
  336. package/src/utils/TimeoutUtils.ts +49 -49
  337. package/src/utils/TokenUtils.ts +33 -33
  338. package/src/utils/TypeUtils.ts +8 -8
  339. package/src/utils/Utils.ts +212 -212
@@ -1,732 +1,732 @@
1
- /// <reference types="node" />
2
- import { ISwapPrice } from "../prices/abstract/ISwapPrice";
3
- import { BitcoinNetwork, BitcoinRpcWithAddressIndex, BtcBlock, BtcRelay, ChainData, ChainType, LightningNetworkApi, Messenger, RelaySynchronizer } from "@atomiqlabs/base";
4
- import { ToBTCLNOptions, ToBTCLNWrapper } from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper";
5
- import { ToBTCOptions, ToBTCWrapper } from "../swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper";
6
- import { FromBTCLNOptions, FromBTCLNWrapper } from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper";
7
- import { FromBTCOptions, FromBTCWrapper } from "../swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper";
8
- import { IntermediaryDiscovery } from "../intermediaries/IntermediaryDiscovery";
9
- import { ISwap } from "../swaps/ISwap";
10
- import { SwapType } from "../enums/SwapType";
11
- import { FromBTCLNSwap } from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
12
- import { FromBTCSwap } from "../swaps/escrow_swaps/frombtc/onchain/FromBTCSwap";
13
- import { ToBTCLNSwap } from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap";
14
- import { ToBTCSwap } from "../swaps/escrow_swaps/tobtc/onchain/ToBTCSwap";
15
- import { LnForGasWrapper } from "../swaps/trusted/ln/LnForGasWrapper";
16
- import { LnForGasSwap } from "../swaps/trusted/ln/LnForGasSwap";
17
- import { EventEmitter } from "events";
18
- import { Intermediary } from "../intermediaries/Intermediary";
19
- import { SwapperWithChain } from "./SwapperWithChain";
20
- import { OnchainForGasSwap } from "../swaps/trusted/onchain/OnchainForGasSwap";
21
- import { OnchainForGasWrapper } from "../swaps/trusted/onchain/OnchainForGasWrapper";
22
- import { BTC_NETWORK } from "@scure/btc-signer/utils";
23
- import { IUnifiedStorage } from "../storage/IUnifiedStorage";
24
- import { UnifiedSwapStorage, UnifiedSwapStorageCompositeIndexes, UnifiedSwapStorageIndexes } from "../storage/UnifiedSwapStorage";
25
- import { UnifiedSwapEventListener } from "../events/UnifiedSwapEventListener";
26
- import { IToBTCSwap } from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
27
- import { SpvFromBTCOptions, SpvFromBTCWrapper } from "../swaps/spv_swaps/SpvFromBTCWrapper";
28
- import { SpvFromBTCSwap } from "../swaps/spv_swaps/SpvFromBTCSwap";
29
- import { SwapperUtils } from "./SwapperUtils";
30
- import { FromBTCLNAutoOptions, FromBTCLNAutoWrapper } from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper";
31
- import { FromBTCLNAutoSwap } from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap";
32
- import { SwapAmountType } from "../enums/SwapAmountType";
33
- import { IClaimableSwap } from "../swaps/IClaimableSwap";
34
- import { SwapTypeMapping } from "../utils/SwapUtils";
35
- import { TokenAmount } from "../types/TokenAmount";
36
- import { BtcToken, SCToken, Token } from "../types/Token";
37
- import { LNURLWithdraw } from "../types/lnurl/LNURLWithdraw";
38
- import { LNURLPay } from "../types/lnurl/LNURLPay";
39
- import { NotNever } from "../utils/TypeUtils";
40
- import { LightningInvoiceCreateService } from "../types/wallets/LightningInvoiceCreateService";
41
- import { SwapSide } from "../enums/SwapSide";
42
- import { BitcoinWalletUtxo, IBitcoinWallet } from "../bitcoin/wallet/IBitcoinWallet";
43
- import { MinimalBitcoinWalletInterface } from "../types/wallets/MinimalBitcoinWalletInterface";
44
- /**
45
- * Configuration options for the Swapper
46
- * @category Core
47
- */
48
- export type SwapperOptions = {
49
- /**
50
- * Manual override for the intermediary (LP) URLs for the SDK to use, by default these are fetched automatically
51
- * from the registry
52
- */
53
- intermediaryUrl?: string | string[];
54
- /**
55
- * Registry URL for where to look for active intermediary (LP) endpoint URLs
56
- */
57
- registryUrl?: string;
58
- /**
59
- * Bitcoin network to use for the swaps,
60
- */
61
- bitcoinNetwork?: BitcoinNetwork;
62
- /**
63
- * Timeout (in milliseconds) for HTTP GET requests done by the SDK
64
- */
65
- getRequestTimeout?: number;
66
- /**
67
- * Timeout (in milliseconds) for HTTP POST requests done by the SDK
68
- */
69
- postRequestTimeout?: number;
70
- /**
71
- * Additional parameters to be sent to the intermediaries (LPs), when requesting quotes from them
72
- */
73
- defaultAdditionalParameters?: {
74
- [key: string]: any;
75
- };
76
- /**
77
- * Optional name prefix to use when creating a swap storage, you can use this to create separate storage
78
- * instances that don't overlap.
79
- */
80
- storagePrefix?: string;
81
- /**
82
- * Sets the default intermediary (LP) to use for the trusted gas swaps, if not set the SDK uses a default one
83
- */
84
- defaultTrustedIntermediaryUrl?: string;
85
- /**
86
- * A function callback to retrieve a specific named storage container for swap persistency. If not present, the
87
- * default IndexedDB storage adapter is used. When you use the SDK in non-browser based environments you need to
88
- * provide this callback such that the SDK is able to use a custom storage adapter.
89
- *
90
- * @param storageName Name of the container to retrieve
91
- */
92
- swapStorage?: (storageName: string) => IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>;
93
- /**
94
- * By setting this flag, the swapper doesn't schedule automatic tick timers. To make sure the swap states are
95
- * properly updated (e.g. the expired swaps properly move to the expired state), you should call the
96
- * {@link Swapper._syncSwaps} function periodically. This flag should be set when you run an environment that
97
- * doesn't support long-running timers - e.g. serverless environments like Azure Function Apps or AWS Lambda
98
- */
99
- noTimers?: boolean;
100
- /**
101
- * By setting this flag, the swapper doesn't subscribe to on-chain events. To make sure the swap states are
102
- * properly updated you should call the {@link Swapper._syncSwaps} function periodically. This flag should be
103
- * set when you run an environment that doesn't support long-running timers and websocket connections - e.g.
104
- * serverless environments like Azure Function Apps or AWS Lambda
105
- */
106
- noEvents?: boolean;
107
- /**
108
- * By setting this flag, the swap objects will not be cached in the SDK and instead will always be loaded from
109
- * the persistent storage. By default, the SDK uses a `WeakRef` mapping of swaps, to ensure that when the same
110
- * swap is loaded concurrently, it returns the same object reference to both, making the changes on the object
111
- * atomic. This flag should be set to `true` when running in an environment where multiple instances of the SDK
112
- * access the same swap database - e.g. serverless environments like Azure Function Apps or AWS Lambda
113
- */
114
- noSwapCache?: boolean;
115
- /**
116
- * Skip checking past swaps when the swapper is initiated with {@link Swapper.init}, you can call the
117
- * {@link Swapper._syncSwaps} function later, to check the swaps. By default, the SDK checks the state
118
- * of all the known swaps during init.
119
- */
120
- dontCheckPastSwaps?: boolean;
121
- /**
122
- * Skip fetching the LPs when the swapper is initiated with {@link Swapper.init}, this means the list of available
123
- * tokens and swap limits won't be available immediately. LPs will be fetched automatically later, when a swap
124
- * is requested
125
- */
126
- dontFetchLPs?: boolean;
127
- /**
128
- * Defaults to `true`, this means every swap regardless of it being initiated (i.e. when `commit()`, `execute()` or
129
- * `waitTillPayment` is called) is saved to the persistent storage. This is a reasonable default for when you
130
- * want to only create a swap, and then later on retrieve it with the `swapper.getSwapById()` function.
131
- *
132
- * Setting this to `false` means the SDK only saves and persists swaps that are considered initiated, i.e. when
133
- * `commit()`, `execute()` or `waitTillPayment` is called (or their respective txs... prefixed variations). This
134
- * might save calls to the persistent storage for swaps that are never initiated. This is useful in e.g.
135
- * frontend implementations where the frontend holds the swap object reference until it is initiated anyway, not
136
- * necessitating the saving of the swap data to the persistent storage until it is actually initiated.
137
- */
138
- saveUninitializedSwaps?: boolean;
139
- /**
140
- * Automatically checks system time on initialize, if the system time drifts too far from the actual time
141
- * (as checked from multiple server sources) it adjusts the `Date.now()` function to return proper actual time.
142
- */
143
- automaticClockDriftCorrection?: boolean;
144
- };
145
- /**
146
- * Type representing multiple blockchain configurations
147
- * @category Core
148
- */
149
- export type MultiChain = {
150
- [chainIdentifier in string]: ChainType;
151
- };
152
- type ChainSpecificData<T extends ChainType> = {
153
- wrappers: {
154
- [SwapType.TO_BTCLN]: ToBTCLNWrapper<T>;
155
- [SwapType.TO_BTC]: ToBTCWrapper<T>;
156
- [SwapType.FROM_BTCLN]: FromBTCLNWrapper<T>;
157
- [SwapType.FROM_BTC]: FromBTCWrapper<T>;
158
- [SwapType.TRUSTED_FROM_BTCLN]: LnForGasWrapper<T>;
159
- [SwapType.TRUSTED_FROM_BTC]: OnchainForGasWrapper<T>;
160
- [SwapType.SPV_VAULT_FROM_BTC]: SpvFromBTCWrapper<T>;
161
- [SwapType.FROM_BTCLN_AUTO]: FromBTCLNAutoWrapper<T>;
162
- };
163
- chainEvents: T["Events"];
164
- chainInterface: T["ChainInterface"];
165
- unifiedChainEvents: UnifiedSwapEventListener<T>;
166
- unifiedSwapStorage: UnifiedSwapStorage<T>;
167
- reviver: (val: any) => ISwap<T>;
168
- defaultVersion: string;
169
- versionedContracts: {
170
- [contractVersion: string]: {
171
- swapContract: T["Contract"];
172
- spvVaultContract: T["SpvVaultContract"];
173
- btcRelay: BtcRelay<any, T["TX"], BtcBlock, T["Signer"]>;
174
- synchronizer: RelaySynchronizer<any, T["TX"], BtcBlock>;
175
- };
176
- };
177
- };
178
- type MultiChainData<T extends MultiChain> = {
179
- [chainIdentifier in keyof T]: ChainSpecificData<T[chainIdentifier]>;
180
- };
181
- type CtorMultiChainData<T extends MultiChain> = {
182
- [chainIdentifier in keyof T]: ChainData<T[chainIdentifier]>;
183
- };
184
- /**
185
- * Type extracting chain identifiers from a MultiChain type
186
- * @category Core
187
- */
188
- export type ChainIds<T extends MultiChain> = keyof T & string;
189
- /**
190
- * Type helper to check if a chain supports a specific swap type
191
- * @category Core
192
- */
193
- export type SupportsSwapType<C extends ChainType, Type extends SwapType> = Type extends SwapType.SPV_VAULT_FROM_BTC ? NotNever<C["SpvVaultContract"]> : Type extends (SwapType.TRUSTED_FROM_BTCLN | SwapType.TRUSTED_FROM_BTC) ? true : Type extends SwapType.FROM_BTCLN_AUTO ? (C["Contract"]["supportsInitWithoutClaimer"] extends true ? true : false) : NotNever<C["Contract"]>;
194
- /**
195
- * Core orchestrator for all atomiq swap operations
196
- *
197
- * @category Core
198
- */
199
- export declare class Swapper<T extends MultiChain> extends EventEmitter<{
200
- lpsRemoved: [Intermediary[]];
201
- lpsAdded: [Intermediary[]];
202
- swapState: [ISwap];
203
- swapLimitsChanged: [];
204
- }> {
205
- private readonly logger;
206
- private readonly swapStateListener;
207
- private defaultTrustedIntermediary?;
208
- private readonly bitcoinNetwork;
209
- private readonly options;
210
- /**
211
- * Data propagation layer used for broadcasting messages to watchtowers
212
- */
213
- private readonly messenger;
214
- /**
215
- * A dictionary of smart chains used by the SDK
216
- * @internal
217
- */
218
- readonly _chains: MultiChainData<T>;
219
- /**
220
- * Bitcoin RPC for fetching bitcoin chain data
221
- * @internal
222
- */
223
- readonly _bitcoinRpc: BitcoinRpcWithAddressIndex<any>;
224
- /**
225
- * Bitcoin network specification
226
- * @internal
227
- */
228
- readonly _btcNetwork: BTC_NETWORK;
229
- /**
230
- * Token data indexed by chain identifier and token addresses
231
- * @internal
232
- */
233
- readonly _tokens: {
234
- [chainId: string]: {
235
- [tokenAddress: string]: SCToken;
236
- };
237
- };
238
- /**
239
- * Token data indexed by chain identifier and token tickers
240
- * @internal
241
- */
242
- readonly _tokensByTicker: {
243
- [chainId: string]: {
244
- [tokenTicker: string]: SCToken;
245
- };
246
- };
247
- /**
248
- * Pricing API used by the SDK
249
- */
250
- readonly prices: ISwapPrice<T>;
251
- /**
252
- * Intermediary discovery instance
253
- */
254
- readonly intermediaryDiscovery: IntermediaryDiscovery;
255
- /**
256
- * Miscellaneous utility functions
257
- */
258
- readonly Utils: SwapperUtils<T>;
259
- /**
260
- * @internal
261
- */
262
- constructor(bitcoinRpc: BitcoinRpcWithAddressIndex<any>, lightningApi: LightningNetworkApi, bitcoinSynchronizer: (btcRelay: BtcRelay<any, any, any>) => RelaySynchronizer<any, any, any>, chainsData: CtorMultiChainData<T>, pricing: ISwapPrice<T>, tokens: SCToken[], messenger: Messenger, options?: SwapperOptions);
263
- private _init;
264
- private initPromise?;
265
- private initialized;
266
- /**
267
- * Initializes the swap storage and loads existing swaps, needs to be called before any other action
268
- */
269
- init(): Promise<void>;
270
- /**
271
- * Stops listening for onchain events and closes this Swapper instance
272
- */
273
- stop(): Promise<void>;
274
- /**
275
- * Creates swap & handles intermediary, quote selection
276
- *
277
- * @param chainIdentifier
278
- * @param create Callback to create the
279
- * @param amountData Amount data as passed to the function
280
- * @param swapType Swap type of the execution
281
- * @param maxWaitTimeMS Maximum waiting time after the first intermediary returns the quote
282
- * @private
283
- * @throws {Error} when no intermediary was found
284
- * @throws {Error} if the chain with the provided identifier cannot be found
285
- */
286
- private createSwap;
287
- /**
288
- * Creates Smart chain -> Bitcoin ({@link SwapType.TO_BTC}) swap
289
- *
290
- * @param chainIdentifier Chain identifier string of the source smart chain
291
- * @param signer Signer's address on the source chain
292
- * @param tokenAddress Token address to pay with
293
- * @param address Recipient's bitcoin address
294
- * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
295
- * @param exactIn Whether to use exact in instead of exact out
296
- * @param additionalParams Additional parameters sent to the LP when creating the swap
297
- * @param options Additional options for the swap
298
- */
299
- createToBTCSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, address: string, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any> | undefined, options?: ToBTCOptions): Promise<ToBTCSwap<T[ChainIdentifier]>>;
300
- /**
301
- * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap
302
- *
303
- * @param chainIdentifier Chain identifier string of the source smart chain
304
- * @param signer Signer's address on the source chain
305
- * @param tokenAddress Token address to pay with
306
- * @param paymentRequest BOLT11 lightning network invoice to be paid (needs to have a fixed amount), and the swap
307
- * amount is taken from this fixed amount, hence only exact output swaps are supported
308
- * @param additionalParams Additional parameters sent to the LP when creating the swap
309
- * @param options Additional options for the swap
310
- */
311
- createToBTCLNSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, paymentRequest: string, additionalParams?: Record<string, any> | undefined, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
312
- /**
313
- * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via LNURL-pay link
314
- *
315
- * @param chainIdentifier Chain identifier string of the source smart chain
316
- * @param signer Signer's address on the source chain
317
- * @param tokenAddress Token address to pay with
318
- * @param lnurlPay LNURL-pay link to use for the payment
319
- * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
320
- * @param exactIn Whether to do an exact in swap instead of exact out
321
- * @param additionalParams Additional parameters sent to the LP when creating the swap
322
- * @param options Additional options for the swap
323
- */
324
- createToBTCLNSwapViaLNURL<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, lnurlPay: string | LNURLPay, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any> | undefined, options?: ToBTCLNOptions & {
325
- comment?: string;
326
- }): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
327
- /**
328
- * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via {@link LightningInvoiceCreateService}
329
- *
330
- * @param chainIdentifier Chain identifier string of the source smart chain
331
- * @param signer Signer's address on the source chain
332
- * @param tokenAddress Token address to pay with
333
- * @param service Invoice create service object which facilitates the creation of fixed amount LN invoices
334
- * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
335
- * @param exactIn Whether to do an exact in swap instead of exact out
336
- * @param additionalParams Additional parameters sent to the LP when creating the swap
337
- * @param options Additional options for the swap
338
- */
339
- createToBTCLNSwapViaInvoiceCreateService<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, service: LightningInvoiceCreateService, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any> | undefined, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
340
- /**
341
- * Creates Bitcoin -> Smart chain ({@link SwapType.SPV_VAULT_FROM_BTC}) swap
342
- *
343
- * @param chainIdentifier Chain identifier string of the destination smart chain
344
- * @param recipient Recipient address on the destination chain
345
- * @param tokenAddress Token address to receive
346
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
347
- * @param exactOut Whether to use a exact out instead of exact in
348
- * @param additionalParams Additional parameters sent to the LP when creating the swap
349
- * @param options Additional options for the swap
350
- */
351
- createFromBTCSwapNew<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint | null, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: SpvFromBTCOptions): Promise<SpvFromBTCSwap<T[ChainIdentifier]>>;
352
- /**
353
- * Creates LEGACY Bitcoin -> Smart chain ({@link SwapType.FROM_BTC}) swap
354
- *
355
- * @param chainIdentifier Chain identifier string of the destination smart chain
356
- * @param recipient Recipient address on the destination chain
357
- * @param tokenAddress Token address to receive
358
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
359
- * @param exactOut Whether to use a exact out instead of exact in
360
- * @param additionalParams Additional parameters sent to the LP when creating the swap
361
- * @param options Additional options for the swap
362
- */
363
- createFromBTCSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCOptions): Promise<FromBTCSwap<T[ChainIdentifier]>>;
364
- /**
365
- * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap
366
- *
367
- * @param chainIdentifier Chain identifier string of the destination smart chain
368
- * @param recipient Recipient address on the destination chain
369
- * @param tokenAddress Token address to receive
370
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
371
- * @param exactOut Whether to use a exact out instead of exact in
372
- * @param additionalParams Additional parameters sent to the LP when creating the swap
373
- * @param options Additional options for the swap
374
- */
375
- createFromBTCLNSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNOptions): Promise<FromBTCLNSwap<T[ChainIdentifier]>>;
376
- /**
377
- * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap, withdrawing from
378
- * an LNURL-withdraw link
379
- *
380
- * @param chainIdentifier Chain identifier string of the destination smart chain
381
- * @param recipient Recipient address on the destination chain
382
- * @param tokenAddress Token address to receive
383
- * @param lnurl LNURL-withdraw link to pull the funds from
384
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
385
- * @param exactOut Whether to use a exact out instead of exact in
386
- * @param additionalParams Additional parameters sent to the LP when creating the swap
387
- * @param options Additional options for the swap
388
- */
389
- createFromBTCLNSwapViaLNURL<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, lnurl: string | LNURLWithdraw, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNOptions): Promise<FromBTCLNSwap<T[ChainIdentifier]>>;
390
- /**
391
- * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap
392
- *
393
- * @param chainIdentifier Chain identifier string of the destination smart chain
394
- * @param recipient Recipient address on the destination chain
395
- * @param tokenAddress Token address to receive
396
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
397
- * @param exactOut Whether to use a exact out instead of exact in
398
- * @param additionalParams Additional parameters sent to the LP when creating the swap
399
- * @param options Additional options for the swap
400
- */
401
- createFromBTCLNSwapNew<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNAutoOptions): Promise<FromBTCLNAutoSwap<T[ChainIdentifier]>>;
402
- /**
403
- * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap, withdrawing from
404
- * an LNURL-withdraw link
405
- *
406
- * @param chainIdentifier Chain identifier string of the destination smart chain
407
- * @param recipient Recipient address on the destination chain
408
- * @param tokenAddress Token address to receive
409
- * @param lnurl LNURL-withdraw link to pull the funds from
410
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
411
- * @param exactOut Whether to use a exact out instead of exact in
412
- * @param additionalParams Additional parameters sent to the LP when creating the swap
413
- * @param options Additional options for the swap
414
- */
415
- createFromBTCLNSwapNewViaLNURL<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, lnurl: string | LNURLWithdraw, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNAutoOptions): Promise<FromBTCLNAutoSwap<T[ChainIdentifier]>>;
416
- /**
417
- * Creates a trusted Bitcoin Lightning -> Smart chain ({@link SwapType.TRUSTED_FROM_BTCLN}) gas swap
418
- *
419
- * @param chainIdentifier Chain identifier string of the destination smart chain
420
- * @param recipient Recipient address on the destination chain
421
- * @param amount Amount of native token to receive, in base units
422
- * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
423
- * @throws {Error} If no trusted intermediary specified
424
- */
425
- createTrustedLNForGasSwap<C extends ChainIds<T>>(chainIdentifier: C, recipient: string, amount: bigint, trustedIntermediaryOrUrl?: Intermediary | string): Promise<LnForGasSwap<T[C]>>;
426
- /**
427
- * Creates a trusted Bitcoin -> Smart chain ({@link SwapType.TRUSTED_FROM_BTC}) gas swap
428
- *
429
- * @param chainIdentifier Chain identifier string of the destination smart chain
430
- * @param recipient Recipient address on the destination chain
431
- * @param amount Amount of native token to receive, in base units
432
- * @param refundAddress Bitcoin refund address, in case the swap fails the funds are refunded here
433
- * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
434
- * @throws {Error} If no trusted intermediary specified
435
- */
436
- createTrustedOnchainForGasSwap<C extends ChainIds<T>>(chainIdentifier: C, recipient: string, amount: bigint, refundAddress?: string, trustedIntermediaryOrUrl?: Intermediary | string): Promise<OnchainForGasSwap<T[C]>>;
437
- /**
438
- * @internal
439
- */
440
- create<C extends ChainIds<T>>(signer: string, srcToken: BtcToken<true>, dstToken: SCToken<C>, amount: bigint, exactIn: boolean, lnurlWithdraw?: string | LNURLWithdraw): Promise<(SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[C]> : FromBTCLNSwap<T[C]>)>;
441
- /**
442
- * @internal
443
- */
444
- create<C extends ChainIds<T>>(signer: string, srcToken: BtcToken<false>, dstToken: SCToken<C>, amount: bigint, exactIn: boolean): Promise<(SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[C]> : FromBTCSwap<T[C]>)>;
445
- /**
446
- * @internal
447
- */
448
- create<C extends ChainIds<T>>(signer: string, srcToken: SCToken<C>, dstToken: BtcToken<false>, amount: bigint, exactIn: boolean, address: string): Promise<ToBTCSwap<T[C]>>;
449
- /**
450
- * @internal
451
- */
452
- create<C extends ChainIds<T>>(signer: string, srcToken: SCToken<C>, dstToken: BtcToken<true>, amount: bigint, exactIn: boolean, lnurlPay: string | LNURLPay): Promise<ToBTCLNSwap<T[C]>>;
453
- /**
454
- * @internal
455
- */
456
- create<C extends ChainIds<T>>(signer: string, srcToken: SCToken<C>, dstToken: BtcToken<true>, amount: undefined, exactIn: false, lightningInvoice: string): Promise<ToBTCLNSwap<T[C]>>;
457
- /**
458
- * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (exactIn=true)
459
- * or output amount (exactIn=false), NOTE: For regular -> BTC-LN (lightning) swaps the passed amount is ignored and
460
- * invoice's pre-set amount is used instead.
461
- * @deprecated Use {@link swap} instead
462
- *
463
- * @param signer Smartchain (Solana, Starknet, etc.) address of the user
464
- * @param srcToken Source token of the swap, user pays this token
465
- * @param dstToken Destination token of the swap, user receives this token
466
- * @param amount Amount of the swap
467
- * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
468
- * @param addressLnurlLightningInvoice Bitcoin on-chain address, lightning invoice, LNURL-pay to pay or
469
- * LNURL-withdrawal to withdraw money from
470
- */
471
- create<C extends ChainIds<T>>(signer: string, srcToken: Token<C>, dstToken: Token<C>, amount: bigint | undefined, exactIn: boolean, addressLnurlLightningInvoice?: string | LNURLWithdraw | LNURLPay): Promise<ISwap<T[C]>>;
472
- /**
473
- * @internal
474
- */
475
- swap<C extends ChainIds<T>>(srcToken: BtcToken<true> | "BTCLN" | "BTC-LN" | "LIGHTNING-BTC", dstToken: SCToken<C> | string, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string | LNURLWithdraw, dstSmartchainWallet: string, options?: (SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoOptions : FromBTCLNOptions)): Promise<(SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[C]> : FromBTCLNSwap<T[C]>)>;
476
- /**
477
- * @internal
478
- */
479
- swap<C extends ChainIds<T>>(srcToken: BtcToken<false> | "BTC" | "BITCOIN-BTC", dstToken: SCToken<C> | string, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string, dstSmartchainWallet: string, options?: (SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCOptions : FromBTCOptions)): Promise<(SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[C]> : FromBTCSwap<T[C]>)>;
480
- /**
481
- * @internal
482
- */
483
- swap<C extends ChainIds<T>>(srcToken: SCToken<C> | string, dstToken: BtcToken<false> | "BTC" | "BITCOIN-BTC", amount: bigint | string, exactIn: boolean | SwapAmountType, src: string, dstAddress: string, options?: ToBTCOptions): Promise<ToBTCSwap<T[C]>>;
484
- /**
485
- * @internal
486
- */
487
- swap<C extends ChainIds<T>>(srcToken: SCToken<C> | string, dstToken: BtcToken<true> | "BTCLN" | "BTC-LN" | "LIGHTNING-BTC", amount: bigint | string, exactIn: boolean | SwapAmountType, src: string, dstLnurlPayOrInvoiceCreateService: string | LNURLPay | LightningInvoiceCreateService, options?: ToBTCLNOptions & {
488
- comment?: string;
489
- }): Promise<ToBTCLNSwap<T[C]>>;
490
- /**
491
- * @internal
492
- */
493
- swap<C extends ChainIds<T>>(srcToken: SCToken<C> | string, dstToken: BtcToken<true> | "BTCLN" | "BTC-LN" | "LIGHTNING-BTC", amount: undefined, exactIn: false | SwapAmountType.EXACT_OUT, src: string, dstLightningInvoice: string, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[C]>>;
494
- /**
495
- * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (if `exactIn=true`)
496
- * or output amount (if `exactIn=false`), NOTE: For regular Smart chain -> BTC-LN (lightning) swaps the passed amount is ignored and
497
- * invoice's pre-set amount is used instead, use LNURL-pay links for dynamic amounts
498
- *
499
- * @param srcToken Source token of the swap, user pays this token
500
- * @param dstToken Destination token of the swap, user receives this token
501
- * @param amount Amount of the swap either in base units as {bigint} or in human readable format (with decimals) as {string}
502
- * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
503
- * @param src Source wallet/lnurl-withdraw of the swap
504
- * @param dst Destination smart chain address, bitcoin on-chain address, lightning invoice, LNURL-pay
505
- * @param options Options for the swap
506
- */
507
- swap<C extends ChainIds<T>>(srcToken: Token<C> | string, dstToken: Token<C> | string, amount: bigint | string | undefined, exactIn: boolean | SwapAmountType, src: undefined | string | LNURLWithdraw, dst: string | LNURLPay | LightningInvoiceCreateService, options?: FromBTCLNOptions | SpvFromBTCOptions | FromBTCOptions | ToBTCOptions | (ToBTCLNOptions & {
508
- comment?: string;
509
- }) | FromBTCLNAutoOptions): Promise<ISwap<T[C]>>;
510
- /**
511
- * A helper function to sweep all the funds from a given wallet in a single swap, after getting the quote you can
512
- * execute the swap by passing the returned `feeRate` and `utxos` to the {@link SpvFromBTCSwap.execute},
513
- * {@link SpvFromBTCSwap.getFundedPsbt} or {@link SpvFromBTCSwap.sendBitcoinTransaction} functions along
514
- * with `spendFully=true`.
515
- *
516
- * @example
517
- * Create the swap first using this function
518
- * ```ts
519
- * const {swap, utxos, btcFeeRate} = await swapper.sweepBitcoinWallet(wallet, Tokens.CITREA.CBTC, dstAddress);
520
- * ```
521
- * Then execute it using one of these execution paths - ensure that you supply the returned `utxos`, `btcFeeRate`
522
- * params and also set `spendFully` to `true`!
523
- *
524
- * a) Execute and pass the returned utxos and btcFeeRate:
525
- * ```ts
526
- * await swap.execute(wallet, undefined, {feeRate: btcFeeRate, utxos: utxos, spendFully: true});
527
- * ```
528
- *
529
- * b) Get funded PSBT to sign externally:
530
- * ```ts
531
- * const {psbt, psbtHex, psbtBase64, signInputs} = await swap.getFundedPsbt(wallet, btcFeeRate, undefined, utxos, true);
532
- * // Sign the psbt at the specified signInputs indices
533
- * const signedPsbt = ...;
534
- * // Then submit back to the SDK
535
- * await swap.submitPsbt(signedPsbt);
536
- * ```
537
- *
538
- * c) Only sign and send the signed PSBT with the provided wallet:
539
- * ```ts
540
- * await swap.sendBitcoinTransaction(wallet, btcFeeRate, utxos, true);
541
- * ```
542
- */
543
- sweepBitcoinWallet<C extends ChainIds<T>>(srcWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, _dstToken: SCToken<C> | string, dstAddress: string, options?: SpvFromBTCOptions): Promise<{
544
- swap: SpvFromBTCSwap<T[C]>;
545
- utxos: BitcoinWalletUtxo[];
546
- btcFeeRate: number;
547
- }>;
548
- /**
549
- * Returns all swaps
550
- */
551
- getAllSwaps(): Promise<ISwap[]>;
552
- /**
553
- * Returns all swaps for the specific chain, and optionally also for a specific signer's address
554
- */
555
- getAllSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<ISwap<T[C]>[]>;
556
- /**
557
- * Returns all swaps where an action is required (either claim or refund)
558
- */
559
- getActionableSwaps(): Promise<ISwap[]>;
560
- /**
561
- * Returns swaps where an action is required (either claim or refund) for the specific chain, and optionally also for a specific signer's address
562
- */
563
- getActionableSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<ISwap<T[C]>[]>;
564
- /**
565
- * Returns all swaps that are refundable
566
- */
567
- getRefundableSwaps(): Promise<IToBTCSwap[]>;
568
- /**
569
- * Returns swaps which are refundable for the specific chain, and optionally also for a specific signer's address
570
- */
571
- getRefundableSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<IToBTCSwap<T[C]>[]>;
572
- /**
573
- * Returns all swaps that are manually claimable
574
- */
575
- getClaimableSwaps(): Promise<IClaimableSwap[]>;
576
- /**
577
- * Returns all swaps that are manually claimable for the specific chain, and optionally also for a specific signer's address
578
- */
579
- getClaimableSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<IClaimableSwap<T[C]>[]>;
580
- /**
581
- * Returns swap with a specific id (identifier)
582
- */
583
- getSwapById(id: string): Promise<ISwap>;
584
- /**
585
- * Returns swap with a specific id (identifier) on a specific chain and optionally with a signer
586
- */
587
- getSwapById<C extends ChainIds<T>>(id: string, chainId: C, signer?: string): Promise<ISwap<T[C]>>;
588
- /**
589
- * Returns the swap with a proper return type, or `undefined` if not found or has wrong type
590
- *
591
- * @param id An ID of the swap ({@link ISwap.getId})
592
- * @param chainId Chain identifier of the smart chain where the swap was initiated
593
- * @param swapType Type of the swap
594
- * @param signer An optional required smart chain signer address to fetch the swap for
595
- */
596
- getTypedSwapById<C extends ChainIds<T>, S extends SwapType>(id: string, chainId: C, swapType: S, signer?: string): Promise<SwapTypeMapping<T[C]>[S] | undefined>;
597
- private syncSwapsForChain;
598
- /**
599
- * Deletes the swaps from the persistent storage backend. Note that some data (like lightning network
600
- * amounts and bolt11 invoices) are purely off-chain and can never be recovered later just from
601
- * on-chain data!
602
- *
603
- * @param chainId Optional, to only delete swaps for this smart chain
604
- * @param signer Optional, to only delete swaps for this smart chain signer (`chainId` param must be
605
- * set to delete only signer's swaps)
606
- */
607
- wipeStorage<C extends ChainIds<T>>(chainId?: C, signer?: string): Promise<void>;
608
- /**
609
- * Synchronizes swaps from on-chain, this is ran automatically when SDK is initialized, hence
610
- * should only be ran manually when `dontCheckPastSwaps=true` is passed in the swapper options,
611
- * also deletes expired quotes
612
- *
613
- * @param chainId Optional chain identifier to only run swap sync for a single smart chain
614
- * @param signer Optional signer to only run swap sync for swaps initiated by this signer
615
- */
616
- _syncSwaps<C extends ChainIds<T>>(chainId?: C, signer?: string): Promise<void>;
617
- /**
618
- * Recovers swaps from on-chain historical data.
619
- *
620
- * Please note that the recovered swaps might not be complete (i.e. missing amounts or addresses), as some
621
- * of the swap data is purely off-chain and can never be recovered purely from on-chain data. This
622
- * functions tries to recover as much swap data as possible.
623
- *
624
- * @param chainId Smart chain identifier string to recover the swaps from
625
- * @param signer Signer address to recover the swaps for
626
- * @param startBlockheight Optional starting blockheight for swap data recovery, will only check swaps
627
- * initiated after this blockheight
628
- */
629
- recoverSwaps<C extends ChainIds<T>>(chainId: C, signer: string, startBlockheight?: number): Promise<ISwap<T[C]>[]>;
630
- getToken(ticker: "BTC" | "BITCOIN-BTC"): BtcToken<false>;
631
- getToken(ticker: "BTCLN" | "BTC-LN" | "LIGHTNING-BTC"): BtcToken<true>;
632
- getToken<ChainIdentifier extends ChainIds<T>>(ticker: `${ChainIdentifier}-${string}`): SCToken<ChainIdentifier>;
633
- getToken(tickerOrAddress: string): Token<ChainIds<T>>;
634
- /**
635
- * Creates a child swapper instance with a given smart chain
636
- *
637
- * @param chainIdentifier Smart chain identifier for the created child swapper instance
638
- */
639
- withChain<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): SwapperWithChain<T, ChainIdentifier>;
640
- /**
641
- * Returns an array of all the supported smart chains
642
- */
643
- getSmartChains(): ChainIds<T>[];
644
- /**
645
- * Returns whether the SDK supports a given swap type on a given chain based on currently known LPs
646
- *
647
- * @param chainId Smart chain identifier string
648
- * @param swapType Swap protocol type
649
- */
650
- supportsSwapType<ChainIdentifier extends ChainIds<T>, Type extends SwapType>(chainId: ChainIdentifier, swapType: Type): SupportsSwapType<T[ChainIdentifier], Type>;
651
- /**
652
- * @internal
653
- */
654
- getSwapType<C extends ChainIds<T>>(srcToken: BtcToken<true>, dstToken: SCToken<C>): (SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? SwapType.FROM_BTCLN_AUTO : SwapType.FROM_BTCLN);
655
- /**
656
- * @internal
657
- */
658
- getSwapType<C extends ChainIds<T>>(srcToken: BtcToken<false>, dstToken: SCToken<C>): (SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SwapType.SPV_VAULT_FROM_BTC : SwapType.FROM_BTC);
659
- /**
660
- * @internal
661
- */
662
- getSwapType<C extends ChainIds<T>>(srcToken: SCToken<C>, dstToken: BtcToken<false>): SwapType.TO_BTC;
663
- /**
664
- * @internal
665
- */
666
- getSwapType<C extends ChainIds<T>>(srcToken: SCToken<C>, dstToken: BtcToken<true>): SwapType.TO_BTCLN;
667
- /**
668
- * Returns type of the swap based on input and output tokens specified
669
- *
670
- * @param srcToken Source token
671
- * @param dstToken Destination token
672
- */
673
- getSwapType<C extends ChainIds<T>>(srcToken: Token<C>, dstToken: Token<C>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN;
674
- /**
675
- * Helper information about various swap protocol and their features:
676
- * - `requiresInputWallet`: Whether a swap requires a connected wallet on the input chain able to sign
677
- * arbitrary transaction
678
- * - `requiresOutputWallet`: Whether a swap requires a connected wallet on the output chain able to sign
679
- * arbitrary transactions
680
- * - `supportsGasDrop`: Whether a swap supports the "gas drop" feature, allowing to user to receive a small
681
- * amount of native token as part of the swap when swapping to smart chains
682
- *
683
- * Uses a `Record` type here, use the {@link SwapProtocolInfo} import for a literal readonly type, with
684
- * pre-filled exact values in the type.
685
- */
686
- readonly SwapTypeInfo: Record<SwapType, {
687
- requiresInputWallet: boolean;
688
- requiresOutputWallet: boolean;
689
- supportsGasDrop: boolean;
690
- }>;
691
- /**
692
- * Returns minimum/maximum limits for inputs and outputs for a swap between given tokens
693
- *
694
- * @param srcToken Source token
695
- * @param dstToken Destination token
696
- */
697
- getSwapLimits<C extends ChainIds<T>, A extends Token<C>, B extends Token<C>>(srcToken: A, dstToken: B): {
698
- input: {
699
- min: TokenAmount<A>;
700
- max?: TokenAmount<A>;
701
- };
702
- output: {
703
- min: TokenAmount<B>;
704
- max?: TokenAmount<B>;
705
- };
706
- };
707
- /**
708
- * Returns an array of supported tokens either on the input or on the output of a swap
709
- *
710
- * @param input Whether to return input tokens or output tokens
711
- */
712
- getSupportedTokens(input: SwapSide | boolean): Token[];
713
- /**
714
- * Returns a set of supported tokens by all the intermediaries offering a specific swap service
715
- *
716
- * @param _swapType Swap service type to check supported tokens for
717
- */
718
- private getSupportedTokensForSwapType;
719
- /**
720
- * Returns the set of supported token addresses by all the intermediaries we know of offering a specific swapType service
721
- *
722
- * @param chainIdentifier Chain identifier string
723
- * @param swapType Specific swap type for which to obtain supported tokens
724
- */
725
- private getSupportedTokenAddresses;
726
- /**
727
- * Returns tokens that you can swap to (if input=true) from a given token,
728
- * or tokens that you can swap from (if input=false) to a given token
729
- */
730
- getSwapCounterTokens(token: Token, input: SwapSide | boolean): Token[];
731
- }
732
- export {};
1
+ /// <reference types="node" />
2
+ import { ISwapPrice } from "../prices/abstract/ISwapPrice";
3
+ import { BitcoinNetwork, BitcoinRpcWithAddressIndex, BtcBlock, BtcRelay, ChainData, ChainType, LightningNetworkApi, Messenger, RelaySynchronizer } from "@atomiqlabs/base";
4
+ import { ToBTCLNOptions, ToBTCLNWrapper } from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper";
5
+ import { ToBTCOptions, ToBTCWrapper } from "../swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper";
6
+ import { FromBTCLNOptions, FromBTCLNWrapper } from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper";
7
+ import { FromBTCOptions, FromBTCWrapper } from "../swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper";
8
+ import { IntermediaryDiscovery } from "../intermediaries/IntermediaryDiscovery";
9
+ import { ISwap } from "../swaps/ISwap";
10
+ import { SwapType } from "../enums/SwapType";
11
+ import { FromBTCLNSwap } from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
12
+ import { FromBTCSwap } from "../swaps/escrow_swaps/frombtc/onchain/FromBTCSwap";
13
+ import { ToBTCLNSwap } from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap";
14
+ import { ToBTCSwap } from "../swaps/escrow_swaps/tobtc/onchain/ToBTCSwap";
15
+ import { LnForGasWrapper } from "../swaps/trusted/ln/LnForGasWrapper";
16
+ import { LnForGasSwap } from "../swaps/trusted/ln/LnForGasSwap";
17
+ import { EventEmitter } from "events";
18
+ import { Intermediary } from "../intermediaries/Intermediary";
19
+ import { SwapperWithChain } from "./SwapperWithChain";
20
+ import { OnchainForGasSwap } from "../swaps/trusted/onchain/OnchainForGasSwap";
21
+ import { OnchainForGasWrapper } from "../swaps/trusted/onchain/OnchainForGasWrapper";
22
+ import { BTC_NETWORK } from "@scure/btc-signer/utils";
23
+ import { IUnifiedStorage } from "../storage/IUnifiedStorage";
24
+ import { UnifiedSwapStorage, UnifiedSwapStorageCompositeIndexes, UnifiedSwapStorageIndexes } from "../storage/UnifiedSwapStorage";
25
+ import { UnifiedSwapEventListener } from "../events/UnifiedSwapEventListener";
26
+ import { IToBTCSwap } from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
27
+ import { SpvFromBTCOptions, SpvFromBTCWrapper } from "../swaps/spv_swaps/SpvFromBTCWrapper";
28
+ import { SpvFromBTCSwap } from "../swaps/spv_swaps/SpvFromBTCSwap";
29
+ import { SwapperUtils } from "./SwapperUtils";
30
+ import { FromBTCLNAutoOptions, FromBTCLNAutoWrapper } from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper";
31
+ import { FromBTCLNAutoSwap } from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap";
32
+ import { SwapAmountType } from "../enums/SwapAmountType";
33
+ import { IClaimableSwap } from "../swaps/IClaimableSwap";
34
+ import { SwapTypeMapping } from "../utils/SwapUtils";
35
+ import { TokenAmount } from "../types/TokenAmount";
36
+ import { BtcToken, SCToken, Token } from "../types/Token";
37
+ import { LNURLWithdraw } from "../types/lnurl/LNURLWithdraw";
38
+ import { LNURLPay } from "../types/lnurl/LNURLPay";
39
+ import { NotNever } from "../utils/TypeUtils";
40
+ import { LightningInvoiceCreateService } from "../types/wallets/LightningInvoiceCreateService";
41
+ import { SwapSide } from "../enums/SwapSide";
42
+ import { BitcoinWalletUtxo, IBitcoinWallet } from "../bitcoin/wallet/IBitcoinWallet";
43
+ import { MinimalBitcoinWalletInterface } from "../types/wallets/MinimalBitcoinWalletInterface";
44
+ /**
45
+ * Configuration options for the Swapper
46
+ * @category Core
47
+ */
48
+ export type SwapperOptions = {
49
+ /**
50
+ * Manual override for the intermediary (LP) URLs for the SDK to use, by default these are fetched automatically
51
+ * from the registry
52
+ */
53
+ intermediaryUrl?: string | string[];
54
+ /**
55
+ * Registry URL for where to look for active intermediary (LP) endpoint URLs
56
+ */
57
+ registryUrl?: string;
58
+ /**
59
+ * Bitcoin network to use for the swaps,
60
+ */
61
+ bitcoinNetwork?: BitcoinNetwork;
62
+ /**
63
+ * Timeout (in milliseconds) for HTTP GET requests done by the SDK
64
+ */
65
+ getRequestTimeout?: number;
66
+ /**
67
+ * Timeout (in milliseconds) for HTTP POST requests done by the SDK
68
+ */
69
+ postRequestTimeout?: number;
70
+ /**
71
+ * Additional parameters to be sent to the intermediaries (LPs), when requesting quotes from them
72
+ */
73
+ defaultAdditionalParameters?: {
74
+ [key: string]: any;
75
+ };
76
+ /**
77
+ * Optional name prefix to use when creating a swap storage, you can use this to create separate storage
78
+ * instances that don't overlap.
79
+ */
80
+ storagePrefix?: string;
81
+ /**
82
+ * Sets the default intermediary (LP) to use for the trusted gas swaps, if not set the SDK uses a default one
83
+ */
84
+ defaultTrustedIntermediaryUrl?: string;
85
+ /**
86
+ * A function callback to retrieve a specific named storage container for swap persistency. If not present, the
87
+ * default IndexedDB storage adapter is used. When you use the SDK in non-browser based environments you need to
88
+ * provide this callback such that the SDK is able to use a custom storage adapter.
89
+ *
90
+ * @param storageName Name of the container to retrieve
91
+ */
92
+ swapStorage?: (storageName: string) => IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>;
93
+ /**
94
+ * By setting this flag, the swapper doesn't schedule automatic tick timers. To make sure the swap states are
95
+ * properly updated (e.g. the expired swaps properly move to the expired state), you should call the
96
+ * {@link Swapper._syncSwaps} function periodically. This flag should be set when you run an environment that
97
+ * doesn't support long-running timers - e.g. serverless environments like Azure Function Apps or AWS Lambda
98
+ */
99
+ noTimers?: boolean;
100
+ /**
101
+ * By setting this flag, the swapper doesn't subscribe to on-chain events. To make sure the swap states are
102
+ * properly updated you should call the {@link Swapper._syncSwaps} function periodically. This flag should be
103
+ * set when you run an environment that doesn't support long-running timers and websocket connections - e.g.
104
+ * serverless environments like Azure Function Apps or AWS Lambda
105
+ */
106
+ noEvents?: boolean;
107
+ /**
108
+ * By setting this flag, the swap objects will not be cached in the SDK and instead will always be loaded from
109
+ * the persistent storage. By default, the SDK uses a `WeakRef` mapping of swaps, to ensure that when the same
110
+ * swap is loaded concurrently, it returns the same object reference to both, making the changes on the object
111
+ * atomic. This flag should be set to `true` when running in an environment where multiple instances of the SDK
112
+ * access the same swap database - e.g. serverless environments like Azure Function Apps or AWS Lambda
113
+ */
114
+ noSwapCache?: boolean;
115
+ /**
116
+ * Skip checking past swaps when the swapper is initiated with {@link Swapper.init}, you can call the
117
+ * {@link Swapper._syncSwaps} function later, to check the swaps. By default, the SDK checks the state
118
+ * of all the known swaps during init.
119
+ */
120
+ dontCheckPastSwaps?: boolean;
121
+ /**
122
+ * Skip fetching the LPs when the swapper is initiated with {@link Swapper.init}, this means the list of available
123
+ * tokens and swap limits won't be available immediately. LPs will be fetched automatically later, when a swap
124
+ * is requested
125
+ */
126
+ dontFetchLPs?: boolean;
127
+ /**
128
+ * Defaults to `true`, this means every swap regardless of it being initiated (i.e. when `commit()`, `execute()` or
129
+ * `waitTillPayment` is called) is saved to the persistent storage. This is a reasonable default for when you
130
+ * want to only create a swap, and then later on retrieve it with the `swapper.getSwapById()` function.
131
+ *
132
+ * Setting this to `false` means the SDK only saves and persists swaps that are considered initiated, i.e. when
133
+ * `commit()`, `execute()` or `waitTillPayment` is called (or their respective txs... prefixed variations). This
134
+ * might save calls to the persistent storage for swaps that are never initiated. This is useful in e.g.
135
+ * frontend implementations where the frontend holds the swap object reference until it is initiated anyway, not
136
+ * necessitating the saving of the swap data to the persistent storage until it is actually initiated.
137
+ */
138
+ saveUninitializedSwaps?: boolean;
139
+ /**
140
+ * Automatically checks system time on initialize, if the system time drifts too far from the actual time
141
+ * (as checked from multiple server sources) it adjusts the `Date.now()` function to return proper actual time.
142
+ */
143
+ automaticClockDriftCorrection?: boolean;
144
+ };
145
+ /**
146
+ * Type representing multiple blockchain configurations
147
+ * @category Core
148
+ */
149
+ export type MultiChain = {
150
+ [chainIdentifier in string]: ChainType;
151
+ };
152
+ type ChainSpecificData<T extends ChainType> = {
153
+ wrappers: {
154
+ [SwapType.TO_BTCLN]: ToBTCLNWrapper<T>;
155
+ [SwapType.TO_BTC]: ToBTCWrapper<T>;
156
+ [SwapType.FROM_BTCLN]: FromBTCLNWrapper<T>;
157
+ [SwapType.FROM_BTC]: FromBTCWrapper<T>;
158
+ [SwapType.TRUSTED_FROM_BTCLN]: LnForGasWrapper<T>;
159
+ [SwapType.TRUSTED_FROM_BTC]: OnchainForGasWrapper<T>;
160
+ [SwapType.SPV_VAULT_FROM_BTC]: SpvFromBTCWrapper<T>;
161
+ [SwapType.FROM_BTCLN_AUTO]: FromBTCLNAutoWrapper<T>;
162
+ };
163
+ chainEvents: T["Events"];
164
+ chainInterface: T["ChainInterface"];
165
+ unifiedChainEvents: UnifiedSwapEventListener<T>;
166
+ unifiedSwapStorage: UnifiedSwapStorage<T>;
167
+ reviver: (val: any) => ISwap<T>;
168
+ defaultVersion: string;
169
+ versionedContracts: {
170
+ [contractVersion: string]: {
171
+ swapContract: T["Contract"];
172
+ spvVaultContract: T["SpvVaultContract"];
173
+ btcRelay: BtcRelay<any, T["TX"], BtcBlock, T["Signer"]>;
174
+ synchronizer: RelaySynchronizer<any, T["TX"], BtcBlock>;
175
+ };
176
+ };
177
+ };
178
+ type MultiChainData<T extends MultiChain> = {
179
+ [chainIdentifier in keyof T]: ChainSpecificData<T[chainIdentifier]>;
180
+ };
181
+ type CtorMultiChainData<T extends MultiChain> = {
182
+ [chainIdentifier in keyof T]: ChainData<T[chainIdentifier]>;
183
+ };
184
+ /**
185
+ * Type extracting chain identifiers from a MultiChain type
186
+ * @category Core
187
+ */
188
+ export type ChainIds<T extends MultiChain> = keyof T & string;
189
+ /**
190
+ * Type helper to check if a chain supports a specific swap type
191
+ * @category Core
192
+ */
193
+ export type SupportsSwapType<C extends ChainType, Type extends SwapType> = Type extends SwapType.SPV_VAULT_FROM_BTC ? NotNever<C["SpvVaultContract"]> : Type extends (SwapType.TRUSTED_FROM_BTCLN | SwapType.TRUSTED_FROM_BTC) ? true : Type extends SwapType.FROM_BTCLN_AUTO ? (C["Contract"]["supportsInitWithoutClaimer"] extends true ? true : false) : NotNever<C["Contract"]>;
194
+ /**
195
+ * Core orchestrator for all atomiq swap operations
196
+ *
197
+ * @category Core
198
+ */
199
+ export declare class Swapper<T extends MultiChain> extends EventEmitter<{
200
+ lpsRemoved: [Intermediary[]];
201
+ lpsAdded: [Intermediary[]];
202
+ swapState: [ISwap];
203
+ swapLimitsChanged: [];
204
+ }> {
205
+ private readonly logger;
206
+ private readonly swapStateListener;
207
+ private defaultTrustedIntermediary?;
208
+ private readonly bitcoinNetwork;
209
+ private readonly options;
210
+ /**
211
+ * Data propagation layer used for broadcasting messages to watchtowers
212
+ */
213
+ private readonly messenger;
214
+ /**
215
+ * A dictionary of smart chains used by the SDK
216
+ * @internal
217
+ */
218
+ readonly _chains: MultiChainData<T>;
219
+ /**
220
+ * Bitcoin RPC for fetching bitcoin chain data
221
+ * @internal
222
+ */
223
+ readonly _bitcoinRpc: BitcoinRpcWithAddressIndex<any>;
224
+ /**
225
+ * Bitcoin network specification
226
+ * @internal
227
+ */
228
+ readonly _btcNetwork: BTC_NETWORK;
229
+ /**
230
+ * Token data indexed by chain identifier and token addresses
231
+ * @internal
232
+ */
233
+ readonly _tokens: {
234
+ [chainId: string]: {
235
+ [tokenAddress: string]: SCToken;
236
+ };
237
+ };
238
+ /**
239
+ * Token data indexed by chain identifier and token tickers
240
+ * @internal
241
+ */
242
+ readonly _tokensByTicker: {
243
+ [chainId: string]: {
244
+ [tokenTicker: string]: SCToken;
245
+ };
246
+ };
247
+ /**
248
+ * Pricing API used by the SDK
249
+ */
250
+ readonly prices: ISwapPrice<T>;
251
+ /**
252
+ * Intermediary discovery instance
253
+ */
254
+ readonly intermediaryDiscovery: IntermediaryDiscovery;
255
+ /**
256
+ * Miscellaneous utility functions
257
+ */
258
+ readonly Utils: SwapperUtils<T>;
259
+ /**
260
+ * @internal
261
+ */
262
+ constructor(bitcoinRpc: BitcoinRpcWithAddressIndex<any>, lightningApi: LightningNetworkApi, bitcoinSynchronizer: (btcRelay: BtcRelay<any, any, any>) => RelaySynchronizer<any, any, any>, chainsData: CtorMultiChainData<T>, pricing: ISwapPrice<T>, tokens: SCToken[], messenger: Messenger, options?: SwapperOptions);
263
+ private _init;
264
+ private initPromise?;
265
+ private initialized;
266
+ /**
267
+ * Initializes the swap storage and loads existing swaps, needs to be called before any other action
268
+ */
269
+ init(): Promise<void>;
270
+ /**
271
+ * Stops listening for onchain events and closes this Swapper instance
272
+ */
273
+ stop(): Promise<void>;
274
+ /**
275
+ * Creates swap & handles intermediary, quote selection
276
+ *
277
+ * @param chainIdentifier
278
+ * @param create Callback to create the
279
+ * @param amountData Amount data as passed to the function
280
+ * @param swapType Swap type of the execution
281
+ * @param maxWaitTimeMS Maximum waiting time after the first intermediary returns the quote
282
+ * @private
283
+ * @throws {Error} when no intermediary was found
284
+ * @throws {Error} if the chain with the provided identifier cannot be found
285
+ */
286
+ private createSwap;
287
+ /**
288
+ * Creates Smart chain -> Bitcoin ({@link SwapType.TO_BTC}) swap
289
+ *
290
+ * @param chainIdentifier Chain identifier string of the source smart chain
291
+ * @param signer Signer's address on the source chain
292
+ * @param tokenAddress Token address to pay with
293
+ * @param address Recipient's bitcoin address
294
+ * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
295
+ * @param exactIn Whether to use exact in instead of exact out
296
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
297
+ * @param options Additional options for the swap
298
+ */
299
+ createToBTCSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, address: string, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any> | undefined, options?: ToBTCOptions): Promise<ToBTCSwap<T[ChainIdentifier]>>;
300
+ /**
301
+ * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap
302
+ *
303
+ * @param chainIdentifier Chain identifier string of the source smart chain
304
+ * @param signer Signer's address on the source chain
305
+ * @param tokenAddress Token address to pay with
306
+ * @param paymentRequest BOLT11 lightning network invoice to be paid (needs to have a fixed amount), and the swap
307
+ * amount is taken from this fixed amount, hence only exact output swaps are supported
308
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
309
+ * @param options Additional options for the swap
310
+ */
311
+ createToBTCLNSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, paymentRequest: string, additionalParams?: Record<string, any> | undefined, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
312
+ /**
313
+ * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via LNURL-pay link
314
+ *
315
+ * @param chainIdentifier Chain identifier string of the source smart chain
316
+ * @param signer Signer's address on the source chain
317
+ * @param tokenAddress Token address to pay with
318
+ * @param lnurlPay LNURL-pay link to use for the payment
319
+ * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
320
+ * @param exactIn Whether to do an exact in swap instead of exact out
321
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
322
+ * @param options Additional options for the swap
323
+ */
324
+ createToBTCLNSwapViaLNURL<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, lnurlPay: string | LNURLPay, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any> | undefined, options?: ToBTCLNOptions & {
325
+ comment?: string;
326
+ }): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
327
+ /**
328
+ * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via {@link LightningInvoiceCreateService}
329
+ *
330
+ * @param chainIdentifier Chain identifier string of the source smart chain
331
+ * @param signer Signer's address on the source chain
332
+ * @param tokenAddress Token address to pay with
333
+ * @param service Invoice create service object which facilitates the creation of fixed amount LN invoices
334
+ * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
335
+ * @param exactIn Whether to do an exact in swap instead of exact out
336
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
337
+ * @param options Additional options for the swap
338
+ */
339
+ createToBTCLNSwapViaInvoiceCreateService<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, signer: string, tokenAddress: string, service: LightningInvoiceCreateService, amount: bigint, exactIn?: boolean, additionalParams?: Record<string, any> | undefined, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
340
+ /**
341
+ * Creates Bitcoin -> Smart chain ({@link SwapType.SPV_VAULT_FROM_BTC}) swap
342
+ *
343
+ * @param chainIdentifier Chain identifier string of the destination smart chain
344
+ * @param recipient Recipient address on the destination chain
345
+ * @param tokenAddress Token address to receive
346
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
347
+ * @param exactOut Whether to use a exact out instead of exact in
348
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
349
+ * @param options Additional options for the swap
350
+ */
351
+ createFromBTCSwapNew<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint | null, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: SpvFromBTCOptions): Promise<SpvFromBTCSwap<T[ChainIdentifier]>>;
352
+ /**
353
+ * Creates LEGACY Bitcoin -> Smart chain ({@link SwapType.FROM_BTC}) swap
354
+ *
355
+ * @param chainIdentifier Chain identifier string of the destination smart chain
356
+ * @param recipient Recipient address on the destination chain
357
+ * @param tokenAddress Token address to receive
358
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
359
+ * @param exactOut Whether to use a exact out instead of exact in
360
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
361
+ * @param options Additional options for the swap
362
+ */
363
+ createFromBTCSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCOptions): Promise<FromBTCSwap<T[ChainIdentifier]>>;
364
+ /**
365
+ * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap
366
+ *
367
+ * @param chainIdentifier Chain identifier string of the destination smart chain
368
+ * @param recipient Recipient address on the destination chain
369
+ * @param tokenAddress Token address to receive
370
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
371
+ * @param exactOut Whether to use a exact out instead of exact in
372
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
373
+ * @param options Additional options for the swap
374
+ */
375
+ createFromBTCLNSwap<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNOptions): Promise<FromBTCLNSwap<T[ChainIdentifier]>>;
376
+ /**
377
+ * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap, withdrawing from
378
+ * an LNURL-withdraw link
379
+ *
380
+ * @param chainIdentifier Chain identifier string of the destination smart chain
381
+ * @param recipient Recipient address on the destination chain
382
+ * @param tokenAddress Token address to receive
383
+ * @param lnurl LNURL-withdraw link to pull the funds from
384
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
385
+ * @param exactOut Whether to use a exact out instead of exact in
386
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
387
+ * @param options Additional options for the swap
388
+ */
389
+ createFromBTCLNSwapViaLNURL<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, lnurl: string | LNURLWithdraw, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNOptions): Promise<FromBTCLNSwap<T[ChainIdentifier]>>;
390
+ /**
391
+ * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap
392
+ *
393
+ * @param chainIdentifier Chain identifier string of the destination smart chain
394
+ * @param recipient Recipient address on the destination chain
395
+ * @param tokenAddress Token address to receive
396
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
397
+ * @param exactOut Whether to use a exact out instead of exact in
398
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
399
+ * @param options Additional options for the swap
400
+ */
401
+ createFromBTCLNSwapNew<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNAutoOptions): Promise<FromBTCLNAutoSwap<T[ChainIdentifier]>>;
402
+ /**
403
+ * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap, withdrawing from
404
+ * an LNURL-withdraw link
405
+ *
406
+ * @param chainIdentifier Chain identifier string of the destination smart chain
407
+ * @param recipient Recipient address on the destination chain
408
+ * @param tokenAddress Token address to receive
409
+ * @param lnurl LNURL-withdraw link to pull the funds from
410
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
411
+ * @param exactOut Whether to use a exact out instead of exact in
412
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
413
+ * @param options Additional options for the swap
414
+ */
415
+ createFromBTCLNSwapNewViaLNURL<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, recipient: string, tokenAddress: string, lnurl: string | LNURLWithdraw, amount: bigint, exactOut?: boolean, additionalParams?: Record<string, any> | undefined, options?: FromBTCLNAutoOptions): Promise<FromBTCLNAutoSwap<T[ChainIdentifier]>>;
416
+ /**
417
+ * Creates a trusted Bitcoin Lightning -> Smart chain ({@link SwapType.TRUSTED_FROM_BTCLN}) gas swap
418
+ *
419
+ * @param chainIdentifier Chain identifier string of the destination smart chain
420
+ * @param recipient Recipient address on the destination chain
421
+ * @param amount Amount of native token to receive, in base units
422
+ * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
423
+ * @throws {Error} If no trusted intermediary specified
424
+ */
425
+ createTrustedLNForGasSwap<C extends ChainIds<T>>(chainIdentifier: C, recipient: string, amount: bigint, trustedIntermediaryOrUrl?: Intermediary | string): Promise<LnForGasSwap<T[C]>>;
426
+ /**
427
+ * Creates a trusted Bitcoin -> Smart chain ({@link SwapType.TRUSTED_FROM_BTC}) gas swap
428
+ *
429
+ * @param chainIdentifier Chain identifier string of the destination smart chain
430
+ * @param recipient Recipient address on the destination chain
431
+ * @param amount Amount of native token to receive, in base units
432
+ * @param refundAddress Bitcoin refund address, in case the swap fails the funds are refunded here
433
+ * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
434
+ * @throws {Error} If no trusted intermediary specified
435
+ */
436
+ createTrustedOnchainForGasSwap<C extends ChainIds<T>>(chainIdentifier: C, recipient: string, amount: bigint, refundAddress?: string, trustedIntermediaryOrUrl?: Intermediary | string): Promise<OnchainForGasSwap<T[C]>>;
437
+ /**
438
+ * @internal
439
+ */
440
+ create<C extends ChainIds<T>>(signer: string, srcToken: BtcToken<true>, dstToken: SCToken<C>, amount: bigint, exactIn: boolean, lnurlWithdraw?: string | LNURLWithdraw): Promise<(SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[C]> : FromBTCLNSwap<T[C]>)>;
441
+ /**
442
+ * @internal
443
+ */
444
+ create<C extends ChainIds<T>>(signer: string, srcToken: BtcToken<false>, dstToken: SCToken<C>, amount: bigint, exactIn: boolean): Promise<(SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[C]> : FromBTCSwap<T[C]>)>;
445
+ /**
446
+ * @internal
447
+ */
448
+ create<C extends ChainIds<T>>(signer: string, srcToken: SCToken<C>, dstToken: BtcToken<false>, amount: bigint, exactIn: boolean, address: string): Promise<ToBTCSwap<T[C]>>;
449
+ /**
450
+ * @internal
451
+ */
452
+ create<C extends ChainIds<T>>(signer: string, srcToken: SCToken<C>, dstToken: BtcToken<true>, amount: bigint, exactIn: boolean, lnurlPay: string | LNURLPay): Promise<ToBTCLNSwap<T[C]>>;
453
+ /**
454
+ * @internal
455
+ */
456
+ create<C extends ChainIds<T>>(signer: string, srcToken: SCToken<C>, dstToken: BtcToken<true>, amount: undefined, exactIn: false, lightningInvoice: string): Promise<ToBTCLNSwap<T[C]>>;
457
+ /**
458
+ * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (exactIn=true)
459
+ * or output amount (exactIn=false), NOTE: For regular -> BTC-LN (lightning) swaps the passed amount is ignored and
460
+ * invoice's pre-set amount is used instead.
461
+ * @deprecated Use {@link swap} instead
462
+ *
463
+ * @param signer Smartchain (Solana, Starknet, etc.) address of the user
464
+ * @param srcToken Source token of the swap, user pays this token
465
+ * @param dstToken Destination token of the swap, user receives this token
466
+ * @param amount Amount of the swap
467
+ * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
468
+ * @param addressLnurlLightningInvoice Bitcoin on-chain address, lightning invoice, LNURL-pay to pay or
469
+ * LNURL-withdrawal to withdraw money from
470
+ */
471
+ create<C extends ChainIds<T>>(signer: string, srcToken: Token<C>, dstToken: Token<C>, amount: bigint | undefined, exactIn: boolean, addressLnurlLightningInvoice?: string | LNURLWithdraw | LNURLPay): Promise<ISwap<T[C]>>;
472
+ /**
473
+ * @internal
474
+ */
475
+ swap<C extends ChainIds<T>>(srcToken: BtcToken<true> | "BTCLN" | "BTC-LN" | "LIGHTNING-BTC", dstToken: SCToken<C> | string, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string | LNURLWithdraw, dstSmartchainWallet: string, options?: (SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoOptions : FromBTCLNOptions)): Promise<(SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[C]> : FromBTCLNSwap<T[C]>)>;
476
+ /**
477
+ * @internal
478
+ */
479
+ swap<C extends ChainIds<T>>(srcToken: BtcToken<false> | "BTC" | "BITCOIN-BTC", dstToken: SCToken<C> | string, amount: bigint | string, exactIn: boolean | SwapAmountType, src: undefined | string, dstSmartchainWallet: string, options?: (SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCOptions : FromBTCOptions)): Promise<(SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[C]> : FromBTCSwap<T[C]>)>;
480
+ /**
481
+ * @internal
482
+ */
483
+ swap<C extends ChainIds<T>>(srcToken: SCToken<C> | string, dstToken: BtcToken<false> | "BTC" | "BITCOIN-BTC", amount: bigint | string, exactIn: boolean | SwapAmountType, src: string, dstAddress: string, options?: ToBTCOptions): Promise<ToBTCSwap<T[C]>>;
484
+ /**
485
+ * @internal
486
+ */
487
+ swap<C extends ChainIds<T>>(srcToken: SCToken<C> | string, dstToken: BtcToken<true> | "BTCLN" | "BTC-LN" | "LIGHTNING-BTC", amount: bigint | string, exactIn: boolean | SwapAmountType, src: string, dstLnurlPayOrInvoiceCreateService: string | LNURLPay | LightningInvoiceCreateService, options?: ToBTCLNOptions & {
488
+ comment?: string;
489
+ }): Promise<ToBTCLNSwap<T[C]>>;
490
+ /**
491
+ * @internal
492
+ */
493
+ swap<C extends ChainIds<T>>(srcToken: SCToken<C> | string, dstToken: BtcToken<true> | "BTCLN" | "BTC-LN" | "LIGHTNING-BTC", amount: undefined, exactIn: false | SwapAmountType.EXACT_OUT, src: string, dstLightningInvoice: string, options?: ToBTCLNOptions): Promise<ToBTCLNSwap<T[C]>>;
494
+ /**
495
+ * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (if `exactIn=true`)
496
+ * or output amount (if `exactIn=false`), NOTE: For regular Smart chain -> BTC-LN (lightning) swaps the passed amount is ignored and
497
+ * invoice's pre-set amount is used instead, use LNURL-pay links for dynamic amounts
498
+ *
499
+ * @param srcToken Source token of the swap, user pays this token
500
+ * @param dstToken Destination token of the swap, user receives this token
501
+ * @param amount Amount of the swap either in base units as {bigint} or in human readable format (with decimals) as {string}
502
+ * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
503
+ * @param src Source wallet/lnurl-withdraw of the swap
504
+ * @param dst Destination smart chain address, bitcoin on-chain address, lightning invoice, LNURL-pay
505
+ * @param options Options for the swap
506
+ */
507
+ swap<C extends ChainIds<T>>(srcToken: Token<C> | string, dstToken: Token<C> | string, amount: bigint | string | undefined, exactIn: boolean | SwapAmountType, src: undefined | string | LNURLWithdraw, dst: string | LNURLPay | LightningInvoiceCreateService, options?: FromBTCLNOptions | SpvFromBTCOptions | FromBTCOptions | ToBTCOptions | (ToBTCLNOptions & {
508
+ comment?: string;
509
+ }) | FromBTCLNAutoOptions): Promise<ISwap<T[C]>>;
510
+ /**
511
+ * A helper function to sweep all the funds from a given wallet in a single swap, after getting the quote you can
512
+ * execute the swap by passing the returned `feeRate` and `utxos` to the {@link SpvFromBTCSwap.execute},
513
+ * {@link SpvFromBTCSwap.getFundedPsbt} or {@link SpvFromBTCSwap.sendBitcoinTransaction} functions along
514
+ * with `spendFully=true`.
515
+ *
516
+ * @example
517
+ * Create the swap first using this function
518
+ * ```ts
519
+ * const {swap, utxos, btcFeeRate} = await swapper.sweepBitcoinWallet(wallet, Tokens.CITREA.CBTC, dstAddress);
520
+ * ```
521
+ * Then execute it using one of these execution paths - ensure that you supply the returned `utxos`, `btcFeeRate`
522
+ * params and also set `spendFully` to `true`!
523
+ *
524
+ * a) Execute and pass the returned utxos and btcFeeRate:
525
+ * ```ts
526
+ * await swap.execute(wallet, undefined, {feeRate: btcFeeRate, utxos: utxos, spendFully: true});
527
+ * ```
528
+ *
529
+ * b) Get funded PSBT to sign externally:
530
+ * ```ts
531
+ * const {psbt, psbtHex, psbtBase64, signInputs} = await swap.getFundedPsbt(wallet, btcFeeRate, undefined, utxos, true);
532
+ * // Sign the psbt at the specified signInputs indices
533
+ * const signedPsbt = ...;
534
+ * // Then submit back to the SDK
535
+ * await swap.submitPsbt(signedPsbt);
536
+ * ```
537
+ *
538
+ * c) Only sign and send the signed PSBT with the provided wallet:
539
+ * ```ts
540
+ * await swap.sendBitcoinTransaction(wallet, btcFeeRate, utxos, true);
541
+ * ```
542
+ */
543
+ sweepBitcoinWallet<C extends ChainIds<T>>(srcWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, _dstToken: SCToken<C> | string, dstAddress: string, options?: SpvFromBTCOptions): Promise<{
544
+ swap: SpvFromBTCSwap<T[C]>;
545
+ utxos: BitcoinWalletUtxo[];
546
+ btcFeeRate: number;
547
+ }>;
548
+ /**
549
+ * Returns all swaps
550
+ */
551
+ getAllSwaps(): Promise<ISwap[]>;
552
+ /**
553
+ * Returns all swaps for the specific chain, and optionally also for a specific signer's address
554
+ */
555
+ getAllSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<ISwap<T[C]>[]>;
556
+ /**
557
+ * Returns all swaps where an action is required (either claim or refund)
558
+ */
559
+ getActionableSwaps(): Promise<ISwap[]>;
560
+ /**
561
+ * Returns swaps where an action is required (either claim or refund) for the specific chain, and optionally also for a specific signer's address
562
+ */
563
+ getActionableSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<ISwap<T[C]>[]>;
564
+ /**
565
+ * Returns all swaps that are refundable
566
+ */
567
+ getRefundableSwaps(): Promise<IToBTCSwap[]>;
568
+ /**
569
+ * Returns swaps which are refundable for the specific chain, and optionally also for a specific signer's address
570
+ */
571
+ getRefundableSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<IToBTCSwap<T[C]>[]>;
572
+ /**
573
+ * Returns all swaps that are manually claimable
574
+ */
575
+ getClaimableSwaps(): Promise<IClaimableSwap[]>;
576
+ /**
577
+ * Returns all swaps that are manually claimable for the specific chain, and optionally also for a specific signer's address
578
+ */
579
+ getClaimableSwaps<C extends ChainIds<T>>(chainId: C, signer?: string): Promise<IClaimableSwap<T[C]>[]>;
580
+ /**
581
+ * Returns swap with a specific id (identifier)
582
+ */
583
+ getSwapById(id: string): Promise<ISwap>;
584
+ /**
585
+ * Returns swap with a specific id (identifier) on a specific chain and optionally with a signer
586
+ */
587
+ getSwapById<C extends ChainIds<T>>(id: string, chainId: C, signer?: string): Promise<ISwap<T[C]>>;
588
+ /**
589
+ * Returns the swap with a proper return type, or `undefined` if not found or has wrong type
590
+ *
591
+ * @param id An ID of the swap ({@link ISwap.getId})
592
+ * @param chainId Chain identifier of the smart chain where the swap was initiated
593
+ * @param swapType Type of the swap
594
+ * @param signer An optional required smart chain signer address to fetch the swap for
595
+ */
596
+ getTypedSwapById<C extends ChainIds<T>, S extends SwapType>(id: string, chainId: C, swapType: S, signer?: string): Promise<SwapTypeMapping<T[C]>[S] | undefined>;
597
+ private syncSwapsForChain;
598
+ /**
599
+ * Deletes the swaps from the persistent storage backend. Note that some data (like lightning network
600
+ * amounts and bolt11 invoices) are purely off-chain and can never be recovered later just from
601
+ * on-chain data!
602
+ *
603
+ * @param chainId Optional, to only delete swaps for this smart chain
604
+ * @param signer Optional, to only delete swaps for this smart chain signer (`chainId` param must be
605
+ * set to delete only signer's swaps)
606
+ */
607
+ wipeStorage<C extends ChainIds<T>>(chainId?: C, signer?: string): Promise<void>;
608
+ /**
609
+ * Synchronizes swaps from on-chain, this is ran automatically when SDK is initialized, hence
610
+ * should only be ran manually when `dontCheckPastSwaps=true` is passed in the swapper options,
611
+ * also deletes expired quotes
612
+ *
613
+ * @param chainId Optional chain identifier to only run swap sync for a single smart chain
614
+ * @param signer Optional signer to only run swap sync for swaps initiated by this signer
615
+ */
616
+ _syncSwaps<C extends ChainIds<T>>(chainId?: C, signer?: string): Promise<void>;
617
+ /**
618
+ * Recovers swaps from on-chain historical data.
619
+ *
620
+ * Please note that the recovered swaps might not be complete (i.e. missing amounts or addresses), as some
621
+ * of the swap data is purely off-chain and can never be recovered purely from on-chain data. This
622
+ * functions tries to recover as much swap data as possible.
623
+ *
624
+ * @param chainId Smart chain identifier string to recover the swaps from
625
+ * @param signer Signer address to recover the swaps for
626
+ * @param startBlockheight Optional starting blockheight for swap data recovery, will only check swaps
627
+ * initiated after this blockheight
628
+ */
629
+ recoverSwaps<C extends ChainIds<T>>(chainId: C, signer: string, startBlockheight?: number): Promise<ISwap<T[C]>[]>;
630
+ getToken(ticker: "BTC" | "BITCOIN-BTC"): BtcToken<false>;
631
+ getToken(ticker: "BTCLN" | "BTC-LN" | "LIGHTNING-BTC"): BtcToken<true>;
632
+ getToken<ChainIdentifier extends ChainIds<T>>(ticker: `${ChainIdentifier}-${string}`): SCToken<ChainIdentifier>;
633
+ getToken(tickerOrAddress: string): Token<ChainIds<T>>;
634
+ /**
635
+ * Creates a child swapper instance with a given smart chain
636
+ *
637
+ * @param chainIdentifier Smart chain identifier for the created child swapper instance
638
+ */
639
+ withChain<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): SwapperWithChain<T, ChainIdentifier>;
640
+ /**
641
+ * Returns an array of all the supported smart chains
642
+ */
643
+ getSmartChains(): ChainIds<T>[];
644
+ /**
645
+ * Returns whether the SDK supports a given swap type on a given chain based on currently known LPs
646
+ *
647
+ * @param chainId Smart chain identifier string
648
+ * @param swapType Swap protocol type
649
+ */
650
+ supportsSwapType<ChainIdentifier extends ChainIds<T>, Type extends SwapType>(chainId: ChainIdentifier, swapType: Type): SupportsSwapType<T[ChainIdentifier], Type>;
651
+ /**
652
+ * @internal
653
+ */
654
+ getSwapType<C extends ChainIds<T>>(srcToken: BtcToken<true>, dstToken: SCToken<C>): (SupportsSwapType<T[C], SwapType.FROM_BTCLN_AUTO> extends true ? SwapType.FROM_BTCLN_AUTO : SwapType.FROM_BTCLN);
655
+ /**
656
+ * @internal
657
+ */
658
+ getSwapType<C extends ChainIds<T>>(srcToken: BtcToken<false>, dstToken: SCToken<C>): (SupportsSwapType<T[C], SwapType.SPV_VAULT_FROM_BTC> extends true ? SwapType.SPV_VAULT_FROM_BTC : SwapType.FROM_BTC);
659
+ /**
660
+ * @internal
661
+ */
662
+ getSwapType<C extends ChainIds<T>>(srcToken: SCToken<C>, dstToken: BtcToken<false>): SwapType.TO_BTC;
663
+ /**
664
+ * @internal
665
+ */
666
+ getSwapType<C extends ChainIds<T>>(srcToken: SCToken<C>, dstToken: BtcToken<true>): SwapType.TO_BTCLN;
667
+ /**
668
+ * Returns type of the swap based on input and output tokens specified
669
+ *
670
+ * @param srcToken Source token
671
+ * @param dstToken Destination token
672
+ */
673
+ getSwapType<C extends ChainIds<T>>(srcToken: Token<C>, dstToken: Token<C>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN;
674
+ /**
675
+ * Helper information about various swap protocol and their features:
676
+ * - `requiresInputWallet`: Whether a swap requires a connected wallet on the input chain able to sign
677
+ * arbitrary transaction
678
+ * - `requiresOutputWallet`: Whether a swap requires a connected wallet on the output chain able to sign
679
+ * arbitrary transactions
680
+ * - `supportsGasDrop`: Whether a swap supports the "gas drop" feature, allowing to user to receive a small
681
+ * amount of native token as part of the swap when swapping to smart chains
682
+ *
683
+ * Uses a `Record` type here, use the {@link SwapProtocolInfo} import for a literal readonly type, with
684
+ * pre-filled exact values in the type.
685
+ */
686
+ readonly SwapTypeInfo: Record<SwapType, {
687
+ requiresInputWallet: boolean;
688
+ requiresOutputWallet: boolean;
689
+ supportsGasDrop: boolean;
690
+ }>;
691
+ /**
692
+ * Returns minimum/maximum limits for inputs and outputs for a swap between given tokens
693
+ *
694
+ * @param srcToken Source token
695
+ * @param dstToken Destination token
696
+ */
697
+ getSwapLimits<C extends ChainIds<T>, A extends Token<C>, B extends Token<C>>(srcToken: A, dstToken: B): {
698
+ input: {
699
+ min: TokenAmount<A>;
700
+ max?: TokenAmount<A>;
701
+ };
702
+ output: {
703
+ min: TokenAmount<B>;
704
+ max?: TokenAmount<B>;
705
+ };
706
+ };
707
+ /**
708
+ * Returns an array of supported tokens either on the input or on the output of a swap
709
+ *
710
+ * @param input Whether to return input tokens or output tokens
711
+ */
712
+ getSupportedTokens(input: SwapSide | boolean): Token[];
713
+ /**
714
+ * Returns a set of supported tokens by all the intermediaries offering a specific swap service
715
+ *
716
+ * @param _swapType Swap service type to check supported tokens for
717
+ */
718
+ private getSupportedTokensForSwapType;
719
+ /**
720
+ * Returns the set of supported token addresses by all the intermediaries we know of offering a specific swapType service
721
+ *
722
+ * @param chainIdentifier Chain identifier string
723
+ * @param swapType Specific swap type for which to obtain supported tokens
724
+ */
725
+ private getSupportedTokenAddresses;
726
+ /**
727
+ * Returns tokens that you can swap to (if input=true) from a given token,
728
+ * or tokens that you can swap from (if input=false) to a given token
729
+ */
730
+ getSwapCounterTokens(token: Token, input: SwapSide | boolean): Token[];
731
+ }
732
+ export {};