@liquid-af/sdk 0.1.0

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 (225) hide show
  1. package/README.md +776 -0
  2. package/dist/accounts/index.d.ts +5 -0
  3. package/dist/accounts/index.d.ts.map +1 -0
  4. package/dist/accounts/index.js +5 -0
  5. package/dist/accounts/index.js.map +1 -0
  6. package/dist/accounts/liquid-fees.d.ts +63 -0
  7. package/dist/accounts/liquid-fees.d.ts.map +1 -0
  8. package/dist/accounts/liquid-fees.js +27 -0
  9. package/dist/accounts/liquid-fees.js.map +1 -0
  10. package/dist/accounts/liquid-state.d.ts +112 -0
  11. package/dist/accounts/liquid-state.d.ts.map +1 -0
  12. package/dist/accounts/liquid-state.js +92 -0
  13. package/dist/accounts/liquid-state.js.map +1 -0
  14. package/dist/accounts/liquid-swap.d.ts +97 -0
  15. package/dist/accounts/liquid-swap.d.ts.map +1 -0
  16. package/dist/accounts/liquid-swap.js +54 -0
  17. package/dist/accounts/liquid-swap.js.map +1 -0
  18. package/dist/accounts/liquid.d.ts +175 -0
  19. package/dist/accounts/liquid.d.ts.map +1 -0
  20. package/dist/accounts/liquid.js +66 -0
  21. package/dist/accounts/liquid.js.map +1 -0
  22. package/dist/client.d.ts +621 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +511 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/config.d.ts +56 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +44 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/errors.d.ts +39 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +63 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/events/index.d.ts +4 -0
  35. package/dist/events/index.d.ts.map +1 -0
  36. package/dist/events/index.js +2 -0
  37. package/dist/events/index.js.map +1 -0
  38. package/dist/events/parser.d.ts +40 -0
  39. package/dist/events/parser.d.ts.map +1 -0
  40. package/dist/events/parser.js +67 -0
  41. package/dist/events/parser.js.map +1 -0
  42. package/dist/events/types.d.ts +286 -0
  43. package/dist/events/types.d.ts.map +1 -0
  44. package/dist/events/types.js +2 -0
  45. package/dist/events/types.js.map +1 -0
  46. package/dist/helpers/index.d.ts +4 -0
  47. package/dist/helpers/index.d.ts.map +1 -0
  48. package/dist/helpers/index.js +3 -0
  49. package/dist/helpers/index.js.map +1 -0
  50. package/dist/helpers/preview.d.ts +259 -0
  51. package/dist/helpers/preview.d.ts.map +1 -0
  52. package/dist/helpers/preview.js +458 -0
  53. package/dist/helpers/preview.js.map +1 -0
  54. package/dist/helpers/user.d.ts +11 -0
  55. package/dist/helpers/user.d.ts.map +1 -0
  56. package/dist/helpers/user.js +20 -0
  57. package/dist/helpers/user.js.map +1 -0
  58. package/dist/idl/index.d.ts +53 -0
  59. package/dist/idl/index.d.ts.map +1 -0
  60. package/dist/idl/index.js +64 -0
  61. package/dist/idl/index.js.map +1 -0
  62. package/dist/idl/liquid.d.ts +10523 -0
  63. package/dist/idl/liquid.d.ts.map +1 -0
  64. package/dist/idl/liquid.js +2 -0
  65. package/dist/idl/liquid.js.map +1 -0
  66. package/dist/idl/liquid.json +10516 -0
  67. package/dist/idl/liquid_fees.d.ts +1520 -0
  68. package/dist/idl/liquid_fees.d.ts.map +1 -0
  69. package/dist/idl/liquid_fees.js +2 -0
  70. package/dist/idl/liquid_fees.js.map +1 -0
  71. package/dist/idl/liquid_fees.json +1513 -0
  72. package/dist/idl/liquid_state.d.ts +2936 -0
  73. package/dist/idl/liquid_state.d.ts.map +1 -0
  74. package/dist/idl/liquid_state.js +2 -0
  75. package/dist/idl/liquid_state.js.map +1 -0
  76. package/dist/idl/liquid_state.json +2929 -0
  77. package/dist/idl/liquid_swap.d.ts +5849 -0
  78. package/dist/idl/liquid_swap.d.ts.map +1 -0
  79. package/dist/idl/liquid_swap.js +2 -0
  80. package/dist/idl/liquid_swap.js.map +1 -0
  81. package/dist/idl/liquid_swap.json +5842 -0
  82. package/dist/index.d.ts +19 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +15 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/instructions/index.d.ts +9 -0
  87. package/dist/instructions/index.d.ts.map +1 -0
  88. package/dist/instructions/index.js +9 -0
  89. package/dist/instructions/index.js.map +1 -0
  90. package/dist/instructions/liquid-fees.d.ts +111 -0
  91. package/dist/instructions/liquid-fees.d.ts.map +1 -0
  92. package/dist/instructions/liquid-fees.js +169 -0
  93. package/dist/instructions/liquid-fees.js.map +1 -0
  94. package/dist/instructions/liquid-state.d.ts +173 -0
  95. package/dist/instructions/liquid-state.d.ts.map +1 -0
  96. package/dist/instructions/liquid-state.js +194 -0
  97. package/dist/instructions/liquid-state.js.map +1 -0
  98. package/dist/instructions/liquid-swap.d.ts +122 -0
  99. package/dist/instructions/liquid-swap.d.ts.map +1 -0
  100. package/dist/instructions/liquid-swap.js +167 -0
  101. package/dist/instructions/liquid-swap.js.map +1 -0
  102. package/dist/instructions/liquid.d.ts +297 -0
  103. package/dist/instructions/liquid.d.ts.map +1 -0
  104. package/dist/instructions/liquid.js +483 -0
  105. package/dist/instructions/liquid.js.map +1 -0
  106. package/dist/instructions/program-cache.d.ts +35 -0
  107. package/dist/instructions/program-cache.d.ts.map +1 -0
  108. package/dist/instructions/program-cache.js +68 -0
  109. package/dist/instructions/program-cache.js.map +1 -0
  110. package/dist/math/amm.d.ts +42 -0
  111. package/dist/math/amm.d.ts.map +1 -0
  112. package/dist/math/amm.js +109 -0
  113. package/dist/math/amm.js.map +1 -0
  114. package/dist/math/bonding-curve.d.ts +34 -0
  115. package/dist/math/bonding-curve.d.ts.map +1 -0
  116. package/dist/math/bonding-curve.js +80 -0
  117. package/dist/math/bonding-curve.js.map +1 -0
  118. package/dist/math/constants.d.ts +14 -0
  119. package/dist/math/constants.d.ts.map +1 -0
  120. package/dist/math/constants.js +14 -0
  121. package/dist/math/constants.js.map +1 -0
  122. package/dist/math/fees.d.ts +88 -0
  123. package/dist/math/fees.d.ts.map +1 -0
  124. package/dist/math/fees.js +135 -0
  125. package/dist/math/fees.js.map +1 -0
  126. package/dist/math/index.d.ts +8 -0
  127. package/dist/math/index.d.ts.map +1 -0
  128. package/dist/math/index.js +6 -0
  129. package/dist/math/index.js.map +1 -0
  130. package/dist/math/tiered-fees.d.ts +80 -0
  131. package/dist/math/tiered-fees.d.ts.map +1 -0
  132. package/dist/math/tiered-fees.js +129 -0
  133. package/dist/math/tiered-fees.js.map +1 -0
  134. package/dist/oracle.d.ts +53 -0
  135. package/dist/oracle.d.ts.map +1 -0
  136. package/dist/oracle.js +70 -0
  137. package/dist/oracle.js.map +1 -0
  138. package/dist/pda/index.d.ts +89 -0
  139. package/dist/pda/index.d.ts.map +1 -0
  140. package/dist/pda/index.js +127 -0
  141. package/dist/pda/index.js.map +1 -0
  142. package/dist/pda/liquid-fees.d.ts +27 -0
  143. package/dist/pda/liquid-fees.d.ts.map +1 -0
  144. package/dist/pda/liquid-fees.js +36 -0
  145. package/dist/pda/liquid-fees.js.map +1 -0
  146. package/dist/pda/liquid-state.d.ts +56 -0
  147. package/dist/pda/liquid-state.d.ts.map +1 -0
  148. package/dist/pda/liquid-state.js +79 -0
  149. package/dist/pda/liquid-state.js.map +1 -0
  150. package/dist/pda/liquid-swap.d.ts +76 -0
  151. package/dist/pda/liquid-swap.d.ts.map +1 -0
  152. package/dist/pda/liquid-swap.js +103 -0
  153. package/dist/pda/liquid-swap.js.map +1 -0
  154. package/dist/pda/liquid.d.ts +67 -0
  155. package/dist/pda/liquid.d.ts.map +1 -0
  156. package/dist/pda/liquid.js +91 -0
  157. package/dist/pda/liquid.js.map +1 -0
  158. package/dist/provider.d.ts +26 -0
  159. package/dist/provider.d.ts.map +1 -0
  160. package/dist/provider.js +47 -0
  161. package/dist/provider.js.map +1 -0
  162. package/dist/transaction/builder.d.ts +30 -0
  163. package/dist/transaction/builder.d.ts.map +1 -0
  164. package/dist/transaction/builder.js +48 -0
  165. package/dist/transaction/builder.js.map +1 -0
  166. package/dist/transaction/index.d.ts +3 -0
  167. package/dist/transaction/index.d.ts.map +1 -0
  168. package/dist/transaction/index.js +3 -0
  169. package/dist/transaction/index.js.map +1 -0
  170. package/dist/transaction/send.d.ts +25 -0
  171. package/dist/transaction/send.d.ts.map +1 -0
  172. package/dist/transaction/send.js +52 -0
  173. package/dist/transaction/send.js.map +1 -0
  174. package/dist/types.d.ts +311 -0
  175. package/dist/types.d.ts.map +1 -0
  176. package/dist/types.js +46 -0
  177. package/dist/types.js.map +1 -0
  178. package/package.json +112 -0
  179. package/src/accounts/index.ts +26 -0
  180. package/src/accounts/liquid-fees.ts +38 -0
  181. package/src/accounts/liquid-state.ts +134 -0
  182. package/src/accounts/liquid-swap.ts +79 -0
  183. package/src/accounts/liquid.ts +100 -0
  184. package/src/client.ts +1001 -0
  185. package/src/config.ts +91 -0
  186. package/src/errors.ts +94 -0
  187. package/src/events/index.ts +42 -0
  188. package/src/events/parser.ts +90 -0
  189. package/src/events/types.ts +310 -0
  190. package/src/helpers/index.ts +23 -0
  191. package/src/helpers/preview.ts +798 -0
  192. package/src/helpers/user.ts +24 -0
  193. package/src/idl/index.ts +94 -0
  194. package/src/idl/liquid.json +10516 -0
  195. package/src/idl/liquid.ts +10522 -0
  196. package/src/idl/liquid_fees.json +1513 -0
  197. package/src/idl/liquid_fees.ts +1519 -0
  198. package/src/idl/liquid_state.json +2929 -0
  199. package/src/idl/liquid_state.ts +2935 -0
  200. package/src/idl/liquid_swap.json +5842 -0
  201. package/src/idl/liquid_swap.ts +5848 -0
  202. package/src/index.ts +98 -0
  203. package/src/instructions/index.ts +109 -0
  204. package/src/instructions/liquid-fees.ts +289 -0
  205. package/src/instructions/liquid-state.ts +336 -0
  206. package/src/instructions/liquid-swap.ts +414 -0
  207. package/src/instructions/liquid.ts +884 -0
  208. package/src/instructions/program-cache.ts +106 -0
  209. package/src/math/amm.ts +146 -0
  210. package/src/math/bonding-curve.ts +122 -0
  211. package/src/math/constants.ts +19 -0
  212. package/src/math/fees.ts +191 -0
  213. package/src/math/index.ts +40 -0
  214. package/src/math/tiered-fees.ts +165 -0
  215. package/src/oracle.ts +97 -0
  216. package/src/pda/index.ts +331 -0
  217. package/src/pda/liquid-fees.ts +58 -0
  218. package/src/pda/liquid-state.ts +123 -0
  219. package/src/pda/liquid-swap.ts +162 -0
  220. package/src/pda/liquid.ts +152 -0
  221. package/src/provider.ts +60 -0
  222. package/src/transaction/builder.ts +80 -0
  223. package/src/transaction/index.ts +6 -0
  224. package/src/transaction/send.ts +72 -0
  225. package/src/types.ts +354 -0
@@ -0,0 +1,458 @@
1
+ import BN from "bn.js";
2
+ import { fetchAmmConfig, fetchPoolState } from "../accounts/liquid-swap.js";
3
+ import { fetchLiquidGlobalConfig, fetchNativeBondingCurve, fetchStableBondingCurve, } from "../accounts/liquid.js";
4
+ import { calculateBuyExpectation, calculateSellExpectation, } from "../math/bonding-curve.js";
5
+ import { calculateAmmSellOutput, calculateAmmBuyInput } from "../math/amm.js";
6
+ import { BPS_DENOMINATOR } from "../math/constants.js";
7
+ import { calculateVirtualSolReserves } from "../oracle.js";
8
+ import { getAccount, getMint } from "@solana/spl-token";
9
+ import { calculateFeesForPool } from "../math/tiered-fees.js";
10
+ /**
11
+ * Previews a buy on the bonding curve from pre-fetched state. The function executes offline using the state being passed in.
12
+ *
13
+ * @param amountInQuote - Quote token amount to spend (lamports for SOL, smallest unit for stables)
14
+ * @param state - Pre-fetched bonding curve and global config state
15
+ * @param options - Optional referral flags
16
+ * @returns Buy preview with tokens out, fees, price impact, and completion flag
17
+ */
18
+ export function calculateBuyCurvePreview(amountInQuote, state, options) {
19
+ const { globalConfig, bondingCurve } = state;
20
+ const feeConfig = {
21
+ protocolFeeBps: globalConfig.protocolFeeBasisPoints,
22
+ creatorFeeBps: globalConfig.creatorFeeBasisPoints,
23
+ creatorReferralBps: globalConfig.creatorReferralRewardBasisPoints,
24
+ traderReferralBps: globalConfig.traderReferralRewardBasisPoints,
25
+ };
26
+ const result = calculateBuyExpectation(amountInQuote, bondingCurve, feeConfig, options?.hasCreatorRef ?? false, options?.hasTraderRef ?? false);
27
+ const priceBefore = bondingCurve.virtualQuoteReserves
28
+ .mul(new BN(BPS_DENOMINATOR))
29
+ .div(bondingCurve.virtualTokenReserves);
30
+ const priceAfter = result.newVirtualQuote
31
+ .mul(new BN(BPS_DENOMINATOR))
32
+ .div(result.newVirtualToken);
33
+ const priceImpactBps = priceAfter
34
+ .sub(priceBefore)
35
+ .mul(new BN(BPS_DENOMINATOR))
36
+ .div(priceBefore)
37
+ .toNumber();
38
+ const willComplete = result.tokensOut.gte(bondingCurve.realTokenReserves);
39
+ return {
40
+ tokensOut: result.tokensOut,
41
+ fees: {
42
+ protocolFee: result.protocolFee,
43
+ creatorFee: result.creatorFee,
44
+ creatorReferralFee: result.creatorReferralFee,
45
+ traderReferralFee: result.traderReferralFee,
46
+ totalFees: result.totalFees,
47
+ },
48
+ priceImpactBps,
49
+ newReserves: {
50
+ virtualQuote: result.newVirtualQuote,
51
+ virtualToken: result.newVirtualToken,
52
+ },
53
+ willComplete,
54
+ };
55
+ }
56
+ /**
57
+ * Previews a sell on the bonding curve from pre-fetched state. The function executes offline using the state being passed in.
58
+ *
59
+ * @param amountInTokens - Token amount to sell
60
+ * @param state - Pre-fetched bonding curve and global config state
61
+ * @param options - Optional referral flags
62
+ * @returns Sell preview with quote out, fees, and price impact
63
+ */
64
+ export function calculateSellCurvePreview(amountInTokens, state, options) {
65
+ const { globalConfig, bondingCurve } = state;
66
+ const feeConfig = {
67
+ protocolFeeBps: globalConfig.protocolFeeBasisPoints,
68
+ creatorFeeBps: globalConfig.creatorFeeBasisPoints,
69
+ creatorReferralBps: globalConfig.creatorReferralRewardBasisPoints,
70
+ traderReferralBps: globalConfig.traderReferralRewardBasisPoints,
71
+ };
72
+ const result = calculateSellExpectation(amountInTokens, bondingCurve, feeConfig, options?.hasCreatorRef ?? false, options?.hasTraderRef ?? false);
73
+ const priceBefore = bondingCurve.virtualQuoteReserves
74
+ .mul(new BN(BPS_DENOMINATOR))
75
+ .div(bondingCurve.virtualTokenReserves);
76
+ const priceAfter = result.newVirtualQuote
77
+ .mul(new BN(BPS_DENOMINATOR))
78
+ .div(result.newVirtualToken);
79
+ const priceImpactBps = priceBefore
80
+ .sub(priceAfter)
81
+ .mul(new BN(BPS_DENOMINATOR))
82
+ .div(priceBefore)
83
+ .toNumber();
84
+ return {
85
+ quoteOut: result.quoteOutGross,
86
+ quoteOutNet: result.quoteOutNet,
87
+ fees: {
88
+ protocolFee: result.protocolFee,
89
+ creatorFee: result.creatorFee,
90
+ creatorReferralFee: result.creatorReferralFee,
91
+ traderReferralFee: result.traderReferralFee,
92
+ totalFees: result.totalFees,
93
+ },
94
+ priceImpactBps,
95
+ newReserves: {
96
+ virtualQuote: result.newVirtualQuote,
97
+ virtualToken: result.newVirtualToken,
98
+ },
99
+ };
100
+ }
101
+ /**
102
+ * Previews a buy swap on the AMM (quote -> base) from pre-fetched state. The function executes offline using the state being passed in.
103
+ *
104
+ * @param amountOut - Desired base token amount out
105
+ * @param state - Pre-fetched AMM config and vault balances
106
+ * @returns Swap preview with quote in, fees, and price impact
107
+ */
108
+ export function calculateSwapBuyPreview(amountOut, state) {
109
+ const { ammConfig, baseVaultBalance, quoteVaultBalance } = state;
110
+ const result = calculateAmmBuyInput(amountOut, baseVaultBalance, quoteVaultBalance, {
111
+ lpFeeRate: ammConfig.lpFeeRate,
112
+ creatorFeeRate: ammConfig.creatorFeeRate,
113
+ protocolFeeRate: ammConfig.protocolFeeRate,
114
+ });
115
+ const priceBefore = quoteVaultBalance
116
+ .mul(new BN(BPS_DENOMINATOR))
117
+ .div(baseVaultBalance);
118
+ const newBaseVault = baseVaultBalance.sub(amountOut);
119
+ const newQuoteVault = quoteVaultBalance.add(result.quoteInGross);
120
+ const priceAfter = newQuoteVault
121
+ .mul(new BN(BPS_DENOMINATOR))
122
+ .div(newBaseVault);
123
+ const priceImpactBps = priceAfter
124
+ .sub(priceBefore)
125
+ .mul(new BN(BPS_DENOMINATOR))
126
+ .div(priceBefore)
127
+ .toNumber();
128
+ return {
129
+ amountOut: result.quoteInGross,
130
+ amountOutNet: result.quoteIn,
131
+ fees: {
132
+ lpFee: result.lpFee,
133
+ creatorFee: result.creatorFee,
134
+ protocolFee: result.protocolFee,
135
+ totalFees: result.totalFees,
136
+ },
137
+ priceImpactBps,
138
+ };
139
+ }
140
+ /**
141
+ * Previews a sell swap on the AMM (base -> quote) from pre-fetched state. The function executes offline using the state being passed in.
142
+ *
143
+ * @param amountIn - Base token amount to sell
144
+ * @param state - Pre-fetched AMM config and vault balances
145
+ * @returns Swap preview with quote out, fees, and price impact
146
+ */
147
+ export function calculateSwapSellPreview(amountIn, state) {
148
+ const { ammConfig, baseVaultBalance, quoteVaultBalance } = state;
149
+ const result = calculateAmmSellOutput(amountIn, baseVaultBalance, quoteVaultBalance, {
150
+ lpFeeRate: ammConfig.lpFeeRate,
151
+ creatorFeeRate: ammConfig.creatorFeeRate,
152
+ protocolFeeRate: ammConfig.protocolFeeRate,
153
+ });
154
+ const priceBefore = quoteVaultBalance
155
+ .mul(new BN(BPS_DENOMINATOR))
156
+ .div(baseVaultBalance);
157
+ const newBaseVault = baseVaultBalance.add(amountIn);
158
+ const newQuoteVault = quoteVaultBalance.sub(result.quoteOut);
159
+ const priceAfter = newQuoteVault
160
+ .mul(new BN(BPS_DENOMINATOR))
161
+ .div(newBaseVault);
162
+ const priceImpactBps = priceBefore
163
+ .sub(priceAfter)
164
+ .mul(new BN(BPS_DENOMINATOR))
165
+ .div(priceBefore)
166
+ .toNumber();
167
+ return {
168
+ amountOut: result.quoteOut,
169
+ amountOutNet: result.quoteOutNet,
170
+ fees: {
171
+ lpFee: result.lpFee,
172
+ creatorFee: result.creatorFee,
173
+ protocolFee: result.protocolFee,
174
+ totalFees: result.totalFees,
175
+ },
176
+ priceImpactBps,
177
+ };
178
+ }
179
+ /**
180
+ * Fetches the on-chain global config and maps it to the fee/reserve fields
181
+ * required by {@link CurvePreviewState}.
182
+ *
183
+ * @param connection - Solana RPC connection
184
+ * @param config - Liquid protocol configuration (provides the program ID)
185
+ * @returns Fee basis-point fields plus `initialVirtualReserveUsd` for native reserve computation
186
+ */
187
+ async function fetchCurveGlobalConfig(connection, config) {
188
+ const raw = await fetchLiquidGlobalConfig(connection, config);
189
+ return {
190
+ protocolFeeBasisPoints: raw.protocolFeeBasisPoints,
191
+ creatorFeeBasisPoints: raw.creatorFeeBasisPoints,
192
+ creatorReferralRewardBasisPoints: raw.creatorReferralRewardBasisPoints,
193
+ traderReferralRewardBasisPoints: raw.traderReferralRewardBasisPoints,
194
+ initialVirtualReserveUsd: raw.initialVirtualReserveUsd,
195
+ };
196
+ }
197
+ /**
198
+ * Resolves {@link CurvePreviewState} for native SOL curves.
199
+ *
200
+ * Fetches the global config and native bonding curve in parallel (skipping
201
+ * any that are prefetched), then computes `virtualQuoteReserves` from
202
+ * `initialVirtualReserveUsd` and `solPriceUsd`.
203
+ *
204
+ * @param connection - Solana RPC connection
205
+ * @param mint - Token mint address of the native bonding curve
206
+ * @param options - Native curve options containing `solPriceUsd` and optional `prefetched` state
207
+ * @param config - Liquid protocol configuration
208
+ * @returns Resolved curve preview state ready for pure-math preview calculations
209
+ */
210
+ async function resolveNativeCurve(connection, mint, options, config) {
211
+ const pre = options.prefetched;
212
+ const [globalConfig, nativeCurve] = await Promise.all([
213
+ pre?.globalConfig ?? fetchCurveGlobalConfig(connection, config),
214
+ pre?.bondingCurve
215
+ ? null
216
+ : fetchNativeBondingCurve(connection, mint, config),
217
+ ]);
218
+ const virtualSolReserves = calculateVirtualSolReserves(BigInt(globalConfig.initialVirtualReserveUsd.toString()), BigInt(options.solPriceUsd.toString()));
219
+ const bondingCurve = pre?.bondingCurve ?? {
220
+ virtualQuoteReserves: new BN(virtualSolReserves.toString()),
221
+ virtualTokenReserves: nativeCurve.virtualTokenReserves,
222
+ realTokenReserves: nativeCurve.realTokenReserves,
223
+ };
224
+ return { globalConfig, bondingCurve };
225
+ }
226
+ /**
227
+ * Resolves {@link CurvePreviewState} for stable (e.g. USDC) curves.
228
+ *
229
+ * Fetches the global config and stable bonding curve in parallel (skipping
230
+ * any that are prefetched). `virtualQuoteReserves` is read directly from
231
+ * the on-chain account.
232
+ *
233
+ * @param connection - Solana RPC connection
234
+ * @param mint - Token mint address of the stable bonding curve
235
+ * @param options - Stable curve options containing `quoteMint` and optional `prefetched` state
236
+ * @param config - Liquid protocol configuration
237
+ * @returns Resolved curve preview state ready for pure-math preview calculations
238
+ */
239
+ async function resolveStableCurve(connection, mint, options, config) {
240
+ const pre = options.prefetched;
241
+ const [globalConfig, stableCurve] = await Promise.all([
242
+ pre?.globalConfig ?? fetchCurveGlobalConfig(connection, config),
243
+ pre?.bondingCurve
244
+ ? null
245
+ : fetchStableBondingCurve(connection, mint, options.quoteMint, config),
246
+ ]);
247
+ const bondingCurve = pre?.bondingCurve ?? {
248
+ virtualQuoteReserves: stableCurve.virtualQuoteReserves,
249
+ virtualTokenReserves: stableCurve.virtualTokenReserves,
250
+ realTokenReserves: stableCurve.realTokenReserves,
251
+ };
252
+ return { globalConfig, bondingCurve };
253
+ }
254
+ /**
255
+ * Dispatches to {@link resolveNativeCurve} or {@link resolveStableCurve}
256
+ * based on whether `options.quoteMint` is present.
257
+ *
258
+ * @param connection - Solana RPC connection
259
+ * @param mint - Token mint address
260
+ * @param config - Liquid protocol configuration
261
+ * @param options - Discriminated curve options (native or stable)
262
+ * @returns Resolved curve preview state ready for pure-math preview calculations
263
+ */
264
+ function resolveCurveState(connection, mint, config, options) {
265
+ if (options.quoteMint) {
266
+ return resolveStableCurve(connection, mint, options, config);
267
+ }
268
+ return resolveNativeCurve(connection, mint, options, config);
269
+ }
270
+ /**
271
+ * Previews a buy on the bonding curve.
272
+ *
273
+ * Auto-fetches the global config and bonding curve state from chain, then
274
+ * computes expected tokens out, fee breakdown, price impact, and whether the
275
+ * buy would complete the curve.
276
+ *
277
+ * @param connection - Solana RPC connection
278
+ * @param mint - Token mint address
279
+ * @param amountInQuote - Quote token amount to spend (lamports for SOL, smallest unit for stables)
280
+ * @param config - Liquid protocol configuration
281
+ * @param options - Native ({@link NativeCurveOptions}) or stable ({@link StableCurveOptions})
282
+ * @returns Buy preview with `tokensOut`, `fees`, `priceImpactBps`, `newReserves`, and `willComplete`
283
+ *
284
+ * @example Native SOL curve
285
+ * ```ts
286
+ * const preview = await previewBuyOnCurve(connection, mint, new BN(100_000_000), config, {
287
+ * solPriceUsd: new BN(150_000_000), // $150
288
+ * });
289
+ * ```
290
+ *
291
+ * @example Stable (USDC) curve
292
+ * ```ts
293
+ * const preview = await previewBuyOnCurve(connection, mint, new BN(10_000_000), config, {
294
+ * quoteMint: USDC_MINT,
295
+ * });
296
+ * ```
297
+ *
298
+ * @see {@link calculateBuyCurvePreview} for pure offline calculations with pre-built state
299
+ */
300
+ export async function previewBuyOnCurve(connection, mint, amountInQuote, config, options) {
301
+ const state = await resolveCurveState(connection, mint, config, options);
302
+ return calculateBuyCurvePreview(amountInQuote, state, {
303
+ hasCreatorRef: options?.hasCreatorRef,
304
+ hasTraderRef: options?.hasTraderRef,
305
+ });
306
+ }
307
+ /**
308
+ * Previews a sell on the bonding curve.
309
+ *
310
+ * Auto-fetches the global config and bonding curve state from chain, then
311
+ * computes expected quote out, fee breakdown, and price impact.
312
+ *
313
+ * @param connection - Solana RPC connection
314
+ * @param mint - Token mint address
315
+ * @param amountInTokens - Token amount to sell (smallest unit, 6 decimals)
316
+ * @param config - Liquid protocol configuration
317
+ * @param options - Native ({@link NativeCurveOptions}) or stable ({@link StableCurveOptions})
318
+ * @returns Sell preview with `quoteOut`, `quoteOutNet`, `fees`, `priceImpactBps`, and `newReserves`
319
+ *
320
+ * @example Native SOL curve
321
+ * ```ts
322
+ * const preview = await previewSellOnCurve(connection, mint, new BN(5_000_000), config, {
323
+ * solPriceUsd: new BN(150_000_000),
324
+ * });
325
+ * ```
326
+ *
327
+ * @see {@link calculateSellCurvePreview} for pure offline calculations with pre-built state
328
+ */
329
+ export async function previewSellOnCurve(connection, mint, amountInTokens, config, options) {
330
+ const state = await resolveCurveState(connection, mint, config, options);
331
+ return calculateSellCurvePreview(amountInTokens, state, {
332
+ hasCreatorRef: options?.hasCreatorRef,
333
+ hasTraderRef: options?.hasTraderRef,
334
+ });
335
+ }
336
+ /**
337
+ * Previews a sell swap on the AMM (base -> quote).
338
+ *
339
+ * Accepts optional pre-fetched state to avoid redundant RPC calls.
340
+ * For tiered fee systems, you must provide either:
341
+ * - `prefetched.feeRates` - pre-computed fee rates for the current market cap
342
+ * - `solPriceUsd` parameter - to calculate fee rates from on-chain tiered config
343
+ *
344
+ * @param connection - Solana RPC connection
345
+ * @param baseMint - Base token mint address
346
+ * @param quoteMint - Quote token mint address
347
+ * @param amountIn - Base token amount to sell
348
+ * @param config - Liquid protocol configuration
349
+ * @param options - Optional pre-fetched AMM state and solPriceUsd for tier calculation
350
+ * @returns Swap preview with quote out, fees, and price impact
351
+ *
352
+ * @throws Error if neither feeRates nor solPriceUsd is provided for tiered fee systems
353
+ */
354
+ export async function previewSwapSell(connection, baseMint, quoteMint, amountIn, config, options) {
355
+ const pre = options?.prefetched;
356
+ // Fetch pool state if not provided
357
+ const poolState = pre?.poolState ??
358
+ (await fetchPoolState(connection, baseMint, quoteMint, config));
359
+ // Get vault balances
360
+ let baseVaultBalance;
361
+ let quoteVaultBalance;
362
+ if (pre?.vaultBalances) {
363
+ ({ baseVaultBalance, quoteVaultBalance } = pre.vaultBalances);
364
+ }
365
+ else {
366
+ const [baseVaultAccount, quoteVaultAccount] = await Promise.all([
367
+ getAccount(connection, poolState.baseVault, "confirmed", poolState.baseTokenProgram),
368
+ getAccount(connection, poolState.quoteVault, "confirmed", poolState.quoteTokenProgram),
369
+ ]);
370
+ baseVaultBalance = new BN(baseVaultAccount.amount.toString());
371
+ quoteVaultBalance = new BN(quoteVaultAccount.amount.toString());
372
+ }
373
+ // Get fee rates
374
+ let feeRates;
375
+ if (pre?.feeRates) {
376
+ // Use pre-computed fee rates
377
+ feeRates = pre.feeRates;
378
+ }
379
+ else if (options?.solPriceUsd) {
380
+ // Calculate fee rates from tiered config
381
+ const ammConfig = await fetchAmmConfig(connection, config);
382
+ const baseMintAccount = await getMint(connection, poolState.baseMint, "confirmed", poolState.baseTokenProgram);
383
+ const baseTotalSupply = new BN(baseMintAccount.supply.toString());
384
+ const tiers = ammConfig.feeTiers;
385
+ const [lpFeeRate, protocolFeeRate, creatorFeeRate] = calculateFeesForPool(quoteVaultBalance, baseVaultBalance, baseTotalSupply, options.solPriceUsd, poolState.quoteMint, tiers);
386
+ feeRates = { lpFeeRate, protocolFeeRate, creatorFeeRate };
387
+ }
388
+ else {
389
+ throw new Error("Either prefetched.feeRates or solPriceUsd must be provided for tiered fee calculations");
390
+ }
391
+ return calculateSwapSellPreview(amountIn, {
392
+ ammConfig: feeRates,
393
+ baseVaultBalance,
394
+ quoteVaultBalance,
395
+ });
396
+ }
397
+ /**
398
+ * Previews a buy swap on the AMM (quote -> base).
399
+ *
400
+ * Accepts optional pre-fetched state to avoid redundant RPC calls.
401
+ * For tiered fee systems, you must provide either:
402
+ * - `prefetched.feeRates` - pre-computed fee rates for the current market cap
403
+ * - `solPriceUsd` parameter - to calculate fee rates from on-chain tiered config
404
+ *
405
+ * @param connection - Solana RPC connection
406
+ * @param baseMint - Base token mint address
407
+ * @param quoteMint - Quote token mint address
408
+ * @param amountOut - Desired base token amount out
409
+ * @param config - Liquid protocol configuration
410
+ * @param options - Optional pre-fetched AMM state and solPriceUsd for tier calculation
411
+ * @returns Swap preview with quote in, fees, and price impact
412
+ *
413
+ * @throws Error if neither feeRates nor solPriceUsd is provided for tiered fee systems
414
+ */
415
+ export async function previewSwapBuy(connection, baseMint, quoteMint, amountOut, config, options) {
416
+ const pre = options?.prefetched;
417
+ // Fetch pool state if not provided
418
+ const poolState = pre?.poolState ??
419
+ (await fetchPoolState(connection, baseMint, quoteMint, config));
420
+ // Get vault balances
421
+ let baseVaultBalance;
422
+ let quoteVaultBalance;
423
+ if (pre?.vaultBalances) {
424
+ ({ baseVaultBalance, quoteVaultBalance } = pre.vaultBalances);
425
+ }
426
+ else {
427
+ const [baseVaultAccount, quoteVaultAccount] = await Promise.all([
428
+ getAccount(connection, poolState.baseVault, "confirmed", poolState.baseTokenProgram),
429
+ getAccount(connection, poolState.quoteVault, "confirmed", poolState.quoteTokenProgram),
430
+ ]);
431
+ baseVaultBalance = new BN(baseVaultAccount.amount.toString());
432
+ quoteVaultBalance = new BN(quoteVaultAccount.amount.toString());
433
+ }
434
+ // Get fee rates
435
+ let feeRates;
436
+ if (pre?.feeRates) {
437
+ // Use pre-computed fee rates
438
+ feeRates = pre.feeRates;
439
+ }
440
+ else if (options?.solPriceUsd) {
441
+ // Calculate fee rates from tiered config
442
+ const ammConfig = await fetchAmmConfig(connection, config);
443
+ const baseMintAccount = await getMint(connection, poolState.baseMint, "confirmed", poolState.baseTokenProgram);
444
+ const baseTotalSupply = new BN(baseMintAccount.supply.toString());
445
+ const tiers = ammConfig.feeTiers;
446
+ const [lpFeeRate, protocolFeeRate, creatorFeeRate] = calculateFeesForPool(quoteVaultBalance, baseVaultBalance, baseTotalSupply, options.solPriceUsd, poolState.quoteMint, tiers);
447
+ feeRates = { lpFeeRate, protocolFeeRate, creatorFeeRate };
448
+ }
449
+ else {
450
+ throw new Error("Either prefetched.feeRates or solPriceUsd must be provided for tiered fee calculations");
451
+ }
452
+ return calculateSwapBuyPreview(amountOut, {
453
+ ammConfig: feeRates,
454
+ baseVaultBalance,
455
+ quoteVaultBalance,
456
+ });
457
+ }
458
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/helpers/preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Connection, PublicKey } from "@solana/web3.js";
2
+ /**
3
+ * Resolves the token program for a given mint by inspecting the account owner.
4
+ * Bonding curve tokens use Token-2022, WSOL and quote mints use standard SPL Token.
5
+ *
6
+ * @param connection - Solana connection
7
+ * @param mint - Mint address to check
8
+ * @returns The token program ID (TOKEN_PROGRAM_ID or TOKEN_2022_PROGRAM_ID)
9
+ */
10
+ export declare const resolveTokenProgram: (connection: Connection, mint: PublicKey) => Promise<PublicKey>;
11
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/helpers/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG7D;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAC/B,YAAY,UAAU,EACtB,MAAM,SAAS,KACb,OAAO,CAAC,SAAS,CASnB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID } from "@solana/spl-token";
2
+ /**
3
+ * Resolves the token program for a given mint by inspecting the account owner.
4
+ * Bonding curve tokens use Token-2022, WSOL and quote mints use standard SPL Token.
5
+ *
6
+ * @param connection - Solana connection
7
+ * @param mint - Mint address to check
8
+ * @returns The token program ID (TOKEN_PROGRAM_ID or TOKEN_2022_PROGRAM_ID)
9
+ */
10
+ export const resolveTokenProgram = async (connection, mint) => {
11
+ const account = await connection.getAccountInfo(mint);
12
+ if (!account) {
13
+ throw new Error(`Mint account ${mint.toBase58()} not found`);
14
+ }
15
+ if (account.owner.equals(TOKEN_2022_PROGRAM_ID)) {
16
+ return TOKEN_2022_PROGRAM_ID;
17
+ }
18
+ return TOKEN_PROGRAM_ID;
19
+ };
20
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/helpers/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE5E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACvC,UAAsB,EACtB,IAAe,EACM,EAAE;IACvB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjD,OAAO,qBAAqB,CAAC;IAC9B,CAAC;IACD,OAAO,gBAAgB,CAAC;AACzB,CAAC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { Program } from "@coral-xyz/anchor";
2
+ import { Connection } from "@solana/web3.js";
3
+ import type { LiquidConfig } from "../config.js";
4
+ import liquidIdl from "./liquid.json";
5
+ import liquidSwapIdl from "./liquid_swap.json";
6
+ import liquidFeesIdl from "./liquid_fees.json";
7
+ import liquidStateIdl from "./liquid_state.json";
8
+ export { liquidIdl, liquidSwapIdl, liquidFeesIdl, liquidStateIdl };
9
+ export type { Liquid } from "./liquid.js";
10
+ export type { LiquidSwap } from "./liquid_swap.js";
11
+ export type { LiquidFees } from "./liquid_fees.js";
12
+ export type { LiquidState } from "./liquid_state.js";
13
+ import type { Liquid } from "./liquid.js";
14
+ import type { LiquidSwap } from "./liquid_swap.js";
15
+ import type { LiquidFees } from "./liquid_fees.js";
16
+ import type { LiquidState } from "./liquid_state.js";
17
+ /**
18
+ * Creates a typed Program instance for the Liquid bonding curve program.
19
+ * Uses a readonly provider — no signing capability.
20
+ *
21
+ * @param connection - Solana RPC connection
22
+ * @param config - Optional protocol configuration (overrides IDL address)
23
+ * @returns Read-only Program instance typed as Liquid
24
+ */
25
+ export declare function getLiquidProgram(connection: Connection, config?: LiquidConfig): Program<Liquid>;
26
+ /**
27
+ * Creates a typed Program instance for the Liquid Swap AMM program.
28
+ * Uses a readonly provider — no signing capability.
29
+ *
30
+ * @param connection - Solana RPC connection
31
+ * @param config - Optional protocol configuration (overrides IDL address)
32
+ * @returns Read-only Program instance typed as LiquidSwap
33
+ */
34
+ export declare function getLiquidSwapProgram(connection: Connection, config?: LiquidConfig): Program<LiquidSwap>;
35
+ /**
36
+ * Creates a typed Program instance for the Liquid Fees program.
37
+ * Uses a readonly provider — no signing capability.
38
+ *
39
+ * @param connection - Solana RPC connection
40
+ * @param config - Optional protocol configuration (overrides IDL address)
41
+ * @returns Read-only Program instance typed as LiquidFees
42
+ */
43
+ export declare function getLiquidFeesProgram(connection: Connection, config?: LiquidConfig): Program<LiquidFees>;
44
+ /**
45
+ * Creates a typed Program instance for the Liquid State program.
46
+ * Uses a readonly provider — no signing capability.
47
+ *
48
+ * @param connection - Solana RPC connection
49
+ * @param config - Optional protocol configuration (overrides IDL address)
50
+ * @returns Read-only Program instance typed as LiquidState
51
+ */
52
+ export declare function getLiquidStateProgram(connection: Connection, config?: LiquidConfig): Program<LiquidState>;
53
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/idl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,SAAS,MAAM,eAAe,CAAuB;AAC5D,OAAO,aAAa,MAAM,oBAAoB,CAAuB;AACrE,OAAO,aAAa,MAAM,oBAAoB,CAAuB;AACrE,OAAO,cAAc,MAAM,qBAAqB,CAAuB;AAEvE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAGnE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC/B,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,WAAW,CAAC,CAKtB"}
@@ -0,0 +1,64 @@
1
+ import { Program } from "@coral-xyz/anchor";
2
+ import { createReadonlyProvider } from "../provider.js";
3
+ import liquidIdl from "./liquid.json" with { type: "json" };
4
+ import liquidSwapIdl from "./liquid_swap.json" with { type: "json" };
5
+ import liquidFeesIdl from "./liquid_fees.json" with { type: "json" };
6
+ import liquidStateIdl from "./liquid_state.json" with { type: "json" };
7
+ export { liquidIdl, liquidSwapIdl, liquidFeesIdl, liquidStateIdl };
8
+ /**
9
+ * Creates a typed Program instance for the Liquid bonding curve program.
10
+ * Uses a readonly provider — no signing capability.
11
+ *
12
+ * @param connection - Solana RPC connection
13
+ * @param config - Optional protocol configuration (overrides IDL address)
14
+ * @returns Read-only Program instance typed as Liquid
15
+ */
16
+ export function getLiquidProgram(connection, config) {
17
+ const idl = config
18
+ ? { ...liquidIdl, address: config.liquidProgramId.toBase58() }
19
+ : liquidIdl;
20
+ return new Program(idl, createReadonlyProvider(connection));
21
+ }
22
+ /**
23
+ * Creates a typed Program instance for the Liquid Swap AMM program.
24
+ * Uses a readonly provider — no signing capability.
25
+ *
26
+ * @param connection - Solana RPC connection
27
+ * @param config - Optional protocol configuration (overrides IDL address)
28
+ * @returns Read-only Program instance typed as LiquidSwap
29
+ */
30
+ export function getLiquidSwapProgram(connection, config) {
31
+ const idl = config
32
+ ? { ...liquidSwapIdl, address: config.liquidSwapProgramId.toBase58() }
33
+ : liquidSwapIdl;
34
+ return new Program(idl, createReadonlyProvider(connection));
35
+ }
36
+ /**
37
+ * Creates a typed Program instance for the Liquid Fees program.
38
+ * Uses a readonly provider — no signing capability.
39
+ *
40
+ * @param connection - Solana RPC connection
41
+ * @param config - Optional protocol configuration (overrides IDL address)
42
+ * @returns Read-only Program instance typed as LiquidFees
43
+ */
44
+ export function getLiquidFeesProgram(connection, config) {
45
+ const idl = config
46
+ ? { ...liquidFeesIdl, address: config.liquidFeesProgramId.toBase58() }
47
+ : liquidFeesIdl;
48
+ return new Program(idl, createReadonlyProvider(connection));
49
+ }
50
+ /**
51
+ * Creates a typed Program instance for the Liquid State program.
52
+ * Uses a readonly provider — no signing capability.
53
+ *
54
+ * @param connection - Solana RPC connection
55
+ * @param config - Optional protocol configuration (overrides IDL address)
56
+ * @returns Read-only Program instance typed as LiquidState
57
+ */
58
+ export function getLiquidStateProgram(connection, config) {
59
+ const idl = config
60
+ ? { ...liquidStateIdl, address: config.liquidStateProgramId.toBase58() }
61
+ : liquidStateIdl;
62
+ return new Program(idl, createReadonlyProvider(connection));
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/idl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,SAAS,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5D,OAAO,aAAa,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,aAAa,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,cAAc,MAAM,qBAAqB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAanE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC/B,UAAsB,EACtB,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM;QACjB,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE;QAC9D,CAAC,CAAC,SAAS,CAAC;IACb,OAAO,IAAI,OAAO,CAAC,GAAa,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CACnC,UAAsB,EACtB,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM;QACjB,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE;QACtE,CAAC,CAAC,aAAa,CAAC;IACjB,OAAO,IAAI,OAAO,CAAC,GAAiB,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CACnC,UAAsB,EACtB,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM;QACjB,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE;QACtE,CAAC,CAAC,aAAa,CAAC;IACjB,OAAO,IAAI,OAAO,CAAC,GAAiB,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACpC,UAAsB,EACtB,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM;QACjB,CAAC,CAAC,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE;QACxE,CAAC,CAAC,cAAc,CAAC;IAClB,OAAO,IAAI,OAAO,CAAC,GAAkB,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC5E,CAAC"}