@atomiqlabs/sdk 8.9.0 → 8.9.2

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 (366) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +1760 -1760
  3. package/api/index.d.ts +1 -1
  4. package/api/index.js +3 -3
  5. package/dist/ApiList.d.ts +37 -37
  6. package/dist/ApiList.js +30 -30
  7. package/dist/SmartChainAssets.d.ts +181 -181
  8. package/dist/SmartChainAssets.js +181 -181
  9. package/dist/api/ApiEndpoints.d.ts +393 -393
  10. package/dist/api/ApiEndpoints.js +2 -2
  11. package/dist/api/ApiParser.d.ts +10 -10
  12. package/dist/api/ApiParser.js +134 -134
  13. package/dist/api/ApiTypes.d.ts +157 -157
  14. package/dist/api/ApiTypes.js +75 -75
  15. package/dist/api/SerializedAction.d.ts +40 -40
  16. package/dist/api/SerializedAction.js +59 -59
  17. package/dist/api/SwapperApi.d.ts +50 -50
  18. package/dist/api/SwapperApi.js +431 -431
  19. package/dist/api/index.d.ts +5 -5
  20. package/dist/api/index.js +24 -24
  21. package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -7
  22. package/dist/bitcoin/coinselect2/accumulative.js +52 -52
  23. package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -7
  24. package/dist/bitcoin/coinselect2/blackjack.js +38 -38
  25. package/dist/bitcoin/coinselect2/index.d.ts +20 -20
  26. package/dist/bitcoin/coinselect2/index.js +69 -69
  27. package/dist/bitcoin/coinselect2/utils.d.ts +82 -82
  28. package/dist/bitcoin/coinselect2/utils.js +158 -158
  29. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -113
  30. package/dist/bitcoin/wallet/BitcoinWallet.js +335 -335
  31. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -116
  32. package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -106
  34. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -196
  35. package/dist/enums/FeeType.d.ts +15 -15
  36. package/dist/enums/FeeType.js +19 -19
  37. package/dist/enums/SwapAmountType.d.ts +15 -15
  38. package/dist/enums/SwapAmountType.js +19 -19
  39. package/dist/enums/SwapDirection.d.ts +15 -15
  40. package/dist/enums/SwapDirection.js +19 -19
  41. package/dist/enums/SwapSide.d.ts +15 -15
  42. package/dist/enums/SwapSide.js +19 -19
  43. package/dist/enums/SwapType.d.ts +75 -75
  44. package/dist/enums/SwapType.js +79 -79
  45. package/dist/errors/IntermediaryError.d.ts +13 -13
  46. package/dist/errors/IntermediaryError.js +27 -27
  47. package/dist/errors/RequestError.d.ts +32 -32
  48. package/dist/errors/RequestError.js +54 -54
  49. package/dist/errors/UserError.d.ts +8 -8
  50. package/dist/errors/UserError.js +16 -16
  51. package/dist/events/UnifiedSwapEventListener.d.ts +24 -24
  52. package/dist/events/UnifiedSwapEventListener.js +138 -138
  53. package/dist/http/HttpUtils.d.ts +29 -29
  54. package/dist/http/HttpUtils.js +97 -97
  55. package/dist/http/paramcoders/IParamReader.d.ts +8 -8
  56. package/dist/http/paramcoders/IParamReader.js +2 -2
  57. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
  58. package/dist/http/paramcoders/ParamDecoder.js +137 -137
  59. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
  60. package/dist/http/paramcoders/ParamEncoder.js +36 -36
  61. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
  62. package/dist/http/paramcoders/SchemaVerifier.js +145 -145
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
  64. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
  65. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
  66. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +17 -17
  68. package/dist/http/paramcoders/client/StreamingFetchPromise.js +175 -175
  69. package/dist/index.d.ts +86 -86
  70. package/dist/index.js +159 -159
  71. package/dist/intermediaries/Intermediary.d.ts +178 -178
  72. package/dist/intermediaries/Intermediary.js +166 -166
  73. package/dist/intermediaries/IntermediaryDiscovery.d.ts +216 -216
  74. package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
  75. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +607 -607
  76. package/dist/intermediaries/apis/IntermediaryAPI.js +764 -764
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
  78. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
  79. package/dist/intermediaries/auth/SignedKeyBasedAuth.d.ts +14 -14
  80. package/dist/intermediaries/auth/SignedKeyBasedAuth.js +68 -68
  81. package/dist/lnurl/LNURL.d.ts +102 -102
  82. package/dist/lnurl/LNURL.js +321 -321
  83. package/dist/prices/RedundantSwapPrice.d.ts +110 -110
  84. package/dist/prices/RedundantSwapPrice.js +222 -222
  85. package/dist/prices/SingleSwapPrice.d.ts +34 -34
  86. package/dist/prices/SingleSwapPrice.js +44 -44
  87. package/dist/prices/SwapPriceWithChain.d.ts +107 -107
  88. package/dist/prices/SwapPriceWithChain.js +128 -128
  89. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
  90. package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
  91. package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
  92. package/dist/prices/abstract/IPriceProvider.js +74 -74
  93. package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
  94. package/dist/prices/abstract/ISwapPrice.js +279 -279
  95. package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
  96. package/dist/prices/providers/BinancePriceProvider.js +30 -30
  97. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
  98. package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
  99. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
  100. package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
  101. package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
  102. package/dist/prices/providers/CustomPriceProvider.js +35 -35
  103. package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
  104. package/dist/prices/providers/KrakenPriceProvider.js +45 -45
  105. package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
  106. package/dist/prices/providers/OKXPriceProvider.js +29 -29
  107. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
  108. package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
  109. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
  110. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
  111. package/dist/storage/IUnifiedStorage.d.ts +127 -127
  112. package/dist/storage/IUnifiedStorage.js +2 -2
  113. package/dist/storage/UnifiedSwapStorage.d.ts +120 -120
  114. package/dist/storage/UnifiedSwapStorage.js +154 -154
  115. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
  116. package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
  117. package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
  118. package/dist/storage-browser/LocalStorageManager.js +93 -93
  119. package/dist/swapper/Swapper.d.ts +765 -765
  120. package/dist/swapper/Swapper.js +1749 -1749
  121. package/dist/swapper/SwapperFactory.d.ts +135 -135
  122. package/dist/swapper/SwapperFactory.js +162 -162
  123. package/dist/swapper/SwapperUtils.d.ts +222 -222
  124. package/dist/swapper/SwapperUtils.js +519 -519
  125. package/dist/swapper/SwapperWithChain.d.ts +404 -404
  126. package/dist/swapper/SwapperWithChain.js +469 -469
  127. package/dist/swapper/SwapperWithSigner.d.ts +322 -322
  128. package/dist/swapper/SwapperWithSigner.js +318 -318
  129. package/dist/swaps/IAddressSwap.d.ts +22 -22
  130. package/dist/swaps/IAddressSwap.js +14 -14
  131. package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
  132. package/dist/swaps/IBTCWalletSwap.js +18 -18
  133. package/dist/swaps/IClaimableSwap.d.ts +49 -49
  134. package/dist/swaps/IClaimableSwap.js +15 -15
  135. package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
  136. package/dist/swaps/IClaimableSwapWrapper.js +2 -2
  137. package/dist/swaps/IRefundableSwap.d.ts +43 -43
  138. package/dist/swaps/IRefundableSwap.js +14 -14
  139. package/dist/swaps/ISwap.d.ts +453 -453
  140. package/dist/swaps/ISwap.js +371 -371
  141. package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
  142. package/dist/swaps/ISwapWithGasDrop.js +12 -12
  143. package/dist/swaps/ISwapWrapper.d.ts +295 -295
  144. package/dist/swaps/ISwapWrapper.js +373 -373
  145. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
  146. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
  147. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
  148. package/dist/swaps/escrow_swaps/IEscrowSwap.js +172 -172
  149. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +129 -129
  150. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +107 -107
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
  154. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
  155. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
  156. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +547 -547
  158. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1419 -1419
  159. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +192 -192
  160. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +650 -650
  162. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1577 -1577
  163. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +237 -237
  164. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +491 -491
  166. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1463 -1463
  167. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +204 -204
  168. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +446 -446
  170. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +1097 -1097
  171. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
  172. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
  174. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
  175. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +252 -252
  176. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +535 -535
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
  178. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
  179. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +134 -134
  180. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
  181. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +694 -694
  182. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1687 -1687
  183. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +259 -259
  184. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
  185. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +302 -302
  186. package/dist/swaps/trusted/ln/LnForGasSwap.js +625 -625
  187. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
  188. package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
  189. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +343 -343
  190. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +698 -698
  191. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +71 -71
  192. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
  193. package/dist/types/AmountData.d.ts +10 -10
  194. package/dist/types/AmountData.js +2 -2
  195. package/dist/types/CustomPriceFunction.d.ts +11 -11
  196. package/dist/types/CustomPriceFunction.js +2 -2
  197. package/dist/types/PriceInfoType.d.ts +28 -28
  198. package/dist/types/PriceInfoType.js +57 -57
  199. package/dist/types/SwapExecutionAction.d.ts +195 -195
  200. package/dist/types/SwapExecutionAction.js +106 -106
  201. package/dist/types/SwapExecutionStep.d.ts +144 -144
  202. package/dist/types/SwapExecutionStep.js +87 -87
  203. package/dist/types/SwapStateInfo.d.ts +5 -5
  204. package/dist/types/SwapStateInfo.js +2 -2
  205. package/dist/types/SwapWithSigner.d.ts +17 -17
  206. package/dist/types/SwapWithSigner.js +43 -43
  207. package/dist/types/Token.d.ts +99 -99
  208. package/dist/types/Token.js +76 -76
  209. package/dist/types/TokenAmount.d.ts +75 -75
  210. package/dist/types/TokenAmount.js +85 -85
  211. package/dist/types/fees/Fee.d.ts +50 -50
  212. package/dist/types/fees/Fee.js +2 -2
  213. package/dist/types/fees/FeeBreakdown.d.ts +11 -11
  214. package/dist/types/fees/FeeBreakdown.js +2 -2
  215. package/dist/types/fees/PercentagePPM.d.ts +17 -17
  216. package/dist/types/fees/PercentagePPM.js +18 -18
  217. package/dist/types/lnurl/LNURLPay.d.ts +61 -61
  218. package/dist/types/lnurl/LNURLPay.js +31 -31
  219. package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
  220. package/dist/types/lnurl/LNURLWithdraw.js +27 -27
  221. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
  222. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
  223. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
  224. package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
  225. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
  226. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
  227. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
  228. package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
  229. package/dist/utils/BitcoinUtils.d.ts +18 -18
  230. package/dist/utils/BitcoinUtils.js +174 -174
  231. package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
  232. package/dist/utils/BitcoinWalletUtils.js +14 -14
  233. package/dist/utils/Logger.d.ts +7 -7
  234. package/dist/utils/Logger.js +12 -12
  235. package/dist/utils/RetryUtils.d.ts +22 -22
  236. package/dist/utils/RetryUtils.js +67 -67
  237. package/dist/utils/SwapUtils.d.ts +88 -88
  238. package/dist/utils/SwapUtils.js +72 -72
  239. package/dist/utils/TimeoutUtils.d.ts +17 -17
  240. package/dist/utils/TimeoutUtils.js +55 -55
  241. package/dist/utils/TokenUtils.d.ts +19 -19
  242. package/dist/utils/TokenUtils.js +37 -37
  243. package/dist/utils/TypeUtils.d.ts +7 -7
  244. package/dist/utils/TypeUtils.js +2 -2
  245. package/dist/utils/Utils.d.ts +69 -69
  246. package/dist/utils/Utils.js +214 -214
  247. package/package.json +46 -46
  248. package/src/SmartChainAssets.ts +186 -186
  249. package/src/api/ApiEndpoints.ts +427 -427
  250. package/src/api/ApiParser.ts +138 -138
  251. package/src/api/ApiTypes.ts +229 -229
  252. package/src/api/SerializedAction.ts +97 -97
  253. package/src/api/SwapperApi.ts +545 -545
  254. package/src/api/index.ts +5 -5
  255. package/src/bitcoin/coinselect2/accumulative.ts +69 -69
  256. package/src/bitcoin/coinselect2/blackjack.ts +50 -50
  257. package/src/bitcoin/coinselect2/index.ts +93 -93
  258. package/src/bitcoin/coinselect2/utils.ts +236 -236
  259. package/src/bitcoin/wallet/BitcoinWallet.ts +439 -439
  260. package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -140
  261. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -225
  262. package/src/enums/FeeType.ts +15 -15
  263. package/src/enums/SwapAmountType.ts +16 -16
  264. package/src/enums/SwapDirection.ts +15 -15
  265. package/src/enums/SwapSide.ts +16 -16
  266. package/src/enums/SwapType.ts +75 -75
  267. package/src/errors/IntermediaryError.ts +28 -28
  268. package/src/errors/RequestError.ts +64 -64
  269. package/src/errors/UserError.ts +15 -15
  270. package/src/events/UnifiedSwapEventListener.ts +181 -181
  271. package/src/http/HttpUtils.ts +97 -97
  272. package/src/http/paramcoders/IParamReader.ts +9 -9
  273. package/src/http/paramcoders/ParamDecoder.ts +145 -145
  274. package/src/http/paramcoders/ParamEncoder.ts +40 -40
  275. package/src/http/paramcoders/SchemaVerifier.ts +153 -153
  276. package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
  277. package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
  278. package/src/http/paramcoders/client/StreamingFetchPromise.ts +194 -194
  279. package/src/index.ts +141 -141
  280. package/src/intermediaries/Intermediary.ts +280 -280
  281. package/src/intermediaries/IntermediaryDiscovery.ts +548 -548
  282. package/src/intermediaries/apis/IntermediaryAPI.ts +1247 -1247
  283. package/src/intermediaries/auth/SignedKeyBasedAuth.ts +69 -69
  284. package/src/lnurl/LNURL.ts +402 -402
  285. package/src/prices/RedundantSwapPrice.ts +264 -264
  286. package/src/prices/SingleSwapPrice.ts +50 -50
  287. package/src/prices/SwapPriceWithChain.ts +194 -194
  288. package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
  289. package/src/prices/abstract/IPriceProvider.ts +127 -127
  290. package/src/prices/abstract/ISwapPrice.ts +390 -390
  291. package/src/prices/providers/BinancePriceProvider.ts +48 -48
  292. package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
  293. package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
  294. package/src/prices/providers/CustomPriceProvider.ts +40 -40
  295. package/src/prices/providers/KrakenPriceProvider.ts +83 -83
  296. package/src/prices/providers/OKXPriceProvider.ts +59 -59
  297. package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
  298. package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
  299. package/src/storage/IUnifiedStorage.ts +136 -136
  300. package/src/storage/UnifiedSwapStorage.ts +175 -175
  301. package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
  302. package/src/storage-browser/LocalStorageManager.ts +106 -106
  303. package/src/swapper/Swapper.ts +2557 -2557
  304. package/src/swapper/SwapperFactory.ts +307 -307
  305. package/src/swapper/SwapperUtils.ts +610 -610
  306. package/src/swapper/SwapperWithChain.ts +707 -707
  307. package/src/swapper/SwapperWithSigner.ts +511 -511
  308. package/src/swaps/IAddressSwap.ts +30 -30
  309. package/src/swaps/IBTCWalletSwap.ts +92 -92
  310. package/src/swaps/IClaimableSwap.ts +65 -65
  311. package/src/swaps/IClaimableSwapWrapper.ts +17 -17
  312. package/src/swaps/IRefundableSwap.ts +58 -58
  313. package/src/swaps/ISwap.ts +775 -775
  314. package/src/swaps/ISwapWithGasDrop.ts +25 -25
  315. package/src/swaps/ISwapWrapper.ts +564 -564
  316. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
  317. package/src/swaps/escrow_swaps/IEscrowSwap.ts +271 -271
  318. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +284 -284
  319. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +172 -172
  320. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
  321. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
  322. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1670 -1671
  323. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +603 -603
  324. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1883 -1883
  325. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +752 -752
  326. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1753 -1753
  327. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +612 -612
  328. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1327 -1327
  329. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
  330. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
  331. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +787 -787
  332. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
  333. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +403 -403
  334. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +2148 -2148
  335. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1238 -1238
  336. package/src/swaps/trusted/ln/LnForGasSwap.ts +753 -753
  337. package/src/swaps/trusted/ln/LnForGasWrapper.ts +90 -90
  338. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +843 -843
  339. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +133 -133
  340. package/src/types/AmountData.ts +9 -9
  341. package/src/types/CustomPriceFunction.ts +11 -11
  342. package/src/types/PriceInfoType.ts +66 -66
  343. package/src/types/SwapExecutionAction.ts +323 -323
  344. package/src/types/SwapExecutionStep.ts +224 -224
  345. package/src/types/SwapStateInfo.ts +6 -6
  346. package/src/types/SwapWithSigner.ts +61 -61
  347. package/src/types/Token.ts +163 -163
  348. package/src/types/TokenAmount.ts +167 -167
  349. package/src/types/fees/Fee.ts +56 -56
  350. package/src/types/fees/FeeBreakdown.ts +11 -11
  351. package/src/types/fees/PercentagePPM.ts +26 -26
  352. package/src/types/lnurl/LNURLPay.ts +79 -79
  353. package/src/types/lnurl/LNURLWithdraw.ts +61 -61
  354. package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
  355. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
  356. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
  357. package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
  358. package/src/utils/BitcoinUtils.ts +164 -164
  359. package/src/utils/BitcoinWalletUtils.ts +15 -15
  360. package/src/utils/Logger.ts +14 -14
  361. package/src/utils/RetryUtils.ts +78 -78
  362. package/src/utils/SwapUtils.ts +99 -99
  363. package/src/utils/TimeoutUtils.ts +49 -49
  364. package/src/utils/TokenUtils.ts +33 -33
  365. package/src/utils/TypeUtils.ts +8 -8
  366. package/src/utils/Utils.ts +221 -221
@@ -1,511 +1,511 @@
1
- import {IntermediaryDiscovery, SwapBounds} from "../intermediaries/IntermediaryDiscovery";
2
- import {SwapType} from "../enums/SwapType";
3
- import {LnForGasSwap} from "../swaps/trusted/ln/LnForGasSwap";
4
- import {ISwap} from "../swaps/ISwap";
5
- import {IToBTCSwap} from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
6
- import {ChainIds, MultiChain, SupportsSwapType} from "./Swapper";
7
- import {FromBTCLNSwap} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
8
- import {FromBTCSwap} from "../swaps/escrow_swaps/frombtc/onchain/FromBTCSwap";
9
- import {ToBTCLNSwap} from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap";
10
- import {ToBTCSwap} from "../swaps/escrow_swaps/tobtc/onchain/ToBTCSwap";
11
- import {SwapPriceWithChain} from "../prices/SwapPriceWithChain";
12
- import {BTC_NETWORK} from "@scure/btc-signer/utils";
13
- import {ToBTCOptions} from "../swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper";
14
- import {ToBTCLNOptions} from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper";
15
- import {FromBTCOptions} from "../swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper";
16
- import {FromBTCLNOptions} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper";
17
- import {SwapperUtils} from "./SwapperUtils";
18
- import {SpvFromBTCSwap} from "../swaps/spv_swaps/SpvFromBTCSwap";
19
- import {SwapperWithChain} from "./SwapperWithChain";
20
- import {SwapWithSigner, wrapSwapWithSigner} from "../types/SwapWithSigner";
21
- import {OnchainForGasSwap} from "../swaps/trusted/onchain/OnchainForGasSwap";
22
- import {FromBTCLNAutoSwap} from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap";
23
- import {FromBTCLNAutoOptions} from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper";
24
- import {TokenAmount} from "../types/TokenAmount";
25
- import {BtcToken, SCToken, Token} from "../types/Token";
26
- import {LNURLWithdraw} from "../types/lnurl/LNURLWithdraw";
27
- import {LNURLPay} from "../types/lnurl/LNURLPay";
28
- import {MempoolApi, MempoolBitcoinRpc} from "@atomiqlabs/btc-mempool";
29
- import {Messenger} from "@atomiqlabs/base";
30
- import {LightningInvoiceCreateService} from "../types/wallets/LightningInvoiceCreateService";
31
- import {Intermediary} from "../intermediaries/Intermediary";
32
- import {SpvFromBTCOptions} from "../swaps/spv_swaps/SpvFromBTCWrapper";
33
- import {SwapTypeMapping} from "../utils/SwapUtils";
34
- import {SwapSide} from "../enums/SwapSide";
35
-
36
- /**
37
- * Chain and signer-specific wrapper for automatic signer injection into swap methods
38
- * @category Core
39
- */
40
- export class SwapperWithSigner<T extends MultiChain, ChainIdentifier extends ChainIds<T>> {
41
-
42
- private readonly signer: T[ChainIdentifier]["Signer"];
43
- /**
44
- * Underlying single chain swapper instance
45
- */
46
- private readonly swapper: SwapperWithChain<T, ChainIdentifier>;
47
-
48
- /**
49
- * Smart chain identifier of this swapper with chain and signer
50
- */
51
- readonly chainIdentifier: ChainIdentifier;
52
-
53
- /**
54
- * Pricing API used by the SDK
55
- */
56
- get prices(): SwapPriceWithChain<T, ChainIdentifier> {
57
- return this.swapper.prices;
58
- }
59
- /**
60
- * Intermediary discovery instance
61
- */
62
- get intermediaryDiscovery(): IntermediaryDiscovery {
63
- return this.swapper.intermediaryDiscovery;
64
- }
65
- /**
66
- * Miscellaneous utility functions
67
- */
68
- get Utils(): SwapperUtils<T> {
69
- return this.swapper.Utils;
70
- }
71
- /**
72
- * Helper information about various swap protocol and their features:
73
- * - `requiresInputWallet`: Whether a swap requires a connected wallet on the input chain able to sign
74
- * arbitrary transaction
75
- * - `requiresOutputWallet`: Whether a swap requires a connected wallet on the output chain able to sign
76
- * arbitrary transactions
77
- * - `supportsGasDrop`: Whether a swap supports the "gas drop" feature, allowing to user to receive a small
78
- * amount of native token as part of the swap when swapping to smart chains
79
- *
80
- * Uses a `Record` type here, use the {@link SwapProtocolInfo} import for a literal readonly type, with
81
- * pre-filled exact values in the type.
82
- */
83
- get SwapTypeInfo() {
84
- return this.swapper.SwapTypeInfo;
85
- }
86
-
87
- constructor(swapper: SwapperWithChain<T, ChainIdentifier>, signer: T[ChainIdentifier]["Signer"]) {
88
- this.swapper = swapper;
89
- this.signer = signer;
90
- this.chainIdentifier = swapper.chainIdentifier;
91
- }
92
-
93
- /**
94
- * Creates Smart chain -> Bitcoin ({@link SwapType.TO_BTC}) swap
95
- *
96
- * @param tokenAddress Token address to pay with
97
- * @param address Recipient's bitcoin address
98
- * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
99
- * @param exactIn Whether to use exact in instead of exact out
100
- * @param additionalParams Additional parameters sent to the LP when creating the swap
101
- * @param options Additional options for the swap
102
- */
103
- createToBTCSwap(
104
- tokenAddress: string,
105
- address: string,
106
- amount: bigint,
107
- exactIn?: boolean,
108
- additionalParams?: Record<string, any>,
109
- options?: ToBTCOptions
110
- ): Promise<SwapWithSigner<ToBTCSwap<T[ChainIdentifier]>>> {
111
- return this.swapper.createToBTCSwap(this.signer.getAddress(), tokenAddress, address, amount, exactIn, additionalParams, options)
112
- .then(swap => wrapSwapWithSigner(swap, this.signer));
113
- }
114
-
115
- /**
116
- * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap
117
- *
118
- * @param tokenAddress Token address to pay with
119
- * @param paymentRequest BOLT11 lightning network invoice to be paid (needs to have a fixed amount), and the swap
120
- * amount is taken from this fixed amount, hence only exact output swaps are supported
121
- * @param additionalParams Additional parameters sent to the LP when creating the swap
122
- * @param options Additional options for the swap
123
- */
124
- createToBTCLNSwap(
125
- tokenAddress: string,
126
- paymentRequest: string,
127
- additionalParams?: Record<string, any>,
128
- options?: ToBTCLNOptions & {comment?: string}
129
- ): Promise<SwapWithSigner<ToBTCLNSwap<T[ChainIdentifier]>>> {
130
- return this.swapper.createToBTCLNSwap(this.signer.getAddress(), tokenAddress, paymentRequest, additionalParams, options)
131
- .then(swap => wrapSwapWithSigner(swap, this.signer));
132
- }
133
-
134
- /**
135
- * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via LNURL-pay link
136
- *
137
- * @param tokenAddress Token address to pay with
138
- * @param lnurlPay LNURL-pay link to use for the payment
139
- * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
140
- * @param exactIn Whether to do an exact in swap instead of exact out
141
- * @param additionalParams Additional parameters sent to the LP when creating the swap
142
- * @param options Additional options for the swap
143
- */
144
- createToBTCLNSwapViaLNURL(
145
- tokenAddress: string,
146
- lnurlPay: string | LNURLPay,
147
- amount: bigint,
148
- exactIn?: boolean,
149
- additionalParams?: Record<string, any>,
150
- options?: ToBTCLNOptions
151
- ): Promise<SwapWithSigner<ToBTCLNSwap<T[ChainIdentifier]>>> {
152
- return this.swapper.createToBTCLNSwapViaLNURL(this.signer.getAddress(), tokenAddress, lnurlPay, amount, exactIn, additionalParams, options)
153
- .then(swap => wrapSwapWithSigner(swap, this.signer));
154
- }
155
-
156
- /**
157
- * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via {@link LightningInvoiceCreateService}
158
- *
159
- * @param tokenAddress Token address to pay with
160
- * @param service Invoice create service object which facilitates the creation of fixed amount LN invoices
161
- * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
162
- * @param exactIn Whether to do an exact in swap instead of exact out
163
- * @param additionalParams Additional parameters sent to the LP when creating the swap
164
- * @param options Additional options for the swap
165
- */
166
- createToBTCLNSwapViaInvoiceCreateService(
167
- tokenAddress: string,
168
- service: LightningInvoiceCreateService,
169
- amount: bigint,
170
- exactIn?: boolean,
171
- additionalParams?: Record<string, any>,
172
- options?: ToBTCLNOptions
173
- ): Promise<SwapWithSigner<ToBTCLNSwap<T[ChainIdentifier]>>> {
174
- return this.swapper.createToBTCLNSwapViaInvoiceCreateService(this.signer.getAddress(), tokenAddress, service, amount, exactIn, additionalParams, options)
175
- .then(swap => wrapSwapWithSigner(swap, this.signer));
176
- }
177
-
178
- /**
179
- * Creates Bitcoin -> Smart chain ({@link SwapType.SPV_VAULT_FROM_BTC}) swap
180
- *
181
- * @param tokenAddress Token address to receive
182
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
183
- * @param exactOut Whether to use a exact out instead of exact in
184
- * @param additionalParams Additional parameters sent to the LP when creating the swap
185
- * @param options Additional options for the swap
186
- */
187
- createFromBTCSwapNew(
188
- tokenAddress: string,
189
- amount: bigint,
190
- exactOut?: boolean,
191
- additionalParams?: Record<string, any>,
192
- options?: SpvFromBTCOptions
193
- ): Promise<SwapWithSigner<SpvFromBTCSwap<T[ChainIdentifier]>>> {
194
- return this.swapper.createFromBTCSwapNew(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
195
- .then(swap => wrapSwapWithSigner(swap, this.signer));
196
- }
197
-
198
- /**
199
- * Creates LEGACY Bitcoin -> Smart chain ({@link SwapType.FROM_BTC}) swap
200
- *
201
- * @param tokenAddress Token address to receive
202
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
203
- * @param exactOut Whether to use a exact out instead of exact in
204
- * @param additionalParams Additional parameters sent to the LP when creating the swap
205
- * @param options Additional options for the swap
206
- */
207
- createFromBTCSwap(
208
- tokenAddress: string,
209
- amount: bigint,
210
- exactOut?: boolean,
211
- additionalParams?: Record<string, any>,
212
- options?: FromBTCOptions
213
- ): Promise<SwapWithSigner<FromBTCSwap<T[ChainIdentifier]>>> {
214
- return this.swapper.createFromBTCSwap(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
215
- .then(swap => wrapSwapWithSigner(swap, this.signer));
216
- }
217
-
218
- /**
219
- * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap
220
- *
221
- * @param tokenAddress Token address to receive
222
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
223
- * @param exactOut Whether to use a exact out instead of exact in
224
- * @param additionalParams Additional parameters sent to the LP when creating the swap
225
- * @param options Additional options for the swap
226
- */
227
- createFromBTCLNSwap(
228
- tokenAddress: string,
229
- amount: bigint,
230
- exactOut?: boolean,
231
- additionalParams?: Record<string, any>,
232
- options?: FromBTCLNOptions
233
- ): Promise<SwapWithSigner<FromBTCLNSwap<T[ChainIdentifier]>>> {
234
- return this.swapper.createFromBTCLNSwap(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
235
- .then(swap => wrapSwapWithSigner(swap, this.signer));
236
- }
237
-
238
- /**
239
- * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap, withdrawing from
240
- * an LNURL-withdraw link
241
- *
242
- * @param tokenAddress Token address to receive
243
- * @param lnurl LNURL-withdraw link to pull the funds from
244
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
245
- * @param exactOut Whether to use a exact out instead of exact in
246
- * @param additionalParams Additional parameters sent to the LP when creating the swap
247
- */
248
- createFromBTCLNSwapViaLNURL(
249
- tokenAddress: string,
250
- lnurl: string | LNURLWithdraw,
251
- amount: bigint,
252
- exactOut?: boolean,
253
- additionalParams?: Record<string, any>
254
- ): Promise<SwapWithSigner<FromBTCLNSwap<T[ChainIdentifier]>>> {
255
- return this.swapper.createFromBTCLNSwapViaLNURL(this.signer.getAddress(), tokenAddress, lnurl, amount, exactOut, additionalParams)
256
- .then(swap => wrapSwapWithSigner(swap, this.signer));
257
- }
258
-
259
- /**
260
- * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap
261
- *
262
- * @param tokenAddress Token address to receive
263
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
264
- * @param exactOut Whether to use a exact out instead of exact in
265
- * @param additionalParams Additional parameters sent to the LP when creating the swap
266
- * @param options Additional options for the swap
267
- */
268
- createFromBTCLNSwapNew(
269
- tokenAddress: string,
270
- amount: bigint,
271
- exactOut?: boolean,
272
- additionalParams?: Record<string, any>,
273
- options?: FromBTCLNAutoOptions
274
- ): Promise<SwapWithSigner<FromBTCLNAutoSwap<T[ChainIdentifier]>>> {
275
- return this.swapper.createFromBTCLNSwapNew(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
276
- .then(swap => wrapSwapWithSigner(swap, this.signer));
277
- }
278
-
279
- /**
280
- * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap, withdrawing from
281
- * an LNURL-withdraw link
282
- *
283
- * @param tokenAddress Token address to receive
284
- * @param lnurl LNURL-withdraw link to pull the funds from
285
- * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
286
- * @param exactOut Whether to use a exact out instead of exact in
287
- * @param additionalParams Additional parameters sent to the LP when creating the swap
288
- * @param options Additional options for the swap
289
- */
290
- createFromBTCLNSwapNewViaLNURL(
291
- tokenAddress: string,
292
- lnurl: string | LNURLWithdraw,
293
- amount: bigint,
294
- exactOut?: boolean,
295
- additionalParams?: Record<string, any>,
296
- options?: FromBTCLNAutoOptions
297
- ): Promise<SwapWithSigner<FromBTCLNAutoSwap<T[ChainIdentifier]>>> {
298
- return this.swapper.createFromBTCLNSwapNewViaLNURL(this.signer.getAddress(), tokenAddress, lnurl, amount, exactOut, additionalParams, options)
299
- .then(swap => wrapSwapWithSigner(swap, this.signer));
300
- }
301
-
302
- /**
303
- * Creates a trusted Bitcoin Lightning -> Smart chain ({@link SwapType.TRUSTED_FROM_BTCLN}) gas swap
304
- *
305
- * @param amount Amount of native token to receive, in base units
306
- * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
307
- * @throws {Error} If no trusted intermediary specified
308
- */
309
- createTrustedLNForGasSwap(amount: bigint, trustedIntermediaryOrUrl?: Intermediary | string): Promise<LnForGasSwap<T[ChainIdentifier]>> {
310
- return this.swapper.createTrustedLNForGasSwap(this.signer.getAddress(), amount, trustedIntermediaryOrUrl);
311
- }
312
-
313
- /**
314
- * Creates a trusted Bitcoin -> Smart chain ({@link SwapType.TRUSTED_FROM_BTC}) gas swap
315
- *
316
- * @param amount Amount of native token to receive, in base units
317
- * @param refundAddress Bitcoin refund address, in case the swap fails the funds are refunded here
318
- * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
319
- * @throws {Error} If no trusted intermediary specified
320
- */
321
- createTrustedOnchainForGasSwap(amount: bigint, refundAddress?: string, trustedIntermediaryOrUrl?: Intermediary | string): Promise<OnchainForGasSwap<T[ChainIdentifier]>> {
322
- return this.swapper.createTrustedOnchainForGasSwap(this.signer.getAddress(), amount, refundAddress, trustedIntermediaryOrUrl);
323
- }
324
-
325
- /**
326
- * @internal
327
- */
328
- create(srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>, amount: bigint, exactIn: boolean, lnurlWithdraw?: string | LNURLWithdraw): Promise<(SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[ChainIdentifier]> : FromBTCLNSwap<T[ChainIdentifier]>)>;
329
- /**
330
- * @internal
331
- */
332
- create(srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>, amount: bigint, exactIn: boolean): Promise<(SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[ChainIdentifier]> : FromBTCSwap<T[ChainIdentifier]>)>;
333
- /**
334
- * @internal
335
- */
336
- create(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>, amount: bigint, exactIn: boolean, address: string): Promise<ToBTCSwap<T[ChainIdentifier]>>;
337
- /**
338
- * @internal
339
- */
340
- create(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: bigint, exactIn: boolean, lnurlPay: string | LNURLPay): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
341
- /**
342
- * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (exactIn=true)
343
- * or output amount (exactIn=false), NOTE: For regular -> BTC-LN (lightning) swaps the passed amount is ignored and
344
- * invoice's pre-set amount is used instead.
345
- *
346
- * @param srcToken Source token of the swap, user pays this token
347
- * @param dstToken Destination token of the swap, user receives this token
348
- * @param amount Amount of the swap
349
- * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
350
- * @param addressLnurlLightningInvoice Bitcoin on-chain address, lightning invoice, LNURL-pay to pay or
351
- * LNURL-withdrawal to withdraw money from
352
- */
353
- create(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: undefined, exactIn: false, addressLnurlLightningInvoice: string): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
354
- /**
355
- * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (exactIn=true)
356
- * or output amount (exactIn=false), NOTE: For regular -> BTC-LN (lightning) swaps the passed amount is ignored and
357
- * invoice's pre-set amount is used instead.
358
- *
359
- * @param srcToken Source token of the swap, user pays this token
360
- * @param dstToken Destination token of the swap, user receives this token
361
- * @param amount Amount of the swap
362
- * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
363
- * @param addressLnurlLightningInvoice Bitcoin on-chain address, lightning invoice, LNURL-pay to pay or
364
- * LNURL-withdrawal to withdraw money from
365
- */
366
- create(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>, amount: bigint | undefined, exactIn: boolean, addressLnurlLightningInvoice?: string | LNURLWithdraw | LNURLPay): Promise<SwapWithSigner<ISwap<T[ChainIdentifier]>>> {
367
- return this.swapper.create(this.signer.getAddress(), srcToken as any, dstToken as any, amount as any, exactIn, addressLnurlLightningInvoice as any)
368
- .then(swap => wrapSwapWithSigner(swap, this.signer));
369
- }
370
-
371
- /**
372
- * Returns swaps that are in-progress and are claimable for the specific chain, optionally also for a specific signer's address
373
- */
374
- getAllSwaps(): Promise<ISwap<T[ChainIdentifier]>[]> {
375
- return this.swapper.getAllSwaps(this.signer.getAddress());
376
- }
377
-
378
- /**
379
- * Returns swaps that are in-progress and are claimable for the specific chain, optionally also for a specific signer's address
380
- */
381
- getActionableSwaps(): Promise<ISwap<T[ChainIdentifier]>[]> {
382
- return this.swapper.getActionableSwaps(this.signer.getAddress());
383
- }
384
-
385
- /**
386
- * Returns swaps that are refundable for the specific chain, optionally also for a specific signer's address
387
- */
388
- getRefundableSwaps(): Promise<IToBTCSwap<T[ChainIdentifier]>[]> {
389
- return this.swapper.getRefundableSwaps(this.signer.getAddress());
390
- }
391
-
392
- /**
393
- * Returns swap with a specific id (identifier) on a specific chain and optionally with a signer
394
- */
395
- getSwapById(id: string): Promise<ISwap<T[ChainIdentifier]>> {
396
- return this.swapper.getSwapById(id, this.signer.getAddress());
397
- }
398
-
399
- /**
400
- * Returns the swap with a proper return type, or `undefined` if not found or has wrong type
401
- *
402
- * @param id An ID of the swap ({@link ISwap.getId})
403
- * @param swapType Type of the swap
404
- */
405
- async getTypedSwapById<S extends SwapType>(id: string, swapType: S): Promise<SwapTypeMapping<T[ChainIdentifier]>[S] | undefined> {
406
- return this.swapper.getTypedSwapById<S>(id, swapType, this.signer.getAddress());
407
- }
408
-
409
- /**
410
- * Synchronizes swaps from chain, this is usually ran when SDK is initialized, deletes expired quotes
411
- */
412
- async _syncSwaps(): Promise<void> {
413
- return this.swapper._syncSwaps(this.signer.getAddress());
414
- }
415
-
416
- /**
417
- * Recovers swaps from on-chain historical data.
418
- *
419
- * Please note that the recovered swaps might not be complete (i.e. missing amounts or addresses), as some
420
- * of the swap data is purely off-chain and can never be recovered purely from on-chain data. This
421
- * functions tries to recover as much swap data as possible.
422
- *
423
- * @param startBlockheight Optional starting blockheight for swap data recovery, will only check swaps
424
- * initiated after this blockheight
425
- */
426
- async recoverSwaps(startBlockheight?: number): Promise<ISwap<T[ChainIdentifier]>[]> {
427
- return this.swapper.recoverSwaps(this.signer.getAddress(), startBlockheight);
428
- }
429
-
430
- getToken(ticker: "BTC" | "BITCOIN-BTC"): BtcToken<false>;
431
- getToken(ticker: "BTCLN" | "BTC-LN" | "LIGHTNING-BTC"): BtcToken<true>;
432
- getToken(ticker: `${ChainIdentifier}-${string}`): SCToken<ChainIdentifier>;
433
- getToken(tickerOrAddress: string): Token<ChainIdentifier>;
434
- /**
435
- * Returns the {@link Token} object for a given token
436
- *
437
- * @param tickerOrAddress Token to return the object for, can use multiple formats:
438
- * - a) token ticker, such as `"BTC"`, `"SOL"`, etc.
439
- * - b) token ticker prefixed with smart chain identifier, such as `"SOLANA-SOL"`, `"SOLANA-USDC"`, etc.
440
- * - c) token address
441
- */
442
- getToken(tickerOrAddress: string): Token<ChainIdentifier> {
443
- return this.swapper.getToken(tickerOrAddress);
444
- }
445
-
446
- /**
447
- * Returns whether the SDK supports a given swap type on this chain based on currently known LPs
448
- *
449
- * @param swapType Swap protocol type
450
- */
451
- supportsSwapType<
452
- Type extends SwapType
453
- >(swapType: Type): SupportsSwapType<T[ChainIdentifier], Type> {
454
- return this.swapper.supportsSwapType(swapType);
455
- }
456
-
457
- /**
458
- * @internal
459
- */
460
- getSwapType(srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>): (SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? SwapType.FROM_BTCLN_AUTO : SwapType.FROM_BTCLN);
461
- /**
462
- * @internal
463
- */
464
- getSwapType(srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>): (SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SwapType.SPV_VAULT_FROM_BTC : SwapType.FROM_BTC);
465
- /**
466
- * @internal
467
- */
468
- getSwapType(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>): SwapType.TO_BTC;
469
- /**
470
- * @internal
471
- */
472
- getSwapType(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>): SwapType.TO_BTCLN;
473
- /**
474
- * Returns type of the swap based on input and output tokens specified
475
- *
476
- * @param srcToken Source token
477
- * @param dstToken Destination token
478
- */
479
- getSwapType(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN;
480
- /**
481
- * Returns type of the swap based on input and output tokens specified
482
- *
483
- * @param srcToken Source token
484
- * @param dstToken Destination token
485
- */
486
- getSwapType(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN {
487
- return this.swapper.getSwapType(srcToken, dstToken);
488
- }
489
-
490
- /**
491
- * Returns minimum/maximum limits for inputs and outputs for a swap between given tokens
492
- *
493
- * @param srcToken Source token
494
- * @param dstToken Destination token
495
- */
496
- getSwapLimits<A extends Token<ChainIdentifier>, B extends Token<ChainIdentifier>>(srcToken: A, dstToken: B): {
497
- input: {min: TokenAmount<A>, max?: TokenAmount<A>},
498
- output: {min: TokenAmount<B>, max?: TokenAmount<B>}
499
- } {
500
- return this.swapper.getSwapLimits<A, B>(srcToken, dstToken);
501
- }
502
-
503
- /**
504
- * Returns tokens that you can swap to (if input=true) from a given token,
505
- * or tokens that you can swap from (if input=false) to a given token
506
- */
507
- getSwapCounterTokens(token: Token, input: SwapSide | boolean): Token<ChainIdentifier>[] {
508
- return this.swapper.getSwapCounterTokens(token, input);
509
- }
510
-
511
- }
1
+ import {IntermediaryDiscovery, SwapBounds} from "../intermediaries/IntermediaryDiscovery";
2
+ import {SwapType} from "../enums/SwapType";
3
+ import {LnForGasSwap} from "../swaps/trusted/ln/LnForGasSwap";
4
+ import {ISwap} from "../swaps/ISwap";
5
+ import {IToBTCSwap} from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
6
+ import {ChainIds, MultiChain, SupportsSwapType} from "./Swapper";
7
+ import {FromBTCLNSwap} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
8
+ import {FromBTCSwap} from "../swaps/escrow_swaps/frombtc/onchain/FromBTCSwap";
9
+ import {ToBTCLNSwap} from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap";
10
+ import {ToBTCSwap} from "../swaps/escrow_swaps/tobtc/onchain/ToBTCSwap";
11
+ import {SwapPriceWithChain} from "../prices/SwapPriceWithChain";
12
+ import {BTC_NETWORK} from "@scure/btc-signer/utils";
13
+ import {ToBTCOptions} from "../swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper";
14
+ import {ToBTCLNOptions} from "../swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper";
15
+ import {FromBTCOptions} from "../swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper";
16
+ import {FromBTCLNOptions} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper";
17
+ import {SwapperUtils} from "./SwapperUtils";
18
+ import {SpvFromBTCSwap} from "../swaps/spv_swaps/SpvFromBTCSwap";
19
+ import {SwapperWithChain} from "./SwapperWithChain";
20
+ import {SwapWithSigner, wrapSwapWithSigner} from "../types/SwapWithSigner";
21
+ import {OnchainForGasSwap} from "../swaps/trusted/onchain/OnchainForGasSwap";
22
+ import {FromBTCLNAutoSwap} from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap";
23
+ import {FromBTCLNAutoOptions} from "../swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper";
24
+ import {TokenAmount} from "../types/TokenAmount";
25
+ import {BtcToken, SCToken, Token} from "../types/Token";
26
+ import {LNURLWithdraw} from "../types/lnurl/LNURLWithdraw";
27
+ import {LNURLPay} from "../types/lnurl/LNURLPay";
28
+ import {MempoolApi, MempoolBitcoinRpc} from "@atomiqlabs/btc-mempool";
29
+ import {Messenger} from "@atomiqlabs/base";
30
+ import {LightningInvoiceCreateService} from "../types/wallets/LightningInvoiceCreateService";
31
+ import {Intermediary} from "../intermediaries/Intermediary";
32
+ import {SpvFromBTCOptions} from "../swaps/spv_swaps/SpvFromBTCWrapper";
33
+ import {SwapTypeMapping} from "../utils/SwapUtils";
34
+ import {SwapSide} from "../enums/SwapSide";
35
+
36
+ /**
37
+ * Chain and signer-specific wrapper for automatic signer injection into swap methods
38
+ * @category Core
39
+ */
40
+ export class SwapperWithSigner<T extends MultiChain, ChainIdentifier extends ChainIds<T>> {
41
+
42
+ private readonly signer: T[ChainIdentifier]["Signer"];
43
+ /**
44
+ * Underlying single chain swapper instance
45
+ */
46
+ private readonly swapper: SwapperWithChain<T, ChainIdentifier>;
47
+
48
+ /**
49
+ * Smart chain identifier of this swapper with chain and signer
50
+ */
51
+ readonly chainIdentifier: ChainIdentifier;
52
+
53
+ /**
54
+ * Pricing API used by the SDK
55
+ */
56
+ get prices(): SwapPriceWithChain<T, ChainIdentifier> {
57
+ return this.swapper.prices;
58
+ }
59
+ /**
60
+ * Intermediary discovery instance
61
+ */
62
+ get intermediaryDiscovery(): IntermediaryDiscovery {
63
+ return this.swapper.intermediaryDiscovery;
64
+ }
65
+ /**
66
+ * Miscellaneous utility functions
67
+ */
68
+ get Utils(): SwapperUtils<T> {
69
+ return this.swapper.Utils;
70
+ }
71
+ /**
72
+ * Helper information about various swap protocol and their features:
73
+ * - `requiresInputWallet`: Whether a swap requires a connected wallet on the input chain able to sign
74
+ * arbitrary transaction
75
+ * - `requiresOutputWallet`: Whether a swap requires a connected wallet on the output chain able to sign
76
+ * arbitrary transactions
77
+ * - `supportsGasDrop`: Whether a swap supports the "gas drop" feature, allowing to user to receive a small
78
+ * amount of native token as part of the swap when swapping to smart chains
79
+ *
80
+ * Uses a `Record` type here, use the {@link SwapProtocolInfo} import for a literal readonly type, with
81
+ * pre-filled exact values in the type.
82
+ */
83
+ get SwapTypeInfo() {
84
+ return this.swapper.SwapTypeInfo;
85
+ }
86
+
87
+ constructor(swapper: SwapperWithChain<T, ChainIdentifier>, signer: T[ChainIdentifier]["Signer"]) {
88
+ this.swapper = swapper;
89
+ this.signer = signer;
90
+ this.chainIdentifier = swapper.chainIdentifier;
91
+ }
92
+
93
+ /**
94
+ * Creates Smart chain -> Bitcoin ({@link SwapType.TO_BTC}) swap
95
+ *
96
+ * @param tokenAddress Token address to pay with
97
+ * @param address Recipient's bitcoin address
98
+ * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
99
+ * @param exactIn Whether to use exact in instead of exact out
100
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
101
+ * @param options Additional options for the swap
102
+ */
103
+ createToBTCSwap(
104
+ tokenAddress: string,
105
+ address: string,
106
+ amount: bigint,
107
+ exactIn?: boolean,
108
+ additionalParams?: Record<string, any>,
109
+ options?: ToBTCOptions
110
+ ): Promise<SwapWithSigner<ToBTCSwap<T[ChainIdentifier]>>> {
111
+ return this.swapper.createToBTCSwap(this.signer.getAddress(), tokenAddress, address, amount, exactIn, additionalParams, options)
112
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
113
+ }
114
+
115
+ /**
116
+ * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap
117
+ *
118
+ * @param tokenAddress Token address to pay with
119
+ * @param paymentRequest BOLT11 lightning network invoice to be paid (needs to have a fixed amount), and the swap
120
+ * amount is taken from this fixed amount, hence only exact output swaps are supported
121
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
122
+ * @param options Additional options for the swap
123
+ */
124
+ createToBTCLNSwap(
125
+ tokenAddress: string,
126
+ paymentRequest: string,
127
+ additionalParams?: Record<string, any>,
128
+ options?: ToBTCLNOptions & {comment?: string}
129
+ ): Promise<SwapWithSigner<ToBTCLNSwap<T[ChainIdentifier]>>> {
130
+ return this.swapper.createToBTCLNSwap(this.signer.getAddress(), tokenAddress, paymentRequest, additionalParams, options)
131
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
132
+ }
133
+
134
+ /**
135
+ * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via LNURL-pay link
136
+ *
137
+ * @param tokenAddress Token address to pay with
138
+ * @param lnurlPay LNURL-pay link to use for the payment
139
+ * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
140
+ * @param exactIn Whether to do an exact in swap instead of exact out
141
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
142
+ * @param options Additional options for the swap
143
+ */
144
+ createToBTCLNSwapViaLNURL(
145
+ tokenAddress: string,
146
+ lnurlPay: string | LNURLPay,
147
+ amount: bigint,
148
+ exactIn?: boolean,
149
+ additionalParams?: Record<string, any>,
150
+ options?: ToBTCLNOptions
151
+ ): Promise<SwapWithSigner<ToBTCLNSwap<T[ChainIdentifier]>>> {
152
+ return this.swapper.createToBTCLNSwapViaLNURL(this.signer.getAddress(), tokenAddress, lnurlPay, amount, exactIn, additionalParams, options)
153
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
154
+ }
155
+
156
+ /**
157
+ * Creates Smart chain -> Bitcoin Lightning ({@link SwapType.TO_BTCLN}) swap via {@link LightningInvoiceCreateService}
158
+ *
159
+ * @param tokenAddress Token address to pay with
160
+ * @param service Invoice create service object which facilitates the creation of fixed amount LN invoices
161
+ * @param amount Amount to send in token based units (if `exactIn=true`) or receive in satoshis (if `exactIn=false`)
162
+ * @param exactIn Whether to do an exact in swap instead of exact out
163
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
164
+ * @param options Additional options for the swap
165
+ */
166
+ createToBTCLNSwapViaInvoiceCreateService(
167
+ tokenAddress: string,
168
+ service: LightningInvoiceCreateService,
169
+ amount: bigint,
170
+ exactIn?: boolean,
171
+ additionalParams?: Record<string, any>,
172
+ options?: ToBTCLNOptions
173
+ ): Promise<SwapWithSigner<ToBTCLNSwap<T[ChainIdentifier]>>> {
174
+ return this.swapper.createToBTCLNSwapViaInvoiceCreateService(this.signer.getAddress(), tokenAddress, service, amount, exactIn, additionalParams, options)
175
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
176
+ }
177
+
178
+ /**
179
+ * Creates Bitcoin -> Smart chain ({@link SwapType.SPV_VAULT_FROM_BTC}) swap
180
+ *
181
+ * @param tokenAddress Token address to receive
182
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
183
+ * @param exactOut Whether to use a exact out instead of exact in
184
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
185
+ * @param options Additional options for the swap
186
+ */
187
+ createFromBTCSwapNew(
188
+ tokenAddress: string,
189
+ amount: bigint,
190
+ exactOut?: boolean,
191
+ additionalParams?: Record<string, any>,
192
+ options?: SpvFromBTCOptions
193
+ ): Promise<SwapWithSigner<SpvFromBTCSwap<T[ChainIdentifier]>>> {
194
+ return this.swapper.createFromBTCSwapNew(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
195
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
196
+ }
197
+
198
+ /**
199
+ * Creates LEGACY Bitcoin -> Smart chain ({@link SwapType.FROM_BTC}) swap
200
+ *
201
+ * @param tokenAddress Token address to receive
202
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
203
+ * @param exactOut Whether to use a exact out instead of exact in
204
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
205
+ * @param options Additional options for the swap
206
+ */
207
+ createFromBTCSwap(
208
+ tokenAddress: string,
209
+ amount: bigint,
210
+ exactOut?: boolean,
211
+ additionalParams?: Record<string, any>,
212
+ options?: FromBTCOptions
213
+ ): Promise<SwapWithSigner<FromBTCSwap<T[ChainIdentifier]>>> {
214
+ return this.swapper.createFromBTCSwap(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
215
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
216
+ }
217
+
218
+ /**
219
+ * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap
220
+ *
221
+ * @param tokenAddress Token address to receive
222
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
223
+ * @param exactOut Whether to use a exact out instead of exact in
224
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
225
+ * @param options Additional options for the swap
226
+ */
227
+ createFromBTCLNSwap(
228
+ tokenAddress: string,
229
+ amount: bigint,
230
+ exactOut?: boolean,
231
+ additionalParams?: Record<string, any>,
232
+ options?: FromBTCLNOptions
233
+ ): Promise<SwapWithSigner<FromBTCLNSwap<T[ChainIdentifier]>>> {
234
+ return this.swapper.createFromBTCLNSwap(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
235
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
236
+ }
237
+
238
+ /**
239
+ * Creates LEGACY Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN}) swap, withdrawing from
240
+ * an LNURL-withdraw link
241
+ *
242
+ * @param tokenAddress Token address to receive
243
+ * @param lnurl LNURL-withdraw link to pull the funds from
244
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
245
+ * @param exactOut Whether to use a exact out instead of exact in
246
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
247
+ */
248
+ createFromBTCLNSwapViaLNURL(
249
+ tokenAddress: string,
250
+ lnurl: string | LNURLWithdraw,
251
+ amount: bigint,
252
+ exactOut?: boolean,
253
+ additionalParams?: Record<string, any>
254
+ ): Promise<SwapWithSigner<FromBTCLNSwap<T[ChainIdentifier]>>> {
255
+ return this.swapper.createFromBTCLNSwapViaLNURL(this.signer.getAddress(), tokenAddress, lnurl, amount, exactOut, additionalParams)
256
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
257
+ }
258
+
259
+ /**
260
+ * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap
261
+ *
262
+ * @param tokenAddress Token address to receive
263
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
264
+ * @param exactOut Whether to use a exact out instead of exact in
265
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
266
+ * @param options Additional options for the swap
267
+ */
268
+ createFromBTCLNSwapNew(
269
+ tokenAddress: string,
270
+ amount: bigint,
271
+ exactOut?: boolean,
272
+ additionalParams?: Record<string, any>,
273
+ options?: FromBTCLNAutoOptions
274
+ ): Promise<SwapWithSigner<FromBTCLNAutoSwap<T[ChainIdentifier]>>> {
275
+ return this.swapper.createFromBTCLNSwapNew(this.signer.getAddress(), tokenAddress, amount, exactOut, additionalParams, options)
276
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
277
+ }
278
+
279
+ /**
280
+ * Creates Bitcoin Lightning -> Smart chain ({@link SwapType.FROM_BTCLN_AUTO}) swap, withdrawing from
281
+ * an LNURL-withdraw link
282
+ *
283
+ * @param tokenAddress Token address to receive
284
+ * @param lnurl LNURL-withdraw link to pull the funds from
285
+ * @param amount Amount to send in satoshis (if `exactOut=false`) or receive in token based units (if `exactOut=true`)
286
+ * @param exactOut Whether to use a exact out instead of exact in
287
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
288
+ * @param options Additional options for the swap
289
+ */
290
+ createFromBTCLNSwapNewViaLNURL(
291
+ tokenAddress: string,
292
+ lnurl: string | LNURLWithdraw,
293
+ amount: bigint,
294
+ exactOut?: boolean,
295
+ additionalParams?: Record<string, any>,
296
+ options?: FromBTCLNAutoOptions
297
+ ): Promise<SwapWithSigner<FromBTCLNAutoSwap<T[ChainIdentifier]>>> {
298
+ return this.swapper.createFromBTCLNSwapNewViaLNURL(this.signer.getAddress(), tokenAddress, lnurl, amount, exactOut, additionalParams, options)
299
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
300
+ }
301
+
302
+ /**
303
+ * Creates a trusted Bitcoin Lightning -> Smart chain ({@link SwapType.TRUSTED_FROM_BTCLN}) gas swap
304
+ *
305
+ * @param amount Amount of native token to receive, in base units
306
+ * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
307
+ * @throws {Error} If no trusted intermediary specified
308
+ */
309
+ createTrustedLNForGasSwap(amount: bigint, trustedIntermediaryOrUrl?: Intermediary | string): Promise<LnForGasSwap<T[ChainIdentifier]>> {
310
+ return this.swapper.createTrustedLNForGasSwap(this.signer.getAddress(), amount, trustedIntermediaryOrUrl);
311
+ }
312
+
313
+ /**
314
+ * Creates a trusted Bitcoin -> Smart chain ({@link SwapType.TRUSTED_FROM_BTC}) gas swap
315
+ *
316
+ * @param amount Amount of native token to receive, in base units
317
+ * @param refundAddress Bitcoin refund address, in case the swap fails the funds are refunded here
318
+ * @param trustedIntermediaryOrUrl URL or Intermediary object of the trusted intermediary to use, otherwise uses default
319
+ * @throws {Error} If no trusted intermediary specified
320
+ */
321
+ createTrustedOnchainForGasSwap(amount: bigint, refundAddress?: string, trustedIntermediaryOrUrl?: Intermediary | string): Promise<OnchainForGasSwap<T[ChainIdentifier]>> {
322
+ return this.swapper.createTrustedOnchainForGasSwap(this.signer.getAddress(), amount, refundAddress, trustedIntermediaryOrUrl);
323
+ }
324
+
325
+ /**
326
+ * @internal
327
+ */
328
+ create(srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>, amount: bigint, exactIn: boolean, lnurlWithdraw?: string | LNURLWithdraw): Promise<(SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? FromBTCLNAutoSwap<T[ChainIdentifier]> : FromBTCLNSwap<T[ChainIdentifier]>)>;
329
+ /**
330
+ * @internal
331
+ */
332
+ create(srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>, amount: bigint, exactIn: boolean): Promise<(SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SpvFromBTCSwap<T[ChainIdentifier]> : FromBTCSwap<T[ChainIdentifier]>)>;
333
+ /**
334
+ * @internal
335
+ */
336
+ create(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>, amount: bigint, exactIn: boolean, address: string): Promise<ToBTCSwap<T[ChainIdentifier]>>;
337
+ /**
338
+ * @internal
339
+ */
340
+ create(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: bigint, exactIn: boolean, lnurlPay: string | LNURLPay): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
341
+ /**
342
+ * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (exactIn=true)
343
+ * or output amount (exactIn=false), NOTE: For regular -> BTC-LN (lightning) swaps the passed amount is ignored and
344
+ * invoice's pre-set amount is used instead.
345
+ *
346
+ * @param srcToken Source token of the swap, user pays this token
347
+ * @param dstToken Destination token of the swap, user receives this token
348
+ * @param amount Amount of the swap
349
+ * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
350
+ * @param addressLnurlLightningInvoice Bitcoin on-chain address, lightning invoice, LNURL-pay to pay or
351
+ * LNURL-withdrawal to withdraw money from
352
+ */
353
+ create(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>, amount: undefined, exactIn: false, addressLnurlLightningInvoice: string): Promise<ToBTCLNSwap<T[ChainIdentifier]>>;
354
+ /**
355
+ * Creates a swap from srcToken to dstToken, of a specific token amount, either specifying input amount (exactIn=true)
356
+ * or output amount (exactIn=false), NOTE: For regular -> BTC-LN (lightning) swaps the passed amount is ignored and
357
+ * invoice's pre-set amount is used instead.
358
+ *
359
+ * @param srcToken Source token of the swap, user pays this token
360
+ * @param dstToken Destination token of the swap, user receives this token
361
+ * @param amount Amount of the swap
362
+ * @param exactIn Whether the amount specified is an input amount (exactIn=true) or an output amount (exactIn=false)
363
+ * @param addressLnurlLightningInvoice Bitcoin on-chain address, lightning invoice, LNURL-pay to pay or
364
+ * LNURL-withdrawal to withdraw money from
365
+ */
366
+ create(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>, amount: bigint | undefined, exactIn: boolean, addressLnurlLightningInvoice?: string | LNURLWithdraw | LNURLPay): Promise<SwapWithSigner<ISwap<T[ChainIdentifier]>>> {
367
+ return this.swapper.create(this.signer.getAddress(), srcToken as any, dstToken as any, amount as any, exactIn, addressLnurlLightningInvoice as any)
368
+ .then(swap => wrapSwapWithSigner(swap, this.signer));
369
+ }
370
+
371
+ /**
372
+ * Returns swaps that are in-progress and are claimable for the specific chain, optionally also for a specific signer's address
373
+ */
374
+ getAllSwaps(): Promise<ISwap<T[ChainIdentifier]>[]> {
375
+ return this.swapper.getAllSwaps(this.signer.getAddress());
376
+ }
377
+
378
+ /**
379
+ * Returns swaps that are in-progress and are claimable for the specific chain, optionally also for a specific signer's address
380
+ */
381
+ getActionableSwaps(): Promise<ISwap<T[ChainIdentifier]>[]> {
382
+ return this.swapper.getActionableSwaps(this.signer.getAddress());
383
+ }
384
+
385
+ /**
386
+ * Returns swaps that are refundable for the specific chain, optionally also for a specific signer's address
387
+ */
388
+ getRefundableSwaps(): Promise<IToBTCSwap<T[ChainIdentifier]>[]> {
389
+ return this.swapper.getRefundableSwaps(this.signer.getAddress());
390
+ }
391
+
392
+ /**
393
+ * Returns swap with a specific id (identifier) on a specific chain and optionally with a signer
394
+ */
395
+ getSwapById(id: string): Promise<ISwap<T[ChainIdentifier]>> {
396
+ return this.swapper.getSwapById(id, this.signer.getAddress());
397
+ }
398
+
399
+ /**
400
+ * Returns the swap with a proper return type, or `undefined` if not found or has wrong type
401
+ *
402
+ * @param id An ID of the swap ({@link ISwap.getId})
403
+ * @param swapType Type of the swap
404
+ */
405
+ async getTypedSwapById<S extends SwapType>(id: string, swapType: S): Promise<SwapTypeMapping<T[ChainIdentifier]>[S] | undefined> {
406
+ return this.swapper.getTypedSwapById<S>(id, swapType, this.signer.getAddress());
407
+ }
408
+
409
+ /**
410
+ * Synchronizes swaps from chain, this is usually ran when SDK is initialized, deletes expired quotes
411
+ */
412
+ async _syncSwaps(): Promise<void> {
413
+ return this.swapper._syncSwaps(this.signer.getAddress());
414
+ }
415
+
416
+ /**
417
+ * Recovers swaps from on-chain historical data.
418
+ *
419
+ * Please note that the recovered swaps might not be complete (i.e. missing amounts or addresses), as some
420
+ * of the swap data is purely off-chain and can never be recovered purely from on-chain data. This
421
+ * functions tries to recover as much swap data as possible.
422
+ *
423
+ * @param startBlockheight Optional starting blockheight for swap data recovery, will only check swaps
424
+ * initiated after this blockheight
425
+ */
426
+ async recoverSwaps(startBlockheight?: number): Promise<ISwap<T[ChainIdentifier]>[]> {
427
+ return this.swapper.recoverSwaps(this.signer.getAddress(), startBlockheight);
428
+ }
429
+
430
+ getToken(ticker: "BTC" | "BITCOIN-BTC"): BtcToken<false>;
431
+ getToken(ticker: "BTCLN" | "BTC-LN" | "LIGHTNING-BTC"): BtcToken<true>;
432
+ getToken(ticker: `${ChainIdentifier}-${string}`): SCToken<ChainIdentifier>;
433
+ getToken(tickerOrAddress: string): Token<ChainIdentifier>;
434
+ /**
435
+ * Returns the {@link Token} object for a given token
436
+ *
437
+ * @param tickerOrAddress Token to return the object for, can use multiple formats:
438
+ * - a) token ticker, such as `"BTC"`, `"SOL"`, etc.
439
+ * - b) token ticker prefixed with smart chain identifier, such as `"SOLANA-SOL"`, `"SOLANA-USDC"`, etc.
440
+ * - c) token address
441
+ */
442
+ getToken(tickerOrAddress: string): Token<ChainIdentifier> {
443
+ return this.swapper.getToken(tickerOrAddress);
444
+ }
445
+
446
+ /**
447
+ * Returns whether the SDK supports a given swap type on this chain based on currently known LPs
448
+ *
449
+ * @param swapType Swap protocol type
450
+ */
451
+ supportsSwapType<
452
+ Type extends SwapType
453
+ >(swapType: Type): SupportsSwapType<T[ChainIdentifier], Type> {
454
+ return this.swapper.supportsSwapType(swapType);
455
+ }
456
+
457
+ /**
458
+ * @internal
459
+ */
460
+ getSwapType(srcToken: BtcToken<true>, dstToken: SCToken<ChainIdentifier>): (SupportsSwapType<T[ChainIdentifier], SwapType.FROM_BTCLN_AUTO> extends true ? SwapType.FROM_BTCLN_AUTO : SwapType.FROM_BTCLN);
461
+ /**
462
+ * @internal
463
+ */
464
+ getSwapType(srcToken: BtcToken<false>, dstToken: SCToken<ChainIdentifier>): (SupportsSwapType<T[ChainIdentifier], SwapType.SPV_VAULT_FROM_BTC> extends true ? SwapType.SPV_VAULT_FROM_BTC : SwapType.FROM_BTC);
465
+ /**
466
+ * @internal
467
+ */
468
+ getSwapType(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<false>): SwapType.TO_BTC;
469
+ /**
470
+ * @internal
471
+ */
472
+ getSwapType(srcToken: SCToken<ChainIdentifier>, dstToken: BtcToken<true>): SwapType.TO_BTCLN;
473
+ /**
474
+ * Returns type of the swap based on input and output tokens specified
475
+ *
476
+ * @param srcToken Source token
477
+ * @param dstToken Destination token
478
+ */
479
+ getSwapType(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN;
480
+ /**
481
+ * Returns type of the swap based on input and output tokens specified
482
+ *
483
+ * @param srcToken Source token
484
+ * @param dstToken Destination token
485
+ */
486
+ getSwapType(srcToken: Token<ChainIdentifier>, dstToken: Token<ChainIdentifier>): SwapType.FROM_BTCLN_AUTO | SwapType.FROM_BTCLN | SwapType.SPV_VAULT_FROM_BTC | SwapType.FROM_BTC | SwapType.TO_BTC | SwapType.TO_BTCLN {
487
+ return this.swapper.getSwapType(srcToken, dstToken);
488
+ }
489
+
490
+ /**
491
+ * Returns minimum/maximum limits for inputs and outputs for a swap between given tokens
492
+ *
493
+ * @param srcToken Source token
494
+ * @param dstToken Destination token
495
+ */
496
+ getSwapLimits<A extends Token<ChainIdentifier>, B extends Token<ChainIdentifier>>(srcToken: A, dstToken: B): {
497
+ input: {min: TokenAmount<A>, max?: TokenAmount<A>},
498
+ output: {min: TokenAmount<B>, max?: TokenAmount<B>}
499
+ } {
500
+ return this.swapper.getSwapLimits<A, B>(srcToken, dstToken);
501
+ }
502
+
503
+ /**
504
+ * Returns tokens that you can swap to (if input=true) from a given token,
505
+ * or tokens that you can swap from (if input=false) to a given token
506
+ */
507
+ getSwapCounterTokens(token: Token, input: SwapSide | boolean): Token<ChainIdentifier>[] {
508
+ return this.swapper.getSwapCounterTokens(token, input);
509
+ }
510
+
511
+ }