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