@mnemopay/sdk 0.7.5 → 0.9.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 (45) hide show
  1. package/README.md +182 -211
  2. package/dist/cli/dashboard.d.ts +9 -0
  3. package/dist/cli/dashboard.d.ts.map +1 -0
  4. package/dist/cli/dashboard.js +78 -0
  5. package/dist/cli/dashboard.js.map +1 -0
  6. package/dist/client.d.ts +182 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +177 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commerce.d.ts +225 -0
  11. package/dist/commerce.d.ts.map +1 -0
  12. package/dist/commerce.js +420 -0
  13. package/dist/commerce.js.map +1 -0
  14. package/dist/fraud.d.ts +75 -1
  15. package/dist/fraud.d.ts.map +1 -1
  16. package/dist/fraud.js +247 -26
  17. package/dist/fraud.js.map +1 -1
  18. package/dist/identity.d.ts +154 -0
  19. package/dist/identity.d.ts.map +1 -0
  20. package/dist/identity.js +269 -0
  21. package/dist/identity.js.map +1 -0
  22. package/dist/index.d.ts +44 -4
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +196 -37
  25. package/dist/index.js.map +1 -1
  26. package/dist/ledger.d.ts +137 -0
  27. package/dist/ledger.d.ts.map +1 -0
  28. package/dist/ledger.js +250 -0
  29. package/dist/ledger.js.map +1 -0
  30. package/dist/mcp/server.d.ts.map +1 -1
  31. package/dist/mcp/server.js +298 -6
  32. package/dist/mcp/server.js.map +1 -1
  33. package/dist/network.d.ts +155 -0
  34. package/dist/network.d.ts.map +1 -0
  35. package/dist/network.js +263 -0
  36. package/dist/network.js.map +1 -0
  37. package/dist/rails/index.d.ts +2 -0
  38. package/dist/rails/index.d.ts.map +1 -1
  39. package/dist/rails/index.js +19 -4
  40. package/dist/rails/index.js.map +1 -1
  41. package/dist/rails/paystack.d.ts +157 -0
  42. package/dist/rails/paystack.d.ts.map +1 -0
  43. package/dist/rails/paystack.js +366 -0
  44. package/dist/rails/paystack.js.map +1 -0
  45. package/package.json +34 -17
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+ /**
3
+ * Commerce Engine for MnemoPay
4
+ *
5
+ * Autonomous shopping for AI agents. An agent can search products, compare
6
+ * prices, create a purchase order, pay via escrow, and confirm delivery.
7
+ * Every purchase is scoped by a ShoppingMandate — cryptographically enforced
8
+ * spend limits, category restrictions, and merchant whitelists.
9
+ *
10
+ * The escrow flow:
11
+ * 1. Agent searches products → returns ranked results
12
+ * 2. Agent (or user) approves a purchase → creates a PurchaseOrder
13
+ * 3. SDK calls charge() to hold funds in escrow
14
+ * 4. Agent executes the purchase via the commerce provider
15
+ * 5. On delivery confirmation → settle() releases funds
16
+ * 6. On failure/cancellation → refund() returns funds
17
+ *
18
+ * Security model:
19
+ * - ShoppingMandate defines what the agent CAN buy (budget, categories, merchants)
20
+ * - Every purchase validated against mandate before escrow is created
21
+ * - Purchases above approvalThreshold require explicit user confirmation
22
+ * - Full audit trail via MnemoPay's existing audit system
23
+ * - Agent remembers user preferences (sizes, brands, past purchases)
24
+ *
25
+ * Usage:
26
+ * const agent = MnemoPay.quick("shopper");
27
+ * const commerce = new CommerceEngine(agent);
28
+ * commerce.setMandate({ budget: 200, categories: ["electronics"] });
29
+ * const results = await commerce.search("USB-C cable under $15");
30
+ * const order = await commerce.purchase(results[0]);
31
+ * // ... later, on delivery ...
32
+ * await commerce.confirmDelivery(order.id);
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.CommerceEngine = exports.MockCommerceProvider = void 0;
36
+ // ─── Mock Commerce Provider (for testing/development) ───────────────────────
37
+ class MockCommerceProvider {
38
+ name = "mock";
39
+ counter = 0;
40
+ catalog = [
41
+ { productId: "mock-001", title: "USB-C Cable 6ft", price: 9.99, url: "https://example.com/usbc", merchant: "TechStore", merchantDomain: "techstore.com", category: "electronics", rating: 4.5, reviewCount: 2340, deliveryDays: 3, freeShipping: true },
42
+ { productId: "mock-002", title: "Wireless Mouse", price: 24.99, url: "https://example.com/mouse", merchant: "TechStore", merchantDomain: "techstore.com", category: "electronics", rating: 4.2, reviewCount: 890, deliveryDays: 2, freeShipping: true },
43
+ { productId: "mock-003", title: "Laptop Stand Adjustable", price: 34.99, url: "https://example.com/stand", merchant: "OfficeGear", merchantDomain: "officegear.com", category: "office", rating: 4.7, reviewCount: 5600, deliveryDays: 5, freeShipping: false },
44
+ { productId: "mock-004", title: "Mechanical Keyboard", price: 79.99, url: "https://example.com/keyboard", merchant: "KeysRUs", merchantDomain: "keysrus.com", category: "electronics", rating: 4.8, reviewCount: 12000, deliveryDays: 3, freeShipping: true },
45
+ { productId: "mock-005", title: "Noise Cancelling Headphones", price: 199.99, url: "https://example.com/headphones", merchant: "AudioWorld", merchantDomain: "audioworld.com", category: "electronics", rating: 4.6, reviewCount: 8900, deliveryDays: 4, freeShipping: true },
46
+ ];
47
+ async search(query, options) {
48
+ const q = query.toLowerCase();
49
+ let results = this.catalog.filter(p => p.title.toLowerCase().includes(q) ||
50
+ p.category?.toLowerCase().includes(q) ||
51
+ q.includes(p.category?.toLowerCase() ?? ""));
52
+ // If no keyword match, return all (simulating broad search)
53
+ if (results.length === 0)
54
+ results = [...this.catalog];
55
+ // Apply filters
56
+ if (options?.minPrice !== undefined)
57
+ results = results.filter(p => p.price >= options.minPrice);
58
+ if (options?.maxPrice !== undefined)
59
+ results = results.filter(p => p.price <= options.maxPrice);
60
+ if (options?.category)
61
+ results = results.filter(p => p.category === options.category);
62
+ if (options?.freeShippingOnly)
63
+ results = results.filter(p => p.freeShipping);
64
+ // Sort
65
+ if (options?.sortBy === "price_asc")
66
+ results.sort((a, b) => a.price - b.price);
67
+ else if (options?.sortBy === "price_desc")
68
+ results.sort((a, b) => b.price - a.price);
69
+ else if (options?.sortBy === "rating")
70
+ results.sort((a, b) => (b.rating ?? 0) - (a.rating ?? 0));
71
+ return results.slice(0, options?.limit ?? 10);
72
+ }
73
+ async getProduct(productId) {
74
+ return this.catalog.find(p => p.productId === productId) ?? null;
75
+ }
76
+ async executePurchase(product, _deliveryInstructions) {
77
+ return {
78
+ externalOrderId: `mock_order_${++this.counter}`,
79
+ status: "confirmed",
80
+ trackingUrl: `https://example.com/track/${this.counter}`,
81
+ };
82
+ }
83
+ async checkStatus(externalOrderId) {
84
+ return {
85
+ status: "delivered",
86
+ trackingNumber: `TRACK${externalOrderId.replace(/\D/g, "")}`,
87
+ trackingUrl: `https://example.com/track/${externalOrderId}`,
88
+ deliveredAt: new Date().toISOString(),
89
+ };
90
+ }
91
+ }
92
+ exports.MockCommerceProvider = MockCommerceProvider;
93
+ // ─── Commerce Engine ────────────────────────────────────────────────────────
94
+ class CommerceEngine {
95
+ agent; // MnemoPayLite — avoid circular import
96
+ provider;
97
+ mandate = null;
98
+ orders = new Map();
99
+ totalSpent = 0;
100
+ approvalCallback = null;
101
+ externalOrderMap = new Map(); // externalOrderId → orderId
102
+ constructor(agent, provider) {
103
+ this.agent = agent;
104
+ this.provider = provider ?? new MockCommerceProvider();
105
+ }
106
+ // ── Mandate Management ──────────────────────────────────────────────────
107
+ /**
108
+ * Set a shopping mandate that defines what this agent can buy.
109
+ * All purchases are validated against this mandate.
110
+ */
111
+ setMandate(mandate) {
112
+ if (!mandate.budget || mandate.budget <= 0) {
113
+ throw new Error("Mandate budget must be positive");
114
+ }
115
+ if (!mandate.issuedBy) {
116
+ throw new Error("Mandate must have an issuer (issuedBy)");
117
+ }
118
+ this.mandate = {
119
+ ...mandate,
120
+ maxPerItem: mandate.maxPerItem ?? mandate.budget,
121
+ expiresAt: mandate.expiresAt ?? new Date(Date.now() + 24 * 60 * 60_000).toISOString(),
122
+ };
123
+ this.totalSpent = 0;
124
+ this.agent.audit("commerce:mandate:set", {
125
+ budget: mandate.budget,
126
+ categories: mandate.categories,
127
+ issuedBy: mandate.issuedBy,
128
+ expiresAt: this.mandate.expiresAt,
129
+ });
130
+ }
131
+ /** Get the current active mandate */
132
+ getMandate() {
133
+ return this.mandate;
134
+ }
135
+ /** Remaining budget under current mandate */
136
+ get remainingBudget() {
137
+ if (!this.mandate)
138
+ return 0;
139
+ return Math.max(0, this.mandate.budget - this.totalSpent);
140
+ }
141
+ /** Set a callback for user approval of high-value purchases */
142
+ onApprovalRequired(callback) {
143
+ this.approvalCallback = callback;
144
+ }
145
+ // ── Product Search ──────────────────────────────────────────────────────
146
+ /**
147
+ * Search for products. Uses agent memory to personalize results
148
+ * (e.g., preferred brands, past purchase satisfaction).
149
+ */
150
+ async search(query, options) {
151
+ if (!this.mandate) {
152
+ throw new Error("No shopping mandate set. Call setMandate() first.");
153
+ }
154
+ // Check mandate expiry
155
+ if (new Date() > new Date(this.mandate.expiresAt)) {
156
+ throw new Error("Shopping mandate has expired");
157
+ }
158
+ // Apply mandate constraints to search
159
+ const constrainedOptions = {
160
+ ...options,
161
+ maxPrice: options?.maxPrice
162
+ ? Math.min(options.maxPrice, this.mandate.maxPerItem)
163
+ : this.mandate.maxPerItem,
164
+ };
165
+ // Recall user preferences from memory to enhance search
166
+ let preferences = "";
167
+ try {
168
+ const memories = await this.agent.recall(query, 3);
169
+ if (memories.length > 0) {
170
+ preferences = memories.map((m) => m.content).join("; ");
171
+ }
172
+ }
173
+ catch {
174
+ // Memory recall is best-effort for commerce
175
+ }
176
+ const results = await this.provider.search(query, constrainedOptions);
177
+ // Filter by mandate restrictions
178
+ return results.filter(p => this.validateProduct(p) === null);
179
+ }
180
+ // ── Purchase Flow ───────────────────────────────────────────────────────
181
+ /**
182
+ * Create a purchase order for a product. Validates against mandate,
183
+ * creates escrow hold, optionally requests user approval.
184
+ */
185
+ async purchase(product, deliveryInstructions) {
186
+ if (!this.mandate) {
187
+ throw new Error("No shopping mandate set. Call setMandate() first.");
188
+ }
189
+ // Validate mandate expiry
190
+ if (new Date() > new Date(this.mandate.expiresAt)) {
191
+ throw new Error("Shopping mandate has expired");
192
+ }
193
+ // Validate product against mandate
194
+ const violation = this.validateProduct(product);
195
+ if (violation) {
196
+ throw new Error(`Mandate violation: ${violation}`);
197
+ }
198
+ // Check remaining budget
199
+ if (product.price > this.remainingBudget) {
200
+ throw new Error(`Insufficient mandate budget: $${product.price.toFixed(2)} exceeds remaining $${this.remainingBudget.toFixed(2)}`);
201
+ }
202
+ const orderId = `order_${this.agent.agentId}_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
203
+ const now = new Date();
204
+ const order = {
205
+ id: orderId,
206
+ agentId: this.agent.agentId,
207
+ product,
208
+ txId: "", // Set after escrow
209
+ status: "pending_approval",
210
+ deliveryInstructions,
211
+ createdAt: now,
212
+ updatedAt: now,
213
+ mandate: { ...this.mandate },
214
+ approved: false,
215
+ };
216
+ // Check if user approval is needed
217
+ const threshold = this.mandate.approvalThreshold;
218
+ if (threshold !== undefined && product.price >= threshold && this.approvalCallback) {
219
+ const approved = await this.approvalCallback(order);
220
+ if (!approved) {
221
+ order.status = "cancelled";
222
+ order.failureReason = "User declined approval";
223
+ this.orders.set(orderId, order);
224
+ this.agent.audit("commerce:purchase:declined", { orderId, product: product.title, price: product.price });
225
+ return order;
226
+ }
227
+ }
228
+ order.approved = true;
229
+ // Create escrow hold via MnemoPay charge
230
+ const tx = await this.agent.charge(product.price, `Purchase: ${product.title} from ${product.merchant}`);
231
+ order.txId = tx.id;
232
+ order.status = "escrowed";
233
+ order.updatedAt = new Date();
234
+ this.orders.set(orderId, order);
235
+ this.agent.audit("commerce:purchase:escrowed", {
236
+ orderId,
237
+ txId: tx.id,
238
+ product: product.title,
239
+ price: product.price,
240
+ merchant: product.merchant,
241
+ });
242
+ // Execute the actual purchase via provider
243
+ try {
244
+ const result = await this.provider.executePurchase(product, deliveryInstructions);
245
+ order.status = "purchased";
246
+ order.trackingUrl = result.trackingUrl;
247
+ order.updatedAt = new Date();
248
+ this.externalOrderMap.set(result.externalOrderId, orderId);
249
+ this.agent.audit("commerce:purchase:executed", {
250
+ orderId,
251
+ externalOrderId: result.externalOrderId,
252
+ status: result.status,
253
+ });
254
+ // Remember the purchase for future preference learning
255
+ await this.agent.remember(`Purchased "${product.title}" from ${product.merchant} for $${product.price.toFixed(2)}. Category: ${product.category ?? "unknown"}.`, { importance: 0.6, tags: ["purchase", product.category ?? "shopping"] });
256
+ this.totalSpent += product.price;
257
+ }
258
+ catch (err) {
259
+ // Purchase failed — refund escrow
260
+ order.status = "failed";
261
+ order.failureReason = err.message;
262
+ order.updatedAt = new Date();
263
+ try {
264
+ await this.agent.refund(tx.id);
265
+ }
266
+ catch {
267
+ // Refund best-effort, log it
268
+ this.agent.audit("commerce:refund:failed", { orderId, txId: tx.id });
269
+ }
270
+ this.agent.audit("commerce:purchase:failed", {
271
+ orderId,
272
+ reason: err.message,
273
+ });
274
+ }
275
+ return order;
276
+ }
277
+ /**
278
+ * Confirm delivery of an order. Settles the escrow, releasing funds.
279
+ */
280
+ async confirmDelivery(orderId) {
281
+ const order = this.orders.get(orderId);
282
+ if (!order)
283
+ throw new Error(`Order not found: ${orderId}`);
284
+ if (order.status === "delivered")
285
+ throw new Error("Order already delivered");
286
+ if (order.status === "cancelled" || order.status === "failed") {
287
+ throw new Error(`Cannot confirm delivery on ${order.status} order`);
288
+ }
289
+ // Settle the escrow
290
+ await this.agent.settle(order.txId);
291
+ order.status = "delivered";
292
+ order.updatedAt = new Date();
293
+ this.agent.audit("commerce:delivery:confirmed", {
294
+ orderId,
295
+ txId: order.txId,
296
+ product: order.product.title,
297
+ price: order.product.price,
298
+ });
299
+ // Reinforce memory of successful purchase
300
+ await this.agent.remember(`Delivery confirmed: "${order.product.title}" from ${order.product.merchant}. Satisfied.`, { importance: 0.5, tags: ["delivery", "satisfied"] });
301
+ return order;
302
+ }
303
+ /**
304
+ * Cancel an order and refund the escrow.
305
+ */
306
+ async cancelOrder(orderId, reason) {
307
+ const order = this.orders.get(orderId);
308
+ if (!order)
309
+ throw new Error(`Order not found: ${orderId}`);
310
+ if (order.status === "delivered")
311
+ throw new Error("Cannot cancel a delivered order");
312
+ if (order.status === "cancelled")
313
+ throw new Error("Order already cancelled");
314
+ // Refund escrow
315
+ if (order.txId) {
316
+ await this.agent.refund(order.txId);
317
+ this.totalSpent = Math.max(0, this.totalSpent - order.product.price);
318
+ }
319
+ order.status = "cancelled";
320
+ order.failureReason = reason ?? "Cancelled by user";
321
+ order.updatedAt = new Date();
322
+ this.agent.audit("commerce:order:cancelled", {
323
+ orderId,
324
+ txId: order.txId,
325
+ reason: order.failureReason,
326
+ });
327
+ return order;
328
+ }
329
+ /**
330
+ * Check delivery status of an order via the commerce provider.
331
+ */
332
+ async checkDeliveryStatus(orderId) {
333
+ const order = this.orders.get(orderId);
334
+ if (!order)
335
+ throw new Error(`Order not found: ${orderId}`);
336
+ // Find external order ID
337
+ let externalOrderId;
338
+ for (const [extId, oId] of this.externalOrderMap) {
339
+ if (oId === orderId) {
340
+ externalOrderId = extId;
341
+ break;
342
+ }
343
+ }
344
+ if (externalOrderId) {
345
+ const status = await this.provider.checkStatus(externalOrderId);
346
+ if (status.trackingNumber)
347
+ order.trackingNumber = status.trackingNumber;
348
+ if (status.trackingUrl)
349
+ order.trackingUrl = status.trackingUrl;
350
+ if (status.status === "delivered" && order.status !== "delivered") {
351
+ order.status = "shipped"; // Mark shipped, user still needs to confirmDelivery()
352
+ }
353
+ else if (status.status === "shipped" && order.status === "purchased") {
354
+ order.status = "shipped";
355
+ }
356
+ order.updatedAt = new Date();
357
+ }
358
+ return order;
359
+ }
360
+ // ── Order Management ────────────────────────────────────────────────────
361
+ /** Get an order by ID */
362
+ getOrder(orderId) {
363
+ return this.orders.get(orderId) ?? null;
364
+ }
365
+ /** List all orders */
366
+ listOrders(status) {
367
+ const all = Array.from(this.orders.values());
368
+ if (status)
369
+ return all.filter(o => o.status === status);
370
+ return all.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
371
+ }
372
+ /** Get spending summary under current mandate */
373
+ spendingSummary() {
374
+ const orders = Array.from(this.orders.values());
375
+ return {
376
+ totalSpent: this.totalSpent,
377
+ remainingBudget: this.remainingBudget,
378
+ orderCount: orders.length,
379
+ deliveredCount: orders.filter(o => o.status === "delivered").length,
380
+ pendingCount: orders.filter(o => ["escrowed", "purchased", "shipped"].includes(o.status)).length,
381
+ };
382
+ }
383
+ // ── Validation ──────────────────────────────────────────────────────────
384
+ /** Validate a product against the current mandate. Returns null if OK, or violation string. */
385
+ validateProduct(product) {
386
+ if (!this.mandate)
387
+ return "No mandate set";
388
+ // Price check
389
+ if (product.price > this.mandate.maxPerItem) {
390
+ return `Price $${product.price.toFixed(2)} exceeds per-item limit $${this.mandate.maxPerItem.toFixed(2)}`;
391
+ }
392
+ // Category check
393
+ const cat = product.category?.toLowerCase();
394
+ if (cat && this.mandate.blockedCategories?.length) {
395
+ if (this.mandate.blockedCategories.some(c => c.toLowerCase() === cat)) {
396
+ return `Category "${product.category}" is blocked`;
397
+ }
398
+ }
399
+ if (cat && this.mandate.categories?.length) {
400
+ if (!this.mandate.categories.some(c => c.toLowerCase() === cat)) {
401
+ return `Category "${product.category}" not in allowed list`;
402
+ }
403
+ }
404
+ // Merchant check
405
+ const domain = product.merchantDomain?.toLowerCase();
406
+ if (domain && this.mandate.blockedMerchants?.length) {
407
+ if (this.mandate.blockedMerchants.some(m => m.toLowerCase() === domain)) {
408
+ return `Merchant "${product.merchant}" is blocked`;
409
+ }
410
+ }
411
+ if (domain && this.mandate.allowedMerchants?.length) {
412
+ if (!this.mandate.allowedMerchants.some(m => m.toLowerCase() === domain)) {
413
+ return `Merchant "${product.merchant}" not in allowed list`;
414
+ }
415
+ }
416
+ return null;
417
+ }
418
+ }
419
+ exports.CommerceEngine = CommerceEngine;
420
+ //# sourceMappingURL=commerce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commerce.js","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;AAmIH,+EAA+E;AAE/E,MAAa,oBAAoB;IACtB,IAAI,GAAG,MAAM,CAAC;IACf,OAAO,GAAG,CAAC,CAAC;IACZ,OAAO,GAAoB;QACjC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,0BAA0B,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;QACvP,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,2BAA2B,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;QACvP,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,2BAA2B,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;QAC/P,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,8BAA8B,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;QAC7P,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gCAAgC,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;KAC9Q,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAuB;QACjD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;QAEF,4DAA4D;QAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtD,gBAAgB;QAChB,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,QAAS,CAAC,CAAC;QACjG,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,QAAS,CAAC,CAAC;QACjG,IAAI,OAAO,EAAE,QAAQ;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtF,IAAI,OAAO,EAAE,gBAAgB;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAE7E,OAAO;QACP,IAAI,OAAO,EAAE,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;aAC1E,IAAI,OAAO,EAAE,MAAM,KAAK,YAAY;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;aAChF,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjG,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAsB,EAAE,qBAA8B;QAC1E,OAAO;YACL,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE;YAC/C,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,6BAA6B,IAAI,CAAC,OAAO,EAAE;SACzD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,eAAuB;QACvC,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,QAAQ,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;YAC5D,WAAW,EAAE,6BAA6B,eAAe,EAAE;YAC3D,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;CACF;AAxDD,oDAwDC;AAED,+EAA+E;AAE/E,MAAa,cAAc;IACjB,KAAK,CAAM,CAAC,uCAAuC;IACnD,QAAQ,CAAmB;IAC3B,OAAO,GAA2B,IAAI,CAAC;IACvC,MAAM,GAA+B,IAAI,GAAG,EAAE,CAAC;IAC/C,UAAU,GAAG,CAAC,CAAC;IACf,gBAAgB,GAA4B,IAAI,CAAC;IACjD,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,4BAA4B;IAEvF,YAAY,KAAU,EAAE,QAA2B;QACjD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,oBAAoB,EAAE,CAAC;IACzD,CAAC;IAED,2EAA2E;IAE3E;;;OAGG;IACH,UAAU,CAAC,OAAwB;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,OAAO;YACV,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM;YAChD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;SACtF,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACvC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,6CAA6C;IAC7C,IAAI,eAAe;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,+DAA+D;IAC/D,kBAAkB,CAAC,QAA0B;QAC3C,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED,2EAA2E;IAE3E;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAuB;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,sCAAsC;QACtC,MAAM,kBAAkB,GAAkB;YACxC,GAAG,OAAO;YACV,QAAQ,EAAE,OAAO,EAAE,QAAQ;gBACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,UAAW,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAW;SAC7B,CAAC;QAEF,wDAAwD;QACxD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAEtE,iCAAiC;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,2EAA2E;IAE3E;;;OAGG;IACH,KAAK,CAAC,QAAQ,CACZ,OAAsB,EACtB,oBAA6B;QAE7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,mCAAmC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAClH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,KAAK,GAAkB;YAC3B,EAAE,EAAE,OAAO;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,OAAO;YACP,IAAI,EAAE,EAAE,EAAE,mBAAmB;YAC7B,MAAM,EAAE,kBAAkB;YAC1B,oBAAoB;YACpB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC5B,QAAQ,EAAE,KAAK;SAChB,CAAC;QAEF,mCAAmC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACjD,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC3B,KAAK,CAAC,aAAa,GAAG,wBAAwB,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1G,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QAEtB,yCAAyC;QACzC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAChC,OAAO,CAAC,KAAK,EACb,aAAa,OAAO,CAAC,KAAK,SAAS,OAAO,CAAC,QAAQ,EAAE,CACtD,CAAC;QACF,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QAC1B,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEhC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,EAAE;YAC7C,OAAO;YACP,IAAI,EAAE,EAAE,CAAC,EAAE;YACX,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,2CAA2C;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAClF,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;YAC3B,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACvC,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAE7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAE3D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,EAAE;gBAC7C,OAAO;gBACP,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YAEH,uDAAuD;YACvD,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CACvB,cAAc,OAAO,CAAC,KAAK,UAAU,OAAO,CAAC,QAAQ,SAAS,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,QAAQ,IAAI,SAAS,GAAG,EACrI,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE,CACxE,CAAC;YAEF,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;QACnC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,kCAAkC;YAClC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;YAClC,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAE7B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;gBAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,EAAE;gBAC3C,OAAO;gBACP,MAAM,EAAE,GAAG,CAAC,OAAO;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QACtE,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;QAC3B,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC9C,OAAO;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;YAC5B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;SAC3B,CAAC,CAAC;QAEH,0CAA0C;QAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CACvB,wBAAwB,KAAK,CAAC,OAAO,CAAC,KAAK,UAAU,KAAK,CAAC,OAAO,CAAC,QAAQ,cAAc,EACzF,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CACrD,CAAC;QAEF,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,MAAe;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrF,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAE7E,gBAAgB;QAChB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;QAC3B,KAAK,CAAC,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC;QACpD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,EAAE;YAC3C,OAAO;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,aAAa;SAC5B,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAE3D,yBAAyB;QACzB,IAAI,eAAmC,CAAC;QACxC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBAAC,eAAe,GAAG,KAAK,CAAC;gBAAC,MAAM;YAAC,CAAC;QAC1D,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,cAAc;gBAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YACxE,IAAI,MAAM,CAAC,WAAW;gBAAE,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAE/D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,sDAAsD;YAClF,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACvE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YAC3B,CAAC;YACD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2EAA2E;IAE3E,yBAAyB;IACzB,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,sBAAsB;IACtB,UAAU,CAAC,MAAgC;QACzC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,IAAI,MAAM;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACxD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,iDAAiD;IACjD,eAAe;QAOb,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;YACnE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SACjG,CAAC;IACJ,CAAC;IAED,2EAA2E;IAE3E,+FAA+F;IACvF,eAAe,CAAC,OAAsB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,gBAAgB,CAAC;QAE3C,cAAc;QACd,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAW,EAAE,CAAC;YAC7C,OAAO,UAAU,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,IAAI,CAAC,OAAO,CAAC,UAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,CAAC;QAED,iBAAiB;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QAC5C,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;YAClD,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;gBACtE,OAAO,aAAa,OAAO,CAAC,QAAQ,cAAc,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;gBAChE,OAAO,aAAa,OAAO,CAAC,QAAQ,uBAAuB,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;QACrD,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACxE,OAAO,aAAa,OAAO,CAAC,QAAQ,cAAc,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBACzE,OAAO,aAAa,OAAO,CAAC,QAAQ,uBAAuB,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAjYD,wCAiYC"}
package/dist/fraud.d.ts CHANGED
@@ -7,9 +7,17 @@
7
7
  */
8
8
  import { IsolationForest, TransactionGraph, BehaviorProfile } from "./fraud-ml.js";
9
9
  import type { CollusionSignal, BehaviorSnapshot } from "./fraud-ml.js";
10
+ export interface FeeTier {
11
+ /** Minimum cumulative settled volume (USD) to qualify */
12
+ minVolume: number;
13
+ /** Fee rate for this tier */
14
+ rate: number;
15
+ }
10
16
  export interface FraudConfig {
11
- /** Platform fee rate on settle (0.03 = 3%). Default 0.03 */
17
+ /** Platform fee rate on settle (0.019 = 1.9%). Default 0.019. Used when no tiers match. */
12
18
  platformFeeRate: number;
19
+ /** Volume-based fee tiers (sorted by minVolume ascending). Overrides platformFeeRate when agent qualifies. */
20
+ feeTiers: FeeTier[];
13
21
  /** Max charges per minute per agent. Default 5 */
14
22
  maxChargesPerMinute: number;
15
23
  /** Max charges per hour per agent. Default 30 */
@@ -38,6 +46,8 @@ export interface FraudConfig {
38
46
  blockedCountries: string[];
39
47
  /** Enable ML fraud detection (Isolation Forest, graph analysis, behavioral fingerprinting). Default false */
40
48
  ml: boolean;
49
+ /** Geo-enhanced fraud detection config */
50
+ geo: GeoFraudConfig;
41
51
  }
42
52
  export declare const DEFAULT_FRAUD_CONFIG: FraudConfig;
43
53
  export interface FraudSignal {
@@ -86,6 +96,40 @@ export interface RequestContext {
86
96
  country?: string;
87
97
  userAgent?: string;
88
98
  sessionId?: string;
99
+ /** UTC offset in hours (e.g., +1 for WAT, -5 for CDT) */
100
+ utcOffset?: number;
101
+ /** Currency code associated with this request's region */
102
+ currency?: string;
103
+ }
104
+ /** Per-agent geographic behavior profile */
105
+ export interface GeoProfile {
106
+ /** First country seen — established as "home" after 5+ transactions */
107
+ homeCountry?: string;
108
+ /** All countries seen, with transaction counts */
109
+ countryCounts: Record<string, number>;
110
+ /** Country of last transaction */
111
+ lastCountry?: string;
112
+ /** Timestamps of country changes (for rapid-hop detection) */
113
+ countryChanges: number[];
114
+ /** Total transactions tracked for this profile */
115
+ totalTxCount: number;
116
+ /** Geo trust score 0-1 (higher = more consistent location = less suspicious) */
117
+ trustScore: number;
118
+ }
119
+ /** Geo-specific fraud config. All thresholds designed to FLAG, not BLOCK. */
120
+ export interface GeoFraudConfig {
121
+ /** Enable geo-enhanced fraud signals. Default: true */
122
+ enabled: boolean;
123
+ /** Min transactions before establishing home country. Default: 5 */
124
+ homeCountryThreshold: number;
125
+ /** Country changes in 24h to trigger rapid-hop signal. Default: 3 */
126
+ rapidHopThreshold: number;
127
+ /** High-risk country corridors (pairs). Default: common AML corridors */
128
+ highRiskCorridors: [string, string][];
129
+ /** OFAC/sanctions blocked countries. These BLOCK, not just flag. */
130
+ sanctionedCountries: string[];
131
+ /** Currency-to-country region map for mismatch detection */
132
+ currencyRegions: Record<string, string[]>;
89
133
  }
90
134
  export declare class FraudGuard {
91
135
  readonly config: FraudConfig;
@@ -99,12 +143,16 @@ export declare class FraudGuard {
99
143
  private feeLedger;
100
144
  /** Total platform fees collected */
101
145
  private _platformFeesCollected;
146
+ /** Cumulative settled volume per agent (for tiered pricing) */
147
+ private agentSettledVolume;
102
148
  /** Known IPs per agent for consistency checks */
103
149
  private agentIps;
104
150
  /** Flagged agents (soft block — allowed but monitored) */
105
151
  private flaggedAgents;
106
152
  /** Hard-blocked agents */
107
153
  private blockedAgents;
154
+ /** Per-agent geo behavior profiles */
155
+ private geoProfiles;
108
156
  /** ML anomaly detection — only loaded when ml: true */
109
157
  readonly isolationForest: IsolationForest | null;
110
158
  /** Transaction graph — only loaded when ml: true */
@@ -130,8 +178,18 @@ export declare class FraudGuard {
130
178
  detectCollusion(): CollusionSignal[];
131
179
  /** Get an agent's behavioral baseline (requires ml: true) */
132
180
  getAgentBaseline(agentId: string): BehaviorSnapshot | undefined;
181
+ /**
182
+ * Get the effective fee rate for an agent based on cumulative settled volume.
183
+ * Higher volume = lower fees (loyalty reward for active agents).
184
+ */
185
+ getEffectiveFeeRate(agentId: string): number;
186
+ /**
187
+ * Get an agent's cumulative settled volume.
188
+ */
189
+ getAgentVolume(agentId: string): number;
133
190
  /**
134
191
  * Calculate and record platform fee for a settlement.
192
+ * Uses volume-based tiered pricing when configured.
135
193
  * Returns { grossAmount, feeAmount, netAmount }.
136
194
  */
137
195
  applyPlatformFee(txId: string, agentId: string, grossAmount: number): PlatformFeeRecord;
@@ -176,6 +234,22 @@ export declare class FraudGuard {
176
234
  openDisputes: number;
177
235
  platformFeesCollected: number;
178
236
  };
237
+ /**
238
+ * Assess geo-related risk signals for a transaction.
239
+ * Design: all signals are LOW weight (0.1-0.35) so they NEVER block alone.
240
+ * Only sanctioned countries use critical weight (0.9).
241
+ * Agents build geo trust over time, dampening signals further.
242
+ */
243
+ private assessGeo;
244
+ /**
245
+ * Update geo profile after a successful charge.
246
+ * Builds geo trust over time — consistent location = higher trust.
247
+ */
248
+ updateGeoProfile(agentId: string, ctx?: RequestContext): void;
249
+ /** Get or create a geo profile for an agent */
250
+ private getOrCreateGeoProfile;
251
+ /** Get an agent's geo profile (for diagnostics/display) */
252
+ getGeoProfile(agentId: string): GeoProfile | undefined;
179
253
  serialize(): string;
180
254
  static deserialize(json: string, config?: Partial<FraudConfig>): FraudGuard;
181
255
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fraud.d.ts","sourceRoot":"","sources":["../src/fraud.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fraud.d.ts","sourceRoot":"","sources":["../src/fraud.ts"],"names":[],"mappings":"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"}