@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
@@ -19,6 +19,19 @@ import {CustomPriceFunction} from "../types/CustomPriceFunction";
19
19
  import {MempoolApi, MempoolBitcoinRpc} from "@atomiqlabs/btc-mempool";
20
20
 
21
21
  //Helper types
22
+ /**
23
+ * Token definitions for a specific chain
24
+ */
25
+ type TypedChainTokens<T extends ChainInitializer<any, any, any>> = {
26
+ [val in keyof T["tokens"]]: SCToken<T["chainId"]>
27
+ };
28
+ /**
29
+ * Token resolver for a specific chain
30
+ */
31
+ type TypedChainTokenResolver<T extends ChainInitializer<any, any, any>> = {
32
+ getToken: (address: string) => SCToken<T["chainId"]>
33
+ };
34
+
22
35
  type ChainTypeDict<T extends ChainInitializer<any, any, any>> = {[K in T["chainId"]]: T["chainType"]};
23
36
  type ToMultichain<T extends readonly ChainInitializer<any, any, any>[]> =
24
37
  (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]]
@@ -45,7 +58,8 @@ type GetAllOptions<T extends readonly ChainInitializer<any, any, any>[]> =
45
58
 
46
59
  //Exported types
47
60
  /**
48
- * Configuration options for creating a typed Swapper instance
61
+ * Configuration options for creating a Swapper instance
62
+ *
49
63
  * @category Core
50
64
  */
51
65
  export type TypedSwapperOptions<T extends readonly ChainInitializer<any, any, any>[]> = {
@@ -58,15 +72,8 @@ export type TypedSwapperOptions<T extends readonly ChainInitializer<any, any, an
58
72
  } & SwapperOptions;
59
73
 
60
74
  /**
61
- * Token resolver for a specific chain
62
- * @category Core
63
- */
64
- export type TypedChainTokenResolver<T extends ChainInitializer<any, any, any>> = {
65
- getToken: (address: string) => SCToken<T["chainId"]>
66
- };
67
-
68
- /**
69
- * Token resolvers for all chains
75
+ * Token resolvers for all chains, resolve tokens based on their address
76
+ *
70
77
  * @category Core
71
78
  */
72
79
  export type TypedTokenResolvers<T extends readonly ChainInitializer<any, any, any>[]> =
@@ -74,16 +81,9 @@ export type TypedTokenResolvers<T extends readonly ChainInitializer<any, any, an
74
81
  ? TokenResolverDict<First> & TypedTokenResolvers<Rest>
75
82
  : unknown);
76
83
 
77
- /**
78
- * Token definitions for a specific chain
79
- * @category Core
80
- */
81
- export type TypedChainTokens<T extends ChainInitializer<any, any, any>> = {
82
- [val in keyof T["tokens"]]: SCToken<T["chainId"]>
83
- };
84
-
85
84
  /**
86
85
  * All tokens including Bitcoin tokens
86
+ *
87
87
  * @category Core
88
88
  */
89
89
  export type TypedTokens<T extends readonly ChainInitializer<any, ChainType, any>[]> = GetAllTokens<T> & {
@@ -95,12 +95,14 @@ export type TypedTokens<T extends readonly ChainInitializer<any, ChainType, any>
95
95
 
96
96
  /**
97
97
  * Type alias for a Swapper instance with typed chain support
98
+ *
98
99
  * @category Core
99
100
  */
100
101
  export type TypedSwapper<T extends readonly ChainInitializer<any, ChainType, any>[]> = Swapper<ToMultichain<T>>;
101
102
 
102
103
  /**
103
- * Type alias for a specific swap type on a chain
104
+ * Type alias for a specific swap type
105
+ *
104
106
  * @category Core
105
107
  */
106
108
  export type TypedSwap<
@@ -149,13 +151,20 @@ const nostrUrls: string[] = [
149
151
 
150
152
  /**
151
153
  * Factory class for creating and initializing Swapper instances with typed chain support
154
+ *
152
155
  * @category Core
153
156
  */
154
157
  export class SwapperFactory<T extends readonly ChainInitializer<any, ChainType, any>[]> {
155
158
 
159
+ /**
160
+ * All available tokens for the atomiq SDK
161
+ */
156
162
  Tokens: TypedTokens<T> = {
157
163
  BITCOIN: BitcoinTokens
158
164
  } as any;
165
+ /**
166
+ * Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
167
+ */
159
168
  TokenResolver: TypedTokenResolvers<T> = {} as any;
160
169
 
161
170
  constructor(readonly initializers: T) {
@@ -184,6 +193,14 @@ export class SwapperFactory<T extends readonly ChainInitializer<any, ChainType,
184
193
  });
185
194
  }
186
195
 
196
+ /**
197
+ * Returns a new swapper instance with the passed options.
198
+ *
199
+ * The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
200
+ * calling any other functions in the swapper instance.
201
+ *
202
+ * @param options Options for customizing the swapper instance
203
+ */
187
204
  newSwapper(options: TypedSwapperOptions<T>): TypedSwapper<T> {
188
205
  options.bitcoinNetwork ??= BitcoinNetwork.MAINNET;
189
206
  options.storagePrefix ??= "atomiqsdk-"+options.bitcoinNetwork+"-";
@@ -193,11 +210,11 @@ export class SwapperFactory<T extends readonly ChainInitializer<any, ChainType,
193
210
 
194
211
  let bitcoinRpc: MempoolBitcoinRpc;
195
212
  if(options.mempoolApi!=null) {
196
- bitcoinRpc = options.mempoolApi instanceof MempoolBitcoinRpc ? options.mempoolApi : new MempoolBitcoinRpc(options.mempoolApi);
213
+ bitcoinRpc = options.mempoolApi instanceof MempoolBitcoinRpc ? options.mempoolApi : new MempoolBitcoinRpc(options.mempoolApi, options.bitcoinNetwork);
197
214
  } else {
198
215
  const urls = mempoolUrls[options.bitcoinNetwork];
199
216
  if(urls==null) throw new Error(`No pre-configured urls for ${BitcoinNetwork[options.bitcoinNetwork]} network were found, please explicitly pass mempoolApi parameter!`);
200
- bitcoinRpc = new MempoolBitcoinRpc(urls);
217
+ bitcoinRpc = new MempoolBitcoinRpc(urls, options.bitcoinNetwork);
201
218
  }
202
219
 
203
220
  const pricingAssets: (RedundantSwapPriceAssets<ToMultichain<T>>[number] & {ticker: string, name: string})[] = [];
@@ -243,6 +260,12 @@ export class SwapperFactory<T extends readonly ChainInitializer<any, ChainType,
243
260
  );
244
261
  }
245
262
 
263
+ /**
264
+ * Returns a new and already initialized swapper instance with the passed options. There is no need
265
+ * to call {@link Swapper.init} anymore.
266
+ *
267
+ * @param options Options for customizing the swapper instance
268
+ */
246
269
  async newSwapperInitialized(options: TypedSwapperOptions<T>): Promise<TypedSwapper<T>> {
247
270
  const swapper = this.newSwapper(options);
248
271
  await swapper.init();
@@ -16,7 +16,9 @@ import {isLNURLPay, LNURLPay} from "../types/lnurl/LNURLPay";
16
16
  import {toBitcoinWallet} from "../utils/BitcoinWalletUtils";
17
17
 
18
18
  /**
19
- * Utility class providing helper methods for swap operations
19
+ * Utility class providing helper methods for address parsing, token balances, serialization
20
+ * and other miscellaneous things.
21
+ *
20
22
  * @category Core
21
23
  */
22
24
  export class SwapperUtils<T extends MultiChain> {
@@ -25,42 +27,48 @@ export class SwapperUtils<T extends MultiChain> {
25
27
  private readonly root: Swapper<T>;
26
28
 
27
29
  constructor(root: Swapper<T>) {
28
- this.bitcoinNetwork = root.bitcoinNetwork;
30
+ this.bitcoinNetwork = root._btcNetwork;
29
31
  this.root = root;
30
32
  }
31
33
 
34
+ /**
35
+ * Checks whether a passed address is a valid address on the smart chain
36
+ *
37
+ * @param address Address
38
+ * @param chainId Smart chain identifier string to check the address for
39
+ */
32
40
  isValidSmartChainAddress(address: string, chainId?: ChainIds<T>): boolean {
33
41
  if(chainId!=null) {
34
- if(this.root.chains[chainId]==null) throw new Error(`Unknown chain id: ${chainId}`);
35
- return this.root.chains[chainId].chainInterface.isValidAddress(address);
42
+ if(this.root._chains[chainId]==null) throw new Error(`Unknown chain id: ${chainId}`);
43
+ return this.root._chains[chainId].chainInterface.isValidAddress(address);
36
44
  }
37
45
  for(let chainId of this.root.getSmartChains()) {
38
- if(this.root.chains[chainId].chainInterface.isValidAddress(address)) return true;
46
+ if(this.root._chains[chainId].chainInterface.isValidAddress(address)) return true;
39
47
  }
40
48
  return false;
41
49
  }
42
50
 
43
51
  /**
44
- * Returns true if string is a valid BOLT11 bitcoin lightning invoice
52
+ * Checks whether an address is a valid BOLT11 bitcoin lightning invoice
45
53
  *
46
- * @param lnpr
54
+ * @param address Address to check
47
55
  */
48
- isLightningInvoice(lnpr: string): boolean {
56
+ isLightningInvoice(address: string): boolean {
49
57
  try {
50
- bolt11Decode(lnpr);
58
+ bolt11Decode(address);
51
59
  return true;
52
60
  } catch (e) {}
53
61
  return false;
54
62
  }
55
63
 
56
64
  /**
57
- * Returns true if string is a valid bitcoin address
65
+ * Checks whether an address is a valid bitcoin address
58
66
  *
59
- * @param addr
67
+ * @param address Address to check
60
68
  */
61
- isValidBitcoinAddress(addr: string): boolean {
69
+ isValidBitcoinAddress(address: string): boolean {
62
70
  try {
63
- Address(this.bitcoinNetwork).decode(addr);
71
+ Address(this.bitcoinNetwork).decode(address);
64
72
  return true;
65
73
  } catch (e) {
66
74
  return false;
@@ -68,32 +76,32 @@ export class SwapperUtils<T extends MultiChain> {
68
76
  }
69
77
 
70
78
  /**
71
- * Returns true if string is a valid BOLT11 bitcoin lightning invoice WITH AMOUNT
79
+ * Checks whether an address is a valid BOLT11 bitcoin lightning invoice WITH AMOUNT
72
80
  *
73
- * @param lnpr
81
+ * @param address Address to check
74
82
  */
75
- isValidLightningInvoice(lnpr: string): boolean {
83
+ isValidLightningInvoice(address: string): boolean {
76
84
  try {
77
- const parsed = bolt11Decode(lnpr);
85
+ const parsed = bolt11Decode(address);
78
86
  if(parsed.millisatoshis!=null) return true;
79
87
  } catch (e) {}
80
88
  return false;
81
89
  }
82
90
 
83
91
  /**
84
- * Returns true if string is a valid LNURL (no checking on type is performed)
92
+ * Checks whether an address is a valid LNURL (no checking on type is performed)
85
93
  *
86
- * @param lnurl
94
+ * @param address Address to check
87
95
  */
88
- isValidLNURL(lnurl: string): boolean {
89
- return LNURL.isLNURL(lnurl);
96
+ isValidLNURL(address: string): boolean {
97
+ return LNURL.isLNURL(address);
90
98
  }
91
99
 
92
100
  /**
93
101
  * Returns type and data about an LNURL
94
102
  *
95
- * @param lnurl
96
- * @param shouldRetry
103
+ * @param lnurl LNURL link to check, can be either `pay` or `withdraw` type
104
+ * @param shouldRetry Optional whether HTTP requests should retried on failure
97
105
  */
98
106
  getLNURLTypeAndData(lnurl: string, shouldRetry?: boolean): Promise<LNURLPay | LNURLWithdraw | null> {
99
107
  return LNURL.getLNURLType(lnurl, shouldRetry);
@@ -227,7 +235,7 @@ export class SwapperUtils<T extends MultiChain> {
227
235
  max?: TokenAmount
228
236
  } | null {
229
237
  for(let chainId of this.root.getSmartChains()) {
230
- if(this.root.chains[chainId].chainInterface.isValidAddress(resultText)) {
238
+ if(this.root._chains[chainId].chainInterface.isValidAddress(resultText)) {
231
239
  return {
232
240
  address: resultText,
233
241
  type: chainId,
@@ -239,12 +247,12 @@ export class SwapperUtils<T extends MultiChain> {
239
247
  }
240
248
 
241
249
  /**
242
- * General parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses, also fetches LNURL data
243
- * (hence returns Promise)
250
+ * General parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses. Also fetches LNURL data
251
+ * (hence async and returns Promise).
244
252
  *
245
253
  * @param addressString Address to parse
246
254
  * @throws {Error} Error in address parsing
247
- * @returns Address data or null if address doesn't conform to any known format
255
+ * @returns Address data or `null` if address doesn't conform to any known format
248
256
  */
249
257
  async parseAddress(addressString: string): Promise<{
250
258
  address: string,
@@ -286,11 +294,11 @@ export class SwapperUtils<T extends MultiChain> {
286
294
 
287
295
  /**
288
296
  * Synchronous general parser for bitcoin addresses, LNURLs, lightning invoices, smart chain addresses, doesn't fetch
289
- * LNURL data, reports swapType: null instead to prevent returning a Promise
297
+ * LNURL data, returns `swapType: null` instead to prevent returning a Promise
290
298
  *
291
299
  * @param addressString Address to parse
292
300
  * @throws {Error} Error in address parsing
293
- * @returns Address data or null if address doesn't conform to any known format
301
+ * @returns Address data or `null` if address doesn't conform to any known format
294
302
  */
295
303
  parseAddressSync(addressString: string): {
296
304
  address: string,
@@ -330,14 +338,15 @@ export class SwapperUtils<T extends MultiChain> {
330
338
  }
331
339
 
332
340
  /**
333
- * Returns a random PSBT that can be used for fee estimation, the last output (the LP output) is omitted
334
- * to allow for coinselection algorithm to determine maximum sendable amount there
341
+ * Returns a random PSBT that can be used for fee estimation for SPV vault (UTXO-controlled vault) based swaps
342
+ * {@link SwapType.SPV_VAULT_FROM_BTC}, the last output (the LP output) is omitted to allow for coinselection
343
+ * algorithm to determine maximum sendable amount there
335
344
  *
336
- * @param chainIdentifier
337
- * @param includeGasToken Whether to return the PSBT also with the gas token amount (increases the vSize by 8)
345
+ * @param chainIdentifier Smart chain to swap to
346
+ * @param includeGasToken Whether to return the PSBT also with the gas token amount (increases the vSize by 8)
338
347
  */
339
348
  getRandomSpvVaultPsbt<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, includeGasToken?: boolean): Transaction {
340
- const wrapper = this.root.chains[chainIdentifier].wrappers[SwapType.SPV_VAULT_FROM_BTC];
349
+ const wrapper = this.root._chains[chainIdentifier].wrappers[SwapType.SPV_VAULT_FROM_BTC];
341
350
  if(wrapper==null) throw new Error("Chain doesn't support spv vault swaps!");
342
351
  return wrapper.getDummySwapPsbt(includeGasToken);
343
352
  }
@@ -345,8 +354,10 @@ export class SwapperUtils<T extends MultiChain> {
345
354
  /**
346
355
  * Returns the spendable balance of a bitcoin wallet
347
356
  *
348
- * @param wallet
349
- * @param targetChain
357
+ * @param wallet Bitcoin wallet to check the spendable balance for, can either be a simple
358
+ * bitcoin address string or a wallet object
359
+ * @param targetChain Destination smart chain for the swap, the ensures proper spendable balance
360
+ * is estimated taking into consideration different swap primitives available on different chains
350
361
  * @param options Additional options
351
362
  */
352
363
  async getBitcoinSpendableBalance(
@@ -363,9 +374,9 @@ export class SwapperUtils<T extends MultiChain> {
363
374
  }> {
364
375
  let bitcoinWallet: IBitcoinWallet;
365
376
  if(typeof(wallet)==="string") {
366
- bitcoinWallet = new SingleAddressBitcoinWallet(this.root.bitcoinRpc, this.bitcoinNetwork, {address: wallet, publicKey: ""});
377
+ bitcoinWallet = new SingleAddressBitcoinWallet(this.root._bitcoinRpc, this.bitcoinNetwork, {address: wallet, publicKey: ""});
367
378
  } else {
368
- bitcoinWallet = toBitcoinWallet(wallet, this.root.bitcoinRpc, this.bitcoinNetwork);
379
+ bitcoinWallet = toBitcoinWallet(wallet, this.root._bitcoinRpc, this.bitcoinNetwork);
369
380
  }
370
381
 
371
382
  let feeRate = options?.feeRate ?? await bitcoinWallet.getFeeRate();
@@ -385,14 +396,15 @@ export class SwapperUtils<T extends MultiChain> {
385
396
  }
386
397
 
387
398
  /**
388
- * Returns the maximum spendable balance of the wallet, deducting the fee needed to initiate a swap for native balances
399
+ * Returns the maximum spendable balance of the smart chain wallet, deducting the fee needed
400
+ * to initiate a swap for native balances
389
401
  */
390
402
  async getSpendableBalance<ChainIdentifier extends ChainIds<T>>(wallet: string | T[ChainIdentifier]["Signer"] | T[ChainIdentifier]["NativeSigner"], token: SCToken<ChainIdentifier>, options?: {
391
403
  feeMultiplier?: number,
392
404
  feeRate?: any
393
405
  }): Promise<TokenAmount> {
394
- if(this.root.chains[token.chainId]==null) throw new Error("Invalid chain identifier! Unknown chain: "+token.chainId);
395
- const {swapContract, chainInterface} = this.root.chains[token.chainId];
406
+ if(this.root._chains[token.chainId]==null) throw new Error("Invalid chain identifier! Unknown chain: "+token.chainId);
407
+ const {swapContract, chainInterface} = this.root._chains[token.chainId];
396
408
 
397
409
  let signer: string;
398
410
  if(typeof(wallet)==="string") {
@@ -433,11 +445,11 @@ export class SwapperUtils<T extends MultiChain> {
433
445
  }
434
446
 
435
447
  /**
436
- * Returns the address of the native currency of the chain
448
+ * Returns the address of the native currency of the smart chain
437
449
  */
438
450
  getNativeToken<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): SCToken<ChainIdentifier> {
439
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
440
- return this.root.tokens[chainIdentifier][this.root.chains[chainIdentifier].chainInterface.getNativeCurrencyAddress()] as SCToken<ChainIdentifier>;
451
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
452
+ return this.root._tokens[chainIdentifier][this.root._chains[chainIdentifier].chainInterface.getNativeCurrencyAddress()] as SCToken<ChainIdentifier>;
441
453
  }
442
454
 
443
455
  /**
@@ -446,8 +458,8 @@ export class SwapperUtils<T extends MultiChain> {
446
458
  * @param chainIdentifier
447
459
  */
448
460
  randomSigner<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): T[ChainIdentifier]["Signer"] {
449
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
450
- return this.root.chains[chainIdentifier].chainInterface.randomSigner();
461
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
462
+ return this.root._chains[chainIdentifier].chainInterface.randomSigner();
451
463
  }
452
464
 
453
465
  /**
@@ -456,12 +468,18 @@ export class SwapperUtils<T extends MultiChain> {
456
468
  * @param chainIdentifier
457
469
  */
458
470
  randomAddress<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier): string {
459
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
460
- return this.root.chains[chainIdentifier].chainInterface.randomAddress();
471
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
472
+ return this.root._chains[chainIdentifier].chainInterface.randomAddress();
461
473
  }
462
474
 
463
475
  /**
464
476
  * Signs and broadcasts the supplied smart chain transaction
477
+ *
478
+ * @param chainIdentifier Smart chain identifier string
479
+ * @param signer Signer to use for signing the transactions
480
+ * @param txs An array of transactions to sign
481
+ * @param abortSignal Abort signal
482
+ * @param onBeforePublish Callback invoked before a transaction is sent (invoked for every transaction to be sent)
465
483
  */
466
484
  sendAndConfirm<ChainIdentifier extends ChainIds<T>>(
467
485
  chainIdentifier: ChainIdentifier,
@@ -470,12 +488,17 @@ export class SwapperUtils<T extends MultiChain> {
470
488
  abortSignal?: AbortSignal,
471
489
  onBeforePublish?: (txId: string, rawTx: string) => Promise<void>
472
490
  ): Promise<string[]> {
473
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
474
- return this.root.chains[chainIdentifier].chainInterface.sendAndConfirm(signer, txs, true, abortSignal, false, onBeforePublish);
491
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
492
+ return this.root._chains[chainIdentifier].chainInterface.sendAndConfirm(signer, txs, true, abortSignal, false, onBeforePublish);
475
493
  }
476
494
 
477
495
  /**
478
496
  * Broadcasts already signed smart chain transactions
497
+ *
498
+ * @param chainIdentifier Smart chain identifier string
499
+ * @param txs An array of already signed transactions
500
+ * @param abortSignal Abort signal
501
+ * @param onBeforePublish Callback invoked before a transaction is sent (invoked for every transaction to be sent)
479
502
  */
480
503
  sendSignedAndConfirm<ChainIdentifier extends ChainIds<T>>(
481
504
  chainIdentifier: ChainIdentifier,
@@ -483,28 +506,52 @@ export class SwapperUtils<T extends MultiChain> {
483
506
  abortSignal?: AbortSignal,
484
507
  onBeforePublish?: (txId: string, rawTx: string) => Promise<void>
485
508
  ): Promise<string[]> {
486
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
487
- return this.root.chains[chainIdentifier].chainInterface.sendSignedAndConfirm(txs, true, abortSignal, false, onBeforePublish);
509
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
510
+ return this.root._chains[chainIdentifier].chainInterface.sendSignedAndConfirm(txs, true, abortSignal, false, onBeforePublish);
488
511
  }
489
512
 
513
+ /**
514
+ * Serializes an unsigned smart chain transaction
515
+ *
516
+ * @param chainIdentifier Smart chain string identifier
517
+ * @param tx An unsigned transaction to serialize
518
+ */
490
519
  serializeUnsignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: T[ChainIdentifier]["TX"]): Promise<string> {
491
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
492
- return this.root.chains[chainIdentifier].chainInterface.serializeTx(tx);
520
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
521
+ return this.root._chains[chainIdentifier].chainInterface.serializeTx(tx);
493
522
  }
494
523
 
524
+ /**
525
+ * Deserializes an unsigned smart chain transaction
526
+ *
527
+ * @param chainIdentifier Smart chain string identifier
528
+ * @param tx Serialized unsigned transaction
529
+ */
495
530
  deserializeUnsignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: string): Promise<T[ChainIdentifier]["TX"]> {
496
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
497
- return this.root.chains[chainIdentifier].chainInterface.deserializeTx(tx);
531
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
532
+ return this.root._chains[chainIdentifier].chainInterface.deserializeTx(tx);
498
533
  }
499
534
 
535
+ /**
536
+ * Serializes a signed smart chain transaction
537
+ *
538
+ * @param chainIdentifier Smart chain string identifier
539
+ * @param tx A signed transaction to serialize
540
+ */
500
541
  serializeSignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: T[ChainIdentifier]["SignedTXType"]): Promise<string> {
501
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
502
- return this.root.chains[chainIdentifier].chainInterface.serializeSignedTx(tx);
542
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
543
+ return this.root._chains[chainIdentifier].chainInterface.serializeSignedTx(tx);
503
544
  }
504
545
 
546
+ /**
547
+ * Deserializes a signed smart chain transaction
548
+ *
549
+ * @param chainIdentifier Smart chain string identifier
550
+ * @param tx Serialized signed transaction
551
+ */
505
552
  deserializeSignedTransaction<ChainIdentifier extends ChainIds<T>>(chainIdentifier: ChainIdentifier, tx: string): Promise<T[ChainIdentifier]["SignedTXType"]> {
506
- if(this.root.chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
507
- return this.root.chains[chainIdentifier].chainInterface.deserializeSignedTx(tx);
553
+ if(this.root._chains[chainIdentifier]==null) throw new Error("Invalid chain identifier! Unknown chain: "+chainIdentifier);
554
+ return this.root._chains[chainIdentifier].chainInterface.deserializeSignedTx(tx);
508
555
  }
509
556
 
510
557
  }