@sequence0/sdk 1.2.0 → 2.0.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 (47) hide show
  1. package/dist/core/atomic.d.ts +76 -0
  2. package/dist/core/atomic.d.ts.map +1 -0
  3. package/dist/core/atomic.js +39 -0
  4. package/dist/core/atomic.js.map +1 -0
  5. package/dist/core/client.d.ts +238 -0
  6. package/dist/core/client.d.ts.map +1 -1
  7. package/dist/core/client.js +536 -4
  8. package/dist/core/client.js.map +1 -1
  9. package/dist/core/delegation.d.ts +184 -0
  10. package/dist/core/delegation.d.ts.map +1 -0
  11. package/dist/core/delegation.js +37 -0
  12. package/dist/core/delegation.js.map +1 -0
  13. package/dist/core/programmable.d.ts +66 -0
  14. package/dist/core/programmable.d.ts.map +1 -0
  15. package/dist/core/programmable.js +36 -0
  16. package/dist/core/programmable.js.map +1 -0
  17. package/dist/core/solvency.d.ts +223 -0
  18. package/dist/core/solvency.d.ts.map +1 -0
  19. package/dist/core/solvency.js +267 -0
  20. package/dist/core/solvency.js.map +1 -0
  21. package/dist/core/types.d.ts +11 -0
  22. package/dist/core/types.d.ts.map +1 -1
  23. package/dist/core/universal-account.d.ts +438 -0
  24. package/dist/core/universal-account.d.ts.map +1 -0
  25. package/dist/core/universal-account.js +597 -0
  26. package/dist/core/universal-account.js.map +1 -0
  27. package/dist/core/witness.d.ts +197 -0
  28. package/dist/core/witness.d.ts.map +1 -0
  29. package/dist/core/witness.js +298 -0
  30. package/dist/core/witness.js.map +1 -0
  31. package/dist/erc4337/types.js +2 -2
  32. package/dist/index.d.ts +12 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +15 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/settlement/settlement.d.ts +152 -0
  37. package/dist/settlement/settlement.d.ts.map +1 -0
  38. package/dist/settlement/settlement.js +172 -0
  39. package/dist/settlement/settlement.js.map +1 -0
  40. package/dist/utils/eip712.js +2 -2
  41. package/dist/utils/fee.d.ts +2 -2
  42. package/dist/utils/fee.js +2 -2
  43. package/dist/wallet/wallet.d.ts +52 -0
  44. package/dist/wallet/wallet.d.ts.map +1 -1
  45. package/dist/wallet/wallet.js +204 -0
  46. package/dist/wallet/wallet.js.map +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,597 @@
1
+ "use strict";
2
+ /**
3
+ * K7: Universal Account — One Wallet, All Chains
4
+ *
5
+ * A single account identity that works across all 81 supported chains.
6
+ * Threshold keys (secp256k1 + ed25519) are generated once, and chain-
7
+ * specific addresses are derived deterministically. Send any token on
8
+ * any chain from one unified account, with automatic routing to the
9
+ * optimal source chain.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { UniversalAccountClient } from '@sequence0/sdk';
14
+ *
15
+ * const ua = new UniversalAccountClient('http://agent:8080');
16
+ *
17
+ * // Create a universal account
18
+ * const account = await ua.createAccount({
19
+ * ownerSignature: '0x...',
20
+ * timestamp: Date.now(),
21
+ * });
22
+ *
23
+ * // View all chain addresses
24
+ * const addresses = await ua.getChainAddresses(account.accountId);
25
+ * console.log('Ethereum:', addresses.ethereum.address);
26
+ * console.log('Solana:', addresses.solana.address);
27
+ * console.log('Bitcoin:', addresses.bitcoin.address);
28
+ *
29
+ * // Get unified balance across all chains
30
+ * const balance = await ua.getUnifiedBalance(account.accountId);
31
+ * for (const chain of balance.chains) {
32
+ * console.log(`${chain.chain}: ${chain.nativeBalance} ${chain.nativeSymbol}`);
33
+ * }
34
+ *
35
+ * // Send — automatic routing picks the best source chain
36
+ * const result = await ua.send({
37
+ * accountId: account.accountId,
38
+ * to: '0xRecipient...',
39
+ * amount: '1.0',
40
+ * token: 'ETH',
41
+ * ownerSignature: '0x...',
42
+ * timestamp: Date.now(),
43
+ * });
44
+ * console.log('Tx:', result.txHash);
45
+ * ```
46
+ */
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.UniversalAccountClient = void 0;
49
+ const errors_1 = require("../utils/errors");
50
+ // ── Universal Account Client ──
51
+ /**
52
+ * Client for the K7 Universal Account protocol.
53
+ *
54
+ * Communicates with universal account endpoints on the agent node
55
+ * to create accounts, query balances across all chains, and send
56
+ * tokens with automatic chain routing.
57
+ */
58
+ class UniversalAccountClient {
59
+ /**
60
+ * Create a new UniversalAccountClient.
61
+ *
62
+ * @param agentUrl - Agent node REST API URL (e.g., 'http://agent:8080')
63
+ * @param options - Optional client configuration
64
+ * @param options.timeout - Request timeout in milliseconds (default: 30000)
65
+ */
66
+ constructor(agentUrl, options) {
67
+ this.baseUrl = agentUrl.replace(/\/+$/, '');
68
+ }
69
+ // ────────────────────────────────────────────────
70
+ // Account Management
71
+ // ────────────────────────────────────────────────
72
+ /**
73
+ * Create a new universal account.
74
+ *
75
+ * Initiates DKG for both secp256k1 and ed25519 curves, derives
76
+ * addresses on all 81 supported chains, and registers the account
77
+ * on the Sequence0 chain.
78
+ *
79
+ * @param options - Account creation options
80
+ * @returns The created account information with all chain addresses
81
+ *
82
+ * @throws {Sequence0Error} If the creation parameters are invalid
83
+ * @throws {NetworkError} If the agent is unreachable
84
+ */
85
+ async createAccount(options) {
86
+ if (!options.ownerSignature || typeof options.ownerSignature !== 'string') {
87
+ throw new errors_1.Sequence0Error('ownerSignature must be a non-empty string');
88
+ }
89
+ if (!options.timestamp || typeof options.timestamp !== 'number') {
90
+ throw new errors_1.Sequence0Error('timestamp must be a positive number');
91
+ }
92
+ const response = await this.post('/universal/create', {
93
+ threshold: options.threshold ?? 16,
94
+ committee_size: options.committeeSize ?? 24,
95
+ owner_signature: options.ownerSignature,
96
+ timestamp: options.timestamp,
97
+ });
98
+ return this.mapAccountResponse(response);
99
+ }
100
+ /**
101
+ * Get a universal account by its account ID.
102
+ *
103
+ * @param accountId - The unique account identifier
104
+ * @returns The account information
105
+ *
106
+ * @throws {Sequence0Error} If the account ID is invalid
107
+ * @throws {NetworkError} If the agent is unreachable or account not found
108
+ */
109
+ async getAccount(accountId) {
110
+ if (!accountId || typeof accountId !== 'string') {
111
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
112
+ }
113
+ const response = await this.get(`/universal/account/${accountId}`);
114
+ return this.mapAccountResponse(response);
115
+ }
116
+ /**
117
+ * Look up a universal account by any of its chain addresses.
118
+ *
119
+ * Given an address on any chain (Ethereum, Bitcoin, Solana, etc.),
120
+ * returns the universal account that owns it.
121
+ *
122
+ * @param address - An address on any supported chain
123
+ * @returns The account information, or null if no account owns this address
124
+ *
125
+ * @throws {Sequence0Error} If the address is invalid
126
+ * @throws {NetworkError} If the agent is unreachable
127
+ */
128
+ async getAccountByAddress(address) {
129
+ if (!address || typeof address !== 'string') {
130
+ throw new errors_1.Sequence0Error('address must be a non-empty string');
131
+ }
132
+ const response = await this.get(`/universal/lookup/${address}`);
133
+ return this.mapAccountResponse(response);
134
+ }
135
+ /**
136
+ * Get all universal accounts owned by a specific owner address.
137
+ *
138
+ * @param ownerAddress - The Ethereum owner address
139
+ * @returns Array of account information objects
140
+ *
141
+ * @throws {Sequence0Error} If the owner address is invalid
142
+ * @throws {NetworkError} If the agent is unreachable
143
+ */
144
+ async getOwnerAccounts(ownerAddress) {
145
+ if (!ownerAddress || typeof ownerAddress !== 'string') {
146
+ throw new errors_1.Sequence0Error('ownerAddress must be a non-empty string');
147
+ }
148
+ const response = await this.get(`/universal/owner/${ownerAddress}`);
149
+ if (!response || !Array.isArray(response.accounts)) {
150
+ throw new errors_1.Sequence0Error('Invalid response from /universal/owner: missing accounts array');
151
+ }
152
+ return response.accounts.map((a) => this.mapAccountResponse(a));
153
+ }
154
+ /**
155
+ * Deactivate a universal account.
156
+ *
157
+ * Marks the account as inactive. This does not destroy the keys
158
+ * or chain addresses — it prevents new sends from being initiated.
159
+ * Only the account owner can deactivate.
160
+ *
161
+ * @param accountId - The account ID to deactivate
162
+ * @param ownerSignature - Owner signature authorizing deactivation
163
+ * @param timestamp - Unix timestamp of the signature
164
+ *
165
+ * @throws {Sequence0Error} If parameters are invalid
166
+ * @throws {NetworkError} If the agent is unreachable
167
+ */
168
+ async deactivateAccount(accountId, ownerSignature, timestamp) {
169
+ if (!accountId || typeof accountId !== 'string') {
170
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
171
+ }
172
+ if (!ownerSignature || typeof ownerSignature !== 'string') {
173
+ throw new errors_1.Sequence0Error('ownerSignature must be a non-empty string');
174
+ }
175
+ if (!timestamp || typeof timestamp !== 'number') {
176
+ throw new errors_1.Sequence0Error('timestamp must be a positive number');
177
+ }
178
+ await this.post('/universal/deactivate', {
179
+ account_id: accountId,
180
+ owner_signature: ownerSignature,
181
+ timestamp,
182
+ });
183
+ }
184
+ // ────────────────────────────────────────────────
185
+ // Address Management
186
+ // ────────────────────────────────────────────────
187
+ /**
188
+ * Get all chain addresses for a universal account.
189
+ *
190
+ * @param accountId - The account ID
191
+ * @returns Map of chain name to chain address info
192
+ *
193
+ * @throws {Sequence0Error} If the account ID is invalid
194
+ * @throws {NetworkError} If the agent is unreachable
195
+ */
196
+ async getChainAddresses(accountId) {
197
+ if (!accountId || typeof accountId !== 'string') {
198
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
199
+ }
200
+ const response = await this.get(`/universal/addresses/${accountId}`);
201
+ if (!response || typeof response.addresses !== 'object') {
202
+ throw new errors_1.Sequence0Error('Invalid response from /universal/addresses: missing addresses object');
203
+ }
204
+ const result = {};
205
+ for (const [chain, raw] of Object.entries(response.addresses)) {
206
+ result[chain] = this.mapChainAddressResponse(chain, raw);
207
+ }
208
+ return result;
209
+ }
210
+ /**
211
+ * Get the address for a specific chain within a universal account.
212
+ *
213
+ * @param accountId - The account ID
214
+ * @param chain - The chain name (e.g., 'ethereum', 'bitcoin', 'solana')
215
+ * @returns The chain address info
216
+ *
217
+ * @throws {Sequence0Error} If parameters are invalid
218
+ * @throws {NetworkError} If the agent is unreachable
219
+ */
220
+ async getAddressForChain(accountId, chain) {
221
+ if (!accountId || typeof accountId !== 'string') {
222
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
223
+ }
224
+ if (!chain || typeof chain !== 'string') {
225
+ throw new errors_1.Sequence0Error('chain must be a non-empty string');
226
+ }
227
+ const addresses = await this.getChainAddresses(accountId);
228
+ const info = addresses[chain];
229
+ if (!info) {
230
+ throw new errors_1.Sequence0Error(`No address found for chain '${chain}' in account ${accountId}`);
231
+ }
232
+ return info;
233
+ }
234
+ // ────────────────────────────────────────────────
235
+ // Balance
236
+ // ────────────────────────────────────────────────
237
+ /**
238
+ * Get unified balance across all chains for a universal account.
239
+ *
240
+ * Agents query balances on all chains where the account has
241
+ * derived addresses and return an aggregated view.
242
+ *
243
+ * @param accountId - The account ID
244
+ * @returns Unified balance with per-chain breakdown
245
+ *
246
+ * @throws {Sequence0Error} If the account ID is invalid
247
+ * @throws {NetworkError} If the agent is unreachable
248
+ */
249
+ async getUnifiedBalance(accountId) {
250
+ if (!accountId || typeof accountId !== 'string') {
251
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
252
+ }
253
+ const response = await this.get(`/universal/balance/${accountId}`);
254
+ return this.mapUnifiedBalanceResponse(response);
255
+ }
256
+ /**
257
+ * Get the balance for a specific chain within a universal account.
258
+ *
259
+ * @param accountId - The account ID
260
+ * @param chain - The chain name (e.g., 'ethereum', 'bitcoin', 'solana')
261
+ * @returns The chain balance
262
+ *
263
+ * @throws {Sequence0Error} If parameters are invalid
264
+ * @throws {NetworkError} If the agent is unreachable
265
+ */
266
+ async getChainBalance(accountId, chain) {
267
+ if (!accountId || typeof accountId !== 'string') {
268
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
269
+ }
270
+ if (!chain || typeof chain !== 'string') {
271
+ throw new errors_1.Sequence0Error('chain must be a non-empty string');
272
+ }
273
+ const response = await this.get(`/universal/balance/${accountId}/${chain}`);
274
+ return this.mapChainBalanceResponse(response);
275
+ }
276
+ // ────────────────────────────────────────────────
277
+ // Send
278
+ // ────────────────────────────────────────────────
279
+ /**
280
+ * Send tokens from a universal account.
281
+ *
282
+ * The agent network automatically selects the optimal source chain
283
+ * based on available balances, gas fees, and confirmation times.
284
+ * Use `preferredChain` to override automatic routing.
285
+ *
286
+ * @param options - Send options
287
+ * @returns The send result with routing decision and request ID for polling
288
+ *
289
+ * @throws {Sequence0Error} If the send parameters are invalid
290
+ * @throws {NetworkError} If the agent is unreachable
291
+ *
292
+ * @example
293
+ * ```typescript
294
+ * const result = await ua.send({
295
+ * accountId: 'ua-abc123',
296
+ * to: '0xRecipient...',
297
+ * amount: '1.5',
298
+ * token: 'ETH',
299
+ * ownerSignature: '0x...',
300
+ * timestamp: Date.now(),
301
+ * });
302
+ *
303
+ * // Poll for confirmation
304
+ * const status = await ua.getSendStatus(result.requestId);
305
+ * ```
306
+ */
307
+ async send(options) {
308
+ if (!options.accountId || typeof options.accountId !== 'string') {
309
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
310
+ }
311
+ if (!options.to || typeof options.to !== 'string') {
312
+ throw new errors_1.Sequence0Error('to must be a non-empty string');
313
+ }
314
+ if (!options.amount || typeof options.amount !== 'string') {
315
+ throw new errors_1.Sequence0Error('amount must be a non-empty string');
316
+ }
317
+ if (!options.token || typeof options.token !== 'string') {
318
+ throw new errors_1.Sequence0Error('token must be a non-empty string');
319
+ }
320
+ if (!options.ownerSignature || typeof options.ownerSignature !== 'string') {
321
+ throw new errors_1.Sequence0Error('ownerSignature must be a non-empty string');
322
+ }
323
+ if (!options.timestamp || typeof options.timestamp !== 'number') {
324
+ throw new errors_1.Sequence0Error('timestamp must be a positive number');
325
+ }
326
+ const response = await this.post('/universal/send', {
327
+ account_id: options.accountId,
328
+ to: options.to,
329
+ amount: options.amount,
330
+ token: options.token,
331
+ preferred_chain: options.preferredChain,
332
+ owner_signature: options.ownerSignature,
333
+ timestamp: options.timestamp,
334
+ });
335
+ return this.mapSendResultResponse(response);
336
+ }
337
+ /**
338
+ * Get the current status of a send operation.
339
+ *
340
+ * @param requestId - The send request ID
341
+ * @returns Current status of the send
342
+ *
343
+ * @throws {Sequence0Error} If the request ID is invalid
344
+ * @throws {NetworkError} If the agent is unreachable
345
+ */
346
+ async getSendStatus(requestId) {
347
+ if (!requestId || typeof requestId !== 'string') {
348
+ throw new errors_1.Sequence0Error('requestId must be a non-empty string');
349
+ }
350
+ const response = await this.get(`/universal/send/${requestId}`);
351
+ return this.mapSendResultResponse(response);
352
+ }
353
+ /**
354
+ * Wait for a send operation to reach a terminal status by polling.
355
+ *
356
+ * Polls the send status endpoint at 2-second intervals until
357
+ * the send is confirmed, fails, or the timeout is exceeded.
358
+ *
359
+ * @param requestId - The send request ID to wait for
360
+ * @param timeout - Max time to wait in ms (default: 120000)
361
+ * @returns The final send result
362
+ *
363
+ * @throws {TimeoutError} If the send is not completed within the timeout
364
+ * @throws {Sequence0Error} If the send fails
365
+ * @throws {NetworkError} If the agent is unreachable
366
+ */
367
+ async waitForSend(requestId, timeout) {
368
+ if (!requestId || typeof requestId !== 'string') {
369
+ throw new errors_1.Sequence0Error('requestId must be a non-empty string');
370
+ }
371
+ const maxWait = timeout ?? 120000;
372
+ const pollInterval = 2000;
373
+ const startTime = Date.now();
374
+ while (Date.now() - startTime < maxWait) {
375
+ const result = await this.getSendStatus(requestId);
376
+ if (result.status === 'confirmed') {
377
+ return result;
378
+ }
379
+ if (result.status === 'failed') {
380
+ throw new errors_1.Sequence0Error(`Universal send ${requestId} failed: ${result.routing.reason}`);
381
+ }
382
+ // Wait before polling again
383
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
384
+ }
385
+ throw new errors_1.TimeoutError(`Universal send ${requestId} did not complete within ${maxWait}ms`);
386
+ }
387
+ // ────────────────────────────────────────────────
388
+ // Route Preview
389
+ // ────────────────────────────────────────────────
390
+ /**
391
+ * Preview the routing decision for a send without executing it.
392
+ *
393
+ * Use this to show users which chain will be used and the estimated
394
+ * fee before they authorize the send with their signature.
395
+ *
396
+ * @param options - Send options (without ownerSignature and timestamp)
397
+ * @returns The routing decision that would be made
398
+ *
399
+ * @throws {Sequence0Error} If the parameters are invalid
400
+ * @throws {NetworkError} If the agent is unreachable
401
+ *
402
+ * @example
403
+ * ```typescript
404
+ * const route = await ua.previewRoute({
405
+ * accountId: 'ua-abc123',
406
+ * to: '0xRecipient...',
407
+ * amount: '1.5',
408
+ * token: 'ETH',
409
+ * });
410
+ * console.log(`Will send from ${route.sourceChain} (fee: ${route.estimatedFee})`);
411
+ * ```
412
+ */
413
+ async previewRoute(options) {
414
+ if (!options.accountId || typeof options.accountId !== 'string') {
415
+ throw new errors_1.Sequence0Error('accountId must be a non-empty string');
416
+ }
417
+ if (!options.to || typeof options.to !== 'string') {
418
+ throw new errors_1.Sequence0Error('to must be a non-empty string');
419
+ }
420
+ if (!options.amount || typeof options.amount !== 'string') {
421
+ throw new errors_1.Sequence0Error('amount must be a non-empty string');
422
+ }
423
+ if (!options.token || typeof options.token !== 'string') {
424
+ throw new errors_1.Sequence0Error('token must be a non-empty string');
425
+ }
426
+ const response = await this.post('/universal/route', {
427
+ account_id: options.accountId,
428
+ to: options.to,
429
+ amount: options.amount,
430
+ token: options.token,
431
+ preferred_chain: options.preferredChain,
432
+ });
433
+ return this.mapRoutingDecisionResponse(response);
434
+ }
435
+ // ────────────────────────────────────────────────
436
+ // Stats
437
+ // ────────────────────────────────────────────────
438
+ /**
439
+ * Get network-wide Universal Account statistics.
440
+ *
441
+ * @returns Protocol statistics
442
+ *
443
+ * @throws {NetworkError} If the agent is unreachable
444
+ */
445
+ async getStats() {
446
+ const response = await this.get('/universal/stats');
447
+ if (!response || typeof response.total_accounts !== 'number') {
448
+ throw new errors_1.Sequence0Error('Invalid response from /universal/stats: missing total_accounts');
449
+ }
450
+ return {
451
+ totalAccounts: response.total_accounts,
452
+ totalAddresses: response.total_addresses,
453
+ activeSends: response.active_sends,
454
+ };
455
+ }
456
+ // ── Internal HTTP helpers ──
457
+ async get(path) {
458
+ const url = `${this.baseUrl}${path}`;
459
+ let res;
460
+ try {
461
+ res = await fetch(url, {
462
+ method: 'GET',
463
+ headers: { 'Content-Type': 'application/json' },
464
+ });
465
+ }
466
+ catch (err) {
467
+ throw new errors_1.NetworkError(`Failed to reach agent at ${url}: ${err.message}`);
468
+ }
469
+ if (!res.ok) {
470
+ const body = await res.text().catch(() => '');
471
+ throw new errors_1.NetworkError(`GET ${path} failed with status ${res.status}: ${body}`, res.status);
472
+ }
473
+ return res.json();
474
+ }
475
+ async post(path, body) {
476
+ const url = `${this.baseUrl}${path}`;
477
+ let res;
478
+ try {
479
+ res = await fetch(url, {
480
+ method: 'POST',
481
+ headers: { 'Content-Type': 'application/json' },
482
+ body: JSON.stringify(body),
483
+ });
484
+ }
485
+ catch (err) {
486
+ throw new errors_1.NetworkError(`Failed to reach agent at ${url}: ${err.message}`);
487
+ }
488
+ if (!res.ok) {
489
+ const errBody = await res.text().catch(() => '');
490
+ throw new errors_1.NetworkError(`POST ${path} failed with status ${res.status}: ${errBody}`, res.status);
491
+ }
492
+ return res.json();
493
+ }
494
+ // ── Response Mappers ──
495
+ mapAccountResponse(response) {
496
+ if (!response || typeof response.account_id !== 'string') {
497
+ throw new errors_1.Sequence0Error('Invalid universal account response: missing account_id');
498
+ }
499
+ const chainAddresses = {};
500
+ if (response.chain_addresses && typeof response.chain_addresses === 'object') {
501
+ for (const [chain, raw] of Object.entries(response.chain_addresses)) {
502
+ chainAddresses[chain] = this.mapChainAddressResponse(chain, raw);
503
+ }
504
+ }
505
+ return {
506
+ accountId: response.account_id,
507
+ ownerAddress: response.owner_address,
508
+ secp256k1GroupKey: response.secp256k1_group_key,
509
+ ed25519GroupKey: response.ed25519_group_key,
510
+ threshold: response.threshold,
511
+ committeeSize: response.committee_size,
512
+ chainAddresses,
513
+ createdAt: response.created_at,
514
+ isActive: response.is_active ?? true,
515
+ };
516
+ }
517
+ mapChainAddressResponse(chain, response) {
518
+ const validCurves = ['secp256k1', 'ed25519'];
519
+ const curveType = validCurves.includes(response.curve_type)
520
+ ? response.curve_type
521
+ : 'secp256k1';
522
+ return {
523
+ chain,
524
+ address: response.address,
525
+ curveType,
526
+ isActive: response.is_active ?? true,
527
+ };
528
+ }
529
+ mapChainBalanceResponse(response) {
530
+ if (!response || typeof response.chain !== 'string') {
531
+ throw new errors_1.Sequence0Error('Invalid chain balance response: missing chain');
532
+ }
533
+ const tokens = Array.isArray(response.tokens)
534
+ ? response.tokens.map((t) => ({
535
+ symbol: t.symbol,
536
+ contractAddress: t.contract_address,
537
+ balance: t.balance,
538
+ decimals: t.decimals,
539
+ }))
540
+ : [];
541
+ return {
542
+ chain: response.chain,
543
+ address: response.address,
544
+ nativeBalance: response.native_balance,
545
+ nativeSymbol: response.native_symbol,
546
+ tokens,
547
+ lastUpdated: response.last_updated,
548
+ };
549
+ }
550
+ mapUnifiedBalanceResponse(response) {
551
+ if (!response || typeof response.account_id !== 'string') {
552
+ throw new errors_1.Sequence0Error('Invalid unified balance response: missing account_id');
553
+ }
554
+ const chains = Array.isArray(response.chains)
555
+ ? response.chains.map((c) => this.mapChainBalanceResponse(c))
556
+ : [];
557
+ return {
558
+ accountId: response.account_id,
559
+ chains,
560
+ totalChains: response.total_chains,
561
+ lastAggregated: response.last_aggregated,
562
+ };
563
+ }
564
+ mapRoutingDecisionResponse(response) {
565
+ if (!response || typeof response.source_chain !== 'string') {
566
+ throw new errors_1.Sequence0Error('Invalid routing decision response: missing source_chain');
567
+ }
568
+ return {
569
+ sourceChain: response.source_chain,
570
+ sourceAddress: response.source_address,
571
+ destinationChain: response.destination_chain,
572
+ destinationAddress: response.destination_address,
573
+ amount: response.amount,
574
+ token: response.token,
575
+ estimatedFee: response.estimated_fee,
576
+ reason: response.reason,
577
+ };
578
+ }
579
+ mapSendResultResponse(response) {
580
+ if (!response || typeof response.request_id !== 'string') {
581
+ throw new errors_1.Sequence0Error('Invalid send result response: missing request_id');
582
+ }
583
+ const validStatuses = ['pending', 'routing', 'signing', 'broadcasting', 'confirmed', 'failed'];
584
+ const status = validStatuses.includes(response.status)
585
+ ? response.status
586
+ : 'pending';
587
+ return {
588
+ requestId: response.request_id,
589
+ routing: this.mapRoutingDecisionResponse(response.routing),
590
+ status,
591
+ txHash: response.tx_hash,
592
+ signature: response.signature,
593
+ };
594
+ }
595
+ }
596
+ exports.UniversalAccountClient = UniversalAccountClient;
597
+ //# sourceMappingURL=universal-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"universal-account.js","sourceRoot":"","sources":["../../src/core/universal-account.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;;;AAEH,4CAA6E;AA4M7E,iCAAiC;AAEjC;;;;;;GAMG;AACH,MAAa,sBAAsB;IAG/B;;;;;;OAMG;IACH,YAAY,QAAgB,EAAE,OAA8B;QACxD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,mDAAmD;IACnD,sBAAsB;IACtB,mDAAmD;IAEnD;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,aAAa,CAAC,OAAsC;QACtD,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,uBAAc,CAAC,2CAA2C,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,uBAAc,CAAC,qCAAqC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAA8B,mBAAmB,EAAE;YAC/E,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YAClC,cAAc,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;YAC3C,eAAe,EAAE,OAAO,CAAC,cAAc;YACvC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAC9B,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,sBAAsB,SAAS,EAAE,CACpC,CAAC;QAEF,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,uBAAc,CAAC,oCAAoC,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,qBAAqB,OAAO,EAAE,CACjC,CAAC;QAEF,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,gBAAgB,CAAC,YAAoB;QACvC,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,uBAAc,CAAC,yCAAyC,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAE5B,oBAAoB,YAAY,EAAE,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,uBAAc,CACpB,gEAAgE,CACnE,CAAC;QACN,CAAC;QAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,cAAsB,EAAE,SAAiB;QAChF,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,uBAAc,CAAC,2CAA2C,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,qCAAqC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAK,uBAAuB,EAAE;YACzC,UAAU,EAAE,SAAS;YACrB,eAAe,EAAE,cAAc;YAC/B,SAAS;SACZ,CAAC,CAAC;IACP,CAAC;IAED,mDAAmD;IACnD,sBAAsB;IACtB,mDAAmD;IAEnD;;;;;;;;OAQG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACrC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAE5B,wBAAwB,SAAS,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,uBAAc,CACpB,sEAAsE,CACzE,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAqC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,kBAAkB,CAAC,SAAiB,EAAE,KAAa;QACrD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,uBAAc,CAAC,kCAAkC,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,uBAAc,CAAC,+BAA+B,KAAK,gBAAgB,SAAS,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mDAAmD;IACnD,WAAW;IACX,mDAAmD;IAEnD;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACrC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,sBAAsB,SAAS,EAAE,CACpC,CAAC;QAEF,OAAO,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,KAAa;QAClD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,uBAAc,CAAC,kCAAkC,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,sBAAsB,SAAS,IAAI,KAAK,EAAE,CAC7C,CAAC;QAEF,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,mDAAmD;IACnD,QAAQ;IACR,mDAAmD;IAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,KAAK,CAAC,IAAI,CAAC,OAA6B;QACpC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,uBAAc,CAAC,+BAA+B,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,uBAAc,CAAC,mCAAmC,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,uBAAc,CAAC,kCAAkC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,uBAAc,CAAC,2CAA2C,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,uBAAc,CAAC,qCAAqC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAwB,iBAAiB,EAAE;YACvE,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,cAAc;YACvC,eAAe,EAAE,OAAO,CAAC,cAAc;YACvC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACjC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,mBAAmB,SAAS,EAAE,CACjC,CAAC;QAEF,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,OAAgB;QACjD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,IAAI,MAAO,CAAC;QACnC,MAAM,YAAY,GAAG,IAAK,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAEnD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,uBAAc,CACpB,kBAAkB,SAAS,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CACjE,CAAC;YACN,CAAC;YAED,4BAA4B;YAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,qBAAY,CAClB,kBAAkB,SAAS,4BAA4B,OAAO,IAAI,CACrE,CAAC;IACN,CAAC;IAED,mDAAmD;IACnD,iBAAiB;IACjB,mDAAmD;IAEnD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,YAAY,CAAC,OAAmE;QAClF,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,uBAAc,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,uBAAc,CAAC,+BAA+B,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,uBAAc,CAAC,mCAAmC,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,uBAAc,CAAC,kCAAkC,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAA6B,kBAAkB,EAAE;YAC7E,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,cAAc;SAC1C,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,mDAAmD;IACnD,SAAS;IACT,mDAAmD;IAEnD;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAI5B,kBAAkB,CAAC,CAAC;QAEvB,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,IAAI,uBAAc,CACpB,gEAAgE,CACnE,CAAC;QACN,CAAC;QAED,OAAO;YACH,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,cAAc,EAAE,QAAQ,CAAC,eAAe;YACxC,WAAW,EAAE,QAAQ,CAAC,YAAY;SACrC,CAAC;IACN,CAAC;IAED,8BAA8B;IAEtB,KAAK,CAAC,GAAG,CAAI,IAAY;QAC7B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,IAAI,GAAa,CAAC;QAElB,IAAI,CAAC;YACD,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACnB,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAClD,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,qBAAY,CAClB,4BAA4B,GAAG,KAAM,GAAa,CAAC,OAAO,EAAE,CAC/D,CAAC;QACN,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,qBAAY,CAClB,OAAO,IAAI,uBAAuB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,EACvD,GAAG,CAAC,MAAM,CACb,CAAC;QACN,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa;QAC7C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,IAAI,GAAa,CAAC;QAElB,IAAI,CAAC;YACD,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACnB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC7B,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,qBAAY,CAClB,4BAA4B,GAAG,KAAM,GAAa,CAAC,OAAO,EAAE,CAC/D,CAAC;QACN,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,IAAI,qBAAY,CAClB,QAAQ,IAAI,uBAAuB,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,EAC3D,GAAG,CAAC,MAAM,CACb,CAAC;QACN,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IACpC,CAAC;IAED,yBAAyB;IAEjB,kBAAkB,CAAC,QAAqC;QAC5D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,uBAAc,CACpB,wDAAwD,CAC3D,CAAC;QACN,CAAC;QAED,MAAM,cAAc,GAAqC,EAAE,CAAC;QAC5D,IAAI,QAAQ,CAAC,eAAe,IAAI,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;YAC3E,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAClE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrE,CAAC;QACL,CAAC;QAED,OAAO;YACH,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,YAAY,EAAE,QAAQ,CAAC,aAAa;YACpC,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB;YAC/C,eAAe,EAAE,QAAQ,CAAC,iBAAiB;YAC3C,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,cAAc;YACd,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;SACvC,CAAC;IACN,CAAC;IAEO,uBAAuB,CAAC,KAAa,EAAE,QAAiC;QAC5E,MAAM,WAAW,GAAmC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAqC,CAAC;YAClF,CAAC,CAAE,QAAQ,CAAC,UAAsC;YAClD,CAAC,CAAC,WAAW,CAAC;QAElB,OAAO;YACH,KAAK;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS;YACT,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;SACvC,CAAC;IACN,CAAC;IAEO,uBAAuB,CAAC,QAAiC;QAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,uBAAc,CACpB,+CAA+C,CAClD,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAmB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,eAAe,EAAE,CAAC,CAAC,gBAAgB;gBACnC,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACvB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAC;QAET,OAAO;YACH,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,YAAY,EAAE,QAAQ,CAAC,aAAa;YACpC,MAAM;YACN,WAAW,EAAE,QAAQ,CAAC,YAAY;SACrC,CAAC;IACN,CAAC;IAEO,yBAAyB,CAAC,QAAmC;QACjE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,uBAAc,CACpB,sDAAsD,CACzD,CAAC;QACN,CAAC;QAED,MAAM,MAAM,GAAmB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAC;QAET,OAAO;YACH,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,MAAM;YACN,WAAW,EAAE,QAAQ,CAAC,YAAY;YAClC,cAAc,EAAE,QAAQ,CAAC,eAAe;SAC3C,CAAC;IACN,CAAC;IAEO,0BAA0B,CAAC,QAAoC;QACnE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACzD,MAAM,IAAI,uBAAc,CACpB,yDAAyD,CAC5D,CAAC;QACN,CAAC;QAED,OAAO;YACH,WAAW,EAAE,QAAQ,CAAC,YAAY;YAClC,aAAa,EAAE,QAAQ,CAAC,cAAc;YACtC,gBAAgB,EAAE,QAAQ,CAAC,iBAAiB;YAC5C,kBAAkB,EAAE,QAAQ,CAAC,mBAAmB;YAChD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,YAAY,EAAE,QAAQ,CAAC,aAAa;YACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;SAC1B,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,QAA+B;QACzD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,uBAAc,CACpB,kDAAkD,CACrD,CAAC;QACN,CAAC;QAED,MAAM,aAAa,GAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAoB,CAAC;YAChE,CAAC,CAAE,QAAQ,CAAC,MAAqB;YACjC,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;YACH,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1D,MAAM;YACN,MAAM,EAAE,QAAQ,CAAC,OAAO;YACxB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAChC,CAAC;IACN,CAAC;CACJ;AAzpBD,wDAypBC"}