sally-defi-ts-sdk 0.3.2

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 (125) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +263 -0
  3. package/dist/aio/client.d.ts +93 -0
  4. package/dist/aio/client.d.ts.map +1 -0
  5. package/dist/aio/client.js +283 -0
  6. package/dist/aio/client.js.map +1 -0
  7. package/dist/aio/index.d.ts +20 -0
  8. package/dist/aio/index.d.ts.map +1 -0
  9. package/dist/aio/index.js +19 -0
  10. package/dist/aio/index.js.map +1 -0
  11. package/dist/aio/modules/fees.d.ts +19 -0
  12. package/dist/aio/modules/fees.d.ts.map +1 -0
  13. package/dist/aio/modules/fees.js +47 -0
  14. package/dist/aio/modules/fees.js.map +1 -0
  15. package/dist/aio/modules/liquidity.d.ts +47 -0
  16. package/dist/aio/modules/liquidity.d.ts.map +1 -0
  17. package/dist/aio/modules/liquidity.js +115 -0
  18. package/dist/aio/modules/liquidity.js.map +1 -0
  19. package/dist/aio/modules/prices.d.ts +18 -0
  20. package/dist/aio/modules/prices.d.ts.map +1 -0
  21. package/dist/aio/modules/prices.js +48 -0
  22. package/dist/aio/modules/prices.js.map +1 -0
  23. package/dist/aio/modules/swap.d.ts +50 -0
  24. package/dist/aio/modules/swap.d.ts.map +1 -0
  25. package/dist/aio/modules/swap.js +267 -0
  26. package/dist/aio/modules/swap.js.map +1 -0
  27. package/dist/aio/modules/wallet.d.ts +13 -0
  28. package/dist/aio/modules/wallet.d.ts.map +1 -0
  29. package/dist/aio/modules/wallet.js +27 -0
  30. package/dist/aio/modules/wallet.js.map +1 -0
  31. package/dist/aio/token.d.ts +19 -0
  32. package/dist/aio/token.d.ts.map +1 -0
  33. package/dist/aio/token.js +50 -0
  34. package/dist/aio/token.js.map +1 -0
  35. package/dist/client.d.ts +142 -0
  36. package/dist/client.d.ts.map +1 -0
  37. package/dist/client.js +452 -0
  38. package/dist/client.js.map +1 -0
  39. package/dist/constants.d.ts +36 -0
  40. package/dist/constants.d.ts.map +1 -0
  41. package/dist/constants.js +39 -0
  42. package/dist/constants.js.map +1 -0
  43. package/dist/data/deployment.json +1 -0
  44. package/dist/deployment.d.ts +44 -0
  45. package/dist/deployment.d.ts.map +1 -0
  46. package/dist/deployment.js +118 -0
  47. package/dist/deployment.js.map +1 -0
  48. package/dist/errors.d.ts +57 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +197 -0
  51. package/dist/errors.js.map +1 -0
  52. package/dist/index.d.ts +48 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +47 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/modules/fees.d.ts +32 -0
  57. package/dist/modules/fees.d.ts.map +1 -0
  58. package/dist/modules/fees.js +64 -0
  59. package/dist/modules/fees.js.map +1 -0
  60. package/dist/modules/liquidity.d.ts +134 -0
  61. package/dist/modules/liquidity.d.ts.map +1 -0
  62. package/dist/modules/liquidity.js +277 -0
  63. package/dist/modules/liquidity.js.map +1 -0
  64. package/dist/modules/prices.d.ts +47 -0
  65. package/dist/modules/prices.d.ts.map +1 -0
  66. package/dist/modules/prices.js +85 -0
  67. package/dist/modules/prices.js.map +1 -0
  68. package/dist/modules/swap.d.ts +102 -0
  69. package/dist/modules/swap.d.ts.map +1 -0
  70. package/dist/modules/swap.js +400 -0
  71. package/dist/modules/swap.js.map +1 -0
  72. package/dist/modules/wallet.d.ts +16 -0
  73. package/dist/modules/wallet.d.ts.map +1 -0
  74. package/dist/modules/wallet.js +30 -0
  75. package/dist/modules/wallet.js.map +1 -0
  76. package/dist/permit2.d.ts +97 -0
  77. package/dist/permit2.d.ts.map +1 -0
  78. package/dist/permit2.js +130 -0
  79. package/dist/permit2.js.map +1 -0
  80. package/dist/previews.d.ts +57 -0
  81. package/dist/previews.d.ts.map +1 -0
  82. package/dist/previews.js +69 -0
  83. package/dist/previews.js.map +1 -0
  84. package/dist/safety.d.ts +80 -0
  85. package/dist/safety.d.ts.map +1 -0
  86. package/dist/safety.js +133 -0
  87. package/dist/safety.js.map +1 -0
  88. package/dist/token.d.ts +215 -0
  89. package/dist/token.d.ts.map +1 -0
  90. package/dist/token.js +239 -0
  91. package/dist/token.js.map +1 -0
  92. package/dist/types.d.ts +229 -0
  93. package/dist/types.d.ts.map +1 -0
  94. package/dist/types.js +462 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/util.d.ts +13 -0
  97. package/dist/util.d.ts.map +1 -0
  98. package/dist/util.js +22 -0
  99. package/dist/util.js.map +1 -0
  100. package/package.json +48 -0
  101. package/src/aio/client.ts +329 -0
  102. package/src/aio/index.ts +20 -0
  103. package/src/aio/modules/fees.ts +60 -0
  104. package/src/aio/modules/liquidity.ts +181 -0
  105. package/src/aio/modules/prices.ts +57 -0
  106. package/src/aio/modules/swap.ts +347 -0
  107. package/src/aio/modules/wallet.ts +34 -0
  108. package/src/aio/token.ts +59 -0
  109. package/src/client.ts +526 -0
  110. package/src/constants.ts +43 -0
  111. package/src/data/deployment.json +1 -0
  112. package/src/deployment.ts +132 -0
  113. package/src/errors.ts +215 -0
  114. package/src/index.ts +90 -0
  115. package/src/modules/fees.ts +78 -0
  116. package/src/modules/liquidity.ts +446 -0
  117. package/src/modules/prices.ts +97 -0
  118. package/src/modules/swap.ts +502 -0
  119. package/src/modules/wallet.ts +37 -0
  120. package/src/permit2.ts +169 -0
  121. package/src/previews.ts +95 -0
  122. package/src/safety.ts +152 -0
  123. package/src/token.ts +254 -0
  124. package/src/types.ts +438 -0
  125. package/src/util.ts +20 -0
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Async hybrid swaps — quote, compare, simulate, guard, execute.
3
+ *
4
+ * Mirrors the sync {@link Swap}, but quoting and simulation of the candidate
5
+ * routes run concurrently via `Promise.all` (the async client's main payoff,
6
+ * matching the Python `asyncio.gather`).
7
+ */
8
+ import { getAddress } from "ethers";
9
+ import { SallyError, SallyRouteError, SallySafetyError } from "../../errors.js";
10
+ import { RouteCandidate, SafetyConfig, SwapPlan } from "../../safety.js";
11
+ import { MAX_UINT256, ZERO, isNative } from "../../token.js";
12
+ import { SwapPath, TokenInfo } from "../../types.js";
13
+ import { pyRound } from "../../util.js";
14
+ const MAX_DEADLINE = 2n ** 256n - 1n;
15
+ export class AsyncSwap {
16
+ _c;
17
+ _swap;
18
+ _wnative = null;
19
+ constructor(client) {
20
+ this._c = client;
21
+ this._swap = client.swapContract;
22
+ }
23
+ _a(x) {
24
+ return getAddress(x);
25
+ }
26
+ async wnative() {
27
+ if (this._wnative === null) {
28
+ this._wnative = String(await this._c.call(this._swap.getFunction("wnative"), []));
29
+ }
30
+ return this._wnative;
31
+ }
32
+ // -- quoting ----------------------------------------------------------- //
33
+ async quote(tokenIn, tokenOut, amountIn) {
34
+ return SwapPath.fromRaw(await this._c.call(this._swap.getFunction("getBestSwapPath"), [this._a(tokenIn), this._a(tokenOut), amountIn]));
35
+ }
36
+ async quoteDeep(tokenIn, tokenOut, amountIn) {
37
+ return SwapPath.fromRaw(await this._c.call(this._c.lensContract.getFunction("getBestSwapPathDeep"), [
38
+ this._a(tokenIn),
39
+ this._a(tokenOut),
40
+ amountIn,
41
+ ]));
42
+ }
43
+ async _quoteNamed(label, tokenIn, tokenOut, amountIn) {
44
+ const fns = {
45
+ best: () => this._c.call(this._swap.getFunction("getBestSwapPath"), [this._a(tokenIn), this._a(tokenOut), amountIn]),
46
+ deep: () => this._c.call(this._c.lensContract.getFunction("getBestSwapPathDeep"), [
47
+ this._a(tokenIn),
48
+ this._a(tokenOut),
49
+ amountIn,
50
+ ]),
51
+ v2: () => this._c.call(this._swap.getFunction("getSwapPathV2"), [this._a(tokenIn), this._a(tokenOut), amountIn]),
52
+ v3: () => this._c.call(this._swap.getFunction("getSwapPathV3"), [this._a(tokenIn), this._a(tokenOut), amountIn]),
53
+ v4: () => this._c.call(this._swap.getFunction("getSwapPathV4"), [this._a(tokenIn), this._a(tokenOut), amountIn]),
54
+ };
55
+ let r;
56
+ try {
57
+ r = await fns[label]();
58
+ }
59
+ catch (exc) {
60
+ if (exc instanceof SallyError)
61
+ return null;
62
+ throw exc;
63
+ }
64
+ const route = SwapPath.fromRaw(r);
65
+ return route.stepCount ? route : null;
66
+ }
67
+ async tokenInfo(token, opts = {}) {
68
+ let probeValue = opts.probeValue ?? null;
69
+ if (probeValue === null)
70
+ probeValue = new SafetyConfig().probeValue;
71
+ const raw = await this._swap.getFunction("getTokenInfos").staticCall(this._a(token), { from: ZERO, value: probeValue });
72
+ return TokenInfo.fromRaw(raw);
73
+ }
74
+ minOut(amountOut, slippageBps) {
75
+ const out = amountOut instanceof SwapPath ? amountOut.estimatedAmountOut : (amountOut ?? 0n);
76
+ const floor = (out * BigInt(10_000 - slippageBps)) / 10000n;
77
+ return out > 0n ? (floor > 1n ? floor : 1n) : 0n;
78
+ }
79
+ async deadline(secs = null) {
80
+ const s = secs !== null ? secs : new SafetyConfig().deadlineSecs;
81
+ return Math.floor(Date.now() / 1000) + s;
82
+ }
83
+ async candidates(tokenIn, tokenOut, amountIn) {
84
+ tokenIn = this._a(tokenIn);
85
+ tokenOut = this._a(tokenOut);
86
+ const labels = ["best", "deep", "v2", "v3", "v4"];
87
+ const routes = await Promise.all(labels.map((x) => this._quoteNamed(x, tokenIn, tokenOut, amountIn)));
88
+ const out = [];
89
+ const seen = new Set();
90
+ for (let i = 0; i < labels.length; i++) {
91
+ const route = routes[i];
92
+ if (route === null)
93
+ continue;
94
+ const key = JSON.stringify([
95
+ route.poolAddresses.map((p) => p.toLowerCase()),
96
+ route.stepCount,
97
+ route.estimatedAmountOut.toString(),
98
+ ]);
99
+ if (seen.has(key))
100
+ continue;
101
+ seen.add(key);
102
+ out.push(new RouteCandidate(labels[i], route, route.estimatedAmountOut));
103
+ }
104
+ return out;
105
+ }
106
+ async simulateRoute(route, amountIn, opts = {}) {
107
+ const value = opts.value ?? 0n;
108
+ const sender = opts.sender ?? this._c.address;
109
+ if (sender == null)
110
+ return null;
111
+ try {
112
+ const r = await this._swap
113
+ .getFunction("executeHybridSwap")
114
+ .staticCall(route.toTuple(), amountIn, 0, MAX_DEADLINE, ZERO, { from: sender, value });
115
+ return BigInt(r);
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ }
121
+ async _priceImpactBps(tokenIn, tokenOut, amountIn, realized) {
122
+ const probe = amountIn / 1000n > 1n ? amountIn / 1000n : 1n;
123
+ let probeOut;
124
+ try {
125
+ probeOut = (await this.quote(tokenIn, tokenOut, probe)).estimatedAmountOut;
126
+ }
127
+ catch (exc) {
128
+ if (exc instanceof SallyError)
129
+ return null;
130
+ throw exc;
131
+ }
132
+ if (probeOut <= 0n || realized <= 0n)
133
+ return null;
134
+ const expected = (probeOut * amountIn) / probe;
135
+ return expected > 0n ? Math.max(0, pyRound((Number(expected - realized) / Number(expected)) * 10_000)) : null;
136
+ }
137
+ async plan(tokenIn, tokenOut, amountIn, opts = {}) {
138
+ const cfg = opts.config ?? this._c.safety;
139
+ const slippageBps = opts.slippageBps == null ? cfg.slippageBps : opts.slippageBps;
140
+ tokenIn = this._a(tokenIn);
141
+ tokenOut = this._a(tokenOut);
142
+ const nativeIn = isNative(tokenIn);
143
+ const value = nativeIn ? amountIn : 0n;
144
+ const sender = opts.sender ?? this._c.address;
145
+ const wnative = await this.wnative();
146
+ const quoteIn = nativeIn ? this._a(wnative) : tokenIn;
147
+ const cands = await this.candidates(quoteIn, tokenOut, amountIn);
148
+ if (cands.length === 0) {
149
+ throw new SallyError(`No route found ${tokenIn} -> ${tokenOut} for ${amountIn}`);
150
+ }
151
+ if (cfg.checkIntegrity) {
152
+ for (const c of cands) {
153
+ c.integrityProblems = c.route.checkIntegrity(tokenIn, tokenOut, wnative);
154
+ }
155
+ }
156
+ if (cfg.simulate && sender != null) {
157
+ const sims = await Promise.all(cands.map((c) => (c.usable ? this.simulateRoute(c.route, amountIn, { value, sender }) : Promise.resolve(null))));
158
+ cands.forEach((c, i) => {
159
+ if (c.usable)
160
+ c.simulatedOut = sims[i];
161
+ });
162
+ }
163
+ const usable = cands.filter((c) => c.usable);
164
+ const best = (usable.length ? usable : cands).reduce((a, b) => (b.score > a.score ? b : a));
165
+ const blockReasons = [];
166
+ const warnings = [];
167
+ if (usable.length === 0)
168
+ blockReasons.push("no_valid_route");
169
+ if (best.integrityProblems.length) {
170
+ blockReasons.push("integrity");
171
+ warnings.push(...best.integrityProblems);
172
+ }
173
+ let safety = null;
174
+ if (cfg.checkHoneypot && !isNative(tokenOut)) {
175
+ try {
176
+ safety = await this.tokenInfo(tokenOut, { probeValue: cfg.probeValue });
177
+ }
178
+ catch {
179
+ safety = null;
180
+ }
181
+ if (safety !== null && safety.buySuccess) {
182
+ if (safety.isHoneypot)
183
+ blockReasons.push("honeypot");
184
+ const tax = Math.max(safety.buyTaxBps, safety.sellTaxBps);
185
+ if (tax >= cfg.taxBlockBps)
186
+ blockReasons.push(`tax_${tax}bps`);
187
+ else if (tax >= cfg.taxWarnBps)
188
+ warnings.push(`high_tax_${tax}bps`);
189
+ }
190
+ else {
191
+ warnings.push("safety_probe_unavailable");
192
+ }
193
+ }
194
+ const realized = best.score;
195
+ const impact = await this._priceImpactBps(quoteIn, tokenOut, amountIn, realized);
196
+ if (impact !== null) {
197
+ if (impact >= cfg.priceImpactBlockBps)
198
+ blockReasons.push(`price_impact_${impact}bps`);
199
+ else if (impact >= cfg.priceImpactWarnBps)
200
+ warnings.push(`price_impact_${impact}bps`);
201
+ }
202
+ return new SwapPlan(tokenIn, tokenOut, amountIn, best.route, best.quotedOut, best.simulatedOut, this.minOut(realized, slippageBps), impact, safety, cands, warnings, blockReasons);
203
+ }
204
+ async execute(tokenIn, tokenOut, amountIn, opts = {}) {
205
+ const cfg = opts.config ?? this._c.safety;
206
+ const referral = opts.referral ?? ZERO;
207
+ const approval = opts.approval ?? "approve";
208
+ const force = opts.force ?? false;
209
+ const txOpts = opts.tx ?? {};
210
+ this._c.requireAddress();
211
+ tokenIn = this._a(tokenIn);
212
+ tokenOut = this._a(tokenOut);
213
+ const nativeIn = isNative(tokenIn);
214
+ const value = nativeIn ? amountIn : 0n;
215
+ const wnative = await this.wnative();
216
+ // Async approval supports "approve" (exact) and "none"; EIP-2612 permit is
217
+ // sync-only, so "permit" degrades to a plain approve here (made observable).
218
+ if (approval === "permit") {
219
+ console.warn("approval='permit' is not implemented on the async client; " +
220
+ "falling back to a plain approve. Use the sync client for EIP-2612 permit.");
221
+ }
222
+ if (!nativeIn && approval !== "none") {
223
+ const spender = this._c.addresses["swap"];
224
+ const amount = cfg.unlimitedApproval ? MAX_UINT256 : amountIn;
225
+ await this._c.token(tokenIn).ensureAllowance(spender, amount);
226
+ }
227
+ let plan;
228
+ if (opts.path == null) {
229
+ plan = await this.plan(tokenIn, tokenOut, amountIn, { slippageBps: opts.slippageBps ?? null, config: cfg });
230
+ }
231
+ else {
232
+ const path = opts.path;
233
+ const problems = cfg.checkIntegrity ? path.checkIntegrity(tokenIn, tokenOut, wnative) : [];
234
+ if (problems.length && !force) {
235
+ throw new SallyRouteError(`supplied path failed integrity: ${problems}`);
236
+ }
237
+ const sim = cfg.simulate ? await this.simulateRoute(path, amountIn, { value }) : null;
238
+ const sb = opts.slippageBps != null ? opts.slippageBps : cfg.slippageBps;
239
+ const reasons = problems.length ? ["integrity"] : [];
240
+ if (cfg.simulate && sim === null)
241
+ reasons.push("no_valid_route");
242
+ const floor = sim !== null ? this.minOut(sim, sb) : this.minOut(path, sb);
243
+ plan = new SwapPlan(tokenIn, tokenOut, amountIn, path, path.estimatedAmountOut, sim, floor, null, null, [], [], reasons);
244
+ }
245
+ if (!plan.isSafe && !force) {
246
+ if (plan.blockReasons.includes("integrity") || plan.blockReasons.includes("no_valid_route")) {
247
+ throw new SallyRouteError(`route rejected: ${plan.blockReasons} ${plan.warnings}`);
248
+ }
249
+ throw new SallySafetyError(`swap blocked: ${plan.blockReasons}`, plan.blockReasons);
250
+ }
251
+ const minOut = opts.minOutput != null ? opts.minOutput : plan.minOut;
252
+ const deadline = opts.deadline != null ? opts.deadline : await this.deadline(cfg.deadlineSecs);
253
+ const track = !isNative(tokenOut) && tokenOut.toLowerCase() !== wnative.toLowerCase();
254
+ const before = track ? await this._c.token(tokenOut).balanceOf(this._c.address) : 0n;
255
+ const fn = this._swap.getFunction("executeHybridSwap");
256
+ const args = [plan.route.toTuple(), amountIn, minOut, deadline, this._a(referral)];
257
+ const receipt = await this._c.send(fn, args, { value, ...txOpts });
258
+ if (track && cfg.balanceDeltaAssert) {
259
+ const gained = (await this._c.token(tokenOut).balanceOf(this._c.address)) - before;
260
+ if (gained < minOut) {
261
+ throw new SallySafetyError(`received ${gained} < min_out ${minOut} (balance-delta check failed)`, ["balance_delta"]);
262
+ }
263
+ }
264
+ return receipt;
265
+ }
266
+ }
267
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/aio/modules/swap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Async wallet balances. */
2
+ import type { AsyncSallyClient } from "../client.js";
3
+ import { WalletBalance } from "../../types.js";
4
+ export declare class AsyncWallet {
5
+ private _c;
6
+ private _lens;
7
+ constructor(client: AsyncSallyClient);
8
+ private _addrs;
9
+ balances(wallet: string, tokens: string[]): Promise<WalletBalance[]>;
10
+ balancesRaw(wallet: string, tokens: string[]): Promise<WalletBalance[]>;
11
+ totalUsd(wallet: string, tokens: string[]): Promise<number>;
12
+ }
13
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/aio/modules/wallet.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAG7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,KAAK,CAAW;gBAEZ,MAAM,EAAE,gBAAgB;IAKpC,OAAO,CAAC,MAAM;IAIR,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAKpE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAKvE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAIlE"}
@@ -0,0 +1,27 @@
1
+ /** Async wallet balances. */
2
+ import { getAddress } from "ethers";
3
+ import { WalletBalance } from "../../types.js";
4
+ export class AsyncWallet {
5
+ _c;
6
+ _lens;
7
+ constructor(client) {
8
+ this._c = client;
9
+ this._lens = client.lensContract;
10
+ }
11
+ _addrs(tokens) {
12
+ return tokens.map((t) => getAddress(t));
13
+ }
14
+ async balances(wallet, tokens) {
15
+ const r = await this._c.call(this._lens.getFunction("getWalletBalance"), [getAddress(wallet), this._addrs(tokens)]);
16
+ return [...r].map((x) => WalletBalance.fromRaw(x));
17
+ }
18
+ async balancesRaw(wallet, tokens) {
19
+ const r = await this._c.call(this._lens.getFunction("getWalletBalanceRaw"), [getAddress(wallet), this._addrs(tokens)]);
20
+ return [...r].map((x) => WalletBalance.fromRaw(x));
21
+ }
22
+ async totalUsd(wallet, tokens) {
23
+ const bals = await this.balances(wallet, tokens);
24
+ return bals.reduce((acc, b) => acc + b.usdValueFloat, 0);
25
+ }
26
+ }
27
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/aio/modules/wallet.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAY,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,OAAO,WAAW;IACd,EAAE,CAAmB;IACrB,KAAK,CAAW;IAExB,YAAY,MAAwB;QAClC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;IACnC,CAAC;IAEO,MAAM,CAAC,MAAgB;QAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,MAAgB;QAC7C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACpH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,MAAgB;QAChD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,MAAgB;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /** Async ERC-20 helper (mirror of {@link Token}). */
2
+ import { Contract } from "ethers";
3
+ import type { AsyncSallyClient } from "./client.js";
4
+ export declare class AsyncToken {
5
+ readonly client: AsyncSallyClient;
6
+ readonly address: string;
7
+ readonly contract: Contract;
8
+ private _decimals;
9
+ constructor(client: AsyncSallyClient, address: string);
10
+ decimals(): Promise<number>;
11
+ symbol(): Promise<string>;
12
+ balanceOf(owner: string): Promise<bigint>;
13
+ allowance(owner: string, spender: string): Promise<bigint>;
14
+ toRaw(human: string | number | bigint): Promise<bigint>;
15
+ approve(spender: string, amount?: bigint, tx?: Record<string, any>): Promise<any>;
16
+ /** Approve exactly `amount` if the current allowance is insufficient. */
17
+ ensureAllowance(spender: string, amount: bigint, tx?: Record<string, any>): Promise<any>;
18
+ }
19
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/aio/token.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,QAAQ,EAAc,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;IAM/C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAO3B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAQzB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAoB,EAAE,EAAE,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxG,yEAAyE;IACnE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAOnG"}
@@ -0,0 +1,50 @@
1
+ /** Async ERC-20 helper (mirror of {@link Token}). */
2
+ import { Contract, getAddress } from "ethers";
3
+ import { ERC20_ABI, MAX_UINT256, TokenAmount } from "../token.js";
4
+ export class AsyncToken {
5
+ client;
6
+ address;
7
+ contract;
8
+ _decimals = null;
9
+ constructor(client, address) {
10
+ this.client = client;
11
+ this.address = getAddress(address);
12
+ this.contract = new Contract(this.address, ERC20_ABI, client.w3);
13
+ }
14
+ async decimals() {
15
+ if (this._decimals === null) {
16
+ this._decimals = Number(await this.contract.decimals());
17
+ }
18
+ return this._decimals;
19
+ }
20
+ async symbol() {
21
+ try {
22
+ return await this.contract.symbol();
23
+ }
24
+ catch {
25
+ return "?";
26
+ }
27
+ }
28
+ async balanceOf(owner) {
29
+ return BigInt(await this.contract.balanceOf(getAddress(owner)));
30
+ }
31
+ async allowance(owner, spender) {
32
+ return BigInt(await this.contract.allowance(getAddress(owner), getAddress(spender)));
33
+ }
34
+ async toRaw(human) {
35
+ return TokenAmount.fromHuman(human, await this.decimals()).raw;
36
+ }
37
+ async approve(spender, amount = MAX_UINT256, tx = {}) {
38
+ const fn = this.contract.getFunction("approve");
39
+ return this.client.send(fn, [getAddress(spender), amount], tx);
40
+ }
41
+ /** Approve exactly `amount` if the current allowance is insufficient. */
42
+ async ensureAllowance(spender, amount, tx = {}) {
43
+ const owner = this.client.requireAddress();
44
+ if ((await this.allowance(owner, spender)) >= amount) {
45
+ return null;
46
+ }
47
+ return this.approve(spender, amount, tx);
48
+ }
49
+ }
50
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/aio/token.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,OAAO,UAAU;IACZ,MAAM,CAAmB;IACzB,OAAO,CAAS;IAChB,QAAQ,CAAW;IACpB,SAAS,GAAkB,IAAI,CAAC;IAExC,YAAY,MAAwB,EAAE,OAAe;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa;QAC3B,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,OAAe;QAC5C,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAA+B;QACzC,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,SAAiB,WAAW,EAAE,KAA0B,EAAE;QACvF,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,MAAc,EAAE,KAA0B,EAAE;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * The one object users hold: {@link SallyClient}.
3
+ *
4
+ * Every read is a direct `eth_call` to the on-chain contracts through your RPC —
5
+ * no API, no subgraph / Graph Node, no backend in the data path.
6
+ *
7
+ * Reads work with just an RPC URL. Writes need a signer — pass a `privateKey`, a
8
+ * 12/24-word `mnemonic`, or an ethers `Wallet`/`HDNodeWallet`. To sign with your
9
+ * **own** wallet instead, pass only `address` (no key) and use the build/preview
10
+ * API: every action can return a fully-populated, ABI-decoded, simulated
11
+ * *unsigned* transaction you sign and broadcast yourself.
12
+ *
13
+ * Feature namespaces:
14
+ *
15
+ * client.prices USD / spot pricing + token safety
16
+ * client.swap quote + execute hybrid swaps (+ build/preview)
17
+ * client.wallet balances with live USD valuation
18
+ * client.liquidity add / remove / lock / harvest / positions
19
+ * client.fees referral + batch fee accounting
20
+ */
21
+ import { Contract, JsonRpcProvider, type Signer } from "ethers";
22
+ import { SafetyConfig } from "./safety.js";
23
+ import { Token } from "./token.js";
24
+ import { TxPreview } from "./previews.js";
25
+ import { Permit2 } from "./permit2.js";
26
+ import { Prices } from "./modules/prices.js";
27
+ import { Swap } from "./modules/swap.js";
28
+ import { Wallet as WalletModule } from "./modules/wallet.js";
29
+ import { Liquidity } from "./modules/liquidity.js";
30
+ import { Fees } from "./modules/fees.js";
31
+ export interface SallyClientOptions {
32
+ privateKey?: string | null;
33
+ mnemonic?: string | null;
34
+ accountIndex?: number;
35
+ account?: Signer | null;
36
+ address?: string | null;
37
+ poa?: boolean | null;
38
+ safety?: SafetyConfig | null;
39
+ privateRpcUrl?: string | null;
40
+ gasMultiplier?: number;
41
+ }
42
+ /** A contract method handle (from `contract.getFunction(name)`). */
43
+ type Fn = any;
44
+ export declare class SallyClient {
45
+ readonly chainKey: string;
46
+ readonly chainId: number;
47
+ safety: SafetyConfig;
48
+ privateRpcUrl: string | null;
49
+ private _privateW3;
50
+ w3: JsonRpcProvider;
51
+ gasMultiplier: number;
52
+ account: Signer | null;
53
+ protected _sender: string | null;
54
+ private _sendLock;
55
+ addresses: Record<string, string>;
56
+ private _cache;
57
+ constructor(chain?: string | number, rpcUrl?: string | null, opts?: SallyClientOptions);
58
+ private _accountAddress;
59
+ isConnected(): Promise<boolean>;
60
+ /** Sender address — from the signer, or the keyless `address` mode. */
61
+ get address(): string | null;
62
+ get canSign(): boolean;
63
+ /** The sender address (needs a signer OR keyless `address`). */
64
+ requireAddress(): string;
65
+ /** The local signing account (needs a key/mnemonic, not just `address`). */
66
+ requireSigner(): Signer;
67
+ /** Return a new client on the same RPC/config but with a different signer. */
68
+ withAccount(privateKey: string): SallyClient;
69
+ private _contract;
70
+ private _cached;
71
+ get swapContract(): Contract;
72
+ get liquidityContract(): Contract;
73
+ /** Lens ABI bound to the **swap proxy** (v2.0.2 read-fallback). */
74
+ get lensContract(): Contract;
75
+ /** Sidecar ABI bound to the **liq proxy** (v2.0.2 read-fallback). */
76
+ get sidecarContract(): Contract;
77
+ token(address: string): Token;
78
+ /** Execute a read (`eth_call`). Decodes reverts into SallyRevert. */
79
+ call(fn: Fn, args?: any[], opts?: {
80
+ value?: bigint;
81
+ sender?: string | null;
82
+ }): Promise<any>;
83
+ /** Dry-run a state-changing call without sending (revert-safe preview). */
84
+ simulate(fn: Fn, args?: any[], opts?: {
85
+ value?: bigint;
86
+ }): Promise<any>;
87
+ estimateGas(fn: Fn, args?: any[], opts?: {
88
+ value?: bigint;
89
+ }): Promise<bigint>;
90
+ /** Build a fully-populated, signable EIP-1559 transaction. */
91
+ buildTx(fn: Fn, args?: any[], opts?: {
92
+ value?: bigint;
93
+ gas?: bigint | null;
94
+ }): Promise<Record<string, any>>;
95
+ /**
96
+ * Build -> sign -> send a transaction.
97
+ *
98
+ * With `buildOnly=true` returns the fully-populated **unsigned** tx (no key
99
+ * required — only a sender `address`); sign and broadcast it with your own
100
+ * wallet. Otherwise: with `wait=true` (default) returns the mined receipt and
101
+ * raises SallyRevert on a failed (status 0) tx; with `wait=false` returns the
102
+ * tx hash. `simulate=true` does a cheap `eth_call` first so reverts surface
103
+ * *before* you spend gas.
104
+ *
105
+ * `private` broadcasts through `privateRpcUrl` (a private mempool / MEV-relay).
106
+ * `timeout` (seconds) bounds the receipt wait.
107
+ */
108
+ send(fn: Fn, args?: any[], opts?: {
109
+ value?: bigint;
110
+ gas?: bigint | null;
111
+ wait?: boolean;
112
+ simulate?: boolean;
113
+ private?: boolean | null;
114
+ timeout?: number;
115
+ buildOnly?: boolean;
116
+ }): Promise<any>;
117
+ private _decodeFailedTx;
118
+ /** ABI-decode a contract call into `[functionName, { arg: value }]`. */
119
+ decodeCall(fn: Fn, args?: any[]): [string, Record<string, any>];
120
+ /**
121
+ * Build an unsigned tx + simulate + decode — see it before you broadcast.
122
+ *
123
+ * Returns a {@link TxPreview} with the unsigned transaction (sign it with your
124
+ * own wallet), the decoded function/args, the simulated `eth_call` result, the
125
+ * decoded revert reason if it would fail, and the gas estimate. Needs only a
126
+ * sender `address` — no key.
127
+ */
128
+ preview(fn: Fn, args?: any[], opts?: {
129
+ value?: bigint;
130
+ }): Promise<TxPreview>;
131
+ /** POST the raw tx to the private relay; return the tx hash. */
132
+ private _broadcastPrivate;
133
+ get prices(): Prices;
134
+ get swap(): Swap;
135
+ get wallet(): WalletModule;
136
+ get liquidity(): Liquidity;
137
+ get fees(): Fees;
138
+ get permit2(): Permit2;
139
+ toString(): string;
140
+ }
141
+ export {};
142
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,QAAQ,EAER,eAAe,EAIf,KAAK,MAAM,EACZ,MAAM,QAAQ,CAAC;AAIhB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAkCzC,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oEAAoE;AACpE,KAAK,EAAE,GAAG,GAAG,CAAC;AAEd,qBAAa,WAAW;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,UAAU,CAAgC;IAClD,EAAE,EAAE,eAAe,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IACxC,OAAO,CAAC,SAAS,CAAa;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGlC,OAAO,CAAC,MAAM,CAA2B;gBAE7B,KAAK,GAAE,MAAM,GAAG,MAAe,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,GAAE,kBAAuB;IAgDlG,OAAO,CAAC,eAAe;IAQjB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,uEAAuE;IACvE,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gEAAgE;IAChE,cAAc,IAAI,MAAM;IAUxB,4EAA4E;IAC5E,aAAa,IAAI,MAAM;IAUvB,8EAA8E;IAC9E,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAc5C,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,OAAO;IAKf,IAAI,YAAY,IAAI,QAAQ,CAE3B;IAED,IAAI,iBAAiB,IAAI,QAAQ,CAEhC;IAED,mEAAmE;IACnE,IAAI,YAAY,IAAI,QAAQ,CAE3B;IAED,qEAAqE;IACrE,IAAI,eAAe,IAAI,QAAQ,CAE9B;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK;IAO7B,qEAAqE;IAC/D,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAYzG,2EAA2E;IACrE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/E,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAU3F,8DAA8D;IACxD,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA4CzH;;;;;;;;;;;;OAYG;IACG,IAAI,CACR,EAAE,EAAE,EAAE,EACN,IAAI,GAAE,GAAG,EAAO,EAChB,IAAI,GAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KAChB,GACL,OAAO,CAAC,GAAG,CAAC;YAmDD,eAAe;IAuB7B,wEAAwE;IACxE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE,GAAG,EAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAUnE;;;;;;;OAOG;IACG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE,GAAG,EAAO,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IAmC1F,gEAAgE;YAClD,iBAAiB;IAmB/B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,QAAQ,IAAI,MAAM;CAInB"}