@fayz-ai/plugin-shop 0.11.2 → 0.13.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 (66) hide show
  1. package/dist/{ShopPage-YB5ZWECJ.js → ShopPage-QFIM2HDU.js} +1516 -406
  2. package/dist/ShopPage-QFIM2HDU.js.map +1 -0
  3. package/dist/{chunk-HAKXHHAG.js → chunk-2VMTPRGC.js} +202 -11
  4. package/dist/chunk-2VMTPRGC.js.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1814 -442
  8. package/dist/index.js.map +1 -1
  9. package/dist/integrations/abacatepay/connectorDef.d.ts.map +1 -1
  10. package/dist/integrations/abacatepay/data.d.ts +40 -0
  11. package/dist/integrations/abacatepay/data.d.ts.map +1 -0
  12. package/dist/integrations/abacatepay/limits.d.ts +26 -0
  13. package/dist/integrations/abacatepay/limits.d.ts.map +1 -0
  14. package/dist/integrations/abacatepay/sync.d.ts +88 -0
  15. package/dist/integrations/abacatepay/sync.d.ts.map +1 -0
  16. package/dist/integrations/bling/data.d.ts.map +1 -1
  17. package/dist/integrations/mercadopago/connectorDef.d.ts +41 -0
  18. package/dist/integrations/mercadopago/connectorDef.d.ts.map +1 -0
  19. package/dist/integrations/neochef/connectorDef.d.ts +12 -0
  20. package/dist/integrations/neochef/connectorDef.d.ts.map +1 -0
  21. package/dist/integrations/neochef/data.d.ts +54 -0
  22. package/dist/integrations/neochef/data.d.ts.map +1 -0
  23. package/dist/integrations/neochef/index.d.ts +8 -0
  24. package/dist/integrations/neochef/index.d.ts.map +1 -0
  25. package/dist/integrations/neochef/limits.d.ts +26 -0
  26. package/dist/integrations/neochef/limits.d.ts.map +1 -0
  27. package/dist/integrations/neochef/mapping.d.ts +31 -0
  28. package/dist/integrations/neochef/mapping.d.ts.map +1 -0
  29. package/dist/integrations/neochef/mark.d.ts +21 -0
  30. package/dist/integrations/neochef/mark.d.ts.map +1 -0
  31. package/dist/integrations/neochef/types.d.ts +71 -0
  32. package/dist/integrations/neochef/types.d.ts.map +1 -0
  33. package/dist/integrations/vindi/connectorDef.d.ts +67 -35
  34. package/dist/integrations/vindi/connectorDef.d.ts.map +1 -1
  35. package/dist/views/ContentPage.d.ts.map +1 -1
  36. package/dist/views/CustomerModal.d.ts +33 -0
  37. package/dist/views/CustomerModal.d.ts.map +1 -0
  38. package/dist/views/NewOrderCharge.d.ts +39 -3
  39. package/dist/views/NewOrderCharge.d.ts.map +1 -1
  40. package/dist/views/NewOrderPage.d.ts +10 -1
  41. package/dist/views/NewOrderPage.d.ts.map +1 -1
  42. package/dist/views/OrderDetailView.d.ts.map +1 -1
  43. package/dist/views/OrdersAgentSurface.d.ts +10 -0
  44. package/dist/views/OrdersAgentSurface.d.ts.map +1 -0
  45. package/dist/views/ProductPositionsTab.d.ts +7 -0
  46. package/dist/views/ProductPositionsTab.d.ts.map +1 -0
  47. package/dist/views/ProductStockTab.d.ts +84 -0
  48. package/dist/views/ProductStockTab.d.ts.map +1 -0
  49. package/dist/views/ShopPage.d.ts.map +1 -1
  50. package/dist/views/StockEntryModal.d.ts +32 -0
  51. package/dist/views/StockEntryModal.d.ts.map +1 -0
  52. package/dist/views/customerEntity.d.ts.map +1 -1
  53. package/dist/views/discount-agent.d.ts +2 -0
  54. package/dist/views/discount-agent.d.ts.map +1 -0
  55. package/dist/views/new-order-rules.d.ts +23 -1
  56. package/dist/views/new-order-rules.d.ts.map +1 -1
  57. package/dist/views/orders-agent.d.ts +11 -0
  58. package/dist/views/orders-agent.d.ts.map +1 -0
  59. package/dist/views/product-matching.d.ts +38 -0
  60. package/dist/views/product-matching.d.ts.map +1 -0
  61. package/dist/views/productEntity.d.ts.map +1 -1
  62. package/dist/views/stock-agent.d.ts +82 -0
  63. package/dist/views/stock-agent.d.ts.map +1 -0
  64. package/package.json +8 -6
  65. package/dist/ShopPage-YB5ZWECJ.js.map +0 -1
  66. package/dist/chunk-HAKXHHAG.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"connectorDef.d.ts","sourceRoot":"","sources":["../../../src/integrations/abacatepay/connectorDef.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAA;AAEtB,eAAO,MAAM,uBAAuB,eAAe,CAAA;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAEhD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAQ7C,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAajD,CAAA;AAoDD,eAAO,MAAM,sBAAsB,EAAE,mBA2FpC,CAAA"}
1
+ {"version":3,"file":"connectorDef.d.ts","sourceRoot":"","sources":["../../../src/integrations/abacatepay/connectorDef.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAA;AAEtB,eAAO,MAAM,uBAAuB,eAAe,CAAA;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAEhD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAQ7C,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAkBjD,CAAA;AA4KD,eAAO,MAAM,sBAAsB,EAAE,mBA2FpC,CAAA"}
@@ -0,0 +1,40 @@
1
+ /** The edge function that holds every catalogue call this connector makes. */
2
+ export declare const ABACATEPAY_FUNCTION = "abacatepay-sync";
3
+ export interface AbacatePaySyncResult {
4
+ ok: boolean;
5
+ /** Products created in the provider's catalogue on this run. */
6
+ pushed: number;
7
+ /** Already there and still at the same price. */
8
+ unchanged: number;
9
+ /** Refused before sending: no name, or a price of zero. */
10
+ skipped: Array<{
11
+ productId: string;
12
+ reason: string;
13
+ }>;
14
+ /** The provider said no. One bad product does not end a run. */
15
+ failed: Array<{
16
+ productId: string;
17
+ error: string;
18
+ }>;
19
+ /** Created, but AbacatePay refused the photo, so it went without one. */
20
+ withoutImage: string[];
21
+ /** Linked, but the store's price has moved since. Reported, never repaired. */
22
+ drifted?: Array<{
23
+ productId: string;
24
+ externalId: string;
25
+ }>;
26
+ /** The per-run cap stopped it short — press again. */
27
+ hasMore: boolean;
28
+ total: number;
29
+ }
30
+ /** Read-only probe: is the key good? Listing an empty catalogue is a success. */
31
+ export declare function testAbacatePay(): Promise<{
32
+ ok: boolean;
33
+ remoteProducts?: number;
34
+ error?: string;
35
+ }>;
36
+ /** Send the products that have no link yet. Additive — nothing is ever deleted. */
37
+ export declare function pushCatalogue(): Promise<AbacatePaySyncResult>;
38
+ /** Push, then report which linked products have drifted from the sent price. */
39
+ export declare function reconcileCatalogue(): Promise<AbacatePaySyncResult>;
40
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/integrations/abacatepay/data.ts"],"names":[],"mappings":"AAaA,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,oBAAoB,CAAA;AAEpD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAA;IACX,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD,gEAAgE;IAChE,MAAM,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnD,yEAAyE;IACzE,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd;AAgDD,iFAAiF;AACjF,wBAAgB,cAAc,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAElG;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAE7D;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAElE"}
@@ -0,0 +1,26 @@
1
+ import type { RateLimitBudget } from '@fayz-ai/core';
2
+ export declare const ABACATEPAY_CONNECTOR_ID = "abacatepay";
3
+ /** The `source` written into plg_shop_product_links. */
4
+ export declare const ABACATEPAY_LINK_SOURCE = "abacatepay";
5
+ /** One row per product today. `plan` is what a subscription would file under. */
6
+ export declare const ABACATEPAY_LINK_KIND = "product";
7
+ /**
8
+ * Products per run.
9
+ *
10
+ * The catalogue has no bulk endpoint — it is one POST per product — and this
11
+ * runs inside an edge function with a wall clock. A store connecting after a
12
+ * year of selling files that year on its first run; capped, it drains over a few
13
+ * runs instead of dying halfway through and leaving the operator unsure which
14
+ * half landed.
15
+ */
16
+ export declare const ABACATEPAY_PUSH_LIMIT = 40;
17
+ /**
18
+ * Requests per second against api.abacatepay.com.
19
+ *
20
+ * Not a documented figure — their docs publish no rate limit — so this is a
21
+ * deliberately conservative floor rather than a measured ceiling. A catalogue
22
+ * push is never urgent; being slower than allowed costs nothing, being faster
23
+ * than allowed costs a half-written catalogue.
24
+ */
25
+ export declare const ABACATEPAY_RATE_LIMIT: RateLimitBudget;
26
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../src/integrations/abacatepay/limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,eAAO,MAAM,uBAAuB,eAAe,CAAA;AAEnD,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,eAAe,CAAA;AAElD,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAE7C;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAAkC,CAAA"}
@@ -0,0 +1,88 @@
1
+ /** A store product, in the shape the push needs and no wider. */
2
+ export interface SyncProduct {
3
+ id: string;
4
+ name: string;
5
+ price: number;
6
+ description?: string | null;
7
+ imageUrl?: string | null;
8
+ status?: string | null;
9
+ }
10
+ /** An existing row of plg_shop_product_links. */
11
+ export interface ProductLink {
12
+ product_id: string;
13
+ external_id: string;
14
+ synced_price_cents?: number | null;
15
+ /** Which of the provider's worlds this id exists in. */
16
+ dev_mode?: boolean | null;
17
+ }
18
+ /** What the caller must give us to reach the provider. One product per call. */
19
+ export type CreateProductTransport = (body: Record<string, unknown>) => Promise<{
20
+ id: string;
21
+ raw?: unknown;
22
+ }>;
23
+ export interface PushProductsOptions {
24
+ products: readonly SyncProduct[];
25
+ links: readonly ProductLink[];
26
+ createProduct: CreateProductTransport;
27
+ limit?: number;
28
+ /** Pure builder from the deployed runtime — injected to keep this file free of
29
+ * the .js/.ts boundary the edge bundle lives on. */
30
+ buildProduct: (product: SyncProduct) => Record<string, unknown> | null;
31
+ priceDrifted: (link: ProductLink, product: SyncProduct) => boolean;
32
+ }
33
+ export interface PushedLink {
34
+ productId: string;
35
+ externalId: string;
36
+ priceCents: number;
37
+ raw?: unknown;
38
+ }
39
+ export interface PushProductsResult {
40
+ /** Links to write. The caller owns the database. */
41
+ created: PushedLink[];
42
+ /** Already linked, price unchanged — nothing to do. */
43
+ unchanged: number;
44
+ /** Linked, but the store's price has moved since. Reported, never repaired. */
45
+ drifted: Array<{
46
+ productId: string;
47
+ externalId: string;
48
+ }>;
49
+ /** Refused by the builder: no name, no id, or a price of zero. */
50
+ skipped: Array<{
51
+ productId: string;
52
+ reason: string;
53
+ }>;
54
+ /** Created, but the provider would not take the photo — so it went without one. */
55
+ withoutImage: string[];
56
+ /** The provider said no. The run continues; a bad product is not a bad run. */
57
+ failed: Array<{
58
+ productId: string;
59
+ error: string;
60
+ }>;
61
+ /** True when the cap stopped us short and another run has work left. */
62
+ hasMore: boolean;
63
+ }
64
+ /**
65
+ * Products with no link yet, oldest first by the order given.
66
+ *
67
+ * Archived products are excluded: pushing one creates a catalogue entry for
68
+ * something the store will not sell, and the catalogue has no update to walk it
69
+ * back — only a delete that breaks whatever it is attached to.
70
+ */
71
+ export declare function pushQueue(products: readonly SyncProduct[], links: readonly ProductLink[], limit?: number): SyncProduct[];
72
+ /** Which already-linked products no longer agree with the provider on price. */
73
+ export declare function driftedLinks(products: readonly SyncProduct[], links: readonly ProductLink[], priceDrifted: PushProductsOptions['priceDrifted']): Array<{
74
+ productId: string;
75
+ externalId: string;
76
+ }>;
77
+ /**
78
+ * Push the absent products, one at a time.
79
+ *
80
+ * Sequential on purpose. There is no bulk endpoint, the provider publishes no
81
+ * rate limit, and a catalogue push is never the urgent thing — the caller paces
82
+ * it with the rate limiter. Parallelism here would only buy the chance of being
83
+ * throttled halfway through.
84
+ */
85
+ export declare function pushProducts(options: PushProductsOptions): Promise<PushProductsResult>;
86
+ /** The rows `pushProducts` produced, ready for an upsert into plg_shop_product_links. */
87
+ export declare function linkRows(tenantId: string, created: readonly PushedLink[], now: string, devMode?: boolean): Array<Record<string, unknown>>;
88
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/integrations/abacatepay/sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/integrations/bling/data.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AAGtB,0EAA0E;AAC1E,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;CAChB;AAqCD,yEAAyE;AACzE,wBAAgB,SAAS,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAEtE;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAEhF;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAExD;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAExD;AAED,iEAAiE;AACjE,wBAAgB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAErD;AAED,sFAAsF;AACtF,wBAAgB,SAAS,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1F;AAoBD,wBAAgB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB/D;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkB5D;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4DlF;AAED,sFAAsF;AACtF,wBAAgB,SAAS,IAAI,OAAO,CAAC;IACnC,IAAI,EAAE,eAAe,CAAA;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5D,CAAC,CAED"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/integrations/bling/data.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AAQtB,0EAA0E;AAC1E,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;CAChB;AAqCD,yEAAyE;AACzE,wBAAgB,SAAS,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAEtE;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAEhF;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAExD;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAExD;AAED,iEAAiE;AACjE,wBAAgB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAErD;AAED,sFAAsF;AACtF,wBAAgB,SAAS,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1F;AAoBD,wBAAgB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB/D;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkB5D;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4DlF;AAED,sFAAsF;AACtF,wBAAgB,SAAS,IAAI,OAAO,CAAC;IACnC,IAAI,EAAE,eAAe,CAAA;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5D,CAAC,CAED"}
@@ -0,0 +1,41 @@
1
+ import { type ConnectorDefinition, type ConnectorField } from '@fayz-ai/core';
2
+ export declare const MERCADOPAGO_CONNECTOR_ID = "mercadopago";
3
+ /**
4
+ * Six seconds, the budget every gateway on this shelf carries: it is spent after
5
+ * the buyer pressed "pagar", where waiting is expected and a premature refusal
6
+ * costs a sale that was about to happen.
7
+ *
8
+ * Measured, not copied: `POST /v1/orders` answered in 700–1100 ms from São Paulo
9
+ * across the Pix and card runs on 2026-08-26. The budget keeps the same headroom
10
+ * the others were given.
11
+ */
12
+ export declare const MERCADOPAGO_LATENCY_BUDGET_MS = 6000;
13
+ /**
14
+ * What authorizes the connection — a PAIR, and only one half of it is a secret.
15
+ *
16
+ * `type: 'password'` routes a value to the platform vault
17
+ * (packages/admin/.../connect/credentials.ts) instead of to `saveConnection`.
18
+ * The public key needs the same road for a different reason: it is not
19
+ * confidential — it ships inside the checkout page, the way a publishable key
20
+ * does — but it is the other half of ONE credential, and letting it fall through
21
+ * to `saveConnection` would split a single credential across two stores. That is
22
+ * exactly what `secret: true` on a `text` field is for, so the merchant can still
23
+ * read it back and check they pasted the right one.
24
+ *
25
+ * ── there is no environment setting, and that is a property of the vendor ────
26
+ *
27
+ * Both halves are self-describing: `TEST-…` is the sandbox, `APP_USR-…` is real
28
+ * money. So the world a charge lands in is decided by the credential itself and
29
+ * can never disagree with a stored flag — the trap AbacatePay set (migration
30
+ * 0069), where a catalogue pushed with a production key did not exist in
31
+ * sandbox, and the one Vindi answers with a `select` because its two worlds live
32
+ * on two different hosts.
33
+ *
34
+ * One caveat worth knowing before testing: the Orders API REFUSES `TEST-`
35
+ * credentials outright — `401 invalid_credentials: Test credentials are not
36
+ * supported, use test users with production credentials`. Testing means a test
37
+ * USER's production keys, which is what the panel below tells the merchant.
38
+ */
39
+ export declare const MERCADOPAGO_FIELDS: ConnectorField[];
40
+ export declare const mercadoPagoConnectorDef: ConnectorDefinition;
41
+ //# sourceMappingURL=connectorDef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectorDef.d.ts","sourceRoot":"","sources":["../../../src/integrations/mercadopago/connectorDef.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAA;AAEtB,eAAO,MAAM,wBAAwB,gBAAgB,CAAA;AAErD;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAiB9C,CAAA;AAoFD,eAAO,MAAM,uBAAuB,EAAE,mBAmGrC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { ConnectorDefinition } from '@fayz-ai/core';
2
+ /**
3
+ * `settingsKeys` and not `fields`: nothing here is asked for in a form.
4
+ *
5
+ * The merchant authorizes on NeoChef's consent screen and comes back — which
6
+ * kitchen, and what it is called, are learned from the grant. There is no
7
+ * credential to route either: the platform holds it, and this connection has no
8
+ * secret field to route in the first place.
9
+ */
10
+ export declare const neoChefConnectionStore: () => import("@fayz-ai/core").ConnectionStore;
11
+ export declare const neoChefConnectorDef: ConnectorDefinition;
12
+ //# sourceMappingURL=connectorDef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectorDef.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/connectorDef.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAOxD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,+CAG/B,CAAA;AAEJ,eAAO,MAAM,mBAAmB,EAAE,mBA4KjC,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { type ConnectorDelivery } from '@fayz-ai/core';
2
+ /** The edge function that holds every NeoChef call this connector makes. */
3
+ export declare const NEOCHEF_FUNCTION = "neochef-sync";
4
+ /** What a push leg answers with. Every field is a count the merchant can check. */
5
+ export interface NeoChefPushResult {
6
+ runId?: string;
7
+ /** What the run settled as. The toast reads this, not "it did not throw". */
8
+ status?: 'success' | 'partial' | 'error';
9
+ filed: number;
10
+ skipped?: number;
11
+ considered: number;
12
+ failures?: number;
13
+ message: string;
14
+ }
15
+ export interface NeoChefPullResult {
16
+ runId?: string;
17
+ fetched: number;
18
+ inserted: number;
19
+ updated: number;
20
+ untouched: number;
21
+ sample: boolean;
22
+ }
23
+ /** Read one product. Writes nothing anywhere — the probe, not a sync. */
24
+ export declare function testNeoChef(): Promise<{
25
+ ok: boolean;
26
+ message?: string;
27
+ }>;
28
+ /** Bring the catalogue and the stock down. `sample` is the first, fast answer. */
29
+ export declare function pullCatalogue(mode?: 'sample' | 'full'): Promise<NeoChefPullResult>;
30
+ /** Send every paid order not filed yet, as an order in the kitchen. */
31
+ export declare function pushOrders(): Promise<NeoChefPushResult>;
32
+ /** Both legs, in the order somebody does them on an ordinary day. */
33
+ export declare function reconcile(): Promise<{
34
+ pull?: NeoChefPullResult;
35
+ push?: Record<string, NeoChefPushResult>;
36
+ }>;
37
+ /**
38
+ * How many orders still have to go up.
39
+ *
40
+ * The same ABSENCE the function uses as its queue: a paid order with no link
41
+ * row. Counted from here so the row can say "em dia" instead of offering a
42
+ * button that would send nothing.
43
+ */
44
+ export declare function pendingOrders(): Promise<number | null>;
45
+ /**
46
+ * Record by record, for the automations screen.
47
+ *
48
+ * The managed automation says a paid order goes to the kitchen; this is what
49
+ * says whether it arrived. Orders first and links second, so an order that has
50
+ * NOT gone up still appears — a list built from links alone shows only the
51
+ * successes, which reads as health.
52
+ */
53
+ export declare function listOrderDeliveries(limit?: number): Promise<ConnectorDelivery[]>;
54
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/data.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AAQtB,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,iBAAiB,CAAA;AAE9C,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;CAChB;AAqCD,yEAAyE;AACzE,wBAAgB,WAAW,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAExE;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAElF;AAED,uEAAuE;AACvE,wBAAgB,UAAU,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAEvD;AAED,qEAAqE;AACrE,wBAAgB,SAAS,IAAI,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CACzC,CAAC,CAED;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoB5D;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA2DlF"}
@@ -0,0 +1,8 @@
1
+ export { neoChefConnectorDef, neoChefConnectionStore } from './connectorDef';
2
+ export { NEOCHEF_CONNECTOR_ID, NEOCHEF_RATE_LIMIT, NEOCHEF_PAGE_SIZE, NEOCHEF_SAMPLE_SIZE, NEOCHEF_CURSOR_OVERLAP_MS, NEOCHEF_TOKEN_LEAD_MS, } from './limits';
3
+ export { toMirroredNeoChefProduct, toNeoChefOrder, advanceNeoChefCursor } from './mapping';
4
+ export { NEOCHEF_MARK } from './mark';
5
+ export { NEOCHEF_FUNCTION, pullCatalogue, pushOrders, reconcile, testNeoChef, pendingOrders, listOrderDeliveries, } from './data';
6
+ export type { NeoChefPullResult, NeoChefPushResult } from './data';
7
+ export type { NeoChefProductRow, NeoChefOrderRow, NeoChefSettings, MirroredNeoChefProduct, ShopOrderForNeoChef, } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,QAAQ,CAAA;AACf,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAClE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { RateLimitBudget } from '@fayz-ai/core/connector-runtime';
2
+ export declare const NEOCHEF_CONNECTOR_ID = "neochef";
3
+ /**
4
+ * Per connection.
5
+ *
6
+ * Not a limit NeoChef publishes — it is one we choose, because the far side is
7
+ * a platform serving every other tenant too. A connector with no budget is a
8
+ * connector whose worst day is someone else's outage.
9
+ */
10
+ export declare const NEOCHEF_RATE_LIMIT: RateLimitBudget;
11
+ /** Rows per page on the data plane's row endpoints. */
12
+ export declare const NEOCHEF_PAGE_SIZE = 100;
13
+ /**
14
+ * The first answer, and why it is one page.
15
+ *
16
+ * The same argument as Bling's, at a different speed: a connect screen must
17
+ * settle in seconds, and a kitchen with a thousand products would otherwise
18
+ * make the merchant watch a spinner to find out whether the connection worked.
19
+ * The backfill finishes the mirror behind it.
20
+ */
21
+ export declare const NEOCHEF_SAMPLE_SIZE = 100;
22
+ /** Re-read this much before the last cursor. See the header. */
23
+ export declare const NEOCHEF_CURSOR_OVERLAP_MS = 60000;
24
+ /** Renew well before the hour is up — never at the deadline. */
25
+ export declare const NEOCHEF_TOKEN_LEAD_MS: number;
26
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/limits.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE,eAAO,MAAM,oBAAoB,YAAY,CAAA;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAkD,CAAA;AAEnF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAE/C,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,QAAc,CAAA"}
@@ -0,0 +1,31 @@
1
+ import type { MirroredNeoChefProduct, NeoChefOrderRow, NeoChefProductRow, ShopOrderForNeoChef } from './types';
2
+ /**
3
+ * One NeoChef product as the mirror stores it, or null when it carries no id.
4
+ *
5
+ * `is_active` maps to archived and never to a delete. An inactive product in
6
+ * the kitchen is still a product, and this connector has no vocabulary for
7
+ * deletion at all — a store that empties its catalogue because a row left a
8
+ * page is the failure `reconcileMirror` exists to prevent.
9
+ */
10
+ export declare function toMirroredNeoChefProduct(raw: NeoChefProductRow | null | undefined): MirroredNeoChefProduct | null;
11
+ /**
12
+ * A paid store order as a NeoChef order row.
13
+ *
14
+ * `kind` is the only real decision here: NeoChef's orders are `takeout` or
15
+ * `delivery`, and which one a web order is depends on whether the buyer
16
+ * collects. Guessing one would put every online sale on the wrong board in the
17
+ * kitchen, so it is read from the order and defaults to delivery — the answer
18
+ * that is wrong in the safer direction, since a delivery order nobody drives is
19
+ * visible and a takeout order nobody prepared is not.
20
+ */
21
+ export declare function toNeoChefOrder(order: ShopOrderForNeoChef): NeoChefOrderRow;
22
+ /**
23
+ * The cursor for the next pull.
24
+ *
25
+ * The newest `updated_at` OBSERVED, minus an overlap, and never the clock: the
26
+ * two sides do not share one, and a cursor taken from ours skips whatever the
27
+ * far side stamped in between. Null when nothing carried a stamp, which asks
28
+ * the next run to repeat the window rather than to invent one.
29
+ */
30
+ export declare function advanceNeoChefCursor(products: MirroredNeoChefProduct[], overlapMs: number): string | null;
31
+ //# sourceMappingURL=mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/mapping.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAQhB;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GACxC,sBAAsB,GAAG,IAAI,CAsB/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,eAAe,CAa1E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,sBAAsB,EAAE,EAClC,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAMf"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * NeoChef's mark, inlined.
3
+ *
4
+ * Same reasoning as `client-marks.ts` in @fayz-ai/admin: a brand a row wears
5
+ * cannot fail to load, on an app served from anywhere. A first-party mark has
6
+ * no reason to depend on a bucket being reachable.
7
+ *
8
+ * It is COMPOSED rather than copied, and that is the part worth knowing. The
9
+ * app's own asset (`public/logo/neochef-icon.png`) is a MASK — the stroke is
10
+ * white and the shape lives in the alpha channel, because the app paints it
11
+ * with `currentColor` so one file serves the ink rail and the login card. Used
12
+ * as an `<img>` that file is invisible on a light surface, which is what a
13
+ * connector row is. So the hat sits on the brand's own turmeric (#e0a906),
14
+ * giving the row a mark that is legible on both themes — the same shape the
15
+ * consent screen shows, in a form a plain image tag can render.
16
+ *
17
+ * Replace with an `assets.fayz.ai/connectors/neochef.png` URL whenever the
18
+ * bucket has one; nothing else has to change.
19
+ */
20
+ export declare const NEOCHEF_MARK = "data:image/png;base64,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";
21
+ //# sourceMappingURL=mark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/mark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,2pNACioN,CAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * A product row as NeoChef's data plane returns it.
3
+ *
4
+ * snake_case, because these are columns and not a serialized model — the row
5
+ * endpoints hand back what Postgres holds. `stock` is on the row, so catalogue
6
+ * and stock arrive together: one request per PAGE, never one per product.
7
+ */
8
+ export interface NeoChefProductRow {
9
+ id: string;
10
+ name?: string | null;
11
+ sku?: string | null;
12
+ price?: number | string | null;
13
+ cost?: number | string | null;
14
+ stock?: number | string | null;
15
+ image_url?: string | null;
16
+ status?: string | null;
17
+ is_active?: boolean | null;
18
+ updated_at?: string | null;
19
+ }
20
+ /** What the mirror stores for one product. Canonical Fayz, on both sides. */
21
+ export interface MirroredNeoChefProduct {
22
+ externalId: string;
23
+ sku: string | null;
24
+ name: string;
25
+ price: number | null;
26
+ /** NeoChef owns this number once connected — see `stockOwner`. */
27
+ inventoryCount: number | null;
28
+ status: 'active' | 'archived';
29
+ imageUrl: string | null;
30
+ updatedAt: string | null;
31
+ }
32
+ /** The store-side order this connector files, narrowed to what NeoChef needs. */
33
+ export interface ShopOrderForNeoChef {
34
+ id: string;
35
+ referenceNumber?: string | null;
36
+ total?: number | string | null;
37
+ subtotal?: number | string | null;
38
+ notes?: string | null;
39
+ /** True when the buyer collects. It is what decides `kind` on the far side. */
40
+ pickup?: boolean | null;
41
+ createdAt?: string | null;
42
+ }
43
+ /** An order row as NeoChef's `orders` table takes it. */
44
+ export interface NeoChefOrderRow {
45
+ kind: 'takeout' | 'delivery';
46
+ reference_number: string;
47
+ status: string;
48
+ total: number | null;
49
+ subtotal: number | null;
50
+ notes: string | null;
51
+ }
52
+ /** Non-secret connection settings. The OAuth credential is never among them. */
53
+ export interface NeoChefSettings {
54
+ /**
55
+ * The NeoChef organization the merchant picked on the consent screen.
56
+ *
57
+ * Discovered, never typed: the tenant is fixed inside the token by the
58
+ * consent, and this is only the label that lets the row say which kitchen.
59
+ */
60
+ kitchenId?: string;
61
+ /** How far back the first backfill reaches. */
62
+ backfillFrom?: string;
63
+ /**
64
+ * Who owns the stock number once NeoChef is connected.
65
+ *
66
+ * Always `neochef` today. Declared so the answer lives in the connection
67
+ * rather than in someone's memory — the same reason Bling declares it.
68
+ */
69
+ stockOwner?: 'neochef' | 'shop';
70
+ }
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/integrations/neochef/types.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,kEAAkE;IAClE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,UAAU,CAAA;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAChC"}