@atomiqlabs/sdk 8.1.7 → 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 +303 -222
  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 +513 -379
  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
@@ -6,6 +6,7 @@ import {PriceInfoType} from "../types/PriceInfoType";
6
6
 
7
7
  /**
8
8
  * Chain-specific wrapper for swap pricing
9
+ *
9
10
  * @category Pricing and LPs
10
11
  */
11
12
  export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends ChainIds<T>> {
@@ -27,21 +28,21 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
27
28
  * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
28
29
  * @param feePPM PPM fee rate as reported by the intermediary
29
30
  * @param paidToken Amount of token to be paid to the swap
30
- * @param token
31
+ * @param tokenAddress Token address to be paid
31
32
  * @param abortSignal
32
- * @param preFetchedPrice Already pre-fetched price
33
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
33
34
  */
34
35
  public async isValidAmountSend(
35
36
  amountSats: bigint,
36
37
  satsBaseFee: bigint,
37
38
  feePPM: bigint,
38
39
  paidToken: bigint,
39
- token: string,
40
+ tokenAddress: string,
40
41
  abortSignal?: AbortSignal,
41
42
  preFetchedPrice?: bigint
42
43
  ): Promise<PriceInfoType> {
43
44
  return this.swapPrice.isValidAmountSend<ChainIdentifier>(
44
- this.chainIdentifier, amountSats, satsBaseFee, feePPM, paidToken, token, abortSignal, preFetchedPrice
45
+ this.chainIdentifier, amountSats, satsBaseFee, feePPM, paidToken, tokenAddress, abortSignal, preFetchedPrice
45
46
  );
46
47
  }
47
48
 
@@ -52,39 +53,53 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
52
53
  * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
53
54
  * @param feePPM PPM fee rate as reported by the intermediary
54
55
  * @param receiveToken Amount of token to be received from the swap
55
- * @param token
56
+ * @param tokenAddress Token address to be received
56
57
  * @param abortSignal
57
- * @param preFetchedPrice Already pre-fetched price
58
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
58
59
  */
59
60
  public async isValidAmountReceive(
60
61
  amountSats: bigint,
61
62
  satsBaseFee: bigint,
62
63
  feePPM: bigint,
63
64
  receiveToken: bigint,
64
- token: string,
65
+ tokenAddress: string,
65
66
  abortSignal?: AbortSignal,
66
67
  preFetchedPrice?: bigint
67
68
  ): Promise<PriceInfoType> {
68
69
  return this.swapPrice.isValidAmountReceive<ChainIdentifier>(
69
- this.chainIdentifier, amountSats, satsBaseFee, feePPM, receiveToken, token, abortSignal, preFetchedPrice
70
+ this.chainIdentifier, amountSats, satsBaseFee, feePPM, receiveToken, tokenAddress, abortSignal, preFetchedPrice
70
71
  );
71
72
  }
72
73
 
74
+ /**
75
+ * Pre-fetches the pricing data for a given token, such that further calls to {@link isValidAmountReceive} or
76
+ * {@link isValidAmountSend} are quicker and don't need to wait for the price fetch
77
+ *
78
+ * @param chainIdentifier Chain identifier of the smart chain
79
+ * @param tokenAddress Token address
80
+ * @param abortSignal
81
+ */
73
82
  public preFetchPrice(token: string, abortSignal?: AbortSignal): Promise<bigint> {
74
83
  return this.swapPrice.preFetchPrice<ChainIdentifier>(this.chainIdentifier, token, abortSignal);
75
84
  }
76
85
 
86
+ /**
87
+ * Pre-fetches the Bitcoin USD price data, such that further calls to {@link getBtcUsdValue},
88
+ * {@link getTokenUsdValue} or {@link getUsdValue} are quicker and don't need to wait for the price fetch
89
+ *
90
+ * @param abortSignal
91
+ */
77
92
  public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
78
93
  return this.swapPrice.preFetchUsdPrice(abortSignal);
79
94
  }
80
95
 
81
96
  /**
82
- * Returns amount of {toToken} that are equivalent to {fromAmount} satoshis
97
+ * Returns amount of `toToken` that is equivalent to `fromAmount` satoshis
83
98
  *
84
- * @param fromAmount Amount of satoshis
85
- * @param toToken Token
99
+ * @param fromAmount Amount of satoshis
100
+ * @param toToken Token address
86
101
  * @param abortSignal
87
- * @param preFetchedPrice
102
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
88
103
  * @throws {Error} when token is not found
89
104
  */
90
105
  public async getFromBtcSwapAmount(
@@ -99,12 +114,12 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
99
114
  }
100
115
 
101
116
  /**
102
- * Returns amount of satoshis that are equivalent to {fromAmount} of {fromToken}
117
+ * Returns amount of satoshis that are equivalent to `fromAmount` of `fromToken`
103
118
  *
104
119
  * @param fromAmount Amount of the token
105
- * @param fromToken Token
120
+ * @param fromToken Token address
106
121
  * @param abortSignal
107
- * @param preFetchedPrice Pre-fetched swap price if available
122
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
108
123
  * @throws {Error} when token is not found
109
124
  */
110
125
  public async getToBtcSwapAmount(
@@ -121,30 +136,53 @@ export class SwapPriceWithChain<T extends MultiChain, ChainIdentifier extends Ch
121
136
  /**
122
137
  * Returns whether the token should be ignored and pricing for it not calculated
123
138
  *
124
- * @param tokenAddress
139
+ * @param tokenAddress Token address
125
140
  * @throws {Error} if token is not found
126
141
  */
127
142
  public shouldIgnore(tokenAddress: string): boolean {
128
143
  return this.swapPrice.shouldIgnore<ChainIdentifier>(this.chainIdentifier, tokenAddress);
129
144
  }
130
145
 
146
+ /**
147
+ * Returns the USD value of the bitcoin amount
148
+ *
149
+ * @param btcSats Bitcoin amount in satoshis
150
+ * @param abortSignal
151
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
152
+ */
131
153
  public async getBtcUsdValue(
132
154
  btcSats: bigint,
133
155
  abortSignal?: AbortSignal,
134
- preFetchedPrice?: number
156
+ preFetchedUsdPrice?: number
135
157
  ): Promise<number> {
136
- return this.swapPrice.getBtcUsdValue(btcSats, abortSignal, preFetchedPrice);
158
+ return this.swapPrice.getBtcUsdValue(btcSats, abortSignal, preFetchedUsdPrice);
137
159
  }
138
160
 
161
+ /**
162
+ * Returns the USD value of the smart chain token amount
163
+ *
164
+ * @param tokenAmount Amount of the token in base units
165
+ * @param tokenAddress Token address
166
+ * @param abortSignal
167
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
168
+ */
139
169
  public async getTokenUsdValue(
140
170
  tokenAmount: bigint,
141
- token: string,
171
+ tokenAddress: string,
142
172
  abortSignal?: AbortSignal,
143
- preFetchedPrice?: number
173
+ preFetchedUsdPrice?: number
144
174
  ): Promise<number> {
145
- return this.swapPrice.getTokenUsdValue(this.chainIdentifier, tokenAmount, token, abortSignal, preFetchedPrice);
175
+ return this.swapPrice.getTokenUsdValue(this.chainIdentifier, tokenAmount, tokenAddress, abortSignal, preFetchedUsdPrice);
146
176
  }
147
177
 
178
+ /**
179
+ * Returns the USD value of the token amount
180
+ *
181
+ * @param amount Amount in base units of the token
182
+ * @param token Token to fetch the usd price for
183
+ * @param abortSignal
184
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
185
+ */
148
186
  public getUsdValue(
149
187
  amount: bigint,
150
188
  token: Token<ChainIdentifier>,
@@ -4,6 +4,7 @@ import {PriceInfoType} from "../../types/PriceInfoType";
4
4
 
5
5
  /**
6
6
  * Abstract base class for swap pricing implementations
7
+ *
7
8
  * @category Pricing and LPs
8
9
  */
9
10
  export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
@@ -15,46 +16,55 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
15
16
  }
16
17
 
17
18
  /**
18
- * Gets the decimal places for a given token, returns -1 if token should be ignored & null if token is not found
19
- * @param chainIdentifier
20
- * @param token
19
+ * Gets the decimal places for a given token, returns `-1` if token should be ignored & `null` if token is not found
20
+ *
21
+ * @param chainIdentifier Chain identifier of the smart chain
22
+ * @param tokenAddress Token address
21
23
  * @protected
22
24
  */
23
- protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null;
25
+ protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number | null;
24
26
 
25
27
  /**
26
28
  * Returns the price of the token in BTC uSats (microSats)
27
29
  *
28
- * @param chainIdentifier
29
- * @param token
30
+ * @param chainIdentifier Chain identifier of the smart chain
31
+ * @param tokenAddress Token address
30
32
  * @param abortSignal
31
33
  * @protected
32
34
  */
33
- protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint>;
35
+ protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint>;
34
36
 
35
37
  /**
36
- * Returns the price of bitcoin in USD, (sats/USD)
38
+ * Returns the price of bitcoin in USD (sats/USD)
37
39
  *
38
40
  * @param abortSignal
39
41
  * @protected
40
42
  */
41
43
  protected abstract getUsdPrice(abortSignal?: AbortSignal): Promise<number>;
42
44
 
43
- protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, token: string): number {
44
- const decimals = this.getDecimals(chainIdentifier, token);
45
- if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${token}!`);
45
+ /**
46
+ * Gets the decimal places for a given token, returns `-1` if token should be ignored & throws if token is not found
47
+ *
48
+ * @param chainIdentifier Chain identifier of the smart chain
49
+ * @param tokenAddress Token address
50
+ * @throws {Error} When token is not known
51
+ * @protected
52
+ */
53
+ protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): number {
54
+ const decimals = this.getDecimals(chainIdentifier, tokenAddress);
55
+ if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${tokenAddress}!`);
46
56
  return decimals;
47
57
  }
48
58
 
49
59
  /**
50
60
  * Recomputes pricing info without fetching the current price
51
61
  *
52
- * @param chainIdentifier
53
- * @param amountSats
54
- * @param satsBaseFee
55
- * @param feePPM
56
- * @param paidToken
57
- * @param token
62
+ * @param chainIdentifier Chain identifier of the smart chain
63
+ * @param amountSats Amount of sats (BTC) to be received from the swap
64
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
65
+ * @param feePPM PPM fee rate as reported by the intermediary
66
+ * @param paidToken Amount of token to be paid to the swap
67
+ * @param tokenAddress Token address to be paid
58
68
  */
59
69
  public recomputePriceInfoSend<C extends ChainIds<T>>(
60
70
  chainIdentifier: C,
@@ -62,19 +72,19 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
62
72
  satsBaseFee: bigint,
63
73
  feePPM: bigint,
64
74
  paidToken: bigint,
65
- token: string
75
+ tokenAddress: string
66
76
  ): PriceInfoType {
67
77
  const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
68
78
  + satsBaseFee;
69
79
  const totalUSats = totalSats * 1000000n;
70
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / paidToken;
80
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
71
81
 
72
82
  return {
73
83
  isValid: true,
74
84
  differencePPM: 0n,
75
85
  satsBaseFee,
76
86
  feePPM,
77
- realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, token) ? undefined : swapPriceUSatPerToken,
87
+ realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
78
88
  swapPriceUSatPerToken
79
89
  };
80
90
  }
@@ -82,14 +92,14 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
82
92
  /**
83
93
  * Checks whether the swap amounts are valid given the current market rate for a given pair
84
94
  *
85
- * @param chainIdentifier
95
+ * @param chainIdentifier Chain identifier of the smart chain
86
96
  * @param amountSats Amount of sats (BTC) to be received from the swap
87
97
  * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
88
98
  * @param feePPM PPM fee rate as reported by the intermediary
89
99
  * @param paidToken Amount of token to be paid to the swap
90
- * @param token
100
+ * @param tokenAddress Token address to be paid
91
101
  * @param abortSignal
92
- * @param preFetchedPrice Already pre-fetched price
102
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
93
103
  */
94
104
  public async isValidAmountSend<C extends ChainIds<T>>(
95
105
  chainIdentifier: C,
@@ -97,16 +107,16 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
97
107
  satsBaseFee: bigint,
98
108
  feePPM: bigint,
99
109
  paidToken: bigint,
100
- token: string,
110
+ tokenAddress: string,
101
111
  abortSignal?: AbortSignal,
102
112
  preFetchedPrice?: bigint | null
103
113
  ): Promise<PriceInfoType> {
104
114
  const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
105
115
  + satsBaseFee;
106
116
  const totalUSats = totalSats * 1000000n;
107
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / paidToken;
117
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / paidToken;
108
118
 
109
- if(this.shouldIgnore(chainIdentifier, token)) return {
119
+ if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
110
120
  isValid: true,
111
121
  differencePPM: 0n,
112
122
  satsBaseFee,
@@ -115,8 +125,8 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
115
125
  swapPriceUSatPerToken
116
126
  };
117
127
 
118
- const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, token, abortSignal, preFetchedPrice);
119
- const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / calculatedAmtInToken;
128
+ const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
129
+ const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
120
130
 
121
131
  const difference = paidToken - calculatedAmtInToken; //Will be >0 if we need to pay more than we should've
122
132
  const differencePPM = difference * 1000000n / calculatedAmtInToken;
@@ -134,12 +144,12 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
134
144
  /**
135
145
  * Recomputes pricing info without fetching the current price
136
146
  *
137
- * @param chainIdentifier
138
- * @param amountSats
139
- * @param satsBaseFee
140
- * @param feePPM
141
- * @param receiveToken
142
- * @param token
147
+ * @param chainIdentifier Chain identifier of the smart chain
148
+ * @param amountSats Amount of sats (BTC) to be paid to the swap
149
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
150
+ * @param feePPM PPM fee rate as reported by the intermediary
151
+ * @param receiveToken Amount of token to be received from the swap
152
+ * @param tokenAddress Token address to be received
143
153
  */
144
154
  public recomputePriceInfoReceive<C extends ChainIds<T>>(
145
155
  chainIdentifier: C,
@@ -147,19 +157,19 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
147
157
  satsBaseFee: bigint,
148
158
  feePPM: bigint,
149
159
  receiveToken: bigint,
150
- token: string,
160
+ tokenAddress: string,
151
161
  ): PriceInfoType {
152
162
  const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
153
163
  - satsBaseFee;
154
164
  const totalUSats = totalSats * 1000000n;
155
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / receiveToken;
165
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
156
166
 
157
167
  return {
158
168
  isValid: true,
159
169
  differencePPM: 0n,
160
170
  satsBaseFee,
161
171
  feePPM,
162
- realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, token) ? undefined : swapPriceUSatPerToken,
172
+ realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, tokenAddress) ? undefined : swapPriceUSatPerToken,
163
173
  swapPriceUSatPerToken
164
174
  };
165
175
  }
@@ -167,14 +177,14 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
167
177
  /**
168
178
  * Checks whether the swap amounts are valid given the current market rate for a given pair
169
179
  *
170
- * @param chainIdentifier
180
+ * @param chainIdentifier Chain identifier of the smart chain
171
181
  * @param amountSats Amount of sats (BTC) to be paid to the swap
172
182
  * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
173
183
  * @param feePPM PPM fee rate as reported by the intermediary
174
184
  * @param receiveToken Amount of token to be received from the swap
175
- * @param token
185
+ * @param tokenAddress Token address to be received
176
186
  * @param abortSignal
177
- * @param preFetchedPrice Already pre-fetched price
187
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
178
188
  */
179
189
  public async isValidAmountReceive<C extends ChainIds<T>>(
180
190
  chainIdentifier: C,
@@ -182,16 +192,16 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
182
192
  satsBaseFee: bigint,
183
193
  feePPM: bigint,
184
194
  receiveToken: bigint,
185
- token: string,
195
+ tokenAddress: string,
186
196
  abortSignal?: AbortSignal,
187
197
  preFetchedPrice?: bigint | null
188
198
  ): Promise<PriceInfoType> {
189
199
  const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
190
200
  - satsBaseFee;
191
201
  const totalUSats = totalSats * 1000000n;
192
- const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / receiveToken;
202
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / receiveToken;
193
203
 
194
- if(this.shouldIgnore(chainIdentifier, token)) return {
204
+ if(this.shouldIgnore(chainIdentifier, tokenAddress)) return {
195
205
  isValid: true,
196
206
  differencePPM: 0n,
197
207
  satsBaseFee,
@@ -200,8 +210,8 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
200
210
  swapPriceUSatPerToken
201
211
  };
202
212
 
203
- const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, token, abortSignal, preFetchedPrice);
204
- const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / calculatedAmtInToken;
213
+ const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, tokenAddress, abortSignal, preFetchedPrice);
214
+ const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, tokenAddress))) / calculatedAmtInToken;
205
215
 
206
216
  const difference = calculatedAmtInToken - receiveToken; //Will be >0 if we receive less than we should've
207
217
  const differencePPM = difference * 100000n / calculatedAmtInToken;
@@ -216,22 +226,36 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
216
226
  };
217
227
  }
218
228
 
219
- public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
220
- return this.getPrice(chainIdentifier, token, abortSignal);
229
+ /**
230
+ * Pre-fetches the pricing data for a given token, such that further calls to {@link isValidAmountReceive} or
231
+ * {@link isValidAmountSend} are quicker and don't need to wait for the price fetch
232
+ *
233
+ * @param chainIdentifier Chain identifier of the smart chain
234
+ * @param tokenAddress Token address
235
+ * @param abortSignal
236
+ */
237
+ public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string, abortSignal?: AbortSignal): Promise<bigint> {
238
+ return this.getPrice(chainIdentifier, tokenAddress, abortSignal);
221
239
  }
222
240
 
241
+ /**
242
+ * Pre-fetches the Bitcoin USD price data, such that further calls to {@link getBtcUsdValue},
243
+ * {@link getTokenUsdValue} or {@link getUsdValue} are quicker and don't need to wait for the price fetch
244
+ *
245
+ * @param abortSignal
246
+ */
223
247
  public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
224
248
  return this.getUsdPrice(abortSignal);
225
249
  }
226
250
 
227
251
  /**
228
- * Returns amount of {toToken} that are equivalent to {fromAmount} satoshis
252
+ * Returns amount of `toToken` that is equivalent to `fromAmount` satoshis
229
253
  *
230
- * @param chainIdentifier
231
- * @param fromAmount Amount of satoshis
232
- * @param toToken Token
254
+ * @param chainIdentifier Chain identifier string for the smart chain
255
+ * @param fromAmount Amount of satoshis
256
+ * @param toToken Token address
233
257
  * @param abortSignal
234
- * @param preFetchedPrice
258
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
235
259
  * @throws {Error} when token is not found
236
260
  */
237
261
  public async getFromBtcSwapAmount<C extends ChainIds<T>>(
@@ -252,13 +276,13 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
252
276
  }
253
277
 
254
278
  /**
255
- * Returns amount of satoshis that are equivalent to {fromAmount} of {fromToken}
279
+ * Returns amount of satoshis that are equivalent to `fromAmount` of `fromToken`
256
280
  *
257
- * @param chainIdentifier
281
+ * @param chainIdentifier Chain identifier string for the smart chain
258
282
  * @param fromAmount Amount of the token
259
- * @param fromToken Token
283
+ * @param fromToken Token address
260
284
  * @param abortSignal
261
- * @param preFetchedPrice Pre-fetched swap price if available
285
+ * @param preFetchedPrice An optional price pre-fetched with {@link preFetchPrice}
262
286
  * @throws {Error} when token is not found
263
287
  */
264
288
  public async getToBtcSwapAmount<C extends ChainIds<T>>(
@@ -280,8 +304,9 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
280
304
 
281
305
  /**
282
306
  * Returns whether the token should be ignored and pricing for it not calculated
283
- * @param chainIdentifier
284
- * @param tokenAddress
307
+ *
308
+ * @param chainIdentifier Chain identifier string for the smart chain
309
+ * @param tokenAddress Token address
285
310
  * @throws {Error} if token is not found
286
311
  */
287
312
  public shouldIgnore<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): boolean {
@@ -290,28 +315,52 @@ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
290
315
  return coin===-1;
291
316
  }
292
317
 
318
+ /**
319
+ * Returns the USD value of the bitcoin amount
320
+ *
321
+ * @param btcSats Bitcoin amount in satoshis
322
+ * @param abortSignal
323
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
324
+ */
293
325
  public async getBtcUsdValue(
294
326
  btcSats: bigint,
295
327
  abortSignal?: AbortSignal,
296
- preFetchedPrice?: number
328
+ preFetchedUsdPrice?: number
297
329
  ): Promise<number> {
298
- return Number(btcSats)*(preFetchedPrice || await this.getUsdPrice(abortSignal));
330
+ return Number(btcSats)*(preFetchedUsdPrice || await this.getUsdPrice(abortSignal));
299
331
  }
300
332
 
333
+ /**
334
+ * Returns the USD value of the smart chain token amount
335
+ *
336
+ * @param chainIdentifier Chain identifier string for the smart chain
337
+ * @param tokenAmount Amount of the token in base units
338
+ * @param tokenAddress Token address
339
+ * @param abortSignal
340
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
341
+ */
301
342
  public async getTokenUsdValue<C extends ChainIds<T>>(
302
- chainId: C,
343
+ chainIdentifier: C,
303
344
  tokenAmount: bigint,
304
- token: string,
345
+ tokenAddress: string,
305
346
  abortSignal?: AbortSignal,
306
- preFetchedPrice?: number
347
+ preFetchedUsdPrice?: number
307
348
  ): Promise<number> {
308
349
  const [btcAmount, usdPrice] = await Promise.all([
309
- this.getToBtcSwapAmount(chainId, tokenAmount, token, abortSignal),
310
- preFetchedPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedPrice)
350
+ this.getToBtcSwapAmount(chainIdentifier, tokenAmount, tokenAddress, abortSignal),
351
+ preFetchedUsdPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedUsdPrice)
311
352
  ]);
312
353
  return Number(btcAmount)*usdPrice;
313
354
  }
314
355
 
356
+ /**
357
+ * Returns the USD value of the token amount
358
+ *
359
+ * @param amount Amount in base units of the token
360
+ * @param token Token to fetch the usd price for
361
+ * @param abortSignal
362
+ * @param preFetchedUsdPrice An optional price pre-fetched with {@link preFetchUsdPrice}
363
+ */
315
364
  public getUsdValue<C extends ChainIds<T>>(
316
365
  amount: bigint,
317
366
  token: Token<C>,
@@ -10,6 +10,7 @@ export type BinanceResponse = {
10
10
 
11
11
  /**
12
12
  * Price provider using Binance exchange API
13
+ *
13
14
  * @category Pricing and LPs
14
15
  */
15
16
  export class BinancePriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
@@ -18,6 +19,9 @@ export class BinancePriceProvider<T extends MultiChain> extends ExchangePricePro
18
19
  super(coinsMap, url, httpRequestTimeout);
19
20
  }
20
21
 
22
+ /**
23
+ * @inheritDoc
24
+ */
21
25
  protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
22
26
  const response = await httpGet<BinanceResponse>(
23
27
  this.url+"/ticker/price?symbol="+pair,
@@ -28,6 +32,9 @@ export class BinancePriceProvider<T extends MultiChain> extends ExchangePricePro
28
32
  return parseFloat(response.price);
29
33
  }
30
34
 
35
+ /**
36
+ * @inheritDoc
37
+ */
31
38
  protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
32
39
  const response = await httpGet<BinanceResponse>(
33
40
  this.url+"/ticker/price?symbol=BTCUSDC",
@@ -17,6 +17,9 @@ export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvi
17
17
  super(coinsMap, url, httpRequestTimeout);
18
18
  }
19
19
 
20
+ /**
21
+ * @inheritDoc
22
+ */
20
23
  protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
21
24
  let response = await httpGet<CoinGeckoResponse<"sats">>(
22
25
  this.url+"/simple/price?ids="+token.coinId+"&vs_currencies=sats&precision=6",
@@ -27,6 +30,9 @@ export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvi
27
30
  return BigInt(response[token.coinId].sats*1000000);
28
31
  }
29
32
 
33
+ /**
34
+ * @inheritDoc
35
+ */
30
36
  protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
31
37
  let response = await httpGet<CoinGeckoResponse<"usd">>(
32
38
  this.url+"/simple/price?ids=bitcoin&vs_currencies=usd&precision=9",
@@ -21,6 +21,9 @@ export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPricePro
21
21
  super(coinsMap, url, httpRequestTimeout);
22
22
  }
23
23
 
24
+ /**
25
+ * @inheritDoc
26
+ */
24
27
  async fetchPrice(token: CoinType, abortSignal?: AbortSignal) {
25
28
  const response = await httpGet<CoinPaprikaResponse<"BTC">>(
26
29
  this.url+"/tickers/"+token.coinId+"?quotes=BTC",
@@ -31,6 +34,9 @@ export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPricePro
31
34
  return BigInt(Math.floor(response.quotes.BTC.price*100000000000000));
32
35
  }
33
36
 
37
+ /**
38
+ * @inheritDoc
39
+ */
34
40
  protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
35
41
  const response = await httpGet<CoinPaprikaResponse<"USD">>(
36
42
  this.url+"/tickers/btc-bitcoin?quotes=USD",
@@ -4,23 +4,34 @@ import {CustomPriceFunction} from "../../types/CustomPriceFunction";
4
4
 
5
5
  /**
6
6
  * Price provider using custom pricing function
7
+ *
7
8
  * @category Pricing and LPs
8
9
  */
9
10
  export class CustomPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
10
11
 
11
12
  readonly getUsdPriceFn: CustomPriceFunction;
12
13
 
14
+ /**
15
+ * @param coinsMap Mapping of token tickers to token addresses
16
+ * @param getUsdPriceFn Pricing function, used to retrieve USD prices of the tokens
17
+ */
13
18
  constructor(coinsMap: CtorCoinTypes<T>, getUsdPriceFn: CustomPriceFunction) {
14
19
  super(coinsMap);
15
20
  this.getUsdPriceFn = getUsdPriceFn;
16
21
  }
17
22
 
23
+ /**
24
+ * @inheritDoc
25
+ */
18
26
  protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
19
27
  const [btcPrice, tokenPrice] = await this.getUsdPriceFn(["BTC",token.coinId], abortSignal);
20
28
  const priceInBtc = tokenPrice / btcPrice;
21
29
  return BigInt(Math.floor(priceInBtc*100_000_000*1_000_000));
22
30
  }
23
31
 
32
+ /**
33
+ * @inheritDoc
34
+ */
24
35
  protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
25
36
  const [btcPrice] = await this.getUsdPriceFn(["BTC"], abortSignal);
26
37
  return btcPrice / 100_000_000;