@ael-protocol/sdk 0.1.0 → 0.2.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 (49) hide show
  1. package/dist/abi/market.d.ts +394 -0
  2. package/dist/abi/market.d.ts.map +1 -0
  3. package/dist/abi/market.js +264 -0
  4. package/dist/abi/market.js.map +1 -0
  5. package/dist/agent-wallet.d.ts +79 -0
  6. package/dist/agent-wallet.d.ts.map +1 -0
  7. package/dist/agent-wallet.js +483 -0
  8. package/dist/agent-wallet.js.map +1 -0
  9. package/dist/hub.d.ts +125 -0
  10. package/dist/hub.d.ts.map +1 -0
  11. package/dist/hub.js +237 -0
  12. package/dist/hub.js.map +1 -0
  13. package/dist/index.d.ts +21 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +39 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/market.d.ts +73 -0
  18. package/dist/market.d.ts.map +1 -0
  19. package/dist/market.js +388 -0
  20. package/dist/market.js.map +1 -0
  21. package/dist/marketplace.d.ts +137 -0
  22. package/dist/marketplace.d.ts.map +1 -0
  23. package/dist/marketplace.js +479 -0
  24. package/dist/marketplace.js.map +1 -0
  25. package/dist/networks.d.ts +66 -0
  26. package/dist/networks.d.ts.map +1 -0
  27. package/dist/networks.js +106 -0
  28. package/dist/networks.js.map +1 -0
  29. package/dist/parser.d.ts +39 -0
  30. package/dist/parser.d.ts.map +1 -0
  31. package/dist/parser.js +134 -0
  32. package/dist/parser.js.map +1 -0
  33. package/dist/strategies/dca.d.ts +39 -0
  34. package/dist/strategies/dca.d.ts.map +1 -0
  35. package/dist/strategies/dca.js +124 -0
  36. package/dist/strategies/dca.js.map +1 -0
  37. package/dist/strategies/grid.d.ts +54 -0
  38. package/dist/strategies/grid.d.ts.map +1 -0
  39. package/dist/strategies/grid.js +161 -0
  40. package/dist/strategies/grid.js.map +1 -0
  41. package/dist/strategies/stop-loss.d.ts +55 -0
  42. package/dist/strategies/stop-loss.d.ts.map +1 -0
  43. package/dist/strategies/stop-loss.js +152 -0
  44. package/dist/strategies/stop-loss.js.map +1 -0
  45. package/dist/strategy.d.ts +72 -0
  46. package/dist/strategy.d.ts.map +1 -0
  47. package/dist/strategy.js +78 -0
  48. package/dist/strategy.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ /**
2
+ * AgentWallet - High-level wallet abstraction for AI agents
3
+ */
4
+ import { type Address, type Hex } from 'viem';
5
+ import { type TradeInput } from './parser';
6
+ import type { Strategy, StrategyType } from './strategy';
7
+ import { type DCAConfig } from './strategies/dca';
8
+ import { type GridConfig } from './strategies/grid';
9
+ import { type StopLossConfig } from './strategies/stop-loss';
10
+ export interface AgentWalletConfig {
11
+ privateKey: Hex;
12
+ network?: string;
13
+ rpcUrl?: string;
14
+ }
15
+ export interface TradeResult {
16
+ amountIn: string;
17
+ amountOut: string;
18
+ received: string;
19
+ price: number;
20
+ fee: string;
21
+ txHash: Hex;
22
+ intentHash: Hex;
23
+ status: 'settled' | 'cancelled' | 'expired';
24
+ }
25
+ export interface BalanceMap {
26
+ [symbol: string]: string;
27
+ }
28
+ export interface HistoryItem {
29
+ intentHash: Hex;
30
+ txHash: Hex;
31
+ sellToken: string;
32
+ buyToken: string;
33
+ sellAmount: string;
34
+ buyAmount: string;
35
+ status: string;
36
+ timestamp: number;
37
+ }
38
+ export declare class AgentWallet {
39
+ readonly address: Address;
40
+ private readonly publicClient;
41
+ private readonly walletClient;
42
+ private readonly network;
43
+ constructor(config: AgentWalletConfig);
44
+ /**
45
+ * Execute a trade with natural language input
46
+ */
47
+ trade(input: TradeInput): Promise<TradeResult>;
48
+ /**
49
+ * Get balances for common tokens
50
+ */
51
+ balances(): Promise<BalanceMap>;
52
+ /**
53
+ * Get trade history
54
+ */
55
+ history(): Promise<HistoryItem[]>;
56
+ /**
57
+ * Get current nonce
58
+ */
59
+ getNonce(): Promise<bigint>;
60
+ /**
61
+ * Create a trading strategy
62
+ */
63
+ strategy<T extends StrategyType>(type: T, config: T extends 'dca' ? DCAConfig : T extends 'grid' ? GridConfig : StopLossConfig): Strategy;
64
+ /**
65
+ * Get quote for a trade
66
+ */
67
+ quote(sellToken: string, buyToken: string, amount: string): Promise<{
68
+ amountOut: bigint;
69
+ fee: number;
70
+ }>;
71
+ private executeTrade;
72
+ private ensureApproval;
73
+ private getIntentStatus;
74
+ private pollIntentStatus;
75
+ private getSettlementAmount;
76
+ private executeWithRetry;
77
+ private sleep;
78
+ }
79
+ //# sourceMappingURL=agent-wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-wallet.d.ts","sourceRoot":"","sources":["../src/agent-wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EASL,KAAK,OAAO,EACZ,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AAWd,OAAO,EAA0C,KAAK,UAAU,EAAoB,MAAM,UAAU,CAAC;AAErG,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiG/E,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD,qBAAa,WAAW;IACtB,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAE5B,MAAM,EAAE,iBAAiB;IAoBrC;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IASpD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAoCrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAmDvC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IASjC;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,YAAY,EAC7B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,CAAC,SAAS,KAAK,GAAG,SAAS,GAAG,CAAC,SAAS,MAAM,GAAG,UAAU,GAAG,cAAc,GACnF,QAAQ;IAeX;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;YA8C/F,YAAY;YAkHZ,cAAc;YAqBd,eAAe;YASf,gBAAgB;YA8BhB,mBAAmB;YAwBnB,gBAAgB;IAkB9B,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ /**
3
+ * AgentWallet - High-level wallet abstraction for AI agents
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AgentWallet = void 0;
7
+ const viem_1 = require("viem");
8
+ const accounts_1 = require("viem/accounts");
9
+ const networks_1 = require("./networks");
10
+ const parser_1 = require("./parser");
11
+ const market_1 = require("./market");
12
+ const dca_1 = require("./strategies/dca");
13
+ const grid_1 = require("./strategies/grid");
14
+ const stop_loss_1 = require("./strategies/stop-loss");
15
+ // ABIs
16
+ const ROUTER_ABI = [
17
+ {
18
+ type: 'function',
19
+ name: 'submitIntent',
20
+ inputs: [{ name: 'intent', type: 'tuple', components: [
21
+ { name: 'agent', type: 'address' },
22
+ { name: 'tokenIn', type: 'address' },
23
+ { name: 'tokenOut', type: 'address' },
24
+ { name: 'amountIn', type: 'uint256' },
25
+ { name: 'minAmountOut', type: 'uint256' },
26
+ { name: 'deadline', type: 'uint256' },
27
+ { name: 'nonce', type: 'uint256' },
28
+ { name: 'signature', type: 'bytes' },
29
+ ] }],
30
+ outputs: [{ type: 'bytes32' }],
31
+ stateMutability: 'payable',
32
+ },
33
+ {
34
+ type: 'function',
35
+ name: 'cancelIntent',
36
+ inputs: [{ name: 'intentHash', type: 'bytes32' }],
37
+ outputs: [],
38
+ stateMutability: 'nonpayable',
39
+ },
40
+ {
41
+ type: 'function',
42
+ name: 'getIntentStatus',
43
+ inputs: [{ name: 'intentHash', type: 'bytes32' }],
44
+ outputs: [{ type: 'uint8' }],
45
+ stateMutability: 'view',
46
+ },
47
+ {
48
+ type: 'function',
49
+ name: 'getNonce',
50
+ inputs: [{ name: 'agent', type: 'address' }],
51
+ outputs: [{ type: 'uint256' }],
52
+ stateMutability: 'view',
53
+ },
54
+ {
55
+ type: 'function',
56
+ name: 'computeIntentHash',
57
+ inputs: [{ name: 'intent', type: 'tuple', components: [
58
+ { name: 'agent', type: 'address' },
59
+ { name: 'tokenIn', type: 'address' },
60
+ { name: 'tokenOut', type: 'address' },
61
+ { name: 'amountIn', type: 'uint256' },
62
+ { name: 'minAmountOut', type: 'uint256' },
63
+ { name: 'deadline', type: 'uint256' },
64
+ { name: 'nonce', type: 'uint256' },
65
+ { name: 'signature', type: 'bytes' },
66
+ ] }],
67
+ outputs: [{ type: 'bytes32' }],
68
+ stateMutability: 'view',
69
+ },
70
+ ];
71
+ const ERC20_ABI = [
72
+ { type: 'function', name: 'balanceOf', inputs: [{ name: 'account', type: 'address' }], outputs: [{ type: 'uint256' }], stateMutability: 'view' },
73
+ { type: 'function', name: 'allowance', inputs: [{ name: 'owner', type: 'address' }, { name: 'spender', type: 'address' }], outputs: [{ type: 'uint256' }], stateMutability: 'view' },
74
+ { type: 'function', name: 'approve', inputs: [{ name: 'spender', type: 'address' }, { name: 'amount', type: 'uint256' }], outputs: [{ type: 'bool' }], stateMutability: 'nonpayable' },
75
+ ];
76
+ // IntentSettled event ABI for reading actual settlement amounts
77
+ const INTENT_SETTLED_EVENT = {
78
+ type: 'event',
79
+ name: 'IntentSettled',
80
+ inputs: [
81
+ { name: 'intentHash', type: 'bytes32', indexed: true },
82
+ { name: 'solver', type: 'address', indexed: true },
83
+ { name: 'amountOut', type: 'uint256', indexed: false },
84
+ ],
85
+ };
86
+ const QUOTER_V2_ABI = [
87
+ {
88
+ type: 'function',
89
+ name: 'quoteExactInputSingle',
90
+ inputs: [{ name: 'params', type: 'tuple', components: [
91
+ { name: 'tokenIn', type: 'address' },
92
+ { name: 'tokenOut', type: 'address' },
93
+ { name: 'amountIn', type: 'uint256' },
94
+ { name: 'fee', type: 'uint24' },
95
+ { name: 'sqrtPriceLimitX96', type: 'uint160' },
96
+ ] }],
97
+ outputs: [
98
+ { type: 'uint256' },
99
+ { type: 'uint160' },
100
+ { type: 'uint32' },
101
+ { type: 'uint256' },
102
+ ],
103
+ stateMutability: 'nonpayable',
104
+ },
105
+ ];
106
+ const FEE_TIERS = [500, 3000, 10000];
107
+ const DEFAULT_SLIPPAGE = 1; // 1%
108
+ const POLL_INTERVAL = 2000; // 2 seconds
109
+ const MAX_POLL_TIME = 300000; // 5 minutes
110
+ const MAX_RETRIES = 3;
111
+ class AgentWallet {
112
+ address;
113
+ publicClient;
114
+ walletClient;
115
+ network;
116
+ constructor(config) {
117
+ const account = (0, accounts_1.privateKeyToAccount)(config.privateKey);
118
+ this.address = account.address;
119
+ this.network = (0, networks_1.getNetwork)(config.network || 'base');
120
+ const rpcUrl = config.rpcUrl || this.network.rpcUrl;
121
+ // Use type assertion to handle chain-specific type differences (e.g., Base L2 transaction types)
122
+ this.publicClient = (0, viem_1.createPublicClient)({
123
+ chain: this.network.chain,
124
+ transport: (0, viem_1.http)(rpcUrl),
125
+ });
126
+ this.walletClient = (0, viem_1.createWalletClient)({
127
+ account,
128
+ chain: this.network.chain,
129
+ transport: (0, viem_1.http)(rpcUrl),
130
+ });
131
+ }
132
+ /**
133
+ * Execute a trade with natural language input
134
+ */
135
+ async trade(input) {
136
+ const parsed = (0, parser_1.parseTrade)(input);
137
+ (0, parser_1.validateTrade)(parsed);
138
+ console.log(`[AgentWallet] Trade: ${(0, parser_1.formatTrade)(parsed)}`);
139
+ return this.executeWithRetry(() => this.executeTrade(parsed));
140
+ }
141
+ /**
142
+ * Get balances for common tokens
143
+ */
144
+ async balances() {
145
+ const result = {};
146
+ // ETH balance
147
+ const ethBalance = await this.publicClient.getBalance({ address: this.address });
148
+ result['ETH'] = (0, viem_1.formatUnits)(ethBalance, 18);
149
+ // USDC balance
150
+ try {
151
+ const usdcBalance = await this.publicClient.readContract({
152
+ address: this.network.tokens.USDC,
153
+ abi: ERC20_ABI,
154
+ functionName: 'balanceOf',
155
+ args: [this.address],
156
+ });
157
+ result['USDC'] = (0, viem_1.formatUnits)(usdcBalance, 6);
158
+ }
159
+ catch {
160
+ result['USDC'] = '0';
161
+ }
162
+ // WETH balance
163
+ try {
164
+ const wethBalance = await this.publicClient.readContract({
165
+ address: this.network.tokens.WETH,
166
+ abi: ERC20_ABI,
167
+ functionName: 'balanceOf',
168
+ args: [this.address],
169
+ });
170
+ result['WETH'] = (0, viem_1.formatUnits)(wethBalance, 18);
171
+ }
172
+ catch {
173
+ result['WETH'] = '0';
174
+ }
175
+ return result;
176
+ }
177
+ /**
178
+ * Get trade history
179
+ */
180
+ async history() {
181
+ // Get recent block range (last 50000 blocks)
182
+ const currentBlock = await this.publicClient.getBlockNumber();
183
+ const fromBlock = currentBlock > 50000n ? currentBlock - 50000n : 0n;
184
+ // Get IntentSubmitted events for this agent
185
+ const logs = await this.publicClient.getLogs({
186
+ address: this.network.contracts.router,
187
+ event: {
188
+ type: 'event',
189
+ name: 'IntentSubmitted',
190
+ inputs: [
191
+ { name: 'intentHash', type: 'bytes32', indexed: true },
192
+ { name: 'agent', type: 'address', indexed: true },
193
+ { name: 'tokenIn', type: 'address', indexed: false },
194
+ { name: 'tokenOut', type: 'address', indexed: false },
195
+ { name: 'amountIn', type: 'uint256', indexed: false },
196
+ { name: 'minAmountOut', type: 'uint256', indexed: false },
197
+ { name: 'deadline', type: 'uint256', indexed: false },
198
+ ],
199
+ },
200
+ args: { agent: this.address },
201
+ fromBlock,
202
+ toBlock: 'latest',
203
+ });
204
+ const history = [];
205
+ for (const log of logs) {
206
+ const intentHash = log.args.intentHash;
207
+ const status = await this.getIntentStatus(intentHash);
208
+ const statusNames = ['unknown', 'pending', 'settled', 'cancelled', 'expired'];
209
+ const tokenInDecimals = (0, networks_1.getTokenDecimals)(log.args.tokenIn);
210
+ const tokenOutDecimals = (0, networks_1.getTokenDecimals)(log.args.tokenOut);
211
+ history.push({
212
+ intentHash,
213
+ txHash: log.transactionHash,
214
+ sellToken: (0, networks_1.getTokenSymbol)(log.args.tokenIn),
215
+ buyToken: (0, networks_1.getTokenSymbol)(log.args.tokenOut),
216
+ sellAmount: (0, viem_1.formatUnits)(log.args.amountIn, tokenInDecimals),
217
+ buyAmount: (0, viem_1.formatUnits)(log.args.minAmountOut, tokenOutDecimals),
218
+ status: statusNames[status] || 'unknown',
219
+ timestamp: 0, // Would need block timestamp
220
+ });
221
+ }
222
+ return history.reverse(); // Most recent first
223
+ }
224
+ /**
225
+ * Get current nonce
226
+ */
227
+ async getNonce() {
228
+ return await this.publicClient.readContract({
229
+ address: this.network.contracts.router,
230
+ abi: ROUTER_ABI,
231
+ functionName: 'getNonce',
232
+ args: [this.address],
233
+ });
234
+ }
235
+ /**
236
+ * Create a trading strategy
237
+ */
238
+ strategy(type, config) {
239
+ const marketFeed = new market_1.MarketFeed({ network: this.network.name, rpcUrl: this.network.rpcUrl });
240
+ switch (type) {
241
+ case 'dca':
242
+ return new dca_1.DCAStrategy(this, marketFeed, config);
243
+ case 'grid':
244
+ return new grid_1.GridStrategy(this, marketFeed, config);
245
+ case 'stop-loss':
246
+ return new stop_loss_1.StopLossStrategy(this, marketFeed, config);
247
+ default:
248
+ throw new Error(`Unknown strategy type: ${type}`);
249
+ }
250
+ }
251
+ /**
252
+ * Get quote for a trade
253
+ */
254
+ async quote(sellToken, buyToken, amount) {
255
+ const tokenIn = (0, networks_1.resolveToken)(sellToken, this.network);
256
+ const tokenOut = (0, networks_1.resolveToken)(buyToken, this.network);
257
+ const decimals = (0, networks_1.getTokenDecimals)(tokenIn);
258
+ const amountIn = (0, viem_1.parseUnits)(amount, decimals);
259
+ // Use WETH for ETH
260
+ const actualTokenIn = tokenIn === this.network.tokens.ETH ? this.network.tokens.WETH : tokenIn;
261
+ const actualTokenOut = tokenOut === this.network.tokens.ETH ? this.network.tokens.WETH : tokenOut;
262
+ let bestQuote = null;
263
+ let bestFee = 0;
264
+ for (const fee of FEE_TIERS) {
265
+ try {
266
+ const result = await this.publicClient.simulateContract({
267
+ address: this.network.uniswap.quoterV2,
268
+ abi: QUOTER_V2_ABI,
269
+ functionName: 'quoteExactInputSingle',
270
+ args: [{
271
+ tokenIn: actualTokenIn,
272
+ tokenOut: actualTokenOut,
273
+ amountIn,
274
+ fee,
275
+ sqrtPriceLimitX96: 0n,
276
+ }],
277
+ });
278
+ const amountOut = result.result[0];
279
+ if (!bestQuote || amountOut > bestQuote) {
280
+ bestQuote = amountOut;
281
+ bestFee = fee;
282
+ }
283
+ }
284
+ catch {
285
+ continue;
286
+ }
287
+ }
288
+ if (!bestQuote) {
289
+ throw new Error(`No liquidity for ${sellToken} -> ${buyToken}`);
290
+ }
291
+ return { amountOut: bestQuote, fee: bestFee };
292
+ }
293
+ // ============ Private Methods ============
294
+ async executeTrade(trade) {
295
+ const tokenIn = (0, networks_1.resolveToken)(trade.sellToken, this.network);
296
+ const tokenOut = (0, networks_1.resolveToken)(trade.buyToken, this.network);
297
+ const decimals = (0, networks_1.getTokenDecimals)(tokenIn);
298
+ const amountIn = (0, viem_1.parseUnits)(trade.sellAmount, decimals);
299
+ // 1. Get quote
300
+ console.log(`[AgentWallet] Getting quote...`);
301
+ const { amountOut, fee } = await this.quote(trade.sellToken, trade.buyToken, trade.sellAmount);
302
+ const outDecimals = (0, networks_1.getTokenDecimals)(tokenOut);
303
+ console.log(`[AgentWallet] Quote: ${(0, viem_1.formatUnits)(amountOut, outDecimals)} ${trade.buyToken} (fee: ${fee / 10000}%)`);
304
+ // 2. Calculate minAmountOut with slippage
305
+ const slippage = trade.maxSlippage ?? DEFAULT_SLIPPAGE;
306
+ const slippageBps = BigInt(Math.floor(slippage * 100));
307
+ const minAmountOut = amountOut * (10000n - slippageBps) / 10000n;
308
+ // 3. Check and approve if needed (for ERC20)
309
+ if (tokenIn !== this.network.tokens.ETH) {
310
+ await this.ensureApproval(tokenIn, amountIn);
311
+ }
312
+ // 4. Get nonce
313
+ const nonce = await this.getNonce();
314
+ // 5. Create intent
315
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + 1800); // 30 minutes
316
+ const intentData = {
317
+ agent: this.address,
318
+ tokenIn,
319
+ tokenOut,
320
+ amountIn,
321
+ minAmountOut,
322
+ deadline,
323
+ nonce,
324
+ };
325
+ // 6. Sign intent
326
+ console.log(`[AgentWallet] Signing intent...`);
327
+ const signature = await this.walletClient.signTypedData({
328
+ domain: {
329
+ ...networks_1.EIP712_DOMAIN,
330
+ chainId: this.network.chainId,
331
+ verifyingContract: this.network.contracts.router,
332
+ },
333
+ types: networks_1.INTENT_TYPES,
334
+ primaryType: 'AgentIntent',
335
+ message: intentData,
336
+ });
337
+ const intent = { ...intentData, signature };
338
+ // 7. Compute intent hash
339
+ const intentHash = await this.publicClient.readContract({
340
+ address: this.network.contracts.router,
341
+ abi: ROUTER_ABI,
342
+ functionName: 'computeIntentHash',
343
+ args: [intent],
344
+ });
345
+ // 8. Submit intent
346
+ console.log(`[AgentWallet] Submitting intent...`);
347
+ const txHash = await this.walletClient.writeContract({
348
+ address: this.network.contracts.router,
349
+ abi: ROUTER_ABI,
350
+ functionName: 'submitIntent',
351
+ args: [intent],
352
+ value: tokenIn === this.network.tokens.ETH ? amountIn : 0n,
353
+ });
354
+ console.log(`[AgentWallet] TX: ${txHash}`);
355
+ // 9. Wait for transaction
356
+ await this.publicClient.waitForTransactionReceipt({ hash: txHash });
357
+ // 10. Poll for settlement
358
+ console.log(`[AgentWallet] Waiting for settlement...`);
359
+ const settlementResult = await this.pollIntentStatus(intentHash, deadline, txHash);
360
+ // 11. Handle timeout - cancel and refund
361
+ if (settlementResult.status === 'expired') {
362
+ console.log(`[AgentWallet] Intent expired, cancelling...`);
363
+ try {
364
+ await this.walletClient.writeContract({
365
+ address: this.network.contracts.router,
366
+ abi: ROUTER_ABI,
367
+ functionName: 'cancelIntent',
368
+ args: [intentHash],
369
+ });
370
+ }
371
+ catch {
372
+ // Already cancelled or settled
373
+ }
374
+ }
375
+ // Use actual settlement amount if available, otherwise fall back to minAmountOut
376
+ const actualAmountOut = settlementResult.actualAmountOut ?? minAmountOut;
377
+ const formattedAmountOut = (0, viem_1.formatUnits)(actualAmountOut, outDecimals);
378
+ // Calculate price based on actual received amount
379
+ const price = parseFloat(formattedAmountOut) / parseFloat(trade.sellAmount);
380
+ return {
381
+ amountIn: trade.sellAmount,
382
+ amountOut: formattedAmountOut,
383
+ received: formattedAmountOut,
384
+ price,
385
+ fee: `${fee / 10000}%`,
386
+ txHash,
387
+ intentHash,
388
+ status: settlementResult.status,
389
+ };
390
+ }
391
+ async ensureApproval(token, amount) {
392
+ const allowance = await this.publicClient.readContract({
393
+ address: token,
394
+ abi: ERC20_ABI,
395
+ functionName: 'allowance',
396
+ args: [this.address, this.network.contracts.router],
397
+ });
398
+ if (allowance < amount) {
399
+ console.log(`[AgentWallet] Approving ${(0, networks_1.getTokenSymbol)(token)}...`);
400
+ const hash = await this.walletClient.writeContract({
401
+ address: token,
402
+ abi: ERC20_ABI,
403
+ functionName: 'approve',
404
+ args: [this.network.contracts.router, viem_1.maxUint256],
405
+ });
406
+ await this.publicClient.waitForTransactionReceipt({ hash });
407
+ console.log(`[AgentWallet] Approved`);
408
+ }
409
+ }
410
+ async getIntentStatus(intentHash) {
411
+ return await this.publicClient.readContract({
412
+ address: this.network.contracts.router,
413
+ abi: ROUTER_ABI,
414
+ functionName: 'getIntentStatus',
415
+ args: [intentHash],
416
+ });
417
+ }
418
+ async pollIntentStatus(intentHash, deadline, submitTxHash) {
419
+ const startTime = Date.now();
420
+ while (Date.now() - startTime < MAX_POLL_TIME) {
421
+ const status = await this.getIntentStatus(intentHash);
422
+ if (status === 2) {
423
+ // Settled - get actual amountOut from IntentSettled event
424
+ const actualAmountOut = await this.getSettlementAmount(intentHash, submitTxHash);
425
+ return { status: 'settled', actualAmountOut };
426
+ }
427
+ if (status === 3)
428
+ return { status: 'cancelled' };
429
+ if (status === 4)
430
+ return { status: 'expired' };
431
+ // Check if deadline passed
432
+ const now = BigInt(Math.floor(Date.now() / 1000));
433
+ if (now > deadline) {
434
+ return { status: 'expired' };
435
+ }
436
+ await this.sleep(POLL_INTERVAL);
437
+ }
438
+ return { status: 'expired' };
439
+ }
440
+ async getSettlementAmount(intentHash, submitTxHash) {
441
+ try {
442
+ // Get the block number from submit tx
443
+ const receipt = await this.publicClient.getTransactionReceipt({ hash: submitTxHash });
444
+ const fromBlock = receipt.blockNumber;
445
+ // Query IntentSettled events
446
+ const logs = await this.publicClient.getLogs({
447
+ address: this.network.contracts.router,
448
+ event: INTENT_SETTLED_EVENT,
449
+ args: { intentHash },
450
+ fromBlock,
451
+ toBlock: 'latest',
452
+ });
453
+ if (logs.length > 0) {
454
+ return logs[0].args.amountOut;
455
+ }
456
+ }
457
+ catch (error) {
458
+ console.error('[AgentWallet] Failed to get settlement amount:', error);
459
+ }
460
+ return undefined;
461
+ }
462
+ async executeWithRetry(fn) {
463
+ let lastError;
464
+ for (let i = 0; i < MAX_RETRIES; i++) {
465
+ try {
466
+ return await fn();
467
+ }
468
+ catch (error) {
469
+ lastError = error;
470
+ console.log(`[AgentWallet] Attempt ${i + 1} failed: ${lastError.message}`);
471
+ if (i < MAX_RETRIES - 1) {
472
+ await this.sleep(1000 * (i + 1)); // Exponential backoff
473
+ }
474
+ }
475
+ }
476
+ throw lastError;
477
+ }
478
+ sleep(ms) {
479
+ return new Promise(resolve => setTimeout(resolve, ms));
480
+ }
481
+ }
482
+ exports.AgentWallet = AgentWallet;
483
+ //# sourceMappingURL=agent-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-wallet.js","sourceRoot":"","sources":["../src/agent-wallet.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+BAWc;AACd,4CAAoD;AACpD,yCAQoB;AACpB,qCAAqG;AACrG,qCAAsC;AAEtC,0CAA+D;AAC/D,4CAAkE;AAClE,sDAA+E;AAE/E,OAAO;AACP,MAAM,UAAU,GAAG;IACjB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;oBACpD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE;iBACrC,EAAC,CAAC;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9B,eAAe,EAAE,SAAS;KAC3B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjD,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC5B,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9B,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;oBACpD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;oBAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE;iBACrC,EAAC,CAAC;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9B,eAAe,EAAE,MAAM;KACxB;CACO,CAAC;AAEX,MAAM,SAAS,GAAG;IAChB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE;IAChJ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE;IACpL,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE;CAC9K,CAAC;AAEX,gEAAgE;AAChE,MAAM,oBAAoB,GAAG;IAC3B,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;QACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;QAClD,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;KACvD;CACO,CAAC;AAEX,MAAM,aAAa,GAAG;IACpB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;oBACpD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBACrC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC/C,EAAC,CAAC;QACH,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,SAAS,EAAE;YACnB,EAAE,IAAI,EAAE,SAAS,EAAE;YACnB,EAAE,IAAI,EAAE,QAAQ,EAAE;YAClB,EAAE,IAAI,EAAE,SAAS,EAAE;SACpB;QACD,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC;AAkCX,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;AAC9C,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAC,KAAK;AACjC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,YAAY;AACxC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY;AAC1C,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAa,WAAW;IACN,OAAO,CAAU;IAChB,YAAY,CAAe;IAC3B,YAAY,CAAe;IAC3B,OAAO,CAAgB;IAExC,YAAY,MAAyB;QACnC,MAAM,OAAO,GAAG,IAAA,8BAAmB,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAA,qBAAU,EAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAEpD,iGAAiG;QACjG,IAAI,CAAC,YAAY,GAAG,IAAA,yBAAkB,EAAC;YACrC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,SAAS,EAAE,IAAA,WAAI,EAAC,MAAM,CAAC;SACxB,CAAiB,CAAC;QAEnB,IAAI,CAAC,YAAY,GAAG,IAAA,yBAAkB,EAAC;YACrC,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,SAAS,EAAE,IAAA,WAAI,EAAC,MAAM,CAAC;SACxB,CAAiB,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAiB;QAC3B,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC;QACjC,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAA,oBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,cAAc;QACd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,kBAAW,EAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE5C,eAAe;QACf,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACvD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;gBACjC,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,GAAG,IAAA,kBAAW,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACvB,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACvD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;gBACjC,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,GAAG,IAAA,kBAAW,EAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,6CAA6C;QAC7C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAErE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACtC,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE;oBACN,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;oBACtD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;oBACjD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;oBACpD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;oBACrD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;oBACrD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;oBACzD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;iBACtD;aACF;YACD,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;YAC7B,SAAS;YACT,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,UAAiB,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YAE9E,MAAM,eAAe,GAAG,IAAA,2BAAgB,EAAC,GAAG,CAAC,IAAI,CAAC,OAAkB,CAAC,CAAC;YACtE,MAAM,gBAAgB,GAAG,IAAA,2BAAgB,EAAC,GAAG,CAAC,IAAI,CAAC,QAAmB,CAAC,CAAC;YAExE,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU;gBACV,MAAM,EAAE,GAAG,CAAC,eAAe;gBAC3B,SAAS,EAAE,IAAA,yBAAc,EAAC,GAAG,CAAC,IAAI,CAAC,OAAkB,CAAC;gBACtD,QAAQ,EAAE,IAAA,yBAAc,EAAC,GAAG,CAAC,IAAI,CAAC,QAAmB,CAAC;gBACtD,UAAU,EAAE,IAAA,kBAAW,EAAC,GAAG,CAAC,IAAI,CAAC,QAAkB,EAAE,eAAe,CAAC;gBACrE,SAAS,EAAE,IAAA,kBAAW,EAAC,GAAG,CAAC,IAAI,CAAC,YAAsB,EAAE,gBAAgB,CAAC;gBACzE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,SAAS;gBACxC,SAAS,EAAE,CAAC,EAAE,6BAA6B;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,oBAAoB;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACtC,GAAG,EAAE,UAAU;YACf,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ,CACN,IAAO,EACP,MAAoF;QAEpF,MAAM,UAAU,GAAG,IAAI,mBAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE/F,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK;gBACR,OAAO,IAAI,iBAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAmB,CAAC,CAAC;YAChE,KAAK,MAAM;gBACT,OAAO,IAAI,mBAAY,CAAC,IAAI,EAAE,UAAU,EAAE,MAAoB,CAAC,CAAC;YAClE,KAAK,WAAW;gBACd,OAAO,IAAI,4BAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAwB,CAAC,CAAC;YAC1E;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,QAAgB,EAAE,MAAc;QAC7D,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,iBAAU,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE9C,mBAAmB;QACnB,MAAM,aAAa,GAAG,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/F,MAAM,cAAc,GAAG,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElG,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBACtD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ;oBACtC,GAAG,EAAE,aAAa;oBAClB,YAAY,EAAE,uBAAuB;oBACrC,IAAI,EAAE,CAAC;4BACL,OAAO,EAAE,aAAa;4BACtB,QAAQ,EAAE,cAAc;4BACxB,QAAQ;4BACR,GAAG;4BACH,iBAAiB,EAAE,EAAE;yBACtB,CAAC;iBACH,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;oBACxC,SAAS,GAAG,SAAS,CAAC;oBACtB,OAAO,GAAG,GAAG,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,OAAO,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IAED,4CAA4C;IAEpC,KAAK,CAAC,YAAY,CAAC,KAAkB;QAC3C,MAAM,OAAO,GAAG,IAAA,uBAAY,EAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,iBAAU,EAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAExD,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/F,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAA,kBAAW,EAAC,SAAS,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,UAAU,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC;QAEpH,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,IAAI,gBAAgB,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC;QAEjE,6CAA6C;QAC7C,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,eAAe;QACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,mBAAmB;QACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa;QAE5E,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,QAAQ;YACR,KAAK;SACN,CAAC;QAEF,iBAAiB;QACjB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAO,IAAI,CAAC,YAAoB,CAAC,aAAa,CAAC;YAC/D,MAAM,EAAE;gBACN,GAAG,wBAAa;gBAChB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;aACjD;YACD,KAAK,EAAE,uBAAY;YACnB,WAAW,EAAE,aAAa;YAC1B,OAAO,EAAE,UAAU;SACpB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,CAAC;QAE5C,yBAAyB;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACtD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACtC,GAAG,EAAE,UAAU;YACf,YAAY,EAAE,mBAAmB;YACjC,IAAI,EAAE,CAAC,MAAM,CAAC;SACf,CAAC,CAAC;QAEH,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAO,IAAI,CAAC,YAAoB,CAAC,aAAa,CAAC;YAC5D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACtC,GAAG,EAAE,UAAU;YACf,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,CAAC,MAAM,CAAC;YACd,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SAC3D,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;QAE3C,0BAA0B;QAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpE,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEnF,yCAAyC;QACzC,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAO,IAAI,CAAC,YAAoB,CAAC,aAAa,CAAC;oBAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;oBACtC,GAAG,EAAE,UAAU;oBACf,YAAY,EAAE,cAAc;oBAC5B,IAAI,EAAE,CAAC,UAAU,CAAC;iBACnB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,iFAAiF;QACjF,MAAM,eAAe,GAAG,gBAAgB,CAAC,eAAe,IAAI,YAAY,CAAC;QACzE,MAAM,kBAAkB,GAAG,IAAA,kBAAW,EAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAErE,kDAAkD;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE5E,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,UAAU;YAC1B,SAAS,EAAE,kBAAkB;YAC7B,QAAQ,EAAE,kBAAkB;YAC5B,KAAK;YACL,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG;YACtB,MAAM;YACN,UAAU;YACV,MAAM,EAAE,gBAAgB,CAAC,MAAM;SAChC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAAc,EAAE,MAAc;QACzD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACrD,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;SACpD,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAA,yBAAc,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,MAAO,IAAI,CAAC,YAAoB,CAAC,aAAa,CAAC;gBAC1D,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAU,CAAC;aAClD,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,UAAe;QAC3C,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACtC,GAAG,EAAE,UAAU;YACf,YAAY,EAAE,iBAAiB;YAC/B,IAAI,EAAE,CAAC,UAAU,CAAC;SACnB,CAAW,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,UAAe,EACf,QAAgB,EAChB,YAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,aAAa,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAEtD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,0DAA0D;gBAC1D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACjF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;YAChD,CAAC;YACD,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YACjD,IAAI,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAE/C,2BAA2B;YAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;gBACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC/B,CAAC;YAED,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,UAAe,EAAE,YAAiB;QAClE,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACtF,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;YAEtC,6BAA6B;YAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;gBACtC,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,EAAE,UAAU,EAAE;gBACpB,SAAS;gBACT,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAmB,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAI,EAAoB;QACpD,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAc,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC3E,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAhbD,kCAgbC"}