pay-lobster 1.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 (120) hide show
  1. package/README.md +401 -0
  2. package/README.md.bak +401 -0
  3. package/dist/agent.d.ts +132 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +224 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/analytics.d.ts +120 -0
  8. package/dist/analytics.d.ts.map +1 -0
  9. package/dist/analytics.js +345 -0
  10. package/dist/analytics.js.map +1 -0
  11. package/dist/approvals.d.ts +168 -0
  12. package/dist/approvals.d.ts.map +1 -0
  13. package/dist/approvals.js +406 -0
  14. package/dist/approvals.js.map +1 -0
  15. package/dist/circle-client.d.ts +152 -0
  16. package/dist/circle-client.d.ts.map +1 -0
  17. package/dist/circle-client.js +266 -0
  18. package/dist/circle-client.js.map +1 -0
  19. package/dist/commission.d.ts +191 -0
  20. package/dist/commission.d.ts.map +1 -0
  21. package/dist/commission.js +475 -0
  22. package/dist/commission.js.map +1 -0
  23. package/dist/condition-builder.d.ts +98 -0
  24. package/dist/condition-builder.d.ts.map +1 -0
  25. package/dist/condition-builder.js +193 -0
  26. package/dist/condition-builder.js.map +1 -0
  27. package/dist/contacts.d.ts +179 -0
  28. package/dist/contacts.d.ts.map +1 -0
  29. package/dist/contacts.js +445 -0
  30. package/dist/contacts.js.map +1 -0
  31. package/dist/easy.d.ts +22 -0
  32. package/dist/easy.d.ts.map +1 -0
  33. package/dist/easy.js +40 -0
  34. package/dist/easy.js.map +1 -0
  35. package/dist/erc8004/constants.d.ts +152 -0
  36. package/dist/erc8004/constants.d.ts.map +1 -0
  37. package/dist/erc8004/constants.js +114 -0
  38. package/dist/erc8004/constants.js.map +1 -0
  39. package/dist/erc8004/discovery.d.ts +84 -0
  40. package/dist/erc8004/discovery.d.ts.map +1 -0
  41. package/dist/erc8004/discovery.js +217 -0
  42. package/dist/erc8004/discovery.js.map +1 -0
  43. package/dist/erc8004/identity.d.ts +91 -0
  44. package/dist/erc8004/identity.d.ts.map +1 -0
  45. package/dist/erc8004/identity.js +250 -0
  46. package/dist/erc8004/identity.js.map +1 -0
  47. package/dist/erc8004/index.d.ts +147 -0
  48. package/dist/erc8004/index.d.ts.map +1 -0
  49. package/dist/erc8004/index.js +225 -0
  50. package/dist/erc8004/index.js.map +1 -0
  51. package/dist/erc8004/reputation.d.ts +133 -0
  52. package/dist/erc8004/reputation.d.ts.map +1 -0
  53. package/dist/erc8004/reputation.js +277 -0
  54. package/dist/erc8004/reputation.js.map +1 -0
  55. package/dist/escrow-templates.d.ts +38 -0
  56. package/dist/escrow-templates.d.ts.map +1 -0
  57. package/dist/escrow-templates.js +419 -0
  58. package/dist/escrow-templates.js.map +1 -0
  59. package/dist/escrow.d.ts +320 -0
  60. package/dist/escrow.d.ts.map +1 -0
  61. package/dist/escrow.js +854 -0
  62. package/dist/escrow.js.map +1 -0
  63. package/dist/index.d.ts +11 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +33 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/invoices.d.ts +212 -0
  68. package/dist/invoices.d.ts.map +1 -0
  69. package/dist/invoices.js +393 -0
  70. package/dist/invoices.js.map +1 -0
  71. package/dist/notifications.d.ts +141 -0
  72. package/dist/notifications.d.ts.map +1 -0
  73. package/dist/notifications.js +350 -0
  74. package/dist/notifications.js.map +1 -0
  75. package/dist/tips.d.ts +171 -0
  76. package/dist/tips.d.ts.map +1 -0
  77. package/dist/tips.js +390 -0
  78. package/dist/tips.js.map +1 -0
  79. package/dist/types.d.ts +100 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +6 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/x402-client.d.ts +127 -0
  84. package/dist/x402-client.d.ts.map +1 -0
  85. package/dist/x402-client.js +350 -0
  86. package/dist/x402-client.js.map +1 -0
  87. package/dist/x402-server.d.ts +133 -0
  88. package/dist/x402-server.d.ts.map +1 -0
  89. package/dist/x402-server.js +330 -0
  90. package/dist/x402-server.js.map +1 -0
  91. package/lib/agent.ts +273 -0
  92. package/lib/analytics.ts +474 -0
  93. package/lib/analytics.ts.bak +474 -0
  94. package/lib/approvals.ts +585 -0
  95. package/lib/approvals.ts.bak +585 -0
  96. package/lib/circle-client.ts +376 -0
  97. package/lib/circle-client.ts.bak +376 -0
  98. package/lib/commission.ts +680 -0
  99. package/lib/commission.ts.bak +680 -0
  100. package/lib/condition-builder.ts +223 -0
  101. package/lib/condition-builder.ts.bak +223 -0
  102. package/lib/contacts.ts +615 -0
  103. package/lib/contacts.ts.bak +615 -0
  104. package/lib/easy.ts +46 -0
  105. package/lib/easy.ts.bak +352 -0
  106. package/lib/erc8004/constants.ts +175 -0
  107. package/lib/erc8004/discovery.ts +299 -0
  108. package/lib/erc8004/identity.ts +327 -0
  109. package/lib/erc8004/index.ts +285 -0
  110. package/lib/erc8004/reputation.ts +368 -0
  111. package/lib/escrow-templates.ts +462 -0
  112. package/lib/escrow.ts +1216 -0
  113. package/lib/index.ts +13 -0
  114. package/lib/invoices.ts +588 -0
  115. package/lib/notifications.ts +484 -0
  116. package/lib/tips.ts +570 -0
  117. package/lib/types.ts +108 -0
  118. package/lib/x402-client.ts +471 -0
  119. package/lib/x402-server.ts +462 -0
  120. package/package.json +58 -0
@@ -0,0 +1,406 @@
1
+ "use strict";
2
+ /**
3
+ * Transaction Approval System
4
+ *
5
+ * Multi-step approval workflow for large or sensitive transactions.
6
+ * Integrates with Clawdbot for conversational approvals.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ApprovalManager = void 0;
13
+ const crypto_1 = __importDefault(require("crypto"));
14
+ const promises_1 = __importDefault(require("fs/promises"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const DATA_DIR = process.env.USDC_DATA_DIR || './data';
17
+ /**
18
+ * Approval Manager
19
+ */
20
+ class ApprovalManager {
21
+ constructor(dataDir = DATA_DIR) {
22
+ this.policiesPath = path_1.default.join(dataDir, 'approval-policies.json');
23
+ this.pendingPath = path_1.default.join(dataDir, 'pending-transactions.json');
24
+ this.spendingPath = path_1.default.join(dataDir, 'daily-spending.json');
25
+ }
26
+ async loadPolicies() {
27
+ try {
28
+ const data = await promises_1.default.readFile(this.policiesPath, 'utf-8');
29
+ return JSON.parse(data);
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ }
35
+ async savePolicies(policies) {
36
+ await promises_1.default.mkdir(path_1.default.dirname(this.policiesPath), { recursive: true });
37
+ await promises_1.default.writeFile(this.policiesPath, JSON.stringify(policies, null, 2));
38
+ }
39
+ async loadPending() {
40
+ try {
41
+ const data = await promises_1.default.readFile(this.pendingPath, 'utf-8');
42
+ return JSON.parse(data);
43
+ }
44
+ catch {
45
+ return [];
46
+ }
47
+ }
48
+ async savePending(pending) {
49
+ await promises_1.default.mkdir(path_1.default.dirname(this.pendingPath), { recursive: true });
50
+ await promises_1.default.writeFile(this.pendingPath, JSON.stringify(pending, null, 2));
51
+ }
52
+ async loadSpending() {
53
+ try {
54
+ const data = await promises_1.default.readFile(this.spendingPath, 'utf-8');
55
+ return JSON.parse(data);
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ }
61
+ async saveSpending(spending) {
62
+ await promises_1.default.mkdir(path_1.default.dirname(this.spendingPath), { recursive: true });
63
+ await promises_1.default.writeFile(this.spendingPath, JSON.stringify(spending, null, 2));
64
+ }
65
+ // ============ Policy Management ============
66
+ /**
67
+ * Create approval policy
68
+ */
69
+ async createPolicy(params) {
70
+ const policies = await this.loadPolicies();
71
+ const policy = {
72
+ id: crypto_1.default.randomUUID(),
73
+ name: params.name,
74
+ enabled: true,
75
+ conditions: params.conditions,
76
+ approvers: params.approvers,
77
+ requiredApprovals: params.requiredApprovals || 1,
78
+ timeout: params.timeout || 86400, // 24 hours default
79
+ timeoutAction: params.timeoutAction || 'cancel',
80
+ createdAt: new Date().toISOString(),
81
+ updatedAt: new Date().toISOString(),
82
+ };
83
+ policies.push(policy);
84
+ await this.savePolicies(policies);
85
+ return policy;
86
+ }
87
+ /**
88
+ * Get active policies for a transaction
89
+ */
90
+ async getMatchingPolicies(tx) {
91
+ const policies = await this.loadPolicies();
92
+ const spending = await this.getDailySpending(tx.walletId);
93
+ const matchingPolicies = [];
94
+ for (const policy of policies) {
95
+ if (!policy.enabled)
96
+ continue;
97
+ const { conditions } = policy;
98
+ let matches = false;
99
+ // Check amount threshold
100
+ if (conditions.minAmount && parseFloat(tx.amount) >= parseFloat(conditions.minAmount)) {
101
+ matches = true;
102
+ }
103
+ // Check daily limit
104
+ if (conditions.maxDailyLimit) {
105
+ const todayTotal = parseFloat(spending?.total || '0') + parseFloat(tx.amount);
106
+ if (todayTotal > parseFloat(conditions.maxDailyLimit)) {
107
+ matches = true;
108
+ }
109
+ }
110
+ // Check specific addresses
111
+ if (conditions.addresses && conditions.addresses.length > 0) {
112
+ if (conditions.addresses.some(a => a.toLowerCase() === tx.toAddress.toLowerCase())) {
113
+ matches = true;
114
+ }
115
+ }
116
+ // Check chains
117
+ if (conditions.chains && conditions.chains.length > 0) {
118
+ if (conditions.chains.includes(tx.chain)) {
119
+ matches = true;
120
+ }
121
+ }
122
+ // Always require approval
123
+ if (conditions.always) {
124
+ matches = true;
125
+ }
126
+ if (matches) {
127
+ matchingPolicies.push(policy);
128
+ }
129
+ }
130
+ return matchingPolicies;
131
+ }
132
+ /**
133
+ * List all policies
134
+ */
135
+ async listPolicies() {
136
+ return this.loadPolicies();
137
+ }
138
+ /**
139
+ * Toggle policy enabled state
140
+ */
141
+ async togglePolicy(id, enabled) {
142
+ const policies = await this.loadPolicies();
143
+ const policy = policies.find(p => p.id === id);
144
+ if (policy) {
145
+ policy.enabled = enabled;
146
+ policy.updatedAt = new Date().toISOString();
147
+ await this.savePolicies(policies);
148
+ }
149
+ return policy || null;
150
+ }
151
+ /**
152
+ * Delete policy
153
+ */
154
+ async deletePolicy(id) {
155
+ const policies = await this.loadPolicies();
156
+ const index = policies.findIndex(p => p.id === id);
157
+ if (index >= 0) {
158
+ policies.splice(index, 1);
159
+ await this.savePolicies(policies);
160
+ return true;
161
+ }
162
+ return false;
163
+ }
164
+ // ============ Pending Transactions ============
165
+ /**
166
+ * Submit transaction for approval
167
+ */
168
+ async submitForApproval(tx) {
169
+ // Check if approval is required
170
+ const policies = await this.getMatchingPolicies({
171
+ amount: tx.amount,
172
+ toAddress: tx.toAddress,
173
+ chain: tx.chain,
174
+ walletId: tx.fromWalletId,
175
+ });
176
+ // No policies match - auto-approve
177
+ if (policies.length === 0) {
178
+ return { approved: true };
179
+ }
180
+ // Use the strictest policy (most approvals required)
181
+ const policy = policies.reduce((strictest, p) => p.requiredApprovals > strictest.requiredApprovals ? p : strictest);
182
+ const pending = await this.loadPending();
183
+ const transaction = {
184
+ id: crypto_1.default.randomUUID(),
185
+ policyId: policy.id,
186
+ type: tx.type,
187
+ fromWalletId: tx.fromWalletId,
188
+ toAddress: tx.toAddress,
189
+ toName: tx.toName,
190
+ amount: tx.amount,
191
+ chain: tx.chain,
192
+ targetChain: tx.targetChain,
193
+ memo: tx.memo,
194
+ status: 'pending',
195
+ approvals: [],
196
+ requestedBy: tx.requestedBy,
197
+ createdAt: new Date().toISOString(),
198
+ expiresAt: new Date(Date.now() + policy.timeout * 1000).toISOString(),
199
+ };
200
+ pending.push(transaction);
201
+ await this.savePending(pending);
202
+ return transaction;
203
+ }
204
+ /**
205
+ * Approve or reject a pending transaction
206
+ */
207
+ async decide(txId, approverId, decision, note) {
208
+ const pending = await this.loadPending();
209
+ const tx = pending.find(t => t.id === txId);
210
+ if (!tx || tx.status !== 'pending') {
211
+ return null;
212
+ }
213
+ // Check if already decided by this approver
214
+ if (tx.approvals.some(a => a.approverId === approverId)) {
215
+ throw new Error('Already submitted decision');
216
+ }
217
+ // Check if approver is authorized
218
+ const policies = await this.loadPolicies();
219
+ const policy = policies.find(p => p.id === tx.policyId);
220
+ if (!policy || !policy.approvers.includes(approverId)) {
221
+ throw new Error('Not authorized to approve this transaction');
222
+ }
223
+ // Record decision
224
+ tx.approvals.push({
225
+ approverId,
226
+ decision,
227
+ timestamp: new Date().toISOString(),
228
+ note,
229
+ });
230
+ // Check if rejected
231
+ if (decision === 'reject') {
232
+ tx.status = 'rejected';
233
+ tx.rejectionReason = note || 'Rejected by approver';
234
+ }
235
+ // Check if enough approvals
236
+ else {
237
+ const approvalCount = tx.approvals.filter(a => a.decision === 'approve').length;
238
+ if (approvalCount >= policy.requiredApprovals) {
239
+ tx.status = 'approved';
240
+ }
241
+ }
242
+ await this.savePending(pending);
243
+ return tx;
244
+ }
245
+ /**
246
+ * Mark transaction as executed
247
+ */
248
+ async markExecuted(txId, txHash) {
249
+ const pending = await this.loadPending();
250
+ const tx = pending.find(t => t.id === txId);
251
+ if (tx && tx.status === 'approved') {
252
+ tx.status = 'executed';
253
+ tx.txHash = txHash;
254
+ tx.executedAt = new Date().toISOString();
255
+ // Record spending
256
+ await this.recordSpending(tx.fromWalletId, tx.amount, txHash);
257
+ await this.savePending(pending);
258
+ }
259
+ return tx || null;
260
+ }
261
+ /**
262
+ * Cancel a pending transaction
263
+ */
264
+ async cancel(txId, requesterId) {
265
+ const pending = await this.loadPending();
266
+ const tx = pending.find(t => t.id === txId);
267
+ if (tx && tx.status === 'pending' && tx.requestedBy === requesterId) {
268
+ tx.status = 'cancelled';
269
+ await this.savePending(pending);
270
+ }
271
+ return tx || null;
272
+ }
273
+ /**
274
+ * Get pending transactions
275
+ */
276
+ async getPending(options) {
277
+ let pending = await this.loadPending();
278
+ if (options?.status) {
279
+ pending = pending.filter(t => t.status === options.status);
280
+ }
281
+ if (options?.approverId) {
282
+ const policies = await this.loadPolicies();
283
+ const approverPolicies = policies.filter(p => p.approvers.includes(options.approverId)).map(p => p.id);
284
+ pending = pending.filter(t => approverPolicies.includes(t.policyId));
285
+ }
286
+ return pending.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
287
+ }
288
+ /**
289
+ * Check and expire old transactions
290
+ */
291
+ async processExpired() {
292
+ const pending = await this.loadPending();
293
+ const policies = await this.loadPolicies();
294
+ const now = new Date();
295
+ const expired = [];
296
+ for (const tx of pending) {
297
+ if (tx.status !== 'pending')
298
+ continue;
299
+ if (new Date(tx.expiresAt) > now)
300
+ continue;
301
+ const policy = policies.find(p => p.id === tx.policyId);
302
+ if (policy?.timeoutAction === 'auto-approve') {
303
+ tx.status = 'approved';
304
+ }
305
+ else {
306
+ tx.status = 'expired';
307
+ }
308
+ expired.push(tx);
309
+ }
310
+ if (expired.length > 0) {
311
+ await this.savePending(pending);
312
+ }
313
+ return expired;
314
+ }
315
+ // ============ Daily Spending Tracking ============
316
+ /**
317
+ * Get daily spending for a wallet
318
+ */
319
+ async getDailySpending(walletId) {
320
+ const spending = await this.loadSpending();
321
+ const today = new Date().toISOString().split('T')[0];
322
+ return spending.find(s => s.date === today && s.walletId === walletId) || null;
323
+ }
324
+ /**
325
+ * Record spending
326
+ */
327
+ async recordSpending(walletId, amount, txHash) {
328
+ const spending = await this.loadSpending();
329
+ const today = new Date().toISOString().split('T')[0];
330
+ let todaySpending = spending.find(s => s.date === today && s.walletId === walletId);
331
+ if (!todaySpending) {
332
+ todaySpending = {
333
+ date: today,
334
+ walletId,
335
+ total: '0',
336
+ transactions: [],
337
+ };
338
+ spending.push(todaySpending);
339
+ }
340
+ todaySpending.total = (parseFloat(todaySpending.total) + parseFloat(amount)).toString();
341
+ todaySpending.transactions.push({
342
+ amount,
343
+ txHash,
344
+ timestamp: new Date().toISOString(),
345
+ });
346
+ // Keep only last 30 days
347
+ const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
348
+ const filtered = spending.filter(s => s.date >= thirtyDaysAgo);
349
+ await this.saveSpending(filtered);
350
+ }
351
+ /**
352
+ * Get spending history
353
+ */
354
+ async getSpendingHistory(walletId, days = 30) {
355
+ const spending = await this.loadSpending();
356
+ const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().split('T')[0];
357
+ return spending
358
+ .filter(s => s.walletId === walletId && s.date >= cutoff)
359
+ .sort((a, b) => b.date.localeCompare(a.date));
360
+ }
361
+ // ============ Helpers ============
362
+ /**
363
+ * Format pending transaction for display
364
+ */
365
+ formatPendingTx(tx) {
366
+ const typeEmoji = tx.type === 'send' ? '📤' : tx.type === 'bridge' ? '🌉' : '🔄';
367
+ const statusEmoji = {
368
+ pending: '⏳',
369
+ approved: '✅',
370
+ rejected: '❌',
371
+ cancelled: '🚫',
372
+ expired: '⌛',
373
+ executed: '✓',
374
+ }[tx.status];
375
+ let text = `${typeEmoji} **${tx.amount} USDC** → ${tx.toName || this.shortAddress(tx.toAddress)}\n`;
376
+ text += `Status: ${statusEmoji} ${tx.status.toUpperCase()}\n`;
377
+ text += `Chain: ${tx.chain}${tx.targetChain ? ` → ${tx.targetChain}` : ''}\n`;
378
+ if (tx.approvals.length > 0) {
379
+ text += `Approvals: ${tx.approvals.filter(a => a.decision === 'approve').length}/${tx.approvals.length}\n`;
380
+ }
381
+ text += `Expires: ${new Date(tx.expiresAt).toLocaleString()}\n`;
382
+ if (tx.memo) {
383
+ text += `Memo: ${tx.memo}\n`;
384
+ }
385
+ return text;
386
+ }
387
+ shortAddress(address) {
388
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
389
+ }
390
+ /**
391
+ * Create default approval policy for new users
392
+ */
393
+ async createDefaultPolicy(approverIds) {
394
+ return this.createPolicy({
395
+ name: 'Large Transactions (>500 USDC)',
396
+ conditions: { minAmount: '500' },
397
+ approvers: approverIds,
398
+ requiredApprovals: 1,
399
+ timeout: 86400, // 24 hours
400
+ timeoutAction: 'cancel',
401
+ });
402
+ }
403
+ }
404
+ exports.ApprovalManager = ApprovalManager;
405
+ exports.default = ApprovalManager;
406
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../lib/approvals.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,oDAA4B;AAC5B,2DAA6B;AAC7B,gDAAwB;AAqExB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC;AAEvD;;GAEG;AACH,MAAa,eAAe;IAK1B,YAAY,OAAO,GAAG,QAAQ;QAC5B,IAAI,CAAC,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAA0B;QACnD,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAA6B;QACrD,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,QAAyB;QAClD,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,8CAA8C;IAE9C;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAOlB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAmB;YAC7B,EAAE,EAAE,gBAAM,CAAC,UAAU,EAAE;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,CAAC;YAChD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,EAAE,mBAAmB;YACrD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,QAAQ;YAC/C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAElC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,EAKzB;QACC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAqB,EAAE,CAAC;QAE9C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,SAAS;YAE9B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,yBAAyB;YACzB,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtF,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAED,oBAAoB;YACpB,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC7B,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC9E,IAAI,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBACtD,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5D,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACnF,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,eAAe;YACf,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,0BAA0B;YAC1B,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,OAAgB;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAE/C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YACzB,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iDAAiD;IAEjD;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,EAUvB;QACC,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAC9C,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,QAAQ,EAAE,EAAE,CAAC,YAAY;SAC1B,CAAC,CAAC;QAEH,mCAAmC;QACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QAED,qDAAqD;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAClE,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzC,MAAM,WAAW,GAAuB;YACtC,EAAE,EAAE,gBAAM,CAAC,UAAU,EAAE;YACvB,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;SACtE,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEhC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,UAAkB,EAClB,QAA8B,EAC9B,IAAa;QAEb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4CAA4C;QAC5C,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,kBAAkB;QAClB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YAChB,UAAU;YACV,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI;SACL,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC;YACvB,EAAE,CAAC,eAAe,GAAG,IAAI,IAAI,sBAAsB,CAAC;QACtD,CAAC;QACD,4BAA4B;aACvB,CAAC;YACJ,MAAM,aAAa,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YAChF,IAAI,aAAa,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC9C,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC;YACzB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAc;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAE5C,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACnC,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC;YACvB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;YACnB,EAAE,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAEzC,kBAAkB;YAClB,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAE9D,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,EAAE,IAAI,IAAI,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,WAAmB;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAE5C,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACpE,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC;YACxB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,EAAE,IAAI,IAAI,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAGhB;QACC,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEvC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC3C,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAW,CAAC,CAC1C,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEjB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC3B,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YACtC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG;gBAAE,SAAS;YAE3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;YAExD,IAAI,MAAM,EAAE,aAAa,KAAK,cAAc,EAAE,CAAC;gBAC7C,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oDAAoD;IAEpD;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;IACjF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,MAAc,EAAE,MAAc;QAC3E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAEpF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG;gBACd,IAAI,EAAE,KAAK;gBACX,QAAQ;gBACR,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,EAAE;aACjB,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;QAED,aAAa,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxF,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B,MAAM;YACN,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,CAAC;QAE/D,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,IAAI,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7F,OAAO,QAAQ;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;aACxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,oCAAoC;IAEpC;;OAEG;IACH,eAAe,CAAC,EAAsB;QACpC,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,GAAG;SACd,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAEb,IAAI,IAAI,GAAG,GAAG,SAAS,MAAM,EAAE,CAAC,MAAM,aAAa,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpG,IAAI,IAAI,WAAW,WAAW,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;QAC9D,IAAI,IAAI,UAAU,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAE9E,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;QAC7G,CAAC;QAED,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC;QAEhE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAAC,OAAe;QAClC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,WAAqB;QAC7C,OAAO,IAAI,CAAC,YAAY,CAAC;YACvB,IAAI,EAAE,gCAAgC;YACtC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;YAChC,SAAS,EAAE,WAAW;YACtB,iBAAiB,EAAE,CAAC;YACpB,OAAO,EAAE,KAAK,EAAE,WAAW;YAC3B,aAAa,EAAE,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;CACF;AAnfD,0CAmfC;AAED,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Circle Programmable Wallets Client
3
+ *
4
+ * Wrapper around Circle's Developer-Controlled Wallets API
5
+ * for USDC operations on testnet.
6
+ */
7
+ export interface CircleConfig {
8
+ apiKey: string;
9
+ entitySecret: string;
10
+ baseUrl?: string;
11
+ }
12
+ export interface Wallet {
13
+ id: string;
14
+ address: string;
15
+ blockchain: string;
16
+ state: string;
17
+ walletSetId: string;
18
+ createDate: string;
19
+ }
20
+ export interface WalletSet {
21
+ id: string;
22
+ name: string;
23
+ custodyType: string;
24
+ createDate: string;
25
+ }
26
+ export interface Balance {
27
+ token: {
28
+ id: string;
29
+ name: string;
30
+ symbol: string;
31
+ decimals: number;
32
+ blockchain: string;
33
+ };
34
+ amount: string;
35
+ }
36
+ export interface Transaction {
37
+ id: string;
38
+ state: string;
39
+ txHash?: string;
40
+ amounts: string[];
41
+ sourceAddress: string;
42
+ destinationAddress: string;
43
+ blockchain: string;
44
+ createDate: string;
45
+ }
46
+ export interface SendOptions {
47
+ fromWalletId: string;
48
+ toAddress: string;
49
+ amount: string;
50
+ tokenId?: string;
51
+ feeLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
52
+ }
53
+ export interface BridgeOptions {
54
+ fromWalletId: string;
55
+ toAddress: string;
56
+ fromChain: string;
57
+ toChain: string;
58
+ amount: string;
59
+ }
60
+ export declare const USDC_TOKENS: Record<string, string>;
61
+ export declare const CHAIN_NAMES: Record<string, string>;
62
+ /**
63
+ * Circle Programmable Wallets Client
64
+ */
65
+ export declare class CircleClient {
66
+ private apiKey;
67
+ private entitySecret;
68
+ private baseUrl;
69
+ constructor(config: CircleConfig);
70
+ /**
71
+ * Generate entity secret ciphertext for API calls
72
+ */
73
+ private generateEntitySecretCiphertext;
74
+ /**
75
+ * Make authenticated API request
76
+ */
77
+ private request;
78
+ /**
79
+ * Create a new wallet set
80
+ */
81
+ createWalletSet(name: string): Promise<WalletSet>;
82
+ /**
83
+ * List all wallet sets
84
+ */
85
+ listWalletSets(): Promise<WalletSet[]>;
86
+ /**
87
+ * Create wallets in a wallet set
88
+ */
89
+ createWallets(walletSetId: string, blockchains: string[], count?: number): Promise<Wallet[]>;
90
+ /**
91
+ * Get wallet by ID
92
+ */
93
+ getWallet(walletId: string): Promise<Wallet>;
94
+ /**
95
+ * List all wallets
96
+ */
97
+ listWallets(): Promise<Wallet[]>;
98
+ /**
99
+ * Get token balances for a wallet
100
+ */
101
+ getBalances(walletId: string): Promise<Balance[]>;
102
+ /**
103
+ * Get USDC balance across all wallets
104
+ */
105
+ getAllUSDCBalances(): Promise<{
106
+ wallet: Wallet;
107
+ balance: string;
108
+ chain: string;
109
+ }[]>;
110
+ /**
111
+ * Send USDC to an address
112
+ */
113
+ sendUSDC(options: SendOptions): Promise<Transaction>;
114
+ /**
115
+ * Get transaction by ID
116
+ */
117
+ getTransaction(transactionId: string): Promise<Transaction>;
118
+ /**
119
+ * List recent transactions
120
+ */
121
+ listTransactions(walletId?: string): Promise<Transaction[]>;
122
+ /**
123
+ * Bridge USDC across chains via CCTP
124
+ */
125
+ bridgeUSDC(options: BridgeOptions): Promise<Transaction>;
126
+ /**
127
+ * Get CCTP TokenMessenger contract address for chain
128
+ */
129
+ private getCCTPContractAddress;
130
+ /**
131
+ * Get CCTP domain ID for chain
132
+ */
133
+ private getChainDomain;
134
+ /**
135
+ * Convert address to bytes32 format
136
+ */
137
+ private addressToBytes32;
138
+ /**
139
+ * Format USDC amount for display
140
+ */
141
+ static formatUSDC(amount: string): string;
142
+ /**
143
+ * Parse human-readable amount to wei
144
+ */
145
+ static parseAmount(amount: string): string;
146
+ /**
147
+ * Validate Ethereum address
148
+ */
149
+ static isValidAddress(address: string): boolean;
150
+ }
151
+ export default CircleClient;
152
+ //# sourceMappingURL=circle-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-client.d.ts","sourceRoot":"","sources":["../lib/circle-client.ts"],"names":[],"mappings":"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"}