@atomiqlabs/sdk 8.1.8 → 8.3.1

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 (253) hide show
  1. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +41 -5
  2. package/dist/bitcoin/wallet/BitcoinWallet.js +36 -1
  3. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +52 -2
  4. package/dist/bitcoin/wallet/IBitcoinWallet.js +2 -1
  5. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +42 -7
  6. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +36 -1
  7. package/dist/enums/FeeType.d.ts +7 -0
  8. package/dist/enums/FeeType.js +7 -0
  9. package/dist/enums/SwapAmountType.d.ts +7 -0
  10. package/dist/enums/SwapAmountType.js +7 -0
  11. package/dist/enums/SwapDirection.d.ts +7 -0
  12. package/dist/enums/SwapDirection.js +7 -0
  13. package/dist/enums/SwapType.d.ts +62 -1
  14. package/dist/enums/SwapType.js +62 -1
  15. package/dist/errors/IntermediaryError.d.ts +4 -0
  16. package/dist/errors/IntermediaryError.js +1 -0
  17. package/dist/errors/RequestError.d.ts +15 -1
  18. package/dist/errors/RequestError.js +8 -0
  19. package/dist/errors/UserError.d.ts +1 -0
  20. package/dist/errors/UserError.js +1 -0
  21. package/dist/index.d.ts +4 -5
  22. package/dist/index.js +3 -4
  23. package/dist/intermediaries/Intermediary.d.ts +57 -10
  24. package/dist/intermediaries/Intermediary.js +37 -10
  25. package/dist/intermediaries/IntermediaryDiscovery.d.ts +55 -22
  26. package/dist/intermediaries/IntermediaryDiscovery.js +35 -22
  27. package/dist/prices/RedundantSwapPrice.d.ts +24 -3
  28. package/dist/prices/RedundantSwapPrice.js +21 -1
  29. package/dist/prices/SingleSwapPrice.d.ts +9 -6
  30. package/dist/prices/SingleSwapPrice.js +10 -7
  31. package/dist/prices/SwapPriceWithChain.d.ts +54 -16
  32. package/dist/prices/SwapPriceWithChain.js +58 -20
  33. package/dist/prices/abstract/ISwapPrice.d.ts +94 -45
  34. package/dist/prices/abstract/ISwapPrice.js +103 -55
  35. package/dist/prices/providers/BinancePriceProvider.d.ts +7 -0
  36. package/dist/prices/providers/BinancePriceProvider.js +7 -0
  37. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +6 -0
  38. package/dist/prices/providers/CoinGeckoPriceProvider.js +6 -0
  39. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +6 -0
  40. package/dist/prices/providers/CoinPaprikaPriceProvider.js +6 -0
  41. package/dist/prices/providers/CustomPriceProvider.d.ts +11 -0
  42. package/dist/prices/providers/CustomPriceProvider.js +11 -0
  43. package/dist/prices/providers/KrakenPriceProvider.d.ts +9 -0
  44. package/dist/prices/providers/KrakenPriceProvider.js +9 -0
  45. package/dist/prices/providers/OKXPriceProvider.d.ts +6 -0
  46. package/dist/prices/providers/OKXPriceProvider.js +6 -0
  47. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +3 -0
  48. package/dist/prices/providers/abstract/ExchangePriceProvider.js +3 -0
  49. package/dist/storage/IUnifiedStorage.d.ts +19 -7
  50. package/dist/storage/UnifiedSwapStorage.d.ts +33 -3
  51. package/dist/storage/UnifiedSwapStorage.js +29 -1
  52. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +31 -7
  53. package/dist/storage-browser/IndexedDBUnifiedStorage.js +29 -6
  54. package/dist/storage-browser/LocalStorageManager.d.ts +25 -1
  55. package/dist/storage-browser/LocalStorageManager.js +25 -1
  56. package/dist/swapper/Swapper.d.ts +302 -221
  57. package/dist/swapper/Swapper.js +376 -344
  58. package/dist/swapper/SwapperFactory.d.ts +41 -17
  59. package/dist/swapper/SwapperFactory.js +23 -2
  60. package/dist/swapper/SwapperUtils.d.ts +75 -28
  61. package/dist/swapper/SwapperUtils.js +107 -60
  62. package/dist/swapper/SwapperWithChain.d.ts +286 -91
  63. package/dist/swapper/SwapperWithChain.js +218 -64
  64. package/dist/swapper/SwapperWithSigner.d.ts +229 -80
  65. package/dist/swapper/SwapperWithSigner.js +190 -44
  66. package/dist/swaps/IAddressSwap.d.ts +10 -1
  67. package/dist/swaps/IAddressSwap.js +2 -1
  68. package/dist/swaps/IBTCWalletSwap.d.ts +24 -6
  69. package/dist/swaps/IBTCWalletSwap.js +2 -1
  70. package/dist/swaps/IClaimableSwap.d.ts +36 -4
  71. package/dist/swaps/IClaimableSwap.js +2 -1
  72. package/dist/swaps/IClaimableSwapWrapper.d.ts +11 -1
  73. package/dist/swaps/IRefundableSwap.d.ts +29 -3
  74. package/dist/swaps/IRefundableSwap.js +2 -1
  75. package/dist/swaps/ISwap.d.ts +159 -21
  76. package/dist/swaps/ISwap.js +90 -33
  77. package/dist/swaps/ISwapWithGasDrop.d.ts +6 -0
  78. package/dist/swaps/ISwapWithGasDrop.js +1 -0
  79. package/dist/swaps/ISwapWrapper.d.ts +157 -48
  80. package/dist/swaps/ISwapWrapper.js +130 -72
  81. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +49 -6
  82. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +22 -12
  83. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +65 -12
  84. package/dist/swaps/escrow_swaps/IEscrowSwap.js +38 -19
  85. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +39 -9
  86. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +30 -21
  87. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +31 -15
  88. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +33 -18
  89. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +94 -29
  90. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +90 -27
  91. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +22 -9
  92. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +24 -11
  93. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +275 -58
  94. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +516 -239
  95. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +76 -25
  96. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +131 -49
  97. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +311 -51
  98. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +542 -193
  99. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +87 -26
  100. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +147 -58
  101. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +209 -53
  102. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +449 -242
  103. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +77 -23
  104. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +116 -46
  105. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +197 -56
  106. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +326 -189
  107. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +30 -5
  108. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +44 -19
  109. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +60 -19
  110. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +74 -31
  111. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +76 -50
  112. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +106 -101
  113. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +36 -13
  114. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +65 -19
  115. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +46 -17
  116. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +82 -27
  117. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +328 -92
  118. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +460 -219
  119. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +76 -24
  120. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +244 -124
  121. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +146 -18
  122. package/dist/swaps/trusted/ln/LnForGasSwap.js +173 -43
  123. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +29 -10
  124. package/dist/swaps/trusted/ln/LnForGasWrapper.js +30 -11
  125. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +200 -47
  126. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +230 -78
  127. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +34 -12
  128. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +33 -14
  129. package/dist/types/AmountData.d.ts +2 -1
  130. package/dist/types/CustomPriceFunction.d.ts +7 -1
  131. package/dist/types/SwapExecutionAction.d.ts +74 -4
  132. package/dist/types/SwapWithSigner.d.ts +4 -1
  133. package/dist/types/SwapWithSigner.js +5 -2
  134. package/dist/types/Token.d.ts +11 -5
  135. package/dist/types/Token.js +6 -3
  136. package/dist/types/TokenAmount.d.ts +3 -0
  137. package/dist/types/TokenAmount.js +2 -0
  138. package/dist/types/fees/Fee.d.ts +2 -1
  139. package/dist/types/fees/FeeBreakdown.d.ts +2 -1
  140. package/dist/types/fees/PercentagePPM.d.ts +2 -0
  141. package/dist/types/fees/PercentagePPM.js +1 -0
  142. package/dist/types/lnurl/LNURLPay.d.ts +14 -6
  143. package/dist/types/lnurl/LNURLPay.js +6 -2
  144. package/dist/types/lnurl/LNURLWithdraw.d.ts +12 -5
  145. package/dist/types/lnurl/LNURLWithdraw.js +6 -2
  146. package/dist/types/wallets/LightningInvoiceCreateService.d.ts +20 -0
  147. package/dist/types/wallets/LightningInvoiceCreateService.js +15 -0
  148. package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +3 -1
  149. package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +3 -1
  150. package/dist/utils/BitcoinUtils.d.ts +1 -0
  151. package/dist/utils/BitcoinUtils.js +5 -1
  152. package/dist/utils/SwapUtils.d.ts +56 -1
  153. package/dist/utils/SwapUtils.js +53 -1
  154. package/dist/utils/TokenUtils.d.ts +10 -2
  155. package/dist/utils/TokenUtils.js +12 -4
  156. package/package.json +3 -3
  157. package/src/bitcoin/wallet/BitcoinWallet.ts +41 -5
  158. package/src/bitcoin/wallet/IBitcoinWallet.ts +57 -2
  159. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +42 -6
  160. package/src/enums/FeeType.ts +7 -0
  161. package/src/enums/SwapAmountType.ts +7 -0
  162. package/src/enums/SwapDirection.ts +7 -0
  163. package/src/enums/SwapType.ts +62 -2
  164. package/src/errors/IntermediaryError.ts +4 -0
  165. package/src/errors/RequestError.ts +15 -1
  166. package/src/errors/UserError.ts +1 -0
  167. package/src/index.ts +6 -5
  168. package/src/intermediaries/Intermediary.ts +57 -10
  169. package/src/intermediaries/IntermediaryDiscovery.ts +60 -27
  170. package/src/prices/RedundantSwapPrice.ts +24 -4
  171. package/src/prices/SingleSwapPrice.ts +10 -7
  172. package/src/prices/SwapPriceWithChain.ts +59 -21
  173. package/src/prices/abstract/ISwapPrice.ts +114 -65
  174. package/src/prices/providers/BinancePriceProvider.ts +7 -0
  175. package/src/prices/providers/CoinGeckoPriceProvider.ts +6 -0
  176. package/src/prices/providers/CoinPaprikaPriceProvider.ts +6 -0
  177. package/src/prices/providers/CustomPriceProvider.ts +11 -0
  178. package/src/prices/providers/KrakenPriceProvider.ts +9 -0
  179. package/src/prices/providers/OKXPriceProvider.ts +6 -0
  180. package/src/prices/providers/abstract/ExchangePriceProvider.ts +3 -0
  181. package/src/storage/IUnifiedStorage.ts +19 -7
  182. package/src/storage/UnifiedSwapStorage.ts +33 -3
  183. package/src/storage-browser/IndexedDBUnifiedStorage.ts +31 -8
  184. package/src/storage-browser/LocalStorageManager.ts +25 -1
  185. package/src/swapper/Swapper.ts +512 -378
  186. package/src/swapper/SwapperFactory.ts +44 -21
  187. package/src/swapper/SwapperUtils.ts +107 -60
  188. package/src/swapper/SwapperWithChain.ts +320 -81
  189. package/src/swapper/SwapperWithSigner.ts +263 -56
  190. package/src/swaps/IAddressSwap.ts +11 -1
  191. package/src/swaps/IBTCWalletSwap.ts +24 -8
  192. package/src/swaps/IClaimableSwap.ts +39 -4
  193. package/src/swaps/IClaimableSwapWrapper.ts +11 -2
  194. package/src/swaps/IRefundableSwap.ts +32 -3
  195. package/src/swaps/ISwap.ts +221 -82
  196. package/src/swaps/ISwapWithGasDrop.ts +6 -0
  197. package/src/swaps/ISwapWrapper.ts +212 -94
  198. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +62 -18
  199. package/src/swaps/escrow_swaps/IEscrowSwap.ts +83 -37
  200. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +61 -30
  201. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +37 -19
  202. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +120 -51
  203. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +24 -11
  204. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +559 -256
  205. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +155 -61
  206. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +590 -226
  207. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +177 -74
  208. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +470 -243
  209. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +141 -59
  210. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +352 -193
  211. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +48 -23
  212. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +86 -39
  213. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +110 -110
  214. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +88 -33
  215. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +101 -31
  216. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +534 -263
  217. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +289 -148
  218. package/src/swaps/trusted/ln/LnForGasSwap.ts +184 -45
  219. package/src/swaps/trusted/ln/LnForGasWrapper.ts +34 -15
  220. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +260 -86
  221. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +41 -19
  222. package/src/types/AmountData.ts +2 -1
  223. package/src/types/CustomPriceFunction.ts +7 -1
  224. package/src/types/SwapExecutionAction.ts +84 -5
  225. package/src/types/SwapWithSigner.ts +7 -3
  226. package/src/types/Token.ts +12 -5
  227. package/src/types/TokenAmount.ts +3 -0
  228. package/src/types/fees/Fee.ts +2 -1
  229. package/src/types/fees/FeeBreakdown.ts +2 -1
  230. package/src/types/fees/PercentagePPM.ts +2 -0
  231. package/src/types/lnurl/LNURLPay.ts +14 -6
  232. package/src/types/lnurl/LNURLWithdraw.ts +12 -5
  233. package/src/types/wallets/LightningInvoiceCreateService.ts +26 -0
  234. package/src/types/wallets/MinimalBitcoinWalletInterface.ts +3 -1
  235. package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +3 -1
  236. package/src/utils/BitcoinUtils.ts +5 -0
  237. package/src/utils/SwapUtils.ts +61 -1
  238. package/src/utils/TokenUtils.ts +12 -4
  239. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +0 -68
  240. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +0 -2
  241. package/dist/bitcoin/LightningNetworkApi.d.ts +0 -12
  242. package/dist/bitcoin/LightningNetworkApi.js +0 -2
  243. package/dist/bitcoin/mempool/MempoolApi.d.ts +0 -350
  244. package/dist/bitcoin/mempool/MempoolApi.js +0 -311
  245. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +0 -44
  246. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +0 -48
  247. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +0 -119
  248. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +0 -361
  249. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +0 -22
  250. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +0 -105
  251. package/dist/errors/PaymentAuthError.d.ts +0 -11
  252. package/dist/errors/PaymentAuthError.js +0 -23
  253. package/src/errors/PaymentAuthError.ts +0 -26
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  /// <reference types="node" />
4
- import { ChainType, ClaimEvent, InitializeEvent, LightningNetworkApi, Messenger, RefundEvent } from "@atomiqlabs/base";
4
+ import { ChainType, ClaimEvent, InitializeEvent, LightningNetworkApi, Messenger, RefundEvent, SwapCommitState } from "@atomiqlabs/base";
5
5
  import { Intermediary } from "../../../../intermediaries/Intermediary";
6
6
  import { Buffer } from "buffer";
7
7
  import { SwapType } from "../../../../enums/SwapType";
@@ -30,11 +30,36 @@ export type FromBTCLNAutoWrapperOptions = ISwapWrapperOptions & {
30
30
  unsafeSkipLnNodeCheck: boolean;
31
31
  };
32
32
  export type FromBTCLNAutoDefinition<T extends ChainType> = IFromBTCLNDefinition<T, FromBTCLNAutoWrapper<T>, FromBTCLNAutoSwap<T>>;
33
+ /**
34
+ * New escrow based (HTLC) swaps for Bitcoin Lightning -> Smart chain swaps not requiring manual settlement on
35
+ * the destination by the user, and instead letting the LP initiate the escrow. Permissionless watchtower network
36
+ * handles the claiming of HTLC, with the swap secret broadcasted over Nostr. Also adds a possibility for the user
37
+ * to receive a native token on the destination chain as part of the swap (a "gas drop" feature).
38
+ *
39
+ * @category Swaps
40
+ */
33
41
  export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCLNWrapper<T, FromBTCLNAutoDefinition<T>, FromBTCLNAutoWrapperOptions> implements IClaimableSwapWrapper<FromBTCLNAutoSwap<T>> {
34
- readonly claimableSwapStates: FromBTCLNAutoSwapState[];
35
- readonly TYPE = SwapType.FROM_BTCLN_AUTO;
36
- readonly swapDeserializer: typeof FromBTCLNAutoSwap;
37
- readonly messenger: Messenger;
42
+ readonly TYPE: SwapType.FROM_BTCLN_AUTO;
43
+ /**
44
+ * @internal
45
+ */
46
+ protected readonly tickSwapState: FromBTCLNAutoSwapState[];
47
+ /**
48
+ * @internal
49
+ */
50
+ readonly _pendingSwapStates: FromBTCLNAutoSwapState[];
51
+ /**
52
+ * @internal
53
+ */
54
+ readonly _claimableSwapStates: FromBTCLNAutoSwapState[];
55
+ /**
56
+ * @internal
57
+ */
58
+ readonly _swapDeserializer: typeof FromBTCLNAutoSwap;
59
+ /**
60
+ * @internal
61
+ */
62
+ readonly _messenger: Messenger;
38
63
  /**
39
64
  * @param chainIdentifier
40
65
  * @param unifiedStorage Storage interface for the current environment
@@ -52,10 +77,20 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
52
77
  constructor(chainIdentifier: string, unifiedStorage: UnifiedSwapStorage<T>, unifiedChainEvents: UnifiedSwapEventListener<T>, chain: T["ChainInterface"], contract: T["Contract"], prices: ISwapPrice, tokens: WrapperCtorTokens, swapDataDeserializer: new (data: any) => T["Data"], lnApi: LightningNetworkApi, messenger: Messenger, options?: AllOptional<FromBTCLNAutoWrapperOptions>, events?: EventEmitter<{
53
78
  swapState: [ISwap];
54
79
  }>);
55
- readonly pendingSwapStates: FromBTCLNAutoSwapState[];
56
- readonly tickSwapState: FromBTCLNAutoSwapState[];
80
+ /**
81
+ * @inheritDoc
82
+ * @internal
83
+ */
57
84
  protected processEventInitialize(swap: FromBTCLNAutoSwap<T>, event: InitializeEvent<T["Data"]>): Promise<boolean>;
85
+ /**
86
+ * @inheritDoc
87
+ * @internal
88
+ */
58
89
  protected processEventClaim(swap: FromBTCLNAutoSwap<T>, event: ClaimEvent<T["Data"]>): Promise<boolean>;
90
+ /**
91
+ * @inheritDoc
92
+ * @internal
93
+ */
59
94
  protected processEventRefund(swap: FromBTCLNAutoSwap<T>, event: RefundEvent<T["Data"]>): Promise<boolean>;
60
95
  /**
61
96
  * Pre-fetches claimer (watchtower) bounty data for the swap. Doesn't throw, instead returns null and aborts the
@@ -65,6 +100,7 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
65
100
  * @param amountData
66
101
  * @param options Options as passed to the swap creation function
67
102
  * @param abortController
103
+ *
68
104
  * @private
69
105
  */
70
106
  private preFetchClaimerBounty;
@@ -78,22 +114,27 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
78
114
  * @param decodedPr Decoded bolt11 lightning network invoice
79
115
  * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
80
116
  * @param claimerBounty Claimer bounty as request by the user
81
- * @private
117
+ *
82
118
  * @throws {IntermediaryError} in case the response is invalid
119
+ *
120
+ * @private
83
121
  */
84
122
  private verifyReturnedData;
85
123
  /**
86
- * Returns a newly created swap, receiving 'amount' on lightning network
124
+ * Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
125
+ * where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
126
+ * specifying additional "gas drop" native token that the receipient receives on the destination chain
127
+ * in the `options` argument. The user has to pay a bolt11 invoice on the input lightning network side.
87
128
  *
88
- * @param signer Smart chain signer's address intiating the swap
89
- * @param amountData Amount of token & amount to swap
90
- * @param lps LPs (liquidity providers) to get the quotes from
91
- * @param options Quote options
92
- * @param additionalParams Additional parameters sent to the LP when creating the swap
93
- * @param abortSignal Abort signal for aborting the process
94
- * @param preFetches
129
+ * @param recipient Recipient's address on the destination chain
130
+ * @param amountData Amount, token and exact input/output data for to swap
131
+ * @param lps An array of intermediaries (LPs) to get the quotes from
132
+ * @param options Optional additional quote options
133
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
134
+ * @param abortSignal Abort signal
135
+ * @param preFetches Optional pre-fetches for speeding up the quoting process (mainly used internally)
95
136
  */
96
- create(signer: string, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
137
+ create(recipient: string, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
97
138
  pricePrefetchPromise?: Promise<bigint | undefined>;
98
139
  usdPricePrefetchPromise?: Promise<number | undefined>;
99
140
  gasTokenPricePrefetchPromise?: Promise<bigint | undefined>;
@@ -103,22 +144,42 @@ export declare class FromBTCLNAutoWrapper<T extends ChainType> extends IFromBTCL
103
144
  intermediary: Intermediary;
104
145
  }[];
105
146
  /**
106
- * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
147
+ * Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
148
+ * where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
149
+ * specifying additional "gas drop" native token that the receipient receives on the destination chain
150
+ * in the `options` argument. The swap is created with an LNURL-withdraw link which will be used to pay
151
+ * the generated bolt11 invoice automatically when {@link FromBTCLNSwap.waitForPayment} is called on the
152
+ * swap.
107
153
  *
108
- * @param signer Smart chains signer's address intiating the swap
109
- * @param lnurl LNURL-withdraw to withdraw funds from
110
- * @param amountData Amount of token & amount to swap
111
- * @param lps LPs (liquidity providers) to get the quotes from
112
- * @param options
113
- * @param additionalParams Additional parameters sent to the LP when creating the swap
114
- * @param abortSignal Abort signal for aborting the process
154
+ * @param recipient Recipient's address on the destination chain
155
+ * @param lnurl LNURL-withdraw link to pull the funds from
156
+ * @param amountData Amount, token and exact input/output data for to swap
157
+ * @param lps An array of intermediaries (LPs) to get the quotes from
158
+ * @param options Optional additional quote options
159
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
160
+ * @param abortSignal Abort signal
115
161
  */
116
- createViaLNURL(signer: string, lnurl: string | LNURLWithdrawParamsWithUrl, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
162
+ createViaLNURL(recipient: string, lnurl: string | LNURLWithdrawParamsWithUrl, amountData: AmountData, lps: Intermediary[], options?: FromBTCLNAutoOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
117
163
  quote: Promise<FromBTCLNAutoSwap<T>>;
118
164
  intermediary: Intermediary;
119
165
  }[]>;
166
+ /**
167
+ * @inheritDoc
168
+ * @internal
169
+ */
120
170
  protected _checkPastSwaps(pastSwaps: FromBTCLNAutoSwap<T>[]): Promise<{
121
171
  changedSwaps: FromBTCLNAutoSwap<T>[];
122
172
  removeSwaps: FromBTCLNAutoSwap<T>[];
123
173
  }>;
174
+ /**
175
+ * @inheritDoc
176
+ */
177
+ recoverFromSwapDataAndState(init: {
178
+ data: T["Data"];
179
+ getInitTxId: () => Promise<string>;
180
+ getTxBlock: () => Promise<{
181
+ blockTime: number;
182
+ blockHeight: number;
183
+ }>;
184
+ }, state: SwapCommitState, lp?: Intermediary): Promise<FromBTCLNAutoSwap<T> | null>;
124
185
  }
@@ -13,6 +13,15 @@ const RequestError_1 = require("../../../../errors/RequestError");
13
13
  const FromBTCLNAutoSwap_1 = require("./FromBTCLNAutoSwap");
14
14
  const IFromBTCLNWrapper_1 = require("../IFromBTCLNWrapper");
15
15
  const RetryUtils_1 = require("../../../../utils/RetryUtils");
16
+ const sha2_1 = require("@noble/hashes/sha2");
17
+ /**
18
+ * New escrow based (HTLC) swaps for Bitcoin Lightning -> Smart chain swaps not requiring manual settlement on
19
+ * the destination by the user, and instead letting the LP initiate the escrow. Permissionless watchtower network
20
+ * handles the claiming of HTLC, with the swap secret broadcasted over Nostr. Also adds a possibility for the user
21
+ * to receive a native token on the destination chain as part of the swap (a "gas drop" feature).
22
+ *
23
+ * @category Swaps
24
+ */
16
25
  class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
17
26
  /**
18
27
  * @param chainIdentifier
@@ -34,27 +43,43 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
34
43
  bitcoinBlocktime: options?.bitcoinBlocktime ?? 10 * 60,
35
44
  unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? false
36
45
  }, events);
37
- this.claimableSwapStates = [FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED];
38
46
  this.TYPE = SwapType_1.SwapType.FROM_BTCLN_AUTO;
39
- this.swapDeserializer = FromBTCLNAutoSwap_1.FromBTCLNAutoSwap;
40
- this.pendingSwapStates = [
47
+ /**
48
+ * @internal
49
+ */
50
+ this.tickSwapState = [
41
51
  FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED,
42
52
  FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED,
43
53
  FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID,
44
- FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED,
45
- FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.EXPIRED
54
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED
46
55
  ];
47
- this.tickSwapState = [
56
+ /**
57
+ * @internal
58
+ */
59
+ this._pendingSwapStates = [
48
60
  FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED,
49
61
  FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED,
50
62
  FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID,
51
- FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED
63
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED,
64
+ FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.EXPIRED
52
65
  ];
53
- this.messenger = messenger;
66
+ /**
67
+ * @internal
68
+ */
69
+ this._claimableSwapStates = [FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED];
70
+ /**
71
+ * @internal
72
+ */
73
+ this._swapDeserializer = FromBTCLNAutoSwap_1.FromBTCLNAutoSwap;
74
+ this._messenger = messenger;
54
75
  }
76
+ /**
77
+ * @inheritDoc
78
+ * @internal
79
+ */
55
80
  async processEventInitialize(swap, event) {
56
- if (swap.state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID || swap.state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED || swap.state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED) {
57
- if (swap.data == null) {
81
+ if (swap._state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_PAID || swap._state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.PR_CREATED || swap._state === FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.QUOTE_SOFT_EXPIRED) {
82
+ if (swap._data == null) {
58
83
  //Obtain data from the initialize event
59
84
  const eventData = await event.swapData();
60
85
  if (eventData == null) {
@@ -74,8 +99,8 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
74
99
  this.logger.error("processEventInitialize(" + swap.getId() + "): Error when processing event, escrow hashes don't match!");
75
100
  return false;
76
101
  }
77
- swap.commitTxId = event.meta?.txId;
78
- swap.state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED;
102
+ swap._commitTxId = event.meta?.txId;
103
+ swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED;
79
104
  swap._broadcastSecret().catch(e => {
80
105
  this.logger.error("processEventInitialize(" + swap.getId() + "): Error when broadcasting swap secret: ", e);
81
106
  });
@@ -83,18 +108,27 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
83
108
  }
84
109
  return false;
85
110
  }
111
+ /**
112
+ * @inheritDoc
113
+ * @internal
114
+ */
86
115
  processEventClaim(swap, event) {
87
- if (swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED && swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED) {
88
- swap.claimTxId = event.meta?.txId;
89
- swap.state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED;
116
+ if (swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED && swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED) {
117
+ swap._claimTxId = event.meta?.txId;
118
+ swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED;
119
+ swap._setSwapSecret(event.result);
90
120
  return Promise.resolve(true);
91
121
  }
92
122
  return Promise.resolve(false);
93
123
  }
124
+ /**
125
+ * @inheritDoc
126
+ * @internal
127
+ */
94
128
  processEventRefund(swap, event) {
95
- if (swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED && swap.state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED) {
96
- swap.refundTxId ??= event.meta?.txId;
97
- swap.state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED;
129
+ if (swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_CLAIMED && swap._state !== FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED) {
130
+ swap._refundTxId ??= event.meta?.txId;
131
+ swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.FAILED;
98
132
  return Promise.resolve(true);
99
133
  }
100
134
  return Promise.resolve(false);
@@ -107,15 +141,16 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
107
141
  * @param amountData
108
142
  * @param options Options as passed to the swap creation function
109
143
  * @param abortController
144
+ *
110
145
  * @private
111
146
  */
112
147
  async preFetchClaimerBounty(signer, amountData, options, abortController) {
113
148
  if (options.unsafeZeroWatchtowerFee)
114
149
  return 0n;
115
150
  const dummyAmount = BigInt(Math.floor(Math.random() * 0x1000000));
116
- const dummySwapData = await this.contract.createSwapData(base_1.ChainSwapType.HTLC, this.chain.randomAddress(), signer, amountData.token, dummyAmount, this.contract.getHashForHtlc((0, Utils_1.randomBytes)(32)).toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, BigInt(Math.floor(Math.random() * 0x10000)), BigInt(Math.floor(Math.random() * 0x10000)));
151
+ const dummySwapData = await this._contract.createSwapData(base_1.ChainSwapType.HTLC, this._chain.randomAddress(), signer, amountData.token, dummyAmount, this._contract.getHashForHtlc((0, Utils_1.randomBytes)(32)).toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, BigInt(Math.floor(Math.random() * 0x10000)), BigInt(Math.floor(Math.random() * 0x10000)));
117
152
  try {
118
- const result = await this.contract.getClaimFee(this.chain.randomAddress(), dummySwapData);
153
+ const result = await this._contract.getClaimFee(this._chain.randomAddress(), dummySwapData);
119
154
  return result * BigInt(Math.floor(options.feeSafetyFactor * 1000000)) / 1000000n;
120
155
  }
121
156
  catch (e) {
@@ -132,8 +167,10 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
132
167
  * @param decodedPr Decoded bolt11 lightning network invoice
133
168
  * @param paymentHash Expected payment hash of the bolt11 lightning network invoice
134
169
  * @param claimerBounty Claimer bounty as request by the user
135
- * @private
170
+ *
136
171
  * @throws {IntermediaryError} in case the response is invalid
172
+ *
173
+ * @private
137
174
  */
138
175
  verifyReturnedData(resp, amountData, lp, options, decodedPr, paymentHash, claimerBounty) {
139
176
  if (lp.getAddress(this.chainIdentifier) !== resp.intermediaryKey)
@@ -164,19 +201,22 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
164
201
  }
165
202
  }
166
203
  /**
167
- * Returns a newly created swap, receiving 'amount' on lightning network
204
+ * Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
205
+ * where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
206
+ * specifying additional "gas drop" native token that the receipient receives on the destination chain
207
+ * in the `options` argument. The user has to pay a bolt11 invoice on the input lightning network side.
168
208
  *
169
- * @param signer Smart chain signer's address intiating the swap
170
- * @param amountData Amount of token & amount to swap
171
- * @param lps LPs (liquidity providers) to get the quotes from
172
- * @param options Quote options
173
- * @param additionalParams Additional parameters sent to the LP when creating the swap
174
- * @param abortSignal Abort signal for aborting the process
175
- * @param preFetches
209
+ * @param recipient Recipient's address on the destination chain
210
+ * @param amountData Amount, token and exact input/output data for to swap
211
+ * @param lps An array of intermediaries (LPs) to get the quotes from
212
+ * @param options Optional additional quote options
213
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
214
+ * @param abortSignal Abort signal
215
+ * @param preFetches Optional pre-fetches for speeding up the quoting process (mainly used internally)
176
216
  */
177
- create(signer, amountData, lps, options, additionalParams, abortSignal, preFetches) {
217
+ create(recipient, amountData, lps, options, additionalParams, abortSignal, preFetches) {
178
218
  const _options = {
179
- unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this.options.unsafeSkipLnNodeCheck,
219
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this._options.unsafeSkipLnNodeCheck,
180
220
  gasAmount: options?.gasAmount ?? 0n,
181
221
  feeSafetyFactor: options?.feeSafetyFactor ?? 1.25,
182
222
  unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false,
@@ -187,13 +227,13 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
187
227
  if (_options.descriptionHash != null && _options.descriptionHash.length !== 32)
188
228
  throw new UserError_1.UserError("Invalid description hash length");
189
229
  const { secret, paymentHash } = this.getSecretAndHash();
190
- const claimHash = this.contract.getHashForHtlc(paymentHash);
191
- const nativeTokenAddress = this.chain.getNativeCurrencyAddress();
230
+ const claimHash = this._contract.getHashForHtlc(paymentHash);
231
+ const nativeTokenAddress = this._chain.getNativeCurrencyAddress();
192
232
  const _abortController = (0, Utils_1.extendAbortController)(abortSignal);
193
233
  const _preFetches = {
194
234
  pricePrefetchPromise: preFetches?.pricePrefetchPromise ?? this.preFetchPrice(amountData, _abortController.signal),
195
235
  usdPricePrefetchPromise: preFetches?.usdPricePrefetchPromise ?? this.preFetchUsdPrice(_abortController.signal),
196
- claimerBountyPrefetch: preFetches?.claimerBountyPrefetch ?? this.preFetchClaimerBounty(signer, amountData, _options, _abortController),
236
+ claimerBountyPrefetch: preFetches?.claimerBountyPrefetch ?? this.preFetchClaimerBounty(recipient, amountData, _options, _abortController),
197
237
  gasTokenPricePrefetchPromise: _options.gasAmount !== 0n || !_options.unsafeZeroWatchtowerFee ?
198
238
  (preFetches.gasTokenPricePrefetchPromise ??= this.preFetchPrice({ token: nativeTokenAddress }, _abortController.signal)) :
199
239
  undefined
@@ -210,15 +250,15 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
210
250
  const { lnPublicKey, response } = IntermediaryAPI_1.IntermediaryAPI.initFromBTCLNAuto(this.chainIdentifier, lp.url, {
211
251
  paymentHash,
212
252
  amount: amountData.amount,
213
- claimer: signer,
253
+ claimer: recipient,
214
254
  token: amountData.token.toString(),
215
255
  descriptionHash: _options.descriptionHash,
216
256
  exactOut: !amountData.exactIn,
217
257
  additionalParams,
218
- gasToken: this.chain.getNativeCurrencyAddress(),
258
+ gasToken: this._chain.getNativeCurrencyAddress(),
219
259
  gasAmount: _options.gasAmount,
220
260
  claimerBounty: (0, Utils_1.throwIfUndefined)(_preFetches.claimerBountyPrefetch)
221
- }, this.options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
261
+ }, this._options.postRequestTimeout, abortController.signal, retryCount > 0 ? false : undefined);
222
262
  return {
223
263
  lnCapacityPromise: _options.unsafeSkipLnNodeCheck ? undefined : this.preFetchLnCapacity(lnPublicKey),
224
264
  resp: await response
@@ -251,7 +291,7 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
251
291
  btcAmountGas: resp.btcAmountGas,
252
292
  btcAmountSwap: resp.btcAmountSwap,
253
293
  gasPricingInfo,
254
- initialSwapData: await this.contract.createSwapData(base_1.ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), signer, amountData.token, resp.total, claimHash.toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, _options.gasAmount + resp.claimerBounty, resp.claimerBounty, nativeTokenAddress),
294
+ initialSwapData: await this._contract.createSwapData(base_1.ChainSwapType.HTLC, lp.getAddress(this.chainIdentifier), recipient, amountData.token, resp.total, claimHash.toString("hex"), this.getRandomSequence(), BigInt(Math.floor(Date.now() / 1000)), false, true, _options.gasAmount + resp.claimerBounty, resp.claimerBounty, nativeTokenAddress),
255
295
  pr: resp.pr,
256
296
  secret: secret.toString("hex"),
257
297
  exactIn: amountData.exactIn ?? true
@@ -270,19 +310,24 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
270
310
  });
271
311
  }
272
312
  /**
273
- * Returns a newly created swap, receiving 'amount' from the lnurl-withdraw
313
+ * Returns a newly created Lightning -> Smart chain swap using the HTLC based escrow swap protocol,
314
+ * where watchtowers handle the automatic settlement of the swap on the destination chain. Also allows
315
+ * specifying additional "gas drop" native token that the receipient receives on the destination chain
316
+ * in the `options` argument. The swap is created with an LNURL-withdraw link which will be used to pay
317
+ * the generated bolt11 invoice automatically when {@link FromBTCLNSwap.waitForPayment} is called on the
318
+ * swap.
274
319
  *
275
- * @param signer Smart chains signer's address intiating the swap
276
- * @param lnurl LNURL-withdraw to withdraw funds from
277
- * @param amountData Amount of token & amount to swap
278
- * @param lps LPs (liquidity providers) to get the quotes from
279
- * @param options
280
- * @param additionalParams Additional parameters sent to the LP when creating the swap
281
- * @param abortSignal Abort signal for aborting the process
320
+ * @param recipient Recipient's address on the destination chain
321
+ * @param lnurl LNURL-withdraw link to pull the funds from
322
+ * @param amountData Amount, token and exact input/output data for to swap
323
+ * @param lps An array of intermediaries (LPs) to get the quotes from
324
+ * @param options Optional additional quote options
325
+ * @param additionalParams Optional additional parameters sent to the LP when creating the swap
326
+ * @param abortSignal Abort signal
282
327
  */
283
- async createViaLNURL(signer, lnurl, amountData, lps, options, additionalParams, abortSignal) {
328
+ async createViaLNURL(recipient, lnurl, amountData, lps, options, additionalParams, abortSignal) {
284
329
  const _options = {
285
- unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this.options.unsafeSkipLnNodeCheck,
330
+ unsafeSkipLnNodeCheck: options?.unsafeSkipLnNodeCheck ?? this._options.unsafeSkipLnNodeCheck,
286
331
  gasAmount: options?.gasAmount ?? 0n,
287
332
  feeSafetyFactor: options?.feeSafetyFactor ?? 1.25,
288
333
  unsafeZeroWatchtowerFee: options?.unsafeZeroWatchtowerFee ?? false,
@@ -293,12 +338,12 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
293
338
  pricePrefetchPromise: this.preFetchPrice(amountData, abortController.signal),
294
339
  usdPricePrefetchPromise: this.preFetchUsdPrice(abortController.signal),
295
340
  gasTokenPricePrefetchPromise: _options.gasAmount !== 0n || !_options.unsafeZeroWatchtowerFee ?
296
- this.preFetchPrice({ token: this.chain.getNativeCurrencyAddress() }, abortController.signal) :
341
+ this.preFetchPrice({ token: this._chain.getNativeCurrencyAddress() }, abortController.signal) :
297
342
  undefined,
298
- claimerBountyPrefetch: this.preFetchClaimerBounty(signer, amountData, _options, abortController)
343
+ claimerBountyPrefetch: this.preFetchClaimerBounty(recipient, amountData, _options, abortController)
299
344
  };
300
345
  try {
301
- const exactOutAmountPromise = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price => this.prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)).catch(e => {
346
+ const exactOutAmountPromise = !amountData.exactIn ? preFetches.pricePrefetchPromise.then(price => this._prices.getToBtcSwapAmount(this.chainIdentifier, amountData.amount, amountData.token, abortController.signal, price)).catch(e => {
302
347
  abortController.abort(e);
303
348
  return undefined;
304
349
  }) : undefined;
@@ -319,12 +364,10 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
319
364
  if ((amount * 105n / 100n) > max)
320
365
  throw new UserError_1.UserError("Amount more than LNURL-withdraw maximum");
321
366
  }
322
- return this.create(signer, amountData, lps, _options, additionalParams, abortSignal, preFetches).map(data => {
367
+ return this.create(recipient, amountData, lps, _options, additionalParams, abortSignal, preFetches).map(data => {
323
368
  return {
324
369
  quote: data.quote.then(quote => {
325
- quote.lnurl = withdrawRequest.url;
326
- quote.lnurlK1 = withdrawRequest.k1;
327
- quote.lnurlCallback = withdrawRequest.callback;
370
+ quote._setLNURLData(withdrawRequest.url, withdrawRequest.k1, withdrawRequest.callback);
328
371
  const amountIn = quote.getInput().rawAmount;
329
372
  if (amountIn < min)
330
373
  throw new UserError_1.UserError("Amount less than LNURL-withdraw minimum");
@@ -341,6 +384,10 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
341
384
  throw e;
342
385
  }
343
386
  }
387
+ /**
388
+ * @inheritDoc
389
+ * @internal
390
+ */
344
391
  async _checkPastSwaps(pastSwaps) {
345
392
  const changedSwapSet = new Set();
346
393
  const swapExpiredStatus = {};
@@ -361,13 +408,13 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
361
408
  //Check expiry
362
409
  swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
363
410
  }
364
- if (pastSwap._shouldFetchCommitStatus()) {
411
+ if (pastSwap._shouldFetchOnchainState()) {
365
412
  //Add to swaps for which status should be checked
366
- if (pastSwap.data != null)
413
+ if (pastSwap._data != null)
367
414
  checkStatusSwaps.push(pastSwap);
368
415
  }
369
416
  }));
370
- const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({ signer: val._getInitiator(), swapData: val.data })));
417
+ const swapStatuses = await this._contract.getCommitStatuses(checkStatusSwaps.map(val => ({ signer: val._getInitiator(), swapData: val._data })));
371
418
  for (let pastSwap of checkStatusSwaps) {
372
419
  const shouldSave = await pastSwap._sync(false, swapExpiredStatus[pastSwap.getId()], swapStatuses[pastSwap.getEscrowHash()], true);
373
420
  if (shouldSave) {
@@ -389,5 +436,47 @@ class FromBTCLNAutoWrapper extends IFromBTCLNWrapper_1.IFromBTCLNWrapper {
389
436
  removeSwaps
390
437
  };
391
438
  }
439
+ /**
440
+ * @inheritDoc
441
+ */
442
+ async recoverFromSwapDataAndState(init, state, lp) {
443
+ const data = init.data;
444
+ let paymentHash = data.getHTLCHashHint();
445
+ let secret;
446
+ if (state.type === base_1.SwapCommitStateType.PAID) {
447
+ secret = await state.getClaimResult();
448
+ paymentHash = buffer_1.Buffer.from((0, sha2_1.sha256)(buffer_1.Buffer.from(secret, "hex"))).toString("hex");
449
+ }
450
+ const swapInit = {
451
+ pricingInfo: {
452
+ isValid: true,
453
+ satsBaseFee: 0n,
454
+ swapPriceUSatPerToken: 100000000000000n,
455
+ realPriceUSatPerToken: 100000000000000n,
456
+ differencePPM: 0n,
457
+ feePPM: 0n,
458
+ },
459
+ url: lp?.url,
460
+ expiry: 0,
461
+ swapFee: 0n,
462
+ swapFeeBtc: 0n,
463
+ gasSwapFee: 0n,
464
+ gasSwapFeeBtc: 0n,
465
+ initialSwapData: data,
466
+ data,
467
+ pr: paymentHash ?? undefined,
468
+ secret,
469
+ exactIn: false
470
+ };
471
+ const swap = new FromBTCLNAutoSwap_1.FromBTCLNAutoSwap(this, swapInit);
472
+ swap._commitTxId = await init.getInitTxId();
473
+ const blockData = await init.getTxBlock();
474
+ swap.createdAt = blockData.blockTime * 1000;
475
+ swap._setInitiated();
476
+ swap._state = FromBTCLNAutoSwap_1.FromBTCLNAutoSwapState.CLAIM_COMMITED;
477
+ await swap._sync(false, false, state);
478
+ await swap._save();
479
+ return swap;
480
+ }
392
481
  }
393
482
  exports.FromBTCLNAutoWrapper = FromBTCLNAutoWrapper;