@fayz-ai/shop 0.9.0 → 0.10.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 (144) hide show
  1. package/README.md +18 -1
  2. package/dist/admin.d.ts +2 -0
  3. package/dist/admin.d.ts.map +1 -0
  4. package/dist/catalog.d.ts +1 -3
  5. package/dist/catalog.d.ts.map +1 -1
  6. package/dist/catalog.js +2 -2
  7. package/dist/chunk-3GERSY5F.js +526 -0
  8. package/dist/chunk-3GERSY5F.js.map +1 -0
  9. package/dist/chunk-FQPGE3YN.js +3 -0
  10. package/dist/{chunk-JR25TISO.js.map → chunk-FQPGE3YN.js.map} +1 -1
  11. package/dist/{chunk-CTKZ6O2J.js → chunk-IKNGCRUM.js} +41 -15
  12. package/dist/chunk-IKNGCRUM.js.map +1 -0
  13. package/dist/{chunk-IYQHKMLB.js → chunk-IL6GA4ER.js} +4 -4
  14. package/dist/chunk-IL6GA4ER.js.map +1 -0
  15. package/dist/chunk-KLDS7IPU.js +17 -0
  16. package/dist/chunk-KLDS7IPU.js.map +1 -0
  17. package/dist/chunk-RGTIJQJL.js +93 -0
  18. package/dist/chunk-RGTIJQJL.js.map +1 -0
  19. package/dist/{chunk-SVTCJ6HP.js → chunk-U3O2I3RM.js} +395 -27
  20. package/dist/chunk-U3O2I3RM.js.map +1 -0
  21. package/dist/chunk-XERLK5LD.js +1415 -0
  22. package/dist/chunk-XERLK5LD.js.map +1 -0
  23. package/dist/chunk-XOP6SHPB.js +142 -0
  24. package/dist/chunk-XOP6SHPB.js.map +1 -0
  25. package/dist/client.d.ts +2 -0
  26. package/dist/client.d.ts.map +1 -0
  27. package/dist/{mock-catalog.d.ts → data/mock-catalog.d.ts} +21 -1
  28. package/dist/data/mock-catalog.d.ts.map +1 -0
  29. package/dist/data/mock-provider.d.ts +133 -0
  30. package/dist/data/mock-provider.d.ts.map +1 -0
  31. package/dist/data/mock.d.ts +3 -0
  32. package/dist/data/mock.d.ts.map +1 -0
  33. package/dist/data/provider.d.ts +142 -0
  34. package/dist/data/provider.d.ts.map +1 -0
  35. package/dist/data/supabase-provider.d.ts +100 -0
  36. package/dist/data/supabase-provider.d.ts.map +1 -0
  37. package/dist/data/tables.d.ts +35 -0
  38. package/dist/data/tables.d.ts.map +1 -0
  39. package/dist/data/tenant.d.ts.map +1 -0
  40. package/dist/entities/entity-reconcile.d.ts +32 -0
  41. package/dist/entities/entity-reconcile.d.ts.map +1 -0
  42. package/dist/entities/entity-sql.d.ts +50 -0
  43. package/dist/entities/entity-sql.d.ts.map +1 -0
  44. package/dist/entities/entity-store.d.ts +58 -0
  45. package/dist/entities/entity-store.d.ts.map +1 -0
  46. package/dist/entities/index.d.ts +11 -0
  47. package/dist/entities/index.d.ts.map +1 -0
  48. package/dist/entities/mock-entity-store.d.ts +17 -0
  49. package/dist/entities/mock-entity-store.d.ts.map +1 -0
  50. package/dist/entities/sidecar.d.ts +9 -0
  51. package/dist/entities/sidecar.d.ts.map +1 -0
  52. package/dist/entities/supabase-entity-store.d.ts +8 -0
  53. package/dist/entities/supabase-entity-store.d.ts.map +1 -0
  54. package/dist/entities.js +159 -0
  55. package/dist/entities.js.map +1 -0
  56. package/dist/index.d.ts +17 -10
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +728 -41
  59. package/dist/index.js.map +1 -1
  60. package/dist/inventory/allocation.d.ts +98 -0
  61. package/dist/inventory/allocation.d.ts.map +1 -0
  62. package/dist/inventory/index.d.ts +13 -0
  63. package/dist/inventory/index.d.ts.map +1 -0
  64. package/dist/inventory/mock-stock-store.d.ts +89 -0
  65. package/dist/inventory/mock-stock-store.d.ts.map +1 -0
  66. package/dist/inventory/postgrest-double.d.ts +65 -0
  67. package/dist/inventory/postgrest-double.d.ts.map +1 -0
  68. package/dist/inventory/shopify-mapping.d.ts +67 -0
  69. package/dist/inventory/shopify-mapping.d.ts.map +1 -0
  70. package/dist/inventory/stock-contract.d.ts +46 -0
  71. package/dist/inventory/stock-contract.d.ts.map +1 -0
  72. package/dist/inventory/stock-store.d.ts +96 -0
  73. package/dist/inventory/stock-store.d.ts.map +1 -0
  74. package/dist/inventory/stock-types.d.ts +292 -0
  75. package/dist/inventory/stock-types.d.ts.map +1 -0
  76. package/dist/inventory/supabase-stock-store.d.ts +59 -0
  77. package/dist/inventory/supabase-stock-store.d.ts.map +1 -0
  78. package/dist/inventory/vocabulary.d.ts +86 -0
  79. package/dist/inventory/vocabulary.d.ts.map +1 -0
  80. package/dist/inventory.js +4 -0
  81. package/dist/inventory.js.map +1 -0
  82. package/dist/lib/catalog.d.ts +4 -0
  83. package/dist/lib/catalog.d.ts.map +1 -0
  84. package/dist/{commerce.d.ts → lib/commerce.d.ts} +2 -2
  85. package/dist/lib/commerce.d.ts.map +1 -0
  86. package/dist/lib/emails.d.ts +50 -0
  87. package/dist/lib/emails.d.ts.map +1 -0
  88. package/dist/lib/message-events.d.ts +4 -0
  89. package/dist/lib/message-events.d.ts.map +1 -0
  90. package/dist/lib/runtime.d.ts +5 -0
  91. package/dist/lib/runtime.d.ts.map +1 -0
  92. package/dist/mock.d.ts +1 -2
  93. package/dist/mock.d.ts.map +1 -1
  94. package/dist/mock.js +4 -2
  95. package/dist/provider.d.ts +1 -88
  96. package/dist/provider.d.ts.map +1 -1
  97. package/dist/rules/adapter.d.ts +36 -0
  98. package/dist/rules/adapter.d.ts.map +1 -0
  99. package/dist/rules/attributes.d.ts +64 -0
  100. package/dist/rules/attributes.d.ts.map +1 -0
  101. package/dist/rules/context.d.ts +43 -0
  102. package/dist/rules/context.d.ts.map +1 -0
  103. package/dist/rules/evaluator.d.ts +37 -0
  104. package/dist/rules/evaluator.d.ts.map +1 -0
  105. package/dist/rules/index.d.ts +13 -0
  106. package/dist/rules/index.d.ts.map +1 -0
  107. package/dist/rules/prices.d.ts +25 -0
  108. package/dist/rules/prices.d.ts.map +1 -0
  109. package/dist/rules/rule-types.d.ts +160 -0
  110. package/dist/rules/rule-types.d.ts.map +1 -0
  111. package/dist/rules.js +22 -0
  112. package/dist/rules.js.map +1 -0
  113. package/dist/runtime.d.ts +1 -4
  114. package/dist/runtime.d.ts.map +1 -1
  115. package/dist/runtime.js +5 -3
  116. package/dist/types.d.ts +231 -0
  117. package/dist/types.d.ts.map +1 -1
  118. package/package.json +26 -20
  119. package/dist/chunk-CTKZ6O2J.js.map +0 -1
  120. package/dist/chunk-IYQHKMLB.js.map +0 -1
  121. package/dist/chunk-JR25TISO.js +0 -3
  122. package/dist/chunk-SVTCJ6HP.js.map +0 -1
  123. package/dist/commerce.d.ts.map +0 -1
  124. package/dist/mock-catalog.d.ts.map +0 -1
  125. package/dist/mock-provider.d.ts +0 -60
  126. package/dist/mock-provider.d.ts.map +0 -1
  127. package/dist/supabase-provider.d.ts +0 -56
  128. package/dist/supabase-provider.d.ts.map +0 -1
  129. package/dist/tables.d.ts +0 -12
  130. package/dist/tables.d.ts.map +0 -1
  131. package/dist/tenant.d.ts.map +0 -1
  132. package/src/catalog.ts +0 -3
  133. package/src/commerce.ts +0 -120
  134. package/src/index.ts +0 -40
  135. package/src/mock-catalog.ts +0 -266
  136. package/src/mock-provider.ts +0 -480
  137. package/src/mock.ts +0 -2
  138. package/src/provider.ts +0 -117
  139. package/src/runtime.ts +0 -20
  140. package/src/supabase-provider.ts +0 -754
  141. package/src/tables.ts +0 -17
  142. package/src/tenant.ts +0 -21
  143. package/src/types.ts +0 -623
  144. /package/dist/{tenant.d.ts → data/tenant.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/mock-provider.ts"],"names":["store","o"],"mappings":"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","file":"chunk-U3O2I3RM.js","sourcesContent":["import type { ShopProvider } from './provider'\nimport type {\n Product, ProductImage, ProductVariant, ProductVariantSet, Category, Order, ShopCustomer, Discount, ProductEnquiry,\n CreateProductInput, UpdateProductInput, ListProductsOptions,\n CreateProductEnquiryInput, ListProductEnquiriesOptions,\n CreateCategoryInput, UpdateCategoryInput,\n CreateOrderInput, UpdateOrderInput, ListOrdersOptions, PlaceOrderInput,\n CreateCustomerInput, UpdateCustomerInput, ListCustomersOptions, ResolveCustomerInput,\n CreateDiscountInput, UpdateDiscountInput, ListDiscountsOptions,\n SalesChannel, CreateSalesChannelInput, UpdateSalesChannelInput,\n Collection, CreateCollectionInput, UpdateCollectionInput, CustomerGroup, CreateCustomerGroupInput, UpdateCustomerGroupInput, CustomerSegment, CreateCustomerSegmentInput, UpdateCustomerSegmentInput, GiftCard, CreateGiftCardInput, UpdateGiftCardInput, EmailTemplate, UpsertEmailTemplateInput,\n} from '../types'\nimport { MOCK_PRODUCTS, MOCK_CATEGORIES, MOCK_DISCOUNTS, MOCK_VARIANTS } from './mock-catalog'\nimport { resolveEntityDeclaration } from '@fayz-ai/core'\nimport { resolveEntityStore } from '../entities/entity-store'\nimport type { EntityRecord, EntityRecordInput, EntityStore, ListEntityRecordsOptions } from '../entities/entity-store'\nimport { createMockEntityStore } from '../entities/mock-entity-store'\nimport { validateSidecarWrite } from '../entities/sidecar'\nimport { discountToPromotion } from '../rules/adapter'\nimport { buildRuleContext } from '../rules/context'\nimport { computePromotionActions } from '../rules/evaluator'\nimport type { ComputeAction, Promotion, RuleCartItem, RuleCartSnapshot } from '../rules/rule-types'\n\nfunction uid() { return Math.random().toString(36).slice(2) }\nfunction now() { return new Date().toISOString() }\n\n// Orders/customers persist to localStorage so \"my purchases\" survives a page\n// reload. Products/categories/discounts always reseed from the catalog —\n// the storefront sees a deterministic catalog on every load.\nconst ORDERS_KEY = 'fayz.shop.mock.orders.v1'\nconst CUSTOMERS_KEY = 'fayz.shop.mock.customers.v1'\nconst ENQUIRIES_KEY = 'fayz.shop.mock.enquiries.v1'\nconst CHANNELS_KEY = 'fayz.shop.mock.channels.v1'\n\nconst DEFAULT_CHANNELS: SalesChannel[] = [\n { id: 'online-store', tenantId: 'mock', kind: 'online_store', label: 'Loja Online', url: null, enabled: true, position: 0, createdAt: now(), updatedAt: now() },\n]\n\nfunction loadStored<T>(key: string): T[] {\n try {\n if (typeof localStorage === 'undefined') return []\n const raw = localStorage.getItem(key)\n return raw ? (JSON.parse(raw) as T[]) : []\n } catch {\n return []\n }\n}\n\nfunction store<T>(key: string, value: T[]): void {\n try {\n if (typeof localStorage === 'undefined') return\n localStorage.setItem(key, JSON.stringify(value))\n } catch {\n /* quota/serialization failures are non-fatal in mock mode */\n }\n}\n\nexport interface MockShopSeed {\n products?: Product[]\n categories?: Category[]\n discounts?: Discount[]\n /** Option axes + variants per product id (spine M5, mirrors 0028). Absent\n * with the default catalog → the MOCK_VARIANTS fixtures; absent with a\n * custom product seed → no variants (a store's own catalog stays as\n * declared). */\n variants?: Record<string, ProductVariantSet>\n /** Rule-engine promotions (spine M6) — the serializable Promotion shape the\n * Store Document's `promotions` section carries. Evaluated by\n * evaluatePromotions alongside the legacy discounts (adapter-translated). */\n promotions?: Promotion[]\n /** Custom entity records, keyed by defineEntity key. Each seed's `data` is\n * validated against the declaration when the entity's store is built. */\n entities?: Record<string, Array<{ id?: string; slug?: string | null; data: Record<string, unknown> }>>\n /** Sidecar fields on core records, keyed `<reference>:<referenceId>`. */\n entityFields?: Record<string, Record<string, unknown>>\n}\n\n// Entidades resgatadas da onda de 04-ago.\nconst COLLECTIONS_KEY = 'fayz.shop.mock.collections.v1'\nconst GIFT_CARDS_KEY = 'fayz.shop.mock.gift-cards.v1'\nconst EMAIL_TEMPLATES_KEY = 'fayz.shop.mock.email-templates.v1'\nconst CUSTOMER_GROUPS_KEY = 'fayz.shop.mock.customer-groups.v1'\nconst CUSTOMER_SEGMENTS_KEY = 'fayz.shop.mock.customer-segments.v1'\n\nfunction mockGiftCardCode(): string {\n const alphabet = 'ABCDEFGHJKLMNPQRTUVWXY2346789'\n const pick = () => alphabet[Math.floor(Math.random() * alphabet.length)]\n const block = () => Array.from({ length: 4 }, pick).join('')\n return `${block()}-${block()}-${block()}`\n}\n\nfunction mockSlugify(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n}\n\nexport class MockShopProvider implements ShopProvider {\nprivate collections: Collection[] = loadStored<Collection>(COLLECTIONS_KEY)\n private giftCards: GiftCard[] = loadStored<GiftCard>(GIFT_CARDS_KEY)\n private emailTemplates: EmailTemplate[] = loadStored<EmailTemplate>(EMAIL_TEMPLATES_KEY)\n private customerGroups: CustomerGroup[] = loadStored<CustomerGroup>(CUSTOMER_GROUPS_KEY)\n private customerSegments: CustomerSegment[] = loadStored<CustomerSegment>(CUSTOMER_SEGMENTS_KEY)\n private products: Product[]\n private categories: Category[]\n private discounts: Discount[]\n private orders: Order[] = loadStored<Order>(ORDERS_KEY)\n private customers: ShopCustomer[] = loadStored<ShopCustomer>(CUSTOMERS_KEY)\n private enquiries: ProductEnquiry[] = loadStored<ProductEnquiry>(ENQUIRIES_KEY)\n private channels: SalesChannel[] = (() => {\n const stored = loadStored<SalesChannel>(CHANNELS_KEY)\n return stored.length ? stored : DEFAULT_CHANNELS.map(c => ({ ...c }))\n })()\n\n private entitySeed: NonNullable<MockShopSeed['entities']>\n private entityStores = new Map<string, EntityStore>()\n private sidecars = new Map<string, Record<string, unknown>>()\n\n private promotions: Promotion[]\n\n private variantSets: Record<string, ProductVariantSet>\n\n constructor(seed?: MockShopSeed) {\n this.products = (seed?.products ?? MOCK_PRODUCTS).map(p => ({ ...p }))\n this.categories = (seed?.categories ?? MOCK_CATEGORIES).map(c => ({ ...c }))\n this.discounts = (seed?.discounts ?? MOCK_DISCOUNTS).map(d => ({ ...d }))\n this.variantSets = Object.fromEntries(\n Object.entries(seed?.variants ?? (seed?.products ? {} : MOCK_VARIANTS)).map(([productId, set]) => [\n productId,\n { options: set.options.map(o => ({ ...o, values: [...o.values] })), variants: set.variants.map(v => ({ ...v, options: { ...v.options } })) },\n ]),\n )\n this.promotions = (seed?.promotions ?? []).map(p => ({ ...p }))\n this.entitySeed = seed?.entities ?? {}\n for (const [key, fields] of Object.entries(seed?.entityFields ?? {})) {\n this.sidecars.set(key, { ...fields })\n }\n }\n\n /** The I5 indirection: a promoted (registered) store wins; otherwise the\n * entity gets a lazily-built in-memory store seeded from the mock seed.\n * Lazy on purpose — the seed is validated against the declaration, which\n * the app may register after constructing the provider. */\n private entityStore(entity: string): EntityStore {\n // The I2 gate first: an unknown entity must name the declared set even for\n // reads the lazy store would otherwise satisfy with an empty list.\n resolveEntityDeclaration(entity)\n return resolveEntityStore(entity, (key) => {\n let store = this.entityStores.get(key)\n if (!store) {\n store = createMockEntityStore(key, { seed: this.entitySeed[key] })\n this.entityStores.set(key, store)\n }\n return store\n })\n }\n\n // Re-read before mutating: HMR can re-instantiate the provider mid-session\n // and a stale in-memory copy must not clobber persisted records.\n private syncOrders() { this.orders = loadStored<Order>(ORDERS_KEY) }\n private syncCustomers() { this.customers = loadStored<ShopCustomer>(CUSTOMERS_KEY) }\n private syncEnquiries() { this.enquiries = loadStored<ProductEnquiry>(ENQUIRIES_KEY) }\n private syncChannels() {\n const stored = loadStored<SalesChannel>(CHANNELS_KEY)\n if (stored.length) this.channels = stored\n }\n private persistOrders() { store(ORDERS_KEY, this.orders) }\n private persistCustomers() { store(CUSTOMERS_KEY, this.customers) }\n private persistEnquiries() { store(ENQUIRIES_KEY, this.enquiries) }\n private persistChannels() { store(CHANNELS_KEY, this.channels) }\n\n // ---------------------------------------------------------------------------\n // Products\n // ---------------------------------------------------------------------------\n\n async listProducts(opts?: ListProductsOptions): Promise<Product[]> {\n let list = [...this.products]\n if (opts?.status) list = list.filter(p => p.status === opts.status)\n if (opts?.categoryId) list = list.filter(p => p.categoryId === opts.categoryId)\n if (opts?.slug) list = list.filter(p => p.slug === opts.slug)\n if (opts?.search) {\n const q = opts.search.toLowerCase()\n list = list.filter(p =>\n p.name.toLowerCase().includes(q) ||\n (p.description ?? '').toLowerCase().includes(q) ||\n (p.sku ?? '').toLowerCase().includes(q),\n )\n }\n const orderBy = opts?.orderBy ?? 'sort_order'\n const dir = opts?.order === 'desc' ? -1 : 1\n if (opts?.search && !opts.orderBy) {\n // A term matched in the NAME must outrank one matched in the description,\n // otherwise \"caneta\" answers with whatever the catalogue happens to list\n // first among the products that merely mention a pen. Only when the caller\n // asked for a specific order does that order win.\n const q = opts.search.toLowerCase()\n const rank = (p: Product) =>\n p.name.toLowerCase().startsWith(q) ? 0 : p.name.toLowerCase().includes(q) ? 1 : 2\n list.sort((a, b) => rank(a) - rank(b) || a.sortOrder - b.sortOrder)\n } else {\n list.sort((a, b) => {\n switch (orderBy) {\n case 'name': return a.name.localeCompare(b.name) * dir\n case 'price': return (a.price - b.price) * dir\n case 'created_at': return a.createdAt.localeCompare(b.createdAt) * dir\n default: return (a.sortOrder - b.sortOrder) * dir\n }\n })\n }\n const offset = opts?.offset ?? 0\n if (offset || opts?.limit) list = list.slice(offset, opts?.limit ? offset + opts.limit : undefined)\n return list\n }\n\n async getProduct(id: string) { return this.products.find(p => p.id === id) ?? null }\n\n /** Option axes + variants (spine M5) — active variants only, like the 0028\n * storefront RLS. Answers empty sets for a variantless product. */\n async getProductVariants(productId: string): Promise<ProductVariantSet> {\n const set = this.variantSets[productId]\n if (!set) return { options: [], variants: [] }\n return {\n options: set.options.map(o => ({ ...o, values: [...o.values] })).sort((a, b) => a.position - b.position),\n variants: set.variants\n .filter(v => v.status === 'active')\n .map(v => ({ ...v, options: { ...v.options } }))\n .sort((a, b) => a.position - b.position),\n }\n }\n\n async createProduct(input: CreateProductInput): Promise<Product> {\n const p: Product = { id: uid(), tenantId: 'mock', name: input.name, slug: input.slug ?? input.name.toLowerCase().replace(/\\s+/g, '-'), description: input.description ?? null, price: input.price, compareAtPrice: input.compareAtPrice ?? null, currency: input.currency ?? 'BRL', status: input.status ?? 'active', inventoryCount: input.inventoryCount ?? 0, sku: input.sku ?? null, sortOrder: input.sortOrder ?? 0, metadata: input.metadata ?? {}, images: [], categoryId: input.categoryId ?? null, categoryName: null, isPhysical: input.isPhysical ?? true, weight: input.weight ?? null, weightUnit: input.weightUnit ?? 'kg', createdAt: now(), updatedAt: now() }\n this.products.push(p); return p\n }\n\n async updateProduct(id: string, input: UpdateProductInput): Promise<Product> {\n const i = this.products.findIndex(p => p.id === id)\n if (i < 0) throw new Error('Product not found')\n this.products[i] = { ...this.products[i], ...input, updatedAt: now() }\n return this.products[i]\n }\n\n async deleteProduct(id: string) { this.products = this.products.filter(p => p.id !== id) }\n async uploadProductImage(_productId: string, _file: File): Promise<ProductImage> { throw new Error('Image upload not available in mock mode') }\n async deleteProductImage(_imageId: string) {}\n\n async createProductEnquiry(input: CreateProductEnquiryInput): Promise<ProductEnquiry> {\n this.syncEnquiries()\n const ts = now()\n const enquiry: ProductEnquiry = {\n id: uid(),\n tenantId: 'mock',\n productId: input.productId ?? null,\n productName: input.productName,\n productSlug: input.productSlug ?? null,\n customerName: input.customerName,\n customerEmail: input.customerEmail,\n customerPhone: input.customerPhone ?? null,\n subject: input.subject ?? null,\n message: input.message,\n sourceUrl: input.sourceUrl ?? null,\n status: 'new',\n metadata: input.metadata ?? {},\n createdAt: ts,\n updatedAt: ts,\n }\n this.enquiries.unshift(enquiry)\n this.persistEnquiries()\n return enquiry\n }\n\n async listProductEnquiries(opts?: ListProductEnquiriesOptions): Promise<ProductEnquiry[]> {\n this.syncEnquiries()\n let list = [...this.enquiries]\n if (opts?.productId) list = list.filter((e) => e.productId === opts.productId)\n if (opts?.customerEmail) {\n const email = opts.customerEmail.toLowerCase()\n list = list.filter((e) => e.customerEmail.toLowerCase() === email)\n }\n if (opts?.status) list = list.filter((e) => e.status === opts.status)\n list.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n const offset = opts?.offset ?? 0\n if (offset || opts?.limit) list = list.slice(offset, opts?.limit ? offset + opts.limit : undefined)\n return list\n }\n\n // ---------------------------------------------------------------------------\n // Categories\n // ---------------------------------------------------------------------------\n\n async listCategories() { return [...this.categories].sort((a, b) => a.sortOrder - b.sortOrder) }\n\n async createCategory(input: CreateCategoryInput): Promise<Category> {\n const c: Category = { id: uid(), tenantId: 'mock', name: input.name, slug: input.slug ?? input.name.toLowerCase().replace(/\\s+/g, '-'), description: input.description ?? null, parentId: input.parentId ?? null, sortOrder: input.sortOrder ?? 0, createdAt: now() }\n this.categories.push(c); return c\n }\n\n async updateCategory(id: string, input: UpdateCategoryInput): Promise<Category> {\n const i = this.categories.findIndex(c => c.id === id)\n if (i < 0) throw new Error('Category not found')\n this.categories[i] = { ...this.categories[i], ...input }\n return this.categories[i]\n }\n\n async deleteCategory(id: string) { this.categories = this.categories.filter(c => c.id !== id) }\n\n // ---------------------------------------------------------------------------\n // Orders\n // ---------------------------------------------------------------------------\n\n async listOrders(opts?: ListOrdersOptions): Promise<Order[]> {\n this.syncOrders()\n let list = [...this.orders]\n if (opts?.status) list = list.filter(o => o.status === opts.status)\n if (opts?.financialStatus) list = list.filter(o => o.financialStatus === opts.financialStatus)\n if (opts?.fulfillmentStatus) list = list.filter(o => o.fulfillmentStatus === opts.fulfillmentStatus)\n if (opts?.customerId) list = list.filter(o => o.customerId === opts.customerId)\n if (opts?.customerEmail) {\n const email = opts.customerEmail.toLowerCase()\n list = list.filter(o => (o.customerEmail ?? '').toLowerCase() === email)\n }\n if (opts?.search) {\n const q = opts.search.toLowerCase()\n list = list.filter(o =>\n (o.customerName ?? '').toLowerCase().includes(q) ||\n (o.customerEmail ?? '').toLowerCase().includes(q) ||\n String(o.orderNumber).includes(q),\n )\n }\n list.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n if (opts?.limit) list = list.slice(0, opts.limit)\n return list\n }\n\n async getOrder(id: string) {\n this.syncOrders()\n return this.orders.find(o => o.id === id) ?? null\n }\n\n async createOrder(input: CreateOrderInput): Promise<Order> {\n this.syncOrders()\n const subtotal = input.items.reduce((s, i) => s + i.quantity * i.unitPrice, 0)\n const discountTotal = input.discountTotal ?? 0\n const shippingTotal = input.shippingTotal ?? 0\n const total = Math.round((subtotal - discountTotal + shippingTotal) * 100) / 100\n const orderId = uid()\n const maxNumber = this.orders.reduce((m, o) => Math.max(m, o.orderNumber), 1000)\n const o: Order = {\n id: orderId,\n tenantId: 'mock',\n orderNumber: maxNumber + 1,\n status: 'open',\n financialStatus: 'pending',\n fulfillmentStatus: 'unfulfilled',\n currency: input.currency ?? 'BRL',\n subtotal: Math.round(subtotal * 100) / 100,\n taxTotal: 0,\n discountTotal,\n shippingTotal,\n total,\n customerId: input.customerId ?? null,\n customerName: input.customerName ?? null,\n customerEmail: input.customerEmail ?? null,\n discountCode: input.discountCode ?? null,\n notes: input.notes ?? null,\n shippingAddress: null,\n // CreateOrderInput has no payment method — that is a PlaceOrderInput\n // concern; the mock records none rather than inventing one.\n paymentMethodKind: null,\n paidAt: null,\n items: input.items.map(i => ({ id: uid(), orderId, productId: i.productId ?? null, name: i.name, sku: i.sku ?? null, quantity: i.quantity, unitPrice: i.unitPrice, total: Math.round(i.quantity * i.unitPrice * 100) / 100, imageUrl: i.imageUrl ?? null })),\n createdAt: now(),\n updatedAt: now(),\n }\n this.orders.push(o)\n this.persistOrders()\n return o\n }\n\n async updateOrder(id: string, input: UpdateOrderInput): Promise<Order> {\n this.syncOrders()\n const i = this.orders.findIndex(o => o.id === id)\n if (i < 0) throw new Error('Order not found')\n this.orders[i] = { ...this.orders[i], ...input, updatedAt: now() }\n this.persistOrders()\n return this.orders[i]\n }\n\n // Trusted placement (mock parity with the shop_place_order RPC): re-reads\n // prices + stock from the catalog, EVALUATES THE DECLARED PROMOTIONS through\n // the rule engine, validates the legacy discount code, decrements inventory.\n // The browser-supplied prices and totals are never used.\n async placeOrder(input: PlaceOrderInput): Promise<Order> {\n this.syncOrders()\n this.syncCustomers()\n\n // Resolve / create the customer (find-or-create by email).\n let customerId = input.customerId ?? null\n let customerName = input.customer?.name?.trim() || null\n const email = input.customer?.email?.trim().toLowerCase() || null\n if (!customerId && email) {\n const existing = this.customers.find(c => (c.email ?? '').toLowerCase() === email)\n if (existing) {\n customerId = existing.id\n customerName = customerName ?? `${existing.firstName} ${existing.lastName}`.trim()\n } else {\n const [first, ...rest] = (customerName ?? email).split(' ')\n const created = await this.createCustomer({ firstName: first || email, lastName: rest.join(' '), email })\n customerId = created.id\n }\n }\n\n // Re-read price + guard stock from the catalog (never trust the client).\n // Variant lines (spine M5, mirroring 0029): the VARIANT is the priced and\n // stock-checked unit; its options derive the label the shopper sees.\n const items: CreateOrderInput['items'] = []\n // Per-line facts for coupon scoping (productId, categoryId, line total).\n const lineDetails: Array<{ productId: string; categoryId: string | null; lineTotal: number }> = []\n // The SAME lines as a rule-engine snapshot (M6). Built here, from the\n // re-read catalog prices, so the engine can never be fed client numbers.\n const snapshotItems: RuleCartItem[] = []\n let subtotal = 0\n for (const [index, line] of input.items.entries()) {\n const product = this.products.find(p => p.id === line.productId)\n if (!product || product.status !== 'active') throw new Error(`Product unavailable: ${line.productId}`)\n let variant: ProductVariant | undefined\n if (line.variantId) {\n variant = this.variantSets[line.productId]?.variants.find(v => v.id === line.variantId && v.status === 'active')\n if (!variant) throw new Error(`Variant unavailable: ${line.variantId}`)\n if (variant.inventoryCount < line.quantity) throw new Error(`Insufficient stock for ${product.name}`)\n } else if (product.inventoryCount < line.quantity) {\n throw new Error(`Insufficient stock for ${product.name}`)\n }\n const unitPrice = variant?.price ?? product.price\n const label = line.optionsLabel\n || (variant ? Object.entries(variant.options).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => `${k}: ${v}`).join(' · ') : '')\n const name = label ? `${product.name} (${label})` : product.name\n const lineTotal = unitPrice * line.quantity\n subtotal += lineTotal\n lineDetails.push({ productId: product.id, categoryId: product.categoryId, lineTotal })\n // Line identity must be UNIQUE (the engine splits `across` allocations\n // per line id); the index guarantees it even for two lines of the same\n // product bought under different variants.\n snapshotItems.push({\n id: `${index}:${line.variantId ?? product.id}`,\n productId: product.id,\n quantity: line.quantity,\n unitPrice,\n categoryId: product.categoryId,\n collectionId: typeof product.metadata?.collection === 'string' ? product.metadata.collection : null,\n })\n items.push({ productId: product.id, name, sku: variant?.sku ?? product.sku ?? undefined, quantity: line.quantity, unitPrice, imageUrl: product.images[0]?.url })\n }\n subtotal = Math.round(subtotal * 100) / 100\n\n // Validate + apply the discount server-side.\n let shippingTotal = Math.max(input.shippingTotal ?? 0, 0)\n let discountTotal = 0\n let appliedCode: string | null = null\n\n // --- The rule engine on the ORDER path (spine M6) -----------------------\n // Declared `promotions` are evaluated here, not only in the cart preview:\n // without this a store that carries ONLY new-style promotions placed every\n // order with discountTotal 0 — the promotion was advertised, previewed and\n // then silently dropped at the till.\n //\n // Only the DECLARED promotions ride this path. Legacy `discounts` keep\n // their own (unchanged) code below; running them through the adapter here\n // as well would count the same coupon twice.\n const entered = input.discountCode ? [input.discountCode.trim()] : []\n const cart: RuleCartSnapshot = {\n items: snapshotItems,\n shippingTotal,\n customer: { email: input.customer?.email ?? null },\n codes: entered,\n currency: input.currency,\n }\n const context = await buildRuleContext(cart)\n const actions = computePromotionActions(cart, this.promotions, { context })\n\n let promotionItemDiscount = 0\n let promotionShippingDiscount = 0\n const firedPromotionIds = new Set<string>()\n const firedCodes = new Set<string>()\n for (const action of actions) {\n firedPromotionIds.add(action.promotionId)\n if (action.code) firedCodes.add(action.code.trim().toUpperCase())\n if (action.action === 'addItemDiscount') promotionItemDiscount += action.amount\n else if (action.action === 'addShippingDiscount') promotionShippingDiscount += action.amount\n else if (action.action === 'addFreeItem') {\n // The grant is a real order line at price 0 — otherwise the shopper is\n // promised a free product the order never records.\n const granted = this.products.find(p => p.id === action.productId)\n if (granted) {\n items.push({ productId: granted.id, name: granted.name, sku: granted.sku ?? undefined, quantity: action.quantity, unitPrice: 0, imageUrl: granted.images[0]?.url })\n }\n }\n }\n // Usage limits are enforced against the same counter the legacy path uses.\n for (const promotion of this.promotions) {\n if (firedPromotionIds.has(promotion.id)) promotion.timesUsed = (promotion.timesUsed ?? 0) + 1\n }\n discountTotal += Math.round(promotionItemDiscount * 100) / 100\n shippingTotal = Math.max(0, Math.round((shippingTotal - promotionShippingDiscount) * 100) / 100)\n if (input.discountCode && firedCodes.has(input.discountCode.trim().toUpperCase())) {\n appliedCode = input.discountCode.trim().toUpperCase()\n }\n\n // --- Legacy `discounts` coupons (unchanged) -----------------------------\n // Skipped only when a declared promotion already consumed this exact code,\n // so a store that migrated one coupon to the rule model is not charged the\n // discount twice.\n if (input.discountCode && !appliedCode) {\n const code = input.discountCode.trim().toLowerCase()\n const d = this.discounts.find(x => (x.code ?? '').toLowerCase() === code)\n const ts = now()\n const meetsMin = !d?.minSubtotal || subtotal >= d.minSubtotal\n const valid = !!d && d.status === 'active' && d.startsAt <= ts && (!d.endsAt || d.endsAt >= ts) && (d.usageLimit == null || d.timesUsed < d.usageLimit) && meetsMin\n if (valid && d) {\n appliedCode = d.code\n // Eligible subtotal = the part of the cart the coupon is scoped to.\n // applies_to='all' → whole subtotal (unchanged for legacy coupons).\n let eligible = subtotal\n if (d.appliesTo === 'products') {\n eligible = lineDetails.filter(l => d.productIds.includes(l.productId)).reduce((s, l) => s + l.lineTotal, 0)\n } else if (d.appliesTo === 'categories') {\n eligible = lineDetails.filter(l => l.categoryId && d.categoryIds.includes(l.categoryId)).reduce((s, l) => s + l.lineTotal, 0)\n }\n eligible = Math.round(eligible * 100) / 100\n // `+=`, not `=`: an automatic rule-engine promotion may already have\n // contributed above, and a legacy coupon must not erase it.\n if (d.type === 'percentage') discountTotal += Math.round(eligible * d.value) / 100\n else if (d.type === 'fixed_amount') discountTotal += Math.min(d.value, eligible)\n else if (d.type === 'free_shipping') shippingTotal = 0\n // buy_x_get_y unsupported in v1: code recorded, no monetary effect\n d.timesUsed += 1\n }\n }\n discountTotal = Math.round(Math.min(Math.max(discountTotal, 0), subtotal) * 100) / 100\n\n // Persist via createOrder (recomputes total from these trusted values).\n const order = await this.createOrder({\n customerId: customerId ?? undefined,\n customerName: customerName ?? undefined,\n customerEmail: input.customer?.email ?? undefined,\n currency: input.currency,\n notes: input.notes,\n discountCode: appliedCode ?? undefined,\n discountTotal,\n shippingTotal,\n items,\n })\n\n // Decrement inventory (in-memory; the mock catalog reseeds on reload).\n // A variant line decrements the VARIANT counter, and the product mirror is\n // recomputed as the sum of active variant stock — the same rule 0028's\n // sync trigger enforces on live data, so both providers report identical\n // numbers after a sale.\n for (const line of input.items) {\n const product = this.products.find(p => p.id === line.productId)\n if (!product) continue\n const variant = line.variantId\n ? this.variantSets[line.productId]?.variants.find(v => v.id === line.variantId)\n : undefined\n if (variant) {\n variant.inventoryCount = Math.max(0, variant.inventoryCount - line.quantity)\n product.inventoryCount = this.variantSets[line.productId]!.variants\n .filter(v => v.status === 'active')\n .reduce((sum, v) => sum + v.inventoryCount, 0)\n } else {\n product.inventoryCount = Math.max(0, product.inventoryCount - line.quantity)\n }\n }\n\n return order\n }\n\n // ---------------------------------------------------------------------------\n // Customers\n // ---------------------------------------------------------------------------\n\n async listCustomers(opts?: ListCustomersOptions) {\n this.syncCustomers()\n let list = [...this.customers]\n if (opts?.search) list = list.filter(c => `${c.firstName} ${c.lastName} ${c.email}`.toLowerCase().includes(opts.search!.toLowerCase()))\n if (opts?.limit) list = list.slice(0, opts.limit)\n return list\n }\n\n async getCustomer(id: string) {\n this.syncCustomers()\n return this.customers.find(c => c.id === id) ?? null\n }\n\n async createCustomer(input: CreateCustomerInput): Promise<ShopCustomer> {\n this.syncCustomers()\n const c: ShopCustomer = { id: uid(), tenantId: 'mock', firstName: input.firstName, lastName: input.lastName ?? '', email: input.email ?? null, phone: input.phone ?? null, notes: input.notes ?? null, ordersCount: 0, totalSpent: 0, createdAt: now(), updatedAt: now() }\n this.customers.push(c)\n this.persistCustomers()\n return c\n }\n\n async updateCustomer(id: string, input: UpdateCustomerInput): Promise<ShopCustomer> {\n this.syncCustomers()\n const i = this.customers.findIndex(c => c.id === id)\n if (i < 0) throw new Error('Customer not found')\n this.customers[i] = { ...this.customers[i], ...input, updatedAt: now() }\n this.persistCustomers()\n return this.customers[i]\n }\n\n async deleteCustomer(id: string) {\n this.syncCustomers()\n this.customers = this.customers.filter(c => c.id !== id)\n this.persistCustomers()\n }\n\n async resolveCustomer(input: ResolveCustomerInput): Promise<ShopCustomer> {\n this.syncCustomers()\n const email = input.email.trim().toLowerCase()\n const existing = this.customers.find(c => (c.email ?? '').toLowerCase() === email)\n if (existing) return existing\n const [first, ...rest] = (input.name?.trim() || email).split(/\\s+/)\n return this.createCustomer({ firstName: first || email, lastName: rest.join(' '), email })\n }\n\n // ---------------------------------------------------------------------------\n // Promotions (spine M6) — the mock provider IS the reference evaluator, so\n // tests and pilot fixtures exercise the rule engine without a database.\n // Seeded promotions ride as-is; legacy discounts ride through the adapter\n // (a percent code = one eligibility rule on code + percentage method).\n // ---------------------------------------------------------------------------\n\n async evaluatePromotions(input: { cart: RuleCartSnapshot }): Promise<ComputeAction[]> {\n const promotions: Promotion[] = [\n ...this.promotions,\n ...this.discounts.map(discountToPromotion).filter((p): p is Promotion => p !== null),\n ]\n const context = await buildRuleContext(input.cart)\n return computePromotionActions(input.cart, promotions, { context })\n }\n\n // ---------------------------------------------------------------------------\n // Discounts\n // ---------------------------------------------------------------------------\n\n async listDiscounts(opts?: ListDiscountsOptions) {\n let list = [...this.discounts]\n if (opts?.status) list = list.filter(d => d.status === opts.status)\n if (opts?.type) list = list.filter(d => d.type === opts.type)\n if (opts?.search) list = list.filter(d => d.title.toLowerCase().includes(opts.search!.toLowerCase()))\n if (opts?.limit) list = list.slice(0, opts.limit)\n return list\n }\n\n async getDiscount(id: string) { return this.discounts.find(d => d.id === id) ?? null }\n\n async createDiscount(input: CreateDiscountInput): Promise<Discount> {\n const d: Discount = { id: uid(), tenantId: 'mock', title: input.title, code: input.code ?? null, type: input.type, method: input.method ?? 'code', value: input.value, usageLimit: input.usageLimit ?? null, oncePerCustomer: input.oncePerCustomer ?? false, minSubtotal: input.minSubtotal ?? null, appliesTo: input.appliesTo ?? 'all', productIds: input.productIds ?? [], categoryIds: input.categoryIds ?? [], startsAt: input.startsAt ?? now(), endsAt: input.endsAt ?? null, status: input.status ?? 'active', timesUsed: 0, createdAt: now(), updatedAt: now() }\n this.discounts.push(d); return d\n }\n\n async updateDiscount(id: string, input: UpdateDiscountInput): Promise<Discount> {\n const i = this.discounts.findIndex(d => d.id === id)\n if (i < 0) throw new Error('Discount not found')\n this.discounts[i] = { ...this.discounts[i], ...input, updatedAt: now() }\n return this.discounts[i]\n }\n\n async deleteDiscount(id: string) { this.discounts = this.discounts.filter(d => d.id !== id) }\n\n // ---------------------------------------------------------------------------\n // Sales channels\n // ---------------------------------------------------------------------------\n\n async listSalesChannels(): Promise<SalesChannel[]> {\n this.syncChannels()\n return [...this.channels].sort((a, b) => a.position - b.position)\n }\n\n async createSalesChannel(input: CreateSalesChannelInput): Promise<SalesChannel> {\n this.syncChannels()\n const c: SalesChannel = { id: uid(), tenantId: 'mock', kind: input.kind, label: input.label, url: input.url ?? null, enabled: input.enabled ?? true, position: input.position ?? this.channels.length, createdAt: now(), updatedAt: now() }\n this.channels.push(c); this.persistChannels(); return c\n }\n\n async updateSalesChannel(id: string, input: UpdateSalesChannelInput): Promise<SalesChannel> {\n this.syncChannels()\n const i = this.channels.findIndex(c => c.id === id)\n if (i < 0) throw new Error('Sales channel not found')\n this.channels[i] = { ...this.channels[i], ...input, updatedAt: now() }\n this.persistChannels(); return this.channels[i]\n }\n\n async deleteSalesChannel(id: string): Promise<void> {\n this.syncChannels()\n this.channels = this.channels.filter(c => c.id !== id)\n this.persistChannels()\n }\n\n // ---------------------------------------------------------------------------\n // Custom entities (spine M4) — same EntityStore port as the live provider.\n // ---------------------------------------------------------------------------\n\n async listEntityRecords(entity: string, options?: ListEntityRecordsOptions): Promise<EntityRecord[]> {\n return this.entityStore(entity).list(options)\n }\n\n async getEntityRecord(entity: string, id: string): Promise<EntityRecord | null> {\n return this.entityStore(entity).get(id)\n }\n\n async getEntityRecordBySlug(entity: string, slug: string): Promise<EntityRecord | null> {\n return this.entityStore(entity).getBySlug(slug)\n }\n\n async createEntityRecord(entity: string, input: EntityRecordInput): Promise<EntityRecord> {\n return this.entityStore(entity).create(input)\n }\n\n async updateEntityRecord(entity: string, id: string, input: Partial<EntityRecordInput>): Promise<EntityRecord> {\n return this.entityStore(entity).update(id, input)\n }\n\n async deleteEntityRecord(entity: string, id: string): Promise<void> {\n return this.entityStore(entity).delete(id)\n }\n\n // Sidecar fields on core records — validated against defineSidecarFields.\n\n async getEntityFields(reference: string, referenceId: string): Promise<Record<string, unknown> | null> {\n return this.sidecars.get(`${reference}:${referenceId}`) ?? null\n }\n\n async setEntityFields(reference: string, referenceId: string, fields: Record<string, unknown>): Promise<Record<string, unknown>> {\n validateSidecarWrite(reference, fields)\n const stored = { ...fields }\n this.sidecars.set(`${reference}:${referenceId}`, stored)\n return stored\n }\n\n // Coleções, grupos/segmentos, vale-presente e e-mails — paridade com o\n // provider Supabase. Mídia não entra: é storage, não tem mock honesto.\n\nasync listCollections(): Promise<Collection[]> {\n this.syncCollections()\n return [...this.collections].sort((a, b) => a.sortOrder - b.sortOrder)\n }\n\n async getCollection(id: string): Promise<Collection | null> {\n this.syncCollections()\n return this.collections.find(c => c.id === id) ?? null\n }\n\n async createCollection(input: CreateCollectionInput): Promise<Collection> {\n this.syncCollections()\n const c: Collection = {\n id: uid(), tenantId: 'mock',\n title: input.title,\n handle: input.handle?.trim() || mockSlugify(input.title),\n description: input.description ?? null,\n imageUrl: input.imageUrl ?? null,\n seoTitle: input.seoTitle ?? null,\n seoDescription: input.seoDescription ?? null,\n published: input.published ?? true,\n sortOrder: input.sortOrder ?? this.collections.length,\n productIds: input.productIds ?? [],\n createdAt: now(), updatedAt: now(),\n }\n this.collections.push(c); this.persistCollections(); return c\n }\n\n async updateCollection(id: string, input: UpdateCollectionInput): Promise<Collection> {\n this.syncCollections()\n const i = this.collections.findIndex(c => c.id === id)\n if (i < 0) throw new Error('Collection not found')\n this.collections[i] = { ...this.collections[i], ...input, updatedAt: now() }\n this.persistCollections(); return this.collections[i]\n }\n\n async deleteCollection(id: string): Promise<void> {\n this.syncCollections()\n this.collections = this.collections.filter(c => c.id !== id)\n this.persistCollections()\n }\n\n async listCustomerGroups(): Promise<CustomerGroup[]> {\n const stored = loadStored<CustomerGroup>(CUSTOMER_GROUPS_KEY)\n if (stored.length) this.customerGroups = stored\n return [...this.customerGroups].sort((a, b) => a.name.localeCompare(b.name, 'pt-BR'))\n }\n\n async createCustomerGroup(input: CreateCustomerGroupInput): Promise<CustomerGroup> {\n await this.listCustomerGroups()\n const g: CustomerGroup = {\n id: uid(), tenantId: 'mock',\n name: input.name,\n description: input.description ?? null,\n color: input.color ?? null,\n customerIds: input.customerIds ?? [],\n createdAt: now(), updatedAt: now(),\n }\n this.customerGroups.push(g); store(CUSTOMER_GROUPS_KEY, this.customerGroups); return g\n }\n\n async updateCustomerGroup(id: string, input: UpdateCustomerGroupInput): Promise<CustomerGroup> {\n await this.listCustomerGroups()\n const i = this.customerGroups.findIndex(g => g.id === id)\n if (i < 0) throw new Error('Customer group not found')\n this.customerGroups[i] = { ...this.customerGroups[i], ...input, updatedAt: now() }\n store(CUSTOMER_GROUPS_KEY, this.customerGroups); return this.customerGroups[i]\n }\n\n async deleteCustomerGroup(id: string): Promise<void> {\n await this.listCustomerGroups()\n // Only the grouping goes: the customers in it are untouched.\n this.customerGroups = this.customerGroups.filter(g => g.id !== id)\n store(CUSTOMER_GROUPS_KEY, this.customerGroups)\n }\n\n async listCustomerSegments(): Promise<CustomerSegment[]> {\n const stored = loadStored<CustomerSegment>(CUSTOMER_SEGMENTS_KEY)\n if (stored.length) this.customerSegments = stored\n return [...this.customerSegments].sort((a, b) => a.name.localeCompare(b.name, 'pt-BR'))\n }\n\n async createCustomerSegment(input: CreateCustomerSegmentInput): Promise<CustomerSegment> {\n await this.listCustomerSegments()\n const s: CustomerSegment = {\n id: uid(), tenantId: 'mock',\n name: input.name,\n description: input.description ?? null,\n minOrders: input.minOrders ?? null,\n maxOrders: input.maxOrders ?? null,\n minSpent: input.minSpent ?? null,\n maxSpent: input.maxSpent ?? null,\n joinedAfter: input.joinedAfter ?? null,\n joinedBefore: input.joinedBefore ?? null,\n createdAt: now(), updatedAt: now(),\n }\n this.customerSegments.push(s); store(CUSTOMER_SEGMENTS_KEY, this.customerSegments); return s\n }\n\n async updateCustomerSegment(id: string, input: UpdateCustomerSegmentInput): Promise<CustomerSegment> {\n await this.listCustomerSegments()\n const i = this.customerSegments.findIndex(s => s.id === id)\n if (i < 0) throw new Error('Customer segment not found')\n this.customerSegments[i] = { ...this.customerSegments[i], ...input, updatedAt: now() }\n store(CUSTOMER_SEGMENTS_KEY, this.customerSegments); return this.customerSegments[i]\n }\n\n async deleteCustomerSegment(id: string): Promise<void> {\n await this.listCustomerSegments()\n this.customerSegments = this.customerSegments.filter(s => s.id !== id)\n store(CUSTOMER_SEGMENTS_KEY, this.customerSegments)\n }\n\n async listGiftCards(): Promise<GiftCard[]> {\n this.syncGiftCards()\n return [...this.giftCards].sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n }\n\n async createGiftCard(input: CreateGiftCardInput): Promise<GiftCard> {\n this.syncGiftCards()\n const amount = Number(input.initialBalance) || 0\n const g: GiftCard = {\n id: uid(), tenantId: 'mock',\n code: (input.code?.trim() || mockGiftCardCode()).toUpperCase(),\n // Same rule the supabase provider enforces: a new card is worth its face\n // value, and only redemption moves the remaining balance.\n initialBalance: amount, balance: amount,\n currency: input.currency ?? 'BRL',\n status: input.status ?? 'active',\n expiresAt: input.expiresAt ?? null,\n customerId: input.customerId ?? null,\n customerEmail: input.customerEmail ?? null,\n note: input.note ?? null,\n createdAt: now(), updatedAt: now(),\n }\n this.giftCards.push(g); this.persistGiftCards(); return g\n }\n\n async updateGiftCard(id: string, input: UpdateGiftCardInput): Promise<GiftCard> {\n this.syncGiftCards()\n const i = this.giftCards.findIndex(g => g.id === id)\n if (i < 0) throw new Error('Gift card not found')\n const code = input.code !== undefined ? input.code.trim().toUpperCase() : this.giftCards[i].code\n this.giftCards[i] = { ...this.giftCards[i], ...input, code, updatedAt: now() }\n this.persistGiftCards(); return this.giftCards[i]\n }\n\n async deleteGiftCard(id: string): Promise<void> {\n this.syncGiftCards()\n this.giftCards = this.giftCards.filter(g => g.id !== id)\n this.persistGiftCards()\n }\n\n async listEmailTemplates(): Promise<EmailTemplate[]> {\n this.syncEmailTemplates()\n return [...this.emailTemplates]\n }\n\n async upsertEmailTemplate(input: UpsertEmailTemplateInput): Promise<EmailTemplate> {\n this.syncEmailTemplates()\n const i = this.emailTemplates.findIndex(t => t.event === input.event)\n const base: EmailTemplate = i >= 0 ? this.emailTemplates[i] : {\n id: uid(), tenantId: 'mock', event: input.event,\n enabled: false, subject: null, body: null, updatedAt: now(),\n }\n const next: EmailTemplate = { ...base, ...input, updatedAt: now() }\n if (i >= 0) this.emailTemplates[i] = next\n else this.emailTemplates.push(next)\n store(EMAIL_TEMPLATES_KEY, this.emailTemplates)\n return next\n }\n\nprivate syncCollections() {\n const stored = loadStored<Collection>(COLLECTIONS_KEY)\n if (stored.length) this.collections = stored\n }\n\n private persistCollections() { store(COLLECTIONS_KEY, this.collections) }\n\n private syncGiftCards() {\n const stored = loadStored<GiftCard>(GIFT_CARDS_KEY)\n if (stored.length) this.giftCards = stored\n }\n\n private persistGiftCards() { store(GIFT_CARDS_KEY, this.giftCards) }\n\n private syncEmailTemplates() {\n const stored = loadStored<EmailTemplate>(EMAIL_TEMPLATES_KEY)\n if (stored.length) this.emailTemplates = stored\n }\n}\n\nexport function createMockShopProvider(seed?: MockShopSeed): ShopProvider {\n return new MockShopProvider(seed)\n}\n"]}