@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,6 +1,5 @@
1
1
  import {SwapType} from "../../../enums/SwapType";
2
2
  import {ChainType} from "@atomiqlabs/base";
3
- import {PaymentAuthError} from "../../../errors/PaymentAuthError";
4
3
  import {toBigInt} from "../../../utils/Utils";
5
4
  import {parsePsbtTransaction, toOutputScript} from "../../../utils/BitcoinUtils";
6
5
  import {isISwapInit, ISwap, ISwapInit} from "../../ISwap";
@@ -24,17 +23,37 @@ import {BitcoinTokens, BtcToken, SCToken} from "../../../types/Token";
24
23
  import {getLogger, LoggerType} from "../../../utils/Logger";
25
24
  import {timeoutPromise} from "../../../utils/TimeoutUtils";
26
25
  import {toBitcoinWallet} from "../../../utils/BitcoinWalletUtils";
26
+ import {SwapExecutionActionBitcoin} from "../../../types/SwapExecutionAction";
27
27
 
28
28
  /**
29
29
  * State enum for trusted on-chain gas swaps
30
+ *
30
31
  * @category Swaps
31
32
  */
32
33
  export enum OnchainForGasSwapState {
34
+ /**
35
+ * The swap quote expired without user sending in the BTC
36
+ */
33
37
  EXPIRED = -3,
38
+ /**
39
+ * The swap has failed after the intermediary already received the BTC on the source chain
40
+ */
34
41
  FAILED = -2,
42
+ /**
43
+ * Swap was refunded and BTC returned to the user's refund address
44
+ */
35
45
  REFUNDED = -1,
46
+ /**
47
+ * Swap was created
48
+ */
36
49
  PR_CREATED = 0,
50
+ /**
51
+ * The swap is finished after the intermediary sent funds on the destination chain
52
+ */
37
53
  FINISHED = 1,
54
+ /**
55
+ * Swap is refundable because the intermediary cannot honor the swap request on the destination chain
56
+ */
38
57
  REFUNDABLE = 2
39
58
  }
40
59
 
@@ -62,12 +81,16 @@ export function isOnchainForGasSwapInit(obj: any): obj is OnchainForGasSwapInit
62
81
  }
63
82
 
64
83
  /**
65
- * Trusted on-chain BTC to gas token swap
84
+ * Trusted swap for Bitcoin -> Smart chains, to be used for minor amounts to get gas tokens on the
85
+ * destination chain, which is only needed for Solana, which still uses legacy swaps
86
+ *
66
87
  * @category Swaps
67
88
  */
68
89
  export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T, OnchainForGasSwapTypeDefinition<T>> implements IAddressSwap, IBTCWalletSwap {
69
- getSmartChainNetworkFee = null;
70
- protected readonly TYPE: SwapType = SwapType.TRUSTED_FROM_BTC;
90
+ protected readonly TYPE: SwapType.TRUSTED_FROM_BTC = SwapType.TRUSTED_FROM_BTC;
91
+ /**
92
+ * @internal
93
+ */
71
94
  protected readonly logger: LoggerType;
72
95
 
73
96
  //State: PR_CREATED
@@ -81,13 +104,28 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
81
104
  private refundAddress?: string;
82
105
 
83
106
  //State: FINISHED
84
- scTxId?: string;
85
- txId?: string;
107
+ /**
108
+ * Destination transaction ID on the smart chain side
109
+ * @private
110
+ */
111
+ private scTxId?: string;
112
+ /**
113
+ * Source transaction ID on the source (bitcoin) side
114
+ * @private
115
+ */
116
+ private txId?: string;
86
117
 
87
118
  //State: REFUNDED
88
- refundTxId?: string;
119
+ /**
120
+ * Transaction ID on the source (bitcoin) side used for refunding the funds back to the user
121
+ * @private
122
+ */
123
+ private refundTxId?: string;
89
124
 
90
- wrapper: OnchainForGasWrapper<T>;
125
+ /**
126
+ * @internal
127
+ */
128
+ protected readonly wrapper: OnchainForGasWrapper<T>;
91
129
 
92
130
  constructor(wrapper: OnchainForGasWrapper<T>, init: OnchainForGasSwapInit);
93
131
  constructor(wrapper: OnchainForGasWrapper<T>, obj: any);
@@ -107,7 +145,7 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
107
145
  this.recipient = initOrObj.recipient;
108
146
  this.token = initOrObj.token;
109
147
  this.refundAddress = initOrObj.refundAddress;
110
- this.state = OnchainForGasSwapState.PR_CREATED;
148
+ this._state = OnchainForGasSwapState.PR_CREATED;
111
149
  } else {
112
150
  this.paymentHash = initOrObj.paymentHash;
113
151
  this.sequence = toBigInt(initOrObj.sequence);
@@ -125,6 +163,10 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
125
163
  this.tryRecomputeSwapPrice();
126
164
  }
127
165
 
166
+ /**
167
+ * @inheritDoc
168
+ * @internal
169
+ */
128
170
  protected upgradeVersion() {
129
171
  if(this.version == null) {
130
172
  //Noop
@@ -133,8 +175,8 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
133
175
  }
134
176
 
135
177
  /**
136
- * In case swapFee in BTC is not supplied it recalculates it based on swap price
137
- * @protected
178
+ * @inheritDoc
179
+ * @internal
138
180
  */
139
181
  protected tryRecomputeSwapPrice() {
140
182
  if(this.swapFeeBtc==null && this.swapFee!=null) {
@@ -147,64 +189,119 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
147
189
  //////////////////////////////
148
190
  //// Getters & utils
149
191
 
192
+ /**
193
+ * @inheritDoc
194
+ * @internal
195
+ */
150
196
  _getEscrowHash(): string {
151
197
  return this.paymentHash;
152
198
  }
153
199
 
200
+ /**
201
+ * @inheritDoc
202
+ */
154
203
  getOutputAddress(): string | null {
155
204
  return this.recipient;
156
205
  }
157
206
 
207
+ /**
208
+ * @inheritDoc
209
+ */
158
210
  getInputAddress(): string | null {
159
211
  //TODO: Fuck this, it's not used anyway
160
212
  return null;
161
213
  }
162
214
 
215
+ /**
216
+ * @inheritDoc
217
+ */
163
218
  getInputTxId(): string | null {
164
219
  return this.txId ?? null;
165
220
  }
166
221
 
222
+ /**
223
+ * @inheritDoc
224
+ */
167
225
  getOutputTxId(): string | null {
168
226
  return this.scTxId ?? null;
169
227
  }
170
228
 
229
+ /**
230
+ * @inheritDoc
231
+ */
171
232
  getId(): string {
172
233
  return this.paymentHash;
173
234
  }
174
235
 
236
+ /**
237
+ * @inheritDoc
238
+ */
175
239
  getAddress(): string {
176
240
  return this.address;
177
241
  }
178
242
 
243
+ /**
244
+ * @inheritDoc
245
+ */
179
246
  getHyperlink(): string {
180
247
  return "bitcoin:"+this.address+"?amount="+encodeURIComponent((Number(this.inputAmount)/100000000).toString(10));
181
248
  }
182
249
 
250
+ /**
251
+ * @inheritDoc
252
+ */
183
253
  requiresAction(): boolean {
184
- return this.state===OnchainForGasSwapState.REFUNDABLE;
254
+ return this._state===OnchainForGasSwapState.REFUNDABLE;
185
255
  }
186
256
 
257
+ /**
258
+ * @inheritDoc
259
+ */
187
260
  isFinished(): boolean {
188
- return this.state===OnchainForGasSwapState.FINISHED || this.state===OnchainForGasSwapState.FAILED || this.state===OnchainForGasSwapState.EXPIRED || this.state===OnchainForGasSwapState.REFUNDED;
261
+ return this._state===OnchainForGasSwapState.FINISHED || this._state===OnchainForGasSwapState.FAILED || this._state===OnchainForGasSwapState.EXPIRED || this._state===OnchainForGasSwapState.REFUNDED;
189
262
  }
190
263
 
264
+ /**
265
+ * @inheritDoc
266
+ */
191
267
  isQuoteExpired(): boolean {
192
- return this.state===OnchainForGasSwapState.EXPIRED;
268
+ return this._state===OnchainForGasSwapState.EXPIRED;
193
269
  }
194
270
 
271
+ /**
272
+ * @inheritDoc
273
+ */
195
274
  isQuoteSoftExpired(): boolean {
196
275
  return this.expiry<Date.now();
197
276
  }
198
277
 
278
+ /**
279
+ * @inheritDoc
280
+ */
199
281
  isFailed(): boolean {
200
- return this.state===OnchainForGasSwapState.FAILED;
282
+ return this._state===OnchainForGasSwapState.FAILED;
201
283
  }
202
284
 
285
+ /**
286
+ * @inheritDoc
287
+ */
203
288
  isSuccessful(): boolean {
204
- return this.state===OnchainForGasSwapState.FINISHED;
289
+ return this._state===OnchainForGasSwapState.FINISHED;
205
290
  }
206
291
 
207
- verifyQuoteValid(): Promise<boolean> {
292
+ /**
293
+ * @inheritDoc
294
+ * @internal
295
+ */
296
+ _verifyQuoteDefinitelyExpired(): Promise<boolean> {
297
+ return Promise.resolve(this.expiry<Date.now());
298
+ }
299
+
300
+ /**
301
+ * @inheritDoc
302
+ * @internal
303
+ */
304
+ _verifyQuoteValid(): Promise<boolean> {
208
305
  return Promise.resolve(this.expiry>Date.now());
209
306
  }
210
307
 
@@ -212,64 +309,96 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
212
309
  //////////////////////////////
213
310
  //// Amounts & fees
214
311
 
312
+ /**
313
+ * Returns an output amount in base units without a swap fee included, hence this value
314
+ * is larger than the actual output amount
315
+ *
316
+ * @internal
317
+ */
215
318
  protected getOutAmountWithoutFee(): bigint {
216
319
  return this.outputAmount + (this.swapFee ?? 0n);
217
320
  }
218
321
 
322
+ /**
323
+ * @inheritDoc
324
+ */
219
325
  getOutputToken(): SCToken<T["ChainId"]> {
220
- return this.wrapper.tokens[this.wrapper.chain.getNativeCurrencyAddress()];
326
+ return this.wrapper._tokens[this.wrapper._chain.getNativeCurrencyAddress()];
221
327
  }
222
328
 
329
+ /**
330
+ * @inheritDoc
331
+ */
223
332
  getOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>, true> {
224
333
  return toTokenAmount(
225
- this.outputAmount, this.wrapper.tokens[this.wrapper.chain.getNativeCurrencyAddress()],
226
- this.wrapper.prices, this.pricingInfo
334
+ this.outputAmount, this.wrapper._tokens[this.wrapper._chain.getNativeCurrencyAddress()],
335
+ this.wrapper._prices, this.pricingInfo
227
336
  );
228
337
  }
229
338
 
339
+ /**
340
+ * @inheritDoc
341
+ */
230
342
  getInputToken(): BtcToken<false> {
231
343
  return BitcoinTokens.BTC;
232
344
  }
233
345
 
346
+ /**
347
+ * @inheritDoc
348
+ */
234
349
  getInput(): TokenAmount<T["ChainId"], BtcToken<false>, true> {
235
- return toTokenAmount(this.inputAmount, BitcoinTokens.BTC, this.wrapper.prices, this.pricingInfo);
350
+ return toTokenAmount(this.inputAmount, BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo);
236
351
  }
237
352
 
353
+ /**
354
+ * @inheritDoc
355
+ */
238
356
  getInputWithoutFee(): TokenAmount<T["ChainId"], BtcToken<false>, true> {
239
357
  return toTokenAmount(
240
358
  this.inputAmount - (this.swapFeeBtc ?? 0n), BitcoinTokens.BTC,
241
- this.wrapper.prices, this.pricingInfo
359
+ this.wrapper._prices, this.pricingInfo
242
360
  );
243
361
  }
244
362
 
363
+ /**
364
+ * Returns the swap fee charged by the intermediary (LP) on this swap
365
+ *
366
+ * @internal
367
+ */
245
368
  protected getSwapFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>> {
246
369
  if(this.pricingInfo==null) throw new Error("No pricing info known!");
247
370
  const feeWithoutBaseFee = this.swapFeeBtc==null ? 0n : this.swapFeeBtc - this.pricingInfo.satsBaseFee;
248
371
  const swapFeePPM = feeWithoutBaseFee * 1000000n / this.getInputWithoutFee().rawAmount;
249
372
 
250
373
  const amountInSrcToken = toTokenAmount(
251
- this.swapFeeBtc ?? 0n, BitcoinTokens.BTC, this.wrapper.prices, this.pricingInfo
374
+ this.swapFeeBtc ?? 0n, BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo
252
375
  );
253
376
  return {
254
377
  amountInSrcToken,
255
378
  amountInDstToken: toTokenAmount(
256
- this.swapFee ?? 0n, this.wrapper.tokens[this.wrapper.chain.getNativeCurrencyAddress()],
257
- this.wrapper.prices, this.pricingInfo
379
+ this.swapFee ?? 0n, this.wrapper._tokens[this.wrapper._chain.getNativeCurrencyAddress()],
380
+ this.wrapper._prices, this.pricingInfo
258
381
  ),
259
382
  currentUsdValue: amountInSrcToken.currentUsdValue,
260
383
  usdValue: amountInSrcToken.usdValue,
261
384
  pastUsdValue: amountInSrcToken.pastUsdValue,
262
385
  composition: {
263
- base: toTokenAmount(this.pricingInfo.satsBaseFee, BitcoinTokens.BTC, this.wrapper.prices, this.pricingInfo),
386
+ base: toTokenAmount(this.pricingInfo.satsBaseFee, BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo),
264
387
  percentage: ppmToPercentage(swapFeePPM)
265
388
  }
266
389
  };
267
390
  }
268
391
 
392
+ /**
393
+ * @inheritDoc
394
+ */
269
395
  getFee(): Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>> {
270
396
  return this.getSwapFee();
271
397
  }
272
398
 
399
+ /**
400
+ * @inheritDoc
401
+ */
273
402
  getFeeBreakdown(): [{type: FeeType.SWAP, fee: Fee<T["ChainId"], BtcToken<false>, SCToken<T["ChainId"]>>}] {
274
403
  return [{
275
404
  type: FeeType.SWAP,
@@ -277,32 +406,29 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
277
406
  }];
278
407
  }
279
408
 
409
+ /**
410
+ * @inheritDoc
411
+ */
280
412
  getRequiredConfirmationsCount(): number {
281
413
  return 1;
282
414
  }
283
415
 
284
416
  /**
285
- * Returns the PSBT that is already funded with wallet's UTXOs (runs a coin-selection algorithm to choose UTXOs to use),
286
- * also returns inputs indices that need to be signed by the wallet before submitting the PSBT back to the SDK with
287
- * `swap.submitPsbt()`
288
- *
289
- * @param _bitcoinWallet Sender's bitcoin wallet
290
- * @param feeRate Optional fee rate for the transaction, needs to be at least as big as {minimumBtcFeeRate} field
291
- * @param additionalOutputs additional outputs to add to the PSBT - can be used to collect fees from users
417
+ * @inheritDoc
292
418
  */
293
419
  async getFundedPsbt(
294
420
  _bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface,
295
421
  feeRate?: number,
296
422
  additionalOutputs?: ({amount: bigint, outputScript: Uint8Array} | {amount: bigint, address: string})[]
297
423
  ): Promise<{psbt: Transaction, psbtHex: string, psbtBase64: string, signInputs: number[]}> {
298
- if(this.state!==OnchainForGasSwapState.PR_CREATED)
424
+ if(this._state!==OnchainForGasSwapState.PR_CREATED)
299
425
  throw new Error("Swap already paid for!");
300
426
 
301
427
  let bitcoinWallet: IBitcoinWallet;
302
428
  if(isIBitcoinWallet(_bitcoinWallet)) {
303
429
  bitcoinWallet = _bitcoinWallet;
304
430
  } else {
305
- bitcoinWallet = new SingleAddressBitcoinWallet(this.wrapper.btcRpc, this.wrapper.options.bitcoinNetwork, _bitcoinWallet);
431
+ bitcoinWallet = new SingleAddressBitcoinWallet(this.wrapper._btcRpc, this.wrapper._options.bitcoinNetwork, _bitcoinWallet);
306
432
  }
307
433
  //TODO: Maybe re-introduce fee rate check here if passed from the user
308
434
  if(feeRate==null) {
@@ -315,12 +441,12 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
315
441
  });
316
442
  basePsbt.addOutput({
317
443
  amount: this.outputAmount,
318
- script: toOutputScript(this.wrapper.options.bitcoinNetwork, this.address)
444
+ script: toOutputScript(this.wrapper._options.bitcoinNetwork, this.address)
319
445
  });
320
446
  if(additionalOutputs!=null) additionalOutputs.forEach(output => {
321
447
  basePsbt.addOutput({
322
448
  amount: output.amount,
323
- script: (output as {outputScript: Uint8Array}).outputScript ?? toOutputScript(this.wrapper.options.bitcoinNetwork, (output as {address: string}).address)
449
+ script: (output as {outputScript: Uint8Array}).outputScript ?? toOutputScript(this.wrapper._options.bitcoinNetwork, (output as {address: string}).address)
324
450
  });
325
451
  });
326
452
 
@@ -340,13 +466,11 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
340
466
  }
341
467
 
342
468
  /**
343
- * Submits a PSBT signed by the wallet back to the SDK
344
- *
345
- * @param _psbt A psbt - either a Transaction object or a hex or base64 encoded PSBT string
469
+ * @inheritDoc
346
470
  */
347
471
  async submitPsbt(_psbt: Transaction | string): Promise<string> {
348
472
  const psbt = parsePsbtTransaction(_psbt);
349
- if(this.state!==OnchainForGasSwapState.PR_CREATED)
473
+ if(this._state!==OnchainForGasSwapState.PR_CREATED)
350
474
  throw new Error("Swap already paid for!");
351
475
 
352
476
  //Ensure not expired
@@ -357,24 +481,30 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
357
481
  const output0 = psbt.getOutput(0);
358
482
  if(output0.amount!==this.outputAmount)
359
483
  throw new Error("PSBT output amount invalid, expected: "+this.outputAmount+" got: "+output0.amount);
360
- const expectedOutputScript = toOutputScript(this.wrapper.options.bitcoinNetwork, this.address);
484
+ const expectedOutputScript = toOutputScript(this.wrapper._options.bitcoinNetwork, this.address);
361
485
  if(output0.script==null || !expectedOutputScript.equals(output0.script))
362
486
  throw new Error("PSBT output script invalid!");
363
487
 
364
488
  if(!psbt.isFinal) psbt.finalize();
365
489
 
366
- return await this.wrapper.btcRpc.sendRawTransaction(Buffer.from(psbt.toBytes(true, true)).toString("hex"));
490
+ return await this.wrapper._btcRpc.sendRawTransaction(Buffer.from(psbt.toBytes(true, true)).toString("hex"));
367
491
  }
368
492
 
493
+ /**
494
+ * @inheritDoc
495
+ */
369
496
  async estimateBitcoinFee(_bitcoinWallet: IBitcoinWallet | MinimalBitcoinWalletInterface, feeRate?: number): Promise<TokenAmount<any, BtcToken<false>, true> | null> {
370
- const bitcoinWallet: IBitcoinWallet = toBitcoinWallet(_bitcoinWallet, this.wrapper.btcRpc, this.wrapper.options.bitcoinNetwork);
497
+ const bitcoinWallet: IBitcoinWallet = toBitcoinWallet(_bitcoinWallet, this.wrapper._btcRpc, this.wrapper._options.bitcoinNetwork);
371
498
  const txFee = await bitcoinWallet.getTransactionFee(this.address, this.inputAmount, feeRate);
372
499
  if(txFee==null) return null;
373
- return toTokenAmount(BigInt(txFee), BitcoinTokens.BTC, this.wrapper.prices, this.pricingInfo);
500
+ return toTokenAmount(BigInt(txFee), BitcoinTokens.BTC, this.wrapper._prices, this.pricingInfo);
374
501
  }
375
502
 
503
+ /**
504
+ * @inheritDoc
505
+ */
376
506
  async sendBitcoinTransaction(wallet: IBitcoinWallet | MinimalBitcoinWalletInterfaceWithSigner, feeRate?: number): Promise<string> {
377
- if(this.state!==OnchainForGasSwapState.PR_CREATED)
507
+ if(this._state!==OnchainForGasSwapState.PR_CREATED)
378
508
  throw new Error("Swap already paid for!");
379
509
 
380
510
  //Ensure not expired
@@ -393,11 +523,19 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
393
523
  }
394
524
  }
395
525
 
526
+ /**
527
+ * @inheritDoc
528
+ *
529
+ * @param options.bitcoinWallet Optional bitcoin wallet address specification to return a funded PSBT,
530
+ * if not provided an address is returned instead.
531
+ */
396
532
  async txsExecute(options?: {
397
533
  bitcoinWallet?: MinimalBitcoinWalletInterface
398
- }) {
399
- if(this.state===OnchainForGasSwapState.PR_CREATED) {
400
- if(!await this.verifyQuoteValid()) throw new Error("Quote already expired or close to expiry!");
534
+ }): Promise<[
535
+ SwapExecutionActionBitcoin<"ADDRESS" | "FUNDED_PSBT">
536
+ ]> {
537
+ if(this._state===OnchainForGasSwapState.PR_CREATED) {
538
+ if(!await this._verifyQuoteValid()) throw new Error("Quote already expired or close to expiry!");
401
539
  return [
402
540
  {
403
541
  name: "Payment" as const,
@@ -425,17 +563,25 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
425
563
  //////////////////////////////
426
564
  //// Payment
427
565
 
566
+ /**
567
+ * Queries the intermediary (LP) node for the state of the swap
568
+ *
569
+ * @param save Whether the save the result or not
570
+ *
571
+ * @returns Whether the swap was successful as `boolean` or `null` if the swap is still pending
572
+ * @internal
573
+ */
428
574
  protected async checkAddress(save: boolean = true): Promise<boolean | null> {
429
575
  if(
430
- this.state===OnchainForGasSwapState.FAILED ||
431
- this.state===OnchainForGasSwapState.EXPIRED ||
432
- this.state===OnchainForGasSwapState.REFUNDED
576
+ this._state===OnchainForGasSwapState.FAILED ||
577
+ this._state===OnchainForGasSwapState.EXPIRED ||
578
+ this._state===OnchainForGasSwapState.REFUNDED
433
579
  ) return false;
434
- if(this.state===OnchainForGasSwapState.FINISHED) return false;
580
+ if(this._state===OnchainForGasSwapState.FINISHED) return false;
435
581
  if(this.url==null) return false;
436
582
 
437
583
  const response = await TrustedIntermediaryAPI.getAddressStatus(
438
- this.url, this.paymentHash, this.sequence, this.wrapper.options.getRequestTimeout
584
+ this.url, this.paymentHash, this.sequence, this.wrapper._options.getRequestTimeout
439
585
  );
440
586
  switch(response.code) {
441
587
  case AddressStatusResponseCodes.AWAIT_PAYMENT:
@@ -468,35 +614,41 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
468
614
  }
469
615
  return false;
470
616
  case AddressStatusResponseCodes.PAID:
471
- const txStatus = await this.wrapper.chain.getTxIdStatus(response.data.txId);
617
+ const txStatus = await this.wrapper._chain.getTxIdStatus(response.data.txId);
472
618
  if(txStatus==="success") {
473
- this.state = OnchainForGasSwapState.FINISHED;
619
+ this._state = OnchainForGasSwapState.FINISHED;
474
620
  this.scTxId = response.data.txId;
475
621
  if(save) await this._saveAndEmit();
476
622
  return true;
477
623
  }
478
624
  return false;
479
625
  case AddressStatusResponseCodes.EXPIRED:
480
- this.state = OnchainForGasSwapState.EXPIRED;
626
+ this._state = OnchainForGasSwapState.EXPIRED;
481
627
  if(save) await this._saveAndEmit();
482
628
  return true;
483
629
  case AddressStatusResponseCodes.REFUNDABLE:
484
- if(this.state===OnchainForGasSwapState.REFUNDABLE) return null;
485
- this.state = OnchainForGasSwapState.REFUNDABLE;
630
+ if(this._state===OnchainForGasSwapState.REFUNDABLE) return null;
631
+ this._state = OnchainForGasSwapState.REFUNDABLE;
486
632
  if(save) await this._saveAndEmit();
487
633
  return true;
488
634
  case AddressStatusResponseCodes.REFUNDED:
489
- this.state = OnchainForGasSwapState.REFUNDED;
635
+ this._state = OnchainForGasSwapState.REFUNDED;
490
636
  this.refundTxId = response.data.txId;
491
637
  if(save) await this._saveAndEmit();
492
638
  return true;
493
639
  default:
494
- this.state = OnchainForGasSwapState.FAILED;
640
+ this._state = OnchainForGasSwapState.FAILED;
495
641
  if(save) await this._saveAndEmit();
496
642
  return true;
497
643
  }
498
644
  }
499
645
 
646
+ /**
647
+ * Sets the bitcoin address used for possible refunds in case something goes wrong with the swap
648
+ *
649
+ * @param refundAddress Bitcoin address to receive the refund to
650
+ * @internal
651
+ */
500
652
  protected async setRefundAddress(refundAddress: string): Promise<void> {
501
653
  if(this.refundAddress!=null) {
502
654
  if(this.refundAddress!==refundAddress) throw new Error("Different refund address already set!");
@@ -504,27 +656,20 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
504
656
  }
505
657
  if(this.url==null) throw new Error("LP URL not known, cannot set refund address!");
506
658
  await TrustedIntermediaryAPI.setRefundAddress(
507
- this.url, this.paymentHash, this.sequence, refundAddress, this.wrapper.options.getRequestTimeout
659
+ this.url, this.paymentHash, this.sequence, refundAddress, this.wrapper._options.getRequestTimeout
508
660
  );
509
661
  this.refundAddress = refundAddress;
510
662
  }
511
663
 
512
664
  /**
513
- * A blocking promise resolving when payment was received by the intermediary and client can continue
514
- * rejecting in case of failure
515
- *
516
- * @param abortSignal Abort signal
517
- * @param checkIntervalSeconds How often to poll the intermediary for answer
518
- * @param updateCallback Callback called when txId is found, and also called with subsequent confirmations
519
- * @throws {PaymentAuthError} If swap expired or failed
520
- * @throws {Error} When in invalid state (not PR_CREATED)
665
+ * @inheritDoc
521
666
  */
522
667
  async waitForBitcoinTransaction(
523
668
  updateCallback?: (txId?: string, confirmations?: number, targetConfirmations?: number, txEtaMs?: number) => void,
524
669
  checkIntervalSeconds: number = 5,
525
670
  abortSignal?: AbortSignal
526
671
  ): Promise<string> {
527
- if(this.state!==OnchainForGasSwapState.PR_CREATED) throw new Error("Must be in PR_CREATED state!");
672
+ if(this._state!==OnchainForGasSwapState.PR_CREATED) throw new Error("Must be in PR_CREATED state!");
528
673
 
529
674
  if(!this.initiated) {
530
675
  this.initiated = true;
@@ -533,53 +678,67 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
533
678
 
534
679
  while(
535
680
  !abortSignal?.aborted &&
536
- this.state===OnchainForGasSwapState.PR_CREATED
681
+ this._state===OnchainForGasSwapState.PR_CREATED
537
682
  ) {
538
683
  await this.checkAddress(true);
539
684
  if(this.txId!=null && updateCallback!=null) {
540
- const res = await this.wrapper.btcRpc.getTransaction(this.txId);
685
+ const res = await this.wrapper._btcRpc.getTransaction(this.txId);
541
686
  if(res==null) {
542
687
  updateCallback();
543
688
  } else if(res.confirmations!=null && res.confirmations>0) {
544
689
  updateCallback(res.txid, res.confirmations, 1, 0);
545
690
  } else {
546
- const delay = await this.wrapper.btcRpc.getConfirmationDelay(res, 1);
691
+ const delay = await this.wrapper._btcRpc.getConfirmationDelay(res, 1);
547
692
  updateCallback(res.txid, 0, 1, delay ?? undefined);
548
693
  }
549
694
  }
550
- if(this.state===OnchainForGasSwapState.PR_CREATED)
695
+ if(this._state===OnchainForGasSwapState.PR_CREATED)
551
696
  await timeoutPromise(checkIntervalSeconds*1000, abortSignal);
552
697
  }
553
698
 
554
699
  if(
555
- (this.state as OnchainForGasSwapState)===OnchainForGasSwapState.REFUNDABLE ||
556
- (this.state as OnchainForGasSwapState)===OnchainForGasSwapState.REFUNDED
700
+ (this._state as OnchainForGasSwapState)===OnchainForGasSwapState.REFUNDABLE ||
701
+ (this._state as OnchainForGasSwapState)===OnchainForGasSwapState.REFUNDED
557
702
  ) return this.txId!;
558
- if(this.isQuoteExpired()) throw new PaymentAuthError("Swap expired");
559
- if(this.isFailed()) throw new PaymentAuthError("Swap failed");
703
+ if(this.isQuoteExpired()) throw new Error("Swap expired");
704
+ if(this.isFailed()) throw new Error("Swap failed");
560
705
  return this.txId!;
561
706
  }
562
707
 
708
+ /**
709
+ * Waits till the LP processes a refund for a failed swap. The swap must be in
710
+ * {@link OnchainForGasSwapState.REFUNDABLE} state
711
+ *
712
+ * @param checkIntervalSeconds How often to check (default 5 seconds)
713
+ * @param abortSignal Abort signal
714
+ */
563
715
  async waitTillRefunded(
564
716
  checkIntervalSeconds?: number,
565
717
  abortSignal?: AbortSignal
566
718
  ): Promise<void> {
567
719
  checkIntervalSeconds ??= 5;
568
- if(this.state===OnchainForGasSwapState.REFUNDED) return;
569
- if(this.state!==OnchainForGasSwapState.REFUNDABLE) throw new Error("Must be in REFUNDABLE state!");
720
+ if(this._state===OnchainForGasSwapState.REFUNDED) return;
721
+ if(this._state!==OnchainForGasSwapState.REFUNDABLE) throw new Error("Must be in REFUNDABLE state!");
570
722
 
571
723
  while(
572
724
  !abortSignal?.aborted &&
573
- this.state===OnchainForGasSwapState.REFUNDABLE
725
+ this._state===OnchainForGasSwapState.REFUNDABLE
574
726
  ) {
575
727
  await this.checkAddress(true);
576
- if(this.state===OnchainForGasSwapState.REFUNDABLE)
728
+ if(this._state===OnchainForGasSwapState.REFUNDABLE)
577
729
  await timeoutPromise(checkIntervalSeconds*1000, abortSignal);
578
730
  }
579
- if(this.isQuoteExpired()) throw new PaymentAuthError("Swap expired");
580
- if(this.isFailed()) throw new PaymentAuthError("Swap failed");
731
+ if(this.isQuoteExpired()) throw new Error("Swap expired");
732
+ if(this.isFailed()) throw new Error("Swap failed");
581
733
  }
582
734
 
735
+ /**
736
+ * Requests a refund after the swap failed, this also waits till the refund is actually sent by the
737
+ * intermediary (LP). The swap must be in {@link OnchainForGasSwapState.REFUNDABLE} state
738
+ *
739
+ * @param refundAddress Bitcoin address to receive the refund to
740
+ * @param abortSignal Abort signal
741
+ */
583
742
  async requestRefund(refundAddress?: string, abortSignal?: AbortSignal): Promise<void> {
584
743
  if(refundAddress!=null) await this.setRefundAddress(refundAddress);
585
744
  await this.waitTillRefunded(undefined, abortSignal);
@@ -589,6 +748,9 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
589
748
  //////////////////////////////
590
749
  //// Storage
591
750
 
751
+ /**
752
+ * @inheritDoc
753
+ */
592
754
  serialize(): any{
593
755
  return {
594
756
  ...super.serialize(),
@@ -606,6 +768,10 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
606
768
  };
607
769
  }
608
770
 
771
+ /**
772
+ * @inheritDoc
773
+ * @internal
774
+ */
609
775
  _getInitiator(): string {
610
776
  return this.recipient;
611
777
  }
@@ -614,8 +780,12 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
614
780
  //////////////////////////////
615
781
  //// Swap ticks & sync
616
782
 
783
+ /**
784
+ * @inheritDoc
785
+ * @internal
786
+ */
617
787
  async _sync(save?: boolean): Promise<boolean> {
618
- if(this.state===OnchainForGasSwapState.PR_CREATED) {
788
+ if(this._state===OnchainForGasSwapState.PR_CREATED) {
619
789
  //Check if it's maybe already paid
620
790
  const result = await this.checkAddress(false);
621
791
  if(result) {
@@ -626,6 +796,10 @@ export class OnchainForGasSwap<T extends ChainType = ChainType> extends ISwap<T,
626
796
  return false;
627
797
  }
628
798
 
799
+ /**
800
+ * @inheritDoc
801
+ * @internal
802
+ */
629
803
  _tick(save?: boolean): Promise<boolean> {
630
804
  return Promise.resolve(false);
631
805
  }