@fayz-ai/sdk 0.6.7 → 0.8.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.
package/README.md CHANGED
@@ -5,6 +5,8 @@
5
5
  [![npm](https://img.shields.io/npm/v/@fayz-ai/sdk.svg)](https://www.npmjs.com/package/@fayz-ai/sdk)
6
6
  [![license](https://img.shields.io/npm/l/@fayz-ai/sdk.svg)](https://github.com/FayaLabs/fayz-sdk/blob/main/LICENSE)
7
7
 
8
+ **Status:** beta — published to npm and used across Fayz dogfood apps. Pre-1.0: minor APIs may change before 1.0.
9
+
8
10
  Fayz builds real, multi-tenant SaaS apps by composing plugins. `@fayz-ai/sdk` is the seam between a generated Fayz project and the platform behind it: a typed API client, the shared manifest/user/params types, a runtime broker for OAuth-backed integrations, and the release-channel resolver that keeps every package on a coherent version set.
9
11
 
10
12
  This is the lowest-trust, zero-React layer — no UI, no framework, just the contract. Generated apps call Fayz through the SDK instead of importing provider clients directly, so OAuth secrets and tenant authority stay server-side where they belong. If you're reading Fayz tables, exchanging plugin OAuth grants, or pinning a package channel, you start here.
@@ -247,20 +247,21 @@ function createFayzShopProvider(options) {
247
247
  return {
248
248
  async listProducts(options2) {
249
249
  const query = tenantQuery();
250
- query.set("select", "*,images:product_images(*),category:categories(name)");
250
+ query.set("select", "*,images:plg_shop_product_images(*),category:plg_shop_categories(name)");
251
251
  if (options2?.status) query.set("status", `eq.${options2.status}`);
252
252
  if (options2?.slug) query.set("slug", `eq.${options2.slug}`);
253
253
  if (options2?.search) query.set("name", `ilike.*${options2.search}*`);
254
254
  query.set("order", `${options2?.orderBy ?? "sort_order"}.${options2?.order ?? "asc"}`);
255
255
  if (options2?.limit) query.set("limit", String(options2.limit));
256
256
  if (options2?.offset) query.set("offset", String(options2.offset));
257
- const products = (await request("products", { query })).map((row) => rowToProduct(row, productMetadataOverlay));
257
+ const products = (await request("plg_shop_products", { query })).map((row) => rowToProduct(row, productMetadataOverlay));
258
258
  return options2?.categoryId ? products.filter((product) => product.categoryId === options2.categoryId) : products;
259
259
  },
260
260
  async getProduct(id) {
261
+ if (!asUuid(id)) return null;
261
262
  const query = singleById(id);
262
- query.set("select", "*,images:product_images(*),category:categories(name)");
263
- const rows = await request("products", { query });
263
+ query.set("select", "*,images:plg_shop_product_images(*),category:plg_shop_categories(name)");
264
+ const rows = await request("plg_shop_products", { query });
264
265
  return rows[0] ? rowToProduct(rows[0], productMetadataOverlay) : null;
265
266
  },
266
267
  async createProduct() {
@@ -282,13 +283,13 @@ function createFayzShopProvider(options) {
282
283
  const productQuery = tenantQuery();
283
284
  productQuery.set("select", "metadata");
284
285
  productQuery.set("order", "sort_order.asc");
285
- const products = await request("products", { query: productQuery });
286
+ const products = await request("plg_shop_products", { query: productQuery });
286
287
  const storeCategories = deriveStoreCategories(products, storeId);
287
288
  if (storeCategories.length > 0) return storeCategories;
288
289
  const query = new URLSearchParams();
289
290
  query.set("select", "*");
290
291
  query.set("order", "sort_order.asc");
291
- return (await request("categories", { query })).map(rowToCategory);
292
+ return (await request("plg_shop_categories", { query })).map(rowToCategory);
292
293
  },
293
294
  async createCategory() {
294
295
  throw new FayzShopError("Category writes require the Fayz admin/broker API.", 501);
@@ -301,7 +302,7 @@ function createFayzShopProvider(options) {
301
302
  },
302
303
  async listOrders(options2) {
303
304
  const query = tenantQuery();
304
- query.set("select", "*,items:order_items(*)");
305
+ query.set("select", "*,items:plg_shop_order_items(*)");
305
306
  if (options2?.status) query.set("status", `eq.${options2.status}`);
306
307
  if (options2?.financialStatus) query.set("financial_status", `eq.${options2.financialStatus}`);
307
308
  if (options2?.fulfillmentStatus) query.set("fulfillment_status", `eq.${options2.fulfillmentStatus}`);
@@ -311,20 +312,40 @@ function createFayzShopProvider(options) {
311
312
  query.set("order", "created_at.desc");
312
313
  if (options2?.limit) query.set("limit", String(options2.limit));
313
314
  if (options2?.offset) query.set("offset", String(options2.offset));
314
- return (await request("orders", { query })).map(rowToOrder);
315
+ return (await request("plg_shop_orders", { query })).map(rowToOrder);
315
316
  },
316
317
  async getOrder(id) {
317
318
  const query = singleById(id);
318
- query.set("select", "*,items:order_items(*)");
319
- const rows = await request("orders", { query });
320
- return rows[0] ? rowToOrder(rows[0]) : null;
319
+ query.set("select", "*,items:plg_shop_order_items(*)");
320
+ let rows = [];
321
+ try {
322
+ rows = await request("plg_shop_orders", { query });
323
+ } catch {
324
+ }
325
+ if (rows[0]) return rowToOrder(rows[0]);
326
+ try {
327
+ const row = await request("rpc/shop_get_order", {
328
+ method: "POST",
329
+ body: JSON.stringify({ p_order_id: id })
330
+ });
331
+ return row ? rowToOrder(row) : null;
332
+ } catch {
333
+ return null;
334
+ }
335
+ },
336
+ async confirmPayment(id, reference) {
337
+ const row = await request("rpc/shop_confirm_payment", {
338
+ method: "POST",
339
+ body: JSON.stringify({ p_order_id: id, p_reference: reference ?? null })
340
+ });
341
+ return row ? rowToOrder(row) : null;
321
342
  },
322
343
  async createOrder(input) {
323
344
  const subtotal = input.items.reduce((sum, item) => sum + item.quantity * item.unitPrice, 0);
324
345
  const discountTotal = input.discountTotal ?? 0;
325
346
  const shippingTotal = input.shippingTotal ?? 0;
326
347
  const total = Math.round((subtotal - discountTotal + shippingTotal) * 100) / 100;
327
- const [order] = await request("orders", {
348
+ const [order] = await request("plg_shop_orders", {
328
349
  method: "POST",
329
350
  body: JSON.stringify({
330
351
  tenant_id: storeId,
@@ -345,7 +366,7 @@ function createFayzShopProvider(options) {
345
366
  });
346
367
  if (!order) throw new FayzShopError("Order insert did not return a row.", 500);
347
368
  if (input.items.length) {
348
- await request("order_items", {
369
+ await request("plg_shop_order_items", {
349
370
  method: "POST",
350
371
  body: JSON.stringify(input.items.map((item) => ({
351
372
  order_id: order.id,
@@ -362,7 +383,7 @@ function createFayzShopProvider(options) {
362
383
  return this.getOrder(order.id);
363
384
  },
364
385
  async updateOrder(id, input) {
365
- await request("orders", {
386
+ await request("plg_shop_orders", {
366
387
  method: "PATCH",
367
388
  query: singleById(id),
368
389
  body: JSON.stringify(updateOrderPayload(input))
@@ -370,44 +391,27 @@ function createFayzShopProvider(options) {
370
391
  return this.getOrder(id);
371
392
  },
372
393
  async placeOrder(input) {
373
- const orderItems = [];
374
- let subtotal = 0;
375
- for (const line of input.items) {
376
- const product = await this.getProduct(line.productId);
377
- if (!product || product.status !== "active") throw new FayzShopError(`Product unavailable: ${line.productId}`, 409);
378
- if (product.inventoryCount < line.quantity) throw new FayzShopError(`Insufficient stock for ${product.name}`, 409);
379
- const name = line.optionsLabel ? `${product.name} (${line.optionsLabel})` : product.name;
380
- subtotal += product.price * line.quantity;
381
- orderItems.push({ productId: product.id, name, sku: product.sku ?? void 0, quantity: line.quantity, unitPrice: product.price, imageUrl: product.images[0]?.url });
382
- }
383
- subtotal = Math.round(subtotal * 100) / 100;
384
- let shippingTotal = Math.max(input.shippingTotal ?? 0, 0);
385
- let discountTotal = 0;
386
- let appliedCode;
387
- if (input.discountCode) {
388
- const code = input.discountCode.trim().toLowerCase();
389
- const discount = (await this.listDiscounts()).find((d) => (d.code ?? "").toLowerCase() === code);
390
- const ts = nowIso();
391
- const valid = !!discount && discount.status === "active" && discount.startsAt <= ts && (!discount.endsAt || discount.endsAt >= ts) && (discount.usageLimit == null || discount.timesUsed < discount.usageLimit);
392
- if (valid && discount) {
393
- appliedCode = discount.code ?? void 0;
394
- if (discount.type === "percentage") discountTotal = Math.round(subtotal * discount.value) / 100;
395
- else if (discount.type === "fixed_amount") discountTotal = Math.min(discount.value, subtotal);
396
- else if (discount.type === "free_shipping") shippingTotal = 0;
397
- }
398
- }
399
- discountTotal = Math.round(Math.min(Math.max(discountTotal, 0), subtotal) * 100) / 100;
400
- return this.createOrder({
401
- customerId: input.customerId,
402
- customerName: input.customer?.name,
403
- customerEmail: input.customer?.email,
404
- currency: input.currency,
405
- notes: input.notes,
406
- discountCode: appliedCode,
407
- discountTotal,
408
- shippingTotal,
409
- items: orderItems
394
+ const orderId = await request("rpc/shop_place_order", {
395
+ method: "POST",
396
+ body: JSON.stringify({
397
+ p_tenant_id: input.tenantId ?? storeId,
398
+ p_items: input.items.map((line) => ({
399
+ product_id: line.productId,
400
+ quantity: line.quantity,
401
+ options_label: line.optionsLabel ?? null
402
+ })),
403
+ p_customer_id: asUuid(input.customerId ?? void 0),
404
+ p_customer_name: input.customer?.name ?? null,
405
+ p_customer_email: input.customer?.email ?? null,
406
+ p_currency: input.currency ?? "BRL",
407
+ p_discount_code: input.discountCode ?? null,
408
+ p_shipping_total: input.shippingTotal ?? 0,
409
+ p_notes: input.notes ?? null
410
+ })
410
411
  });
412
+ const order = await this.getOrder(orderId);
413
+ if (!order) throw new FayzShopError("Order was placed but could not be read back.", 500);
414
+ return order;
411
415
  },
412
416
  async listCustomers(options2) {
413
417
  const query = tenantQuery();
@@ -416,14 +420,27 @@ function createFayzShopProvider(options) {
416
420
  if (options2?.search) query.set("or", `(first_name.ilike.*${options2.search}*,last_name.ilike.*${options2.search}*,email.ilike.*${options2.search}*)`);
417
421
  if (options2?.limit) query.set("limit", String(options2.limit));
418
422
  if (options2?.offset) query.set("offset", String(options2.offset));
419
- return (await request("customers", { query })).map(rowToCustomer);
423
+ return (await request("plg_shop_customers", { query })).map(rowToCustomer);
420
424
  },
421
425
  async getCustomer(id) {
422
- const rows = await request("customers", { query: singleById(id) });
426
+ const rows = await request("plg_shop_customers", { query: singleById(id) });
423
427
  return rows[0] ? rowToCustomer(rows[0]) : null;
424
428
  },
429
+ async resolveCustomer(input) {
430
+ const row = await request("rpc/shop_resolve_customer", {
431
+ method: "POST",
432
+ body: JSON.stringify({
433
+ p_tenant_id: storeId,
434
+ p_email: input.email,
435
+ p_name: input.name ?? null
436
+ })
437
+ });
438
+ const customer = Array.isArray(row) ? row[0] : row;
439
+ if (!customer) throw new FayzShopError("shop_resolve_customer returned no row.", 500);
440
+ return rowToCustomer(customer);
441
+ },
425
442
  async createCustomer(input) {
426
- const [customer] = await request("customers", {
443
+ const [customer] = await request("plg_shop_customers", {
427
444
  method: "POST",
428
445
  body: JSON.stringify({
429
446
  tenant_id: storeId,
@@ -444,7 +461,7 @@ function createFayzShopProvider(options) {
444
461
  if (input.email !== void 0) updates.email = input.email;
445
462
  if (input.phone !== void 0) updates.phone = input.phone;
446
463
  if (input.notes !== void 0) updates.notes = input.notes;
447
- const [customer] = await request("customers", {
464
+ const [customer] = await request("plg_shop_customers", {
448
465
  method: "PATCH",
449
466
  query: singleById(id),
450
467
  body: JSON.stringify(updates)
@@ -453,7 +470,7 @@ function createFayzShopProvider(options) {
453
470
  return rowToCustomer(customer);
454
471
  },
455
472
  async deleteCustomer(id) {
456
- await request("customers", { method: "DELETE", query: singleById(id) });
473
+ await request("plg_shop_customers", { method: "DELETE", query: singleById(id) });
457
474
  },
458
475
  async listDiscounts(options2) {
459
476
  const query = tenantQuery();
@@ -464,10 +481,10 @@ function createFayzShopProvider(options) {
464
481
  if (options2?.search) query.set("title", `ilike.*${options2.search}*`);
465
482
  if (options2?.limit) query.set("limit", String(options2.limit));
466
483
  if (options2?.offset) query.set("offset", String(options2.offset));
467
- return (await request("discounts", { query })).map(rowToDiscount);
484
+ return (await request("plg_shop_discounts", { query })).map(rowToDiscount);
468
485
  },
469
486
  async getDiscount(id) {
470
- const rows = await request("discounts", { query: singleById(id) });
487
+ const rows = await request("plg_shop_discounts", { query: singleById(id) });
471
488
  return rows[0] ? rowToDiscount(rows[0]) : null;
472
489
  },
473
490
  async createDiscount() {
@@ -662,5 +679,5 @@ function createBrokerShopProvider(options) {
662
679
 
663
680
  exports.FayzShopError = FayzShopError;
664
681
  exports.createFayzShopProvider = createFayzShopProvider;
665
- //# sourceMappingURL=chunk-RCX43OHW.cjs.map
666
- //# sourceMappingURL=chunk-RCX43OHW.cjs.map
682
+ //# sourceMappingURL=chunk-3UTEZ2QL.cjs.map
683
+ //# sourceMappingURL=chunk-3UTEZ2QL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shop.ts"],"names":["options","row"],"mappings":"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","file":"chunk-3UTEZ2QL.cjs","sourcesContent":["export interface FayzShopProviderOptions {\n supabaseUrl?: string\n publishableKey?: string\n storeId?: string\n apiBaseUrl?: string\n projectId?: string\n mode?: 'broker' | 'supabase'\n productMetadata?: FayzShopProductMetadataOverlay[]\n fetcher?: typeof fetch\n}\n\nexport interface FayzShopProductMetadataOverlay {\n sku?: string | null\n slug?: string | null\n metadata: Record<string, unknown>\n}\n\nexport type FayzShopProductStatus = 'draft' | 'active' | 'archived'\nexport type FayzShopOrderStatus = 'open' | 'archived' | 'cancelled'\nexport type FayzShopFinancialStatus = 'pending' | 'paid' | 'partially_paid' | 'refunded' | 'partially_refunded' | 'voided'\nexport type FayzShopFulfillmentStatus = 'unfulfilled' | 'partially_fulfilled' | 'fulfilled'\n\nexport interface FayzShopListProductsOptions {\n status?: FayzShopProductStatus\n categoryId?: string\n search?: string\n slug?: string\n limit?: number\n offset?: number\n orderBy?: 'name' | 'price' | 'created_at' | 'sort_order'\n order?: 'asc' | 'desc'\n}\n\nexport interface FayzShopListOrdersOptions {\n status?: FayzShopOrderStatus\n financialStatus?: FayzShopFinancialStatus\n fulfillmentStatus?: FayzShopFulfillmentStatus\n customerId?: string\n customerEmail?: string\n search?: string\n limit?: number\n offset?: number\n}\n\nexport interface FayzShopListCustomersOptions {\n search?: string\n limit?: number\n offset?: number\n}\n\nexport interface FayzShopListDiscountsOptions {\n status?: string\n type?: string\n search?: string\n limit?: number\n offset?: number\n}\n\ninterface ProductImageRow {\n id: string\n product_id: string\n url: string\n alt_text?: string | null\n sort_order?: number | null\n is_primary?: boolean | null\n created_at?: string | null\n}\n\ninterface ProductRow {\n id: string\n tenant_id: string\n name: string\n slug?: string | null\n description?: string | null\n price?: number | null\n compare_at_price?: number | null\n currency?: string | null\n status?: FayzShopProductStatus | null\n inventory_count?: number | null\n sku?: string | null\n sort_order?: number | null\n metadata?: Record<string, unknown> | null\n images?: ProductImageRow[] | null\n category_id?: string | null\n category?: { name?: string | null } | null\n is_physical?: boolean | null\n weight?: number | null\n weight_unit?: string | null\n created_at?: string | null\n updated_at?: string | null\n}\n\ninterface StoreCategoryMetadata {\n id?: string | null\n name?: string | null\n slug?: string | null\n description?: string | null\n imageUrl?: string | null\n sortOrder?: number | null\n}\n\ninterface CategoryRow {\n id: string\n tenant_id?: string | null\n name: string\n slug?: string | null\n description?: string | null\n parent_id?: string | null\n sort_order?: number | null\n image_url?: string | null\n created_at?: string | null\n}\n\ninterface OrderItemRow {\n id: string\n order_id: string\n product_id?: string | null\n name: string\n sku?: string | null\n quantity?: number | null\n unit_price?: number | null\n total?: number | null\n image_url?: string | null\n}\n\ninterface OrderRow {\n id: string\n tenant_id: string\n order_number?: number | null\n status?: FayzShopOrderStatus | null\n financial_status?: FayzShopFinancialStatus | null\n fulfillment_status?: FayzShopFulfillmentStatus | null\n currency?: string | null\n subtotal?: number | null\n tax_total?: number | null\n discount_total?: number | null\n shipping_total?: number | null\n total?: number | null\n customer_id?: string | null\n customer_name?: string | null\n customer_email?: string | null\n discount_code?: string | null\n notes?: string | null\n items?: OrderItemRow[] | null\n created_at?: string | null\n updated_at?: string | null\n}\n\ninterface CustomerRow {\n id: string\n tenant_id: string\n first_name: string\n last_name?: string | null\n email?: string | null\n phone?: string | null\n notes?: string | null\n orders_count?: number | null\n total_spent?: number | null\n created_at?: string | null\n updated_at?: string | null\n}\n\ninterface DiscountRow {\n id: string\n tenant_id: string\n title: string\n code?: string | null\n type: string\n method?: string | null\n value?: number | null\n usage_limit?: number | null\n once_per_customer?: boolean | null\n starts_at?: string | null\n ends_at?: string | null\n status?: string | null\n times_used?: number | null\n created_at?: string | null\n updated_at?: string | null\n}\n\nexport class FayzShopError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly responseBody?: unknown,\n ) {\n super(message)\n this.name = 'FayzShopError'\n }\n}\n\nfunction normalizeBaseUrl(url: string): string {\n return url.replace(/\\/+$/, '')\n}\n\nfunction slugify(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n}\n\nfunction nowIso(): string {\n return new Date().toISOString()\n}\n\nfunction present<T>(value: T | null | undefined, fallback: T): T {\n return value == null ? fallback : value\n}\n\nfunction productMetadataKey(kind: 'sku' | 'slug', value: string): string {\n return `${kind}:${value.toLowerCase()}`\n}\n\nfunction buildProductMetadataOverlay(overlays: FayzShopProductMetadataOverlay[] | undefined) {\n const map = new Map<string, Record<string, unknown>>()\n for (const overlay of overlays ?? []) {\n if (overlay.sku) map.set(productMetadataKey('sku', overlay.sku), overlay.metadata)\n if (overlay.slug) map.set(productMetadataKey('slug', overlay.slug), overlay.metadata)\n }\n return map\n}\n\nfunction asUuid(value: string | null | undefined): string | null {\n if (!value) return null\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)\n ? value\n : null\n}\n\nfunction rowToImage(row: ProductImageRow) {\n return {\n id: row.id,\n productId: row.product_id,\n url: row.url,\n altText: row.alt_text ?? null,\n sortOrder: row.sort_order ?? 0,\n isPrimary: row.is_primary ?? false,\n createdAt: row.created_at ?? nowIso(),\n }\n}\n\nfunction getProductMetadata(row: ProductRow, overlay?: Map<string, Record<string, unknown>>): Record<string, unknown> {\n const metadata = row.metadata ?? {}\n const bySlug = overlay?.get(productMetadataKey('slug', row.slug ?? slugify(row.name)))\n const bySku = row.sku ? overlay?.get(productMetadataKey('sku', row.sku)) : undefined\n return { ...(bySlug ?? {}), ...(bySku ?? {}), ...metadata }\n}\n\nfunction getStoreCategory(row: ProductRow, overlay?: Map<string, Record<string, unknown>>): StoreCategoryMetadata | null {\n const raw = getProductMetadata(row, overlay).fayzStoreCategory\n return raw && typeof raw === 'object' ? raw as StoreCategoryMetadata : null\n}\n\nfunction rowToProduct(row: ProductRow, overlay?: Map<string, Record<string, unknown>>) {\n const metadata = getProductMetadata(row, overlay)\n const storeCategory = getStoreCategory(row, overlay)\n return {\n id: row.id,\n tenantId: row.tenant_id,\n name: row.name,\n slug: row.slug ?? slugify(row.name),\n description: row.description ?? null,\n price: row.price ?? 0,\n compareAtPrice: row.compare_at_price ?? null,\n currency: row.currency ?? 'BRL',\n status: row.status ?? 'active',\n inventoryCount: row.inventory_count ?? 0,\n sku: row.sku ?? null,\n sortOrder: row.sort_order ?? 0,\n metadata,\n images: Array.isArray(row.images) ? row.images.map(rowToImage) : [],\n categoryId: storeCategory?.id ?? row.category_id ?? null,\n categoryName: storeCategory?.name ?? row.category?.name ?? null,\n isPhysical: row.is_physical ?? true,\n weight: row.weight ?? null,\n weightUnit: row.weight_unit ?? 'kg',\n createdAt: row.created_at ?? nowIso(),\n updatedAt: row.updated_at ?? row.created_at ?? nowIso(),\n }\n}\n\nfunction rowToCategory(row: CategoryRow) {\n return {\n id: row.id,\n tenantId: row.tenant_id ?? 'global',\n name: row.name,\n slug: row.slug ?? slugify(row.name),\n description: row.description ?? null,\n parentId: row.parent_id ?? null,\n sortOrder: row.sort_order ?? 0,\n imageUrl: row.image_url ?? null,\n createdAt: row.created_at ?? nowIso(),\n }\n}\n\nfunction storeCategoryToCategory(category: StoreCategoryMetadata, tenantId: string) {\n const name = category.name ?? 'Category'\n return {\n id: category.id ?? slugify(name),\n tenantId,\n name,\n slug: category.slug ?? slugify(name),\n description: category.description ?? null,\n parentId: null,\n sortOrder: category.sortOrder ?? 0,\n imageUrl: category.imageUrl ?? null,\n createdAt: nowIso(),\n }\n}\n\nfunction deriveStoreCategories(products: ProductRow[], tenantId: string) {\n const categories = new Map<string, ReturnType<typeof storeCategoryToCategory>>()\n for (const product of products) {\n const category = getStoreCategory(product)\n if (!category?.name && !category?.id) continue\n const mapped = storeCategoryToCategory(category, tenantId)\n categories.set(mapped.id, mapped)\n }\n return [...categories.values()].sort((a, b) => a.sortOrder - b.sortOrder || a.name.localeCompare(b.name))\n}\n\nfunction rowToOrder(row: OrderRow) {\n return {\n id: row.id,\n tenantId: row.tenant_id,\n orderNumber: row.order_number ?? 0,\n status: row.status ?? 'open',\n financialStatus: row.financial_status ?? 'pending',\n fulfillmentStatus: row.fulfillment_status ?? 'unfulfilled',\n currency: row.currency ?? 'BRL',\n subtotal: row.subtotal ?? 0,\n taxTotal: row.tax_total ?? 0,\n discountTotal: row.discount_total ?? 0,\n shippingTotal: row.shipping_total ?? 0,\n total: row.total ?? 0,\n customerId: row.customer_id ?? null,\n customerName: row.customer_name ?? null,\n customerEmail: row.customer_email ?? null,\n discountCode: row.discount_code ?? null,\n notes: row.notes ?? null,\n items: Array.isArray(row.items) ? row.items.map(rowToOrderItem) : [],\n createdAt: row.created_at ?? nowIso(),\n updatedAt: row.updated_at ?? row.created_at ?? nowIso(),\n }\n}\n\nfunction rowToOrderItem(row: OrderItemRow) {\n return {\n id: row.id,\n orderId: row.order_id,\n productId: row.product_id ?? null,\n name: row.name,\n sku: row.sku ?? null,\n quantity: row.quantity ?? 0,\n unitPrice: row.unit_price ?? 0,\n total: row.total ?? 0,\n imageUrl: row.image_url ?? null,\n }\n}\n\nfunction rowToCustomer(row: CustomerRow) {\n return {\n id: row.id,\n tenantId: row.tenant_id,\n firstName: row.first_name,\n lastName: row.last_name ?? '',\n email: row.email ?? null,\n phone: row.phone ?? null,\n notes: row.notes ?? null,\n ordersCount: row.orders_count ?? 0,\n totalSpent: row.total_spent ?? 0,\n createdAt: row.created_at ?? nowIso(),\n updatedAt: row.updated_at ?? row.created_at ?? nowIso(),\n }\n}\n\nfunction rowToDiscount(row: DiscountRow) {\n return {\n id: row.id,\n tenantId: row.tenant_id,\n title: row.title,\n code: row.code ?? null,\n type: row.type,\n method: row.method ?? 'code',\n value: row.value ?? 0,\n usageLimit: row.usage_limit ?? null,\n oncePerCustomer: row.once_per_customer ?? false,\n startsAt: row.starts_at ?? nowIso(),\n endsAt: row.ends_at ?? null,\n status: row.status ?? 'active',\n timesUsed: row.times_used ?? 0,\n createdAt: row.created_at ?? nowIso(),\n updatedAt: row.updated_at ?? row.created_at ?? nowIso(),\n }\n}\n\nfunction updateOrderPayload(input: {\n status?: FayzShopOrderStatus\n financialStatus?: FayzShopFinancialStatus\n fulfillmentStatus?: FayzShopFulfillmentStatus\n notes?: string\n}) {\n const updates: Record<string, unknown> = {}\n if (input.status !== undefined) updates.status = input.status\n if (input.financialStatus !== undefined) updates.financial_status = input.financialStatus\n if (input.fulfillmentStatus !== undefined) updates.fulfillment_status = input.fulfillmentStatus\n if (input.notes !== undefined) updates.notes = input.notes\n return updates\n}\n\nexport function createFayzShopProvider(options: FayzShopProviderOptions) {\n if (options.mode === 'broker' || options.apiBaseUrl || options.projectId) {\n return createBrokerShopProvider(options)\n }\n\n if (!options.supabaseUrl || !options.publishableKey || !options.storeId) {\n throw new FayzShopError('Fayz Shop provider requires either broker apiBaseUrl/projectId or legacy supabaseUrl/publishableKey/storeId.', 400)\n }\n\n const baseUrl = `${normalizeBaseUrl(options.supabaseUrl)}/rest/v1`\n const fetcher = options.fetcher ?? fetch\n const key = options.publishableKey\n const storeId = options.storeId\n const productMetadataOverlay = buildProductMetadataOverlay(options.productMetadata)\n\n async function request<T>(table: string, init: RequestInit & { query?: URLSearchParams } = {}): Promise<T> {\n const query = init.query?.toString()\n const response = await fetcher(`${baseUrl}/${table}${query ? `?${query}` : ''}`, {\n ...init,\n headers: {\n apikey: key,\n Authorization: `Bearer ${key}`,\n ...(init.body ? { 'Content-Type': 'application/json', Prefer: 'return=representation' } : {}),\n ...init.headers,\n },\n })\n const text = await response.text()\n let body: unknown\n try {\n body = text ? JSON.parse(text) : undefined\n } catch {\n body = text\n }\n if (!response.ok) {\n const message = typeof body === 'object' && body\n ? String((body as { message?: unknown; error?: unknown }).message ?? (body as { error?: unknown }).error ?? `Fayz Shop request failed with status ${response.status}`)\n : `Fayz Shop request failed with status ${response.status}`\n throw new FayzShopError(message, response.status, body)\n }\n return body as T\n }\n\n const tenantQuery = () => {\n const query = new URLSearchParams()\n query.set('tenant_id', `eq.${storeId}`)\n return query\n }\n\n const singleById = (id: string) => {\n const query = tenantQuery()\n query.set('id', `eq.${id}`)\n query.set('limit', '1')\n return query\n }\n\n return {\n async listProducts(options?: FayzShopListProductsOptions) {\n const query = tenantQuery()\n query.set('select', '*,images:plg_shop_product_images(*),category:plg_shop_categories(name)')\n if (options?.status) query.set('status', `eq.${options.status}`)\n if (options?.slug) query.set('slug', `eq.${options.slug}`)\n if (options?.search) query.set('name', `ilike.*${options.search}*`)\n query.set('order', `${options?.orderBy ?? 'sort_order'}.${options?.order ?? 'asc'}`)\n if (options?.limit) query.set('limit', String(options.limit))\n if (options?.offset) query.set('offset', String(options.offset))\n const products = (await request<ProductRow[]>('plg_shop_products', { query })).map((row) => rowToProduct(row, productMetadataOverlay))\n return options?.categoryId ? products.filter((product) => product.categoryId === options.categoryId) : products\n },\n async getProduct(id: string) {\n // Cart lines can carry non-uuid ids (mock catalog, or a cart persisted in\n // an earlier mock-mode session). PostgREST would 400 on `id=eq.p-05`\n // (invalid uuid), so treat any non-uuid id as \"not found\" instead.\n if (!asUuid(id)) return null\n const query = singleById(id)\n query.set('select', '*,images:plg_shop_product_images(*),category:plg_shop_categories(name)')\n const rows = await request<ProductRow[]>('plg_shop_products', { query })\n return rows[0] ? rowToProduct(rows[0], productMetadataOverlay) : null\n },\n async createProduct() {\n throw new FayzShopError('Product writes require the Fayz admin/broker API.', 501)\n },\n async updateProduct() {\n throw new FayzShopError('Product writes require the Fayz admin/broker API.', 501)\n },\n async deleteProduct() {\n throw new FayzShopError('Product writes require the Fayz admin/broker API.', 501)\n },\n async uploadProductImage() {\n throw new FayzShopError('Product image uploads require the Fayz admin/broker API.', 501)\n },\n async deleteProductImage() {\n throw new FayzShopError('Product image deletes require the Fayz admin/broker API.', 501)\n },\n async listCategories() {\n const productQuery = tenantQuery()\n productQuery.set('select', 'metadata')\n productQuery.set('order', 'sort_order.asc')\n const products = await request<ProductRow[]>('plg_shop_products', { query: productQuery })\n const storeCategories = deriveStoreCategories(products, storeId)\n if (storeCategories.length > 0) return storeCategories\n\n const query = new URLSearchParams()\n query.set('select', '*')\n query.set('order', 'sort_order.asc')\n return (await request<CategoryRow[]>('plg_shop_categories', { query })).map(rowToCategory)\n },\n async createCategory() {\n throw new FayzShopError('Category writes require the Fayz admin/broker API.', 501)\n },\n async updateCategory() {\n throw new FayzShopError('Category writes require the Fayz admin/broker API.', 501)\n },\n async deleteCategory() {\n throw new FayzShopError('Category deletes require the Fayz admin/broker API.', 501)\n },\n async listOrders(options?: FayzShopListOrdersOptions) {\n const query = tenantQuery()\n query.set('select', '*,items:plg_shop_order_items(*)')\n if (options?.status) query.set('status', `eq.${options.status}`)\n if (options?.financialStatus) query.set('financial_status', `eq.${options.financialStatus}`)\n if (options?.fulfillmentStatus) query.set('fulfillment_status', `eq.${options.fulfillmentStatus}`)\n if (options?.customerId) query.set('customer_id', `eq.${options.customerId}`)\n if (options?.customerEmail) query.set('customer_email', `eq.${options.customerEmail}`)\n if (options?.search) query.set('or', `(customer_name.ilike.*${options.search}*,customer_email.ilike.*${options.search}*)`)\n query.set('order', 'created_at.desc')\n if (options?.limit) query.set('limit', String(options.limit))\n if (options?.offset) query.set('offset', String(options.offset))\n return (await request<OrderRow[]>('plg_shop_orders', { query })).map(rowToOrder)\n },\n async getOrder(id: string) {\n const query = singleById(id)\n query.set('select', '*,items:plg_shop_order_items(*)')\n // Anon storefronts have no table grant at all — the direct read throws\n // (401) rather than returning empty, so it must not short-circuit the\n // RPC fallback below.\n let rows: OrderRow[] = []\n try {\n rows = await request<OrderRow[]>('plg_shop_orders', { query })\n } catch {\n /* fall through to shop_get_order */\n }\n if (rows[0]) return rowToOrder(rows[0])\n // Anon storefronts can't SELECT plg_shop_orders (RLS); the order uuid acts\n // as the read capability through the whitelisted RPC.\n try {\n const row = await request<OrderRow | null>('rpc/shop_get_order', {\n method: 'POST',\n body: JSON.stringify({ p_order_id: id }),\n })\n return row ? rowToOrder(row) : null\n } catch {\n return null\n }\n },\n async confirmPayment(id: string, reference?: string) {\n // Mock/dev payment seam: anon has no UPDATE grant on plg_shop_orders,\n // so the pending->paid transition goes through the whitelisted RPC\n // (order uuid = capability, same contract as shop_get_order).\n const row = await request<OrderRow | null>('rpc/shop_confirm_payment', {\n method: 'POST',\n body: JSON.stringify({ p_order_id: id, p_reference: reference ?? null }),\n })\n return row ? rowToOrder(row) : null\n },\n async createOrder(input: {\n customerId?: string\n customerName?: string\n customerEmail?: string\n currency?: string\n notes?: string\n discountCode?: string\n discountTotal?: number\n shippingTotal?: number\n items: Array<{ productId?: string; name: string; sku?: string; quantity: number; unitPrice: number; imageUrl?: string }>\n }) {\n const subtotal = input.items.reduce((sum, item) => sum + item.quantity * item.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 [order] = await request<OrderRow[]>('plg_shop_orders', {\n method: 'POST',\n body: JSON.stringify({\n tenant_id: storeId,\n customer_id: input.customerId ?? null,\n customer_name: input.customerName ?? null,\n customer_email: input.customerEmail ?? null,\n currency: input.currency ?? 'BRL',\n notes: input.notes ?? null,\n subtotal,\n discount_total: discountTotal,\n shipping_total: shippingTotal,\n discount_code: input.discountCode ?? null,\n total,\n status: 'open',\n financial_status: 'pending',\n fulfillment_status: 'unfulfilled',\n }),\n })\n if (!order) throw new FayzShopError('Order insert did not return a row.', 500)\n if (input.items.length) {\n await request<OrderItemRow[]>('plg_shop_order_items', {\n method: 'POST',\n body: JSON.stringify(input.items.map((item) => ({\n order_id: order.id,\n product_id: asUuid(item.productId),\n name: item.name,\n sku: item.sku ?? null,\n quantity: item.quantity,\n unit_price: item.unitPrice,\n total: item.quantity * item.unitPrice,\n image_url: item.imageUrl ?? null,\n }))),\n })\n }\n return this.getOrder(order.id)\n },\n async updateOrder(id: string, input: Parameters<typeof updateOrderPayload>[0]) {\n await request<OrderRow[]>('plg_shop_orders', {\n method: 'PATCH',\n query: singleById(id),\n body: JSON.stringify(updateOrderPayload(input)),\n })\n return this.getOrder(id)\n },\n async placeOrder(input: {\n tenantId?: string\n customerId?: string\n customer?: { name?: string; email?: string }\n currency?: string\n notes?: string\n discountCode?: string\n shippingTotal?: number\n items: Array<{ productId: string; quantity: number; optionsLabel?: string }>\n }) {\n // Trusted placement: the shop_place_order SECURITY DEFINER RPC re-reads\n // prices, validates discount/stock and writes order+items atomically.\n // Direct INSERTs are blocked for anon by RLS on the shared FayzApi.\n const orderId = await request<string>('rpc/shop_place_order', {\n method: 'POST',\n body: JSON.stringify({\n p_tenant_id: input.tenantId ?? storeId,\n p_items: input.items.map((line) => ({\n product_id: line.productId,\n quantity: line.quantity,\n options_label: line.optionsLabel ?? null,\n })),\n p_customer_id: asUuid(input.customerId ?? undefined),\n p_customer_name: input.customer?.name ?? null,\n p_customer_email: input.customer?.email ?? null,\n p_currency: input.currency ?? 'BRL',\n p_discount_code: input.discountCode ?? null,\n p_shipping_total: input.shippingTotal ?? 0,\n p_notes: input.notes ?? null,\n }),\n })\n const order = await this.getOrder(orderId)\n if (!order) throw new FayzShopError('Order was placed but could not be read back.', 500)\n return order\n },\n async listCustomers(options?: FayzShopListCustomersOptions) {\n const query = tenantQuery()\n query.set('select', '*')\n query.set('order', 'first_name.asc')\n if (options?.search) query.set('or', `(first_name.ilike.*${options.search}*,last_name.ilike.*${options.search}*,email.ilike.*${options.search}*)`)\n if (options?.limit) query.set('limit', String(options.limit))\n if (options?.offset) query.set('offset', String(options.offset))\n return (await request<CustomerRow[]>('plg_shop_customers', { query })).map(rowToCustomer)\n },\n async getCustomer(id: string) {\n const rows = await request<CustomerRow[]>('plg_shop_customers', { query: singleById(id) })\n return rows[0] ? rowToCustomer(rows[0]) : null\n },\n async resolveCustomer(input: { email: string; name?: string }) {\n const row = await request<CustomerRow | CustomerRow[]>('rpc/shop_resolve_customer', {\n method: 'POST',\n body: JSON.stringify({\n p_tenant_id: storeId,\n p_email: input.email,\n p_name: input.name ?? null,\n }),\n })\n const customer = Array.isArray(row) ? row[0] : row\n if (!customer) throw new FayzShopError('shop_resolve_customer returned no row.', 500)\n return rowToCustomer(customer)\n },\n async createCustomer(input: { firstName: string; lastName?: string; email?: string; phone?: string; notes?: string }) {\n const [customer] = await request<CustomerRow[]>('plg_shop_customers', {\n method: 'POST',\n body: JSON.stringify({\n tenant_id: storeId,\n first_name: input.firstName,\n last_name: input.lastName ?? '',\n email: input.email ?? null,\n phone: input.phone ?? null,\n notes: input.notes ?? null,\n }),\n })\n if (!customer) throw new FayzShopError('Customer insert did not return a row.', 500)\n return rowToCustomer(customer)\n },\n async updateCustomer(id: string, input: { firstName?: string; lastName?: string; email?: string | null; phone?: string | null; notes?: string | null }) {\n const updates: Record<string, unknown> = {}\n if (input.firstName !== undefined) updates.first_name = input.firstName\n if (input.lastName !== undefined) updates.last_name = input.lastName\n if (input.email !== undefined) updates.email = input.email\n if (input.phone !== undefined) updates.phone = input.phone\n if (input.notes !== undefined) updates.notes = input.notes\n const [customer] = await request<CustomerRow[]>('plg_shop_customers', {\n method: 'PATCH',\n query: singleById(id),\n body: JSON.stringify(updates),\n })\n if (!customer) throw new FayzShopError('Customer update did not return a row.', 500)\n return rowToCustomer(customer)\n },\n async deleteCustomer(id: string) {\n await request<unknown>('plg_shop_customers', { method: 'DELETE', query: singleById(id) })\n },\n async listDiscounts(options?: FayzShopListDiscountsOptions) {\n const query = tenantQuery()\n query.set('select', '*')\n query.set('order', 'created_at.desc')\n if (options?.status) query.set('status', `eq.${options.status}`)\n if (options?.type) query.set('type', `eq.${options.type}`)\n if (options?.search) query.set('title', `ilike.*${options.search}*`)\n if (options?.limit) query.set('limit', String(options.limit))\n if (options?.offset) query.set('offset', String(options.offset))\n return (await request<DiscountRow[]>('plg_shop_discounts', { query })).map(rowToDiscount)\n },\n async getDiscount(id: string) {\n const rows = await request<DiscountRow[]>('plg_shop_discounts', { query: singleById(id) })\n return rows[0] ? rowToDiscount(rows[0]) : null\n },\n async createDiscount() {\n throw new FayzShopError('Discount writes require the Fayz admin/broker API.', 501)\n },\n async updateDiscount() {\n throw new FayzShopError('Discount writes require the Fayz admin/broker API.', 501)\n },\n async deleteDiscount() {\n throw new FayzShopError('Discount deletes require the Fayz admin/broker API.', 501)\n },\n }\n}\n\nfunction appendQuery(url: string, values: Record<string, string | number | undefined>): string {\n const query = new URLSearchParams()\n for (const [key, value] of Object.entries(values)) {\n if (value !== undefined) query.set(key, String(value))\n }\n const serialized = query.toString()\n return serialized ? `${url}?${serialized}` : url\n}\n\nfunction normalizeBrokerProduct(product: Record<string, unknown>, overlay?: Map<string, Record<string, unknown>>) {\n const category = product.category && typeof product.category === 'object'\n ? product.category as Record<string, unknown>\n : null\n const row = {\n id: product.id as string,\n tenant_id: product.tenantId as string,\n name: product.name as string,\n slug: product.slug as string | undefined,\n description: product.description as string | null | undefined,\n price: product.price as number | null | undefined,\n compare_at_price: product.compareAtPrice as number | null | undefined,\n currency: product.currency as string | null | undefined,\n status: product.status as FayzShopProductStatus | null | undefined,\n inventory_count: product.inventoryCount as number | null | undefined,\n sku: product.sku as string | null | undefined,\n sort_order: product.sortOrder as number | null | undefined,\n metadata: product.metadata as Record<string, unknown> | null | undefined,\n images: Array.isArray(product.images)\n ? product.images.map((image): ProductImageRow => {\n const row = image as Record<string, unknown>\n return {\n id: String(row.id ?? ''),\n product_id: String(row.productId ?? product.id ?? ''),\n url: String(row.url ?? ''),\n alt_text: (row.altText as string | null | undefined) ?? null,\n sort_order: (row.sortOrder as number | null | undefined) ?? 0,\n is_primary: (row.isPrimary as boolean | null | undefined) ?? false,\n created_at: (row.createdAt as string | null | undefined) ?? null,\n }\n })\n : [],\n category_id: (product.categoryId ?? category?.id) as string | null | undefined,\n category: category ? { name: category.name as string | null | undefined } : null,\n is_physical: product.isPhysical as boolean | null | undefined,\n weight: product.weight as number | null | undefined,\n weight_unit: product.weightUnit as string | null | undefined,\n created_at: product.createdAt as string | null | undefined,\n updated_at: product.updatedAt as string | null | undefined,\n } satisfies ProductRow\n return rowToProduct(row, overlay)\n}\n\nfunction normalizeBrokerCategory(category: Record<string, unknown>) {\n return {\n id: category.id as string,\n tenantId: (category.tenantId as string | undefined) ?? 'global',\n name: category.name as string,\n slug: (category.slug as string | undefined) ?? slugify(category.name as string),\n description: (category.description as string | null | undefined) ?? null,\n parentId: (category.parentId as string | null | undefined) ?? null,\n sortOrder: (category.sortOrder as number | null | undefined) ?? 0,\n imageUrl: (category.imageUrl as string | null | undefined) ?? null,\n createdAt: (category.createdAt as string | null | undefined) ?? nowIso(),\n }\n}\n\nfunction createBrokerShopProvider(options: FayzShopProviderOptions) {\n if (!options.apiBaseUrl || !options.projectId) {\n throw new FayzShopError('Fayz Shop broker mode requires apiBaseUrl and projectId.', 400)\n }\n\n const fetcher = options.fetcher ?? fetch\n const apiBaseUrl = normalizeBaseUrl(options.apiBaseUrl)\n const projectId = encodeURIComponent(options.projectId)\n const productMetadataOverlay = buildProductMetadataOverlay(options.productMetadata)\n\n async function request<T>(path: string, init: RequestInit = {}): Promise<T> {\n const response = await fetcher(`${apiBaseUrl}/public/projects/${projectId}/shop${path}`, init)\n const text = await response.text()\n let body: unknown\n try {\n body = text ? JSON.parse(text) : undefined\n } catch {\n body = text\n }\n if (!response.ok) {\n const message = typeof body === 'object' && body\n ? String((body as { message?: unknown; error?: unknown }).message ?? (body as { error?: unknown }).error ?? `Fayz Shop broker request failed with status ${response.status}`)\n : `Fayz Shop broker request failed with status ${response.status}`\n throw new FayzShopError(message, response.status, body)\n }\n return body as T\n }\n\n return {\n async listProducts(options?: FayzShopListProductsOptions) {\n if (options?.slug) {\n const product = await this.getProduct(options.slug)\n return product ? [product] : []\n }\n\n const response = await request<{ products?: Array<Record<string, unknown>> }>(appendQuery('/products', {\n status: options?.status,\n categoryId: options?.categoryId,\n search: options?.search,\n limit: options?.limit,\n offset: options?.offset,\n orderBy: options?.orderBy,\n order: options?.order,\n }))\n return (response.products ?? []).map((product) => normalizeBrokerProduct(product, productMetadataOverlay))\n },\n async getProduct(id: string) {\n const response = await request<{ product?: Record<string, unknown> | null }>(`/products/${encodeURIComponent(id)}`)\n return response.product ? normalizeBrokerProduct(response.product, productMetadataOverlay) : null\n },\n async createProduct() {\n throw new FayzShopError('Product writes require the Fayz admin/broker API.', 501)\n },\n async updateProduct() {\n throw new FayzShopError('Product writes require the Fayz admin/broker API.', 501)\n },\n async deleteProduct() {\n throw new FayzShopError('Product writes require the Fayz admin/broker API.', 501)\n },\n async uploadProductImage() {\n throw new FayzShopError('Product image uploads require the Fayz admin/broker API.', 501)\n },\n async deleteProductImage() {\n throw new FayzShopError('Product image deletes require the Fayz admin/broker API.', 501)\n },\n async listCategories() {\n const response = await request<{ categories?: Array<Record<string, unknown>> }>('/categories')\n return (response.categories ?? []).map(normalizeBrokerCategory)\n },\n async createCategory() {\n throw new FayzShopError('Category writes require the Fayz admin/broker API.', 501)\n },\n async updateCategory() {\n throw new FayzShopError('Category writes require the Fayz admin/broker API.', 501)\n },\n async deleteCategory() {\n throw new FayzShopError('Category deletes require the Fayz admin/broker API.', 501)\n },\n async listOrders() {\n throw new FayzShopError('Order reads require the Fayz admin/broker API.', 501)\n },\n async getOrder() {\n throw new FayzShopError('Order reads require the Fayz admin/broker API.', 501)\n },\n async createOrder() {\n throw new FayzShopError('Order writes require the Fayz admin/broker API.', 501)\n },\n async updateOrder() {\n throw new FayzShopError('Order writes require the Fayz admin/broker API.', 501)\n },\n async placeOrder() {\n throw new FayzShopError('Order placement requires the Fayz admin/broker API.', 501)\n },\n async listCustomers() {\n throw new FayzShopError('Customer reads require the Fayz admin/broker API.', 501)\n },\n async getCustomer() {\n throw new FayzShopError('Customer reads require the Fayz admin/broker API.', 501)\n },\n async createCustomer() {\n throw new FayzShopError('Customer writes require the Fayz admin/broker API.', 501)\n },\n async updateCustomer() {\n throw new FayzShopError('Customer writes require the Fayz admin/broker API.', 501)\n },\n async deleteCustomer() {\n throw new FayzShopError('Customer writes require the Fayz admin/broker API.', 501)\n },\n async listDiscounts() {\n throw new FayzShopError('Discount reads require the Fayz admin/broker API.', 501)\n },\n async getDiscount() {\n throw new FayzShopError('Discount reads require the Fayz admin/broker API.', 501)\n },\n async createDiscount() {\n throw new FayzShopError('Discount writes require the Fayz admin/broker API.', 501)\n },\n async updateDiscount() {\n throw new FayzShopError('Discount writes require the Fayz admin/broker API.', 501)\n },\n async deleteDiscount() {\n throw new FayzShopError('Discount deletes require the Fayz admin/broker API.', 501)\n },\n }\n}\n"]}
@@ -2,9 +2,9 @@
2
2
  var release_channels_default = {
3
3
  channels: {
4
4
  stable: {
5
- "@fayz-ai/sdk": "^0.6.6",
6
- "@fayz-ai/core": "^0.7.0",
7
- "@fayz-ai/auth": "^0.7.0",
5
+ "@fayz-ai/sdk": "^0.6.7",
6
+ "@fayz-ai/core": "^0.7.2",
7
+ "@fayz-ai/auth": "^0.7.1",
8
8
  "@fayz-ai/ui": "^0.7.0",
9
9
  "@fayz-ai/saas": "^0.7.0",
10
10
  "@fayz-ai/shop": "^0.7.0",
@@ -12,8 +12,10 @@ var release_channels_default = {
12
12
  "@fayz-ai/portal": "^0.7.0",
13
13
  "@fayz-ai/courses": "^0.7.0",
14
14
  "@fayz-ai/db": "^0.1.2",
15
- "@fayz-ai/plugin-agenda": "^0.2.0",
15
+ "@fayz-ai/plugin-agenda": "^0.4.0",
16
+ "@fayz-ai/plugin-auth": "^0.1.3",
16
17
  "@fayz-ai/plugin-automations": "^0.2.3",
18
+ "@fayz-ai/plugin-blog": "^0.1.0",
17
19
  "@fayz-ai/plugin-conversations": "^0.2.4",
18
20
  "@fayz-ai/plugin-courses": "^0.2.3",
19
21
  "@fayz-ai/plugin-crm": "^0.3.0",
@@ -24,17 +26,18 @@ var release_channels_default = {
24
26
  "@fayz-ai/plugin-marketing": "^0.2.1",
25
27
  "@fayz-ai/plugin-menu": "^0.3.0",
26
28
  "@fayz-ai/plugin-orders": "^0.3.0",
29
+ "@fayz-ai/plugin-payments": "^0.1.1",
27
30
  "@fayz-ai/plugin-reports": "^0.2.0",
28
- "@fayz-ai/plugin-reputation": "^0.2.3",
31
+ "@fayz-ai/plugin-reputation": "^0.2.4",
29
32
  "@fayz-ai/plugin-shop": "^0.2.5",
30
33
  "@fayz-ai/plugin-sites": "^0.2.3",
31
34
  "@fayz-ai/plugin-tables": "^0.3.0",
32
35
  "@fayz-ai/plugin-tasks": "^0.1.7"
33
36
  },
34
37
  latest: {
35
- "@fayz-ai/sdk": "^0.6.6",
36
- "@fayz-ai/core": "^0.7.0",
37
- "@fayz-ai/auth": "^0.7.0",
38
+ "@fayz-ai/sdk": "^0.6.7",
39
+ "@fayz-ai/core": "^0.7.2",
40
+ "@fayz-ai/auth": "^0.7.1",
38
41
  "@fayz-ai/ui": "^0.7.0",
39
42
  "@fayz-ai/saas": "^0.7.0",
40
43
  "@fayz-ai/shop": "^0.7.0",
@@ -42,8 +45,10 @@ var release_channels_default = {
42
45
  "@fayz-ai/portal": "^0.7.0",
43
46
  "@fayz-ai/courses": "^0.7.0",
44
47
  "@fayz-ai/db": "^0.1.2",
45
- "@fayz-ai/plugin-agenda": "^0.2.0",
48
+ "@fayz-ai/plugin-agenda": "^0.4.0",
49
+ "@fayz-ai/plugin-auth": "^0.1.3",
46
50
  "@fayz-ai/plugin-automations": "^0.2.3",
51
+ "@fayz-ai/plugin-blog": "^0.1.0",
47
52
  "@fayz-ai/plugin-conversations": "^0.2.4",
48
53
  "@fayz-ai/plugin-courses": "^0.2.3",
49
54
  "@fayz-ai/plugin-crm": "^0.3.0",
@@ -54,17 +59,18 @@ var release_channels_default = {
54
59
  "@fayz-ai/plugin-marketing": "^0.2.1",
55
60
  "@fayz-ai/plugin-menu": "^0.3.0",
56
61
  "@fayz-ai/plugin-orders": "^0.3.0",
62
+ "@fayz-ai/plugin-payments": "^0.1.1",
57
63
  "@fayz-ai/plugin-reports": "^0.2.0",
58
- "@fayz-ai/plugin-reputation": "^0.2.3",
64
+ "@fayz-ai/plugin-reputation": "^0.2.4",
59
65
  "@fayz-ai/plugin-shop": "^0.2.5",
60
66
  "@fayz-ai/plugin-sites": "^0.2.3",
61
67
  "@fayz-ai/plugin-tables": "^0.3.0",
62
68
  "@fayz-ai/plugin-tasks": "^0.1.7"
63
69
  },
64
70
  preview: {
65
- "@fayz-ai/sdk": "^0.6.6",
66
- "@fayz-ai/core": "^0.7.0",
67
- "@fayz-ai/auth": "^0.7.0",
71
+ "@fayz-ai/sdk": "^0.6.7",
72
+ "@fayz-ai/core": "^0.7.2",
73
+ "@fayz-ai/auth": "^0.7.1",
68
74
  "@fayz-ai/ui": "^0.7.0",
69
75
  "@fayz-ai/saas": "^0.7.0",
70
76
  "@fayz-ai/shop": "^0.7.0",
@@ -72,8 +78,10 @@ var release_channels_default = {
72
78
  "@fayz-ai/portal": "^0.7.0",
73
79
  "@fayz-ai/courses": "^0.7.0",
74
80
  "@fayz-ai/db": "^0.1.2",
75
- "@fayz-ai/plugin-agenda": "^0.2.0",
81
+ "@fayz-ai/plugin-agenda": "^0.4.0",
82
+ "@fayz-ai/plugin-auth": "^0.1.3",
76
83
  "@fayz-ai/plugin-automations": "^0.2.3",
84
+ "@fayz-ai/plugin-blog": "^0.1.0",
77
85
  "@fayz-ai/plugin-conversations": "^0.2.4",
78
86
  "@fayz-ai/plugin-courses": "^0.2.3",
79
87
  "@fayz-ai/plugin-crm": "^0.3.0",
@@ -84,8 +92,9 @@ var release_channels_default = {
84
92
  "@fayz-ai/plugin-marketing": "^0.2.1",
85
93
  "@fayz-ai/plugin-menu": "^0.3.0",
86
94
  "@fayz-ai/plugin-orders": "^0.3.0",
95
+ "@fayz-ai/plugin-payments": "^0.1.1",
87
96
  "@fayz-ai/plugin-reports": "^0.2.0",
88
- "@fayz-ai/plugin-reputation": "^0.2.3",
97
+ "@fayz-ai/plugin-reputation": "^0.2.4",
89
98
  "@fayz-ai/plugin-shop": "^0.2.5",
90
99
  "@fayz-ai/plugin-sites": "^0.2.3",
91
100
  "@fayz-ai/plugin-tables": "^0.3.0",
@@ -122,5 +131,5 @@ function resolveFayzPackageVersion(packageName, channel = "stable") {
122
131
  }
123
132
 
124
133
  export { fayzPackageVersionSets, resolveFayzPackageDependencies, resolveFayzPackageVersion, resolveFayzPackageVersions };
125
- //# sourceMappingURL=chunk-5J5U54ON.js.map
126
- //# sourceMappingURL=chunk-5J5U54ON.js.map
134
+ //# sourceMappingURL=chunk-HK5FEKDG.js.map
135
+ //# sourceMappingURL=chunk-HK5FEKDG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/release-channels.json","../src/release-channels.ts"],"names":[],"mappings":"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","file":"chunk-HK5FEKDG.js","sourcesContent":["{\n \"channels\": {\n \"stable\": {\n \"@fayz-ai/sdk\": \"^0.6.7\",\n \"@fayz-ai/core\": \"^0.7.2\",\n \"@fayz-ai/auth\": \"^0.7.1\",\n \"@fayz-ai/ui\": \"^0.7.0\",\n \"@fayz-ai/saas\": \"^0.7.0\",\n \"@fayz-ai/shop\": \"^0.7.0\",\n \"@fayz-ai/storefront\": \"^0.7.0\",\n \"@fayz-ai/portal\": \"^0.7.0\",\n \"@fayz-ai/courses\": \"^0.7.0\",\n \"@fayz-ai/db\": \"^0.1.2\",\n \"@fayz-ai/plugin-agenda\": \"^0.4.0\",\n \"@fayz-ai/plugin-auth\": \"^0.1.3\",\n \"@fayz-ai/plugin-automations\": \"^0.2.3\",\n \"@fayz-ai/plugin-blog\": \"^0.1.0\",\n \"@fayz-ai/plugin-conversations\": \"^0.2.4\",\n \"@fayz-ai/plugin-courses\": \"^0.2.3\",\n \"@fayz-ai/plugin-crm\": \"^0.3.0\",\n \"@fayz-ai/plugin-dashboard\": \"^0.1.6\",\n \"@fayz-ai/plugin-financial\": \"^0.2.0\",\n \"@fayz-ai/plugin-forms\": \"^0.2.0\",\n \"@fayz-ai/plugin-inventory\": \"^0.1.7\",\n \"@fayz-ai/plugin-marketing\": \"^0.2.1\",\n \"@fayz-ai/plugin-menu\": \"^0.3.0\",\n \"@fayz-ai/plugin-orders\": \"^0.3.0\",\n \"@fayz-ai/plugin-payments\": \"^0.1.1\",\n \"@fayz-ai/plugin-reports\": \"^0.2.0\",\n \"@fayz-ai/plugin-reputation\": \"^0.2.4\",\n \"@fayz-ai/plugin-shop\": \"^0.2.5\",\n \"@fayz-ai/plugin-sites\": \"^0.2.3\",\n \"@fayz-ai/plugin-tables\": \"^0.3.0\",\n \"@fayz-ai/plugin-tasks\": \"^0.1.7\"\n },\n \"latest\": {\n \"@fayz-ai/sdk\": \"^0.6.7\",\n \"@fayz-ai/core\": \"^0.7.2\",\n \"@fayz-ai/auth\": \"^0.7.1\",\n \"@fayz-ai/ui\": \"^0.7.0\",\n \"@fayz-ai/saas\": \"^0.7.0\",\n \"@fayz-ai/shop\": \"^0.7.0\",\n \"@fayz-ai/storefront\": \"^0.7.0\",\n \"@fayz-ai/portal\": \"^0.7.0\",\n \"@fayz-ai/courses\": \"^0.7.0\",\n \"@fayz-ai/db\": \"^0.1.2\",\n \"@fayz-ai/plugin-agenda\": \"^0.4.0\",\n \"@fayz-ai/plugin-auth\": \"^0.1.3\",\n \"@fayz-ai/plugin-automations\": \"^0.2.3\",\n \"@fayz-ai/plugin-blog\": \"^0.1.0\",\n \"@fayz-ai/plugin-conversations\": \"^0.2.4\",\n \"@fayz-ai/plugin-courses\": \"^0.2.3\",\n \"@fayz-ai/plugin-crm\": \"^0.3.0\",\n \"@fayz-ai/plugin-dashboard\": \"^0.1.6\",\n \"@fayz-ai/plugin-financial\": \"^0.2.0\",\n \"@fayz-ai/plugin-forms\": \"^0.2.0\",\n \"@fayz-ai/plugin-inventory\": \"^0.1.7\",\n \"@fayz-ai/plugin-marketing\": \"^0.2.1\",\n \"@fayz-ai/plugin-menu\": \"^0.3.0\",\n \"@fayz-ai/plugin-orders\": \"^0.3.0\",\n \"@fayz-ai/plugin-payments\": \"^0.1.1\",\n \"@fayz-ai/plugin-reports\": \"^0.2.0\",\n \"@fayz-ai/plugin-reputation\": \"^0.2.4\",\n \"@fayz-ai/plugin-shop\": \"^0.2.5\",\n \"@fayz-ai/plugin-sites\": \"^0.2.3\",\n \"@fayz-ai/plugin-tables\": \"^0.3.0\",\n \"@fayz-ai/plugin-tasks\": \"^0.1.7\"\n },\n \"preview\": {\n \"@fayz-ai/sdk\": \"^0.6.7\",\n \"@fayz-ai/core\": \"^0.7.2\",\n \"@fayz-ai/auth\": \"^0.7.1\",\n \"@fayz-ai/ui\": \"^0.7.0\",\n \"@fayz-ai/saas\": \"^0.7.0\",\n \"@fayz-ai/shop\": \"^0.7.0\",\n \"@fayz-ai/storefront\": \"^0.7.0\",\n \"@fayz-ai/portal\": \"^0.7.0\",\n \"@fayz-ai/courses\": \"^0.7.0\",\n \"@fayz-ai/db\": \"^0.1.2\",\n \"@fayz-ai/plugin-agenda\": \"^0.4.0\",\n \"@fayz-ai/plugin-auth\": \"^0.1.3\",\n \"@fayz-ai/plugin-automations\": \"^0.2.3\",\n \"@fayz-ai/plugin-blog\": \"^0.1.0\",\n \"@fayz-ai/plugin-conversations\": \"^0.2.4\",\n \"@fayz-ai/plugin-courses\": \"^0.2.3\",\n \"@fayz-ai/plugin-crm\": \"^0.3.0\",\n \"@fayz-ai/plugin-dashboard\": \"^0.1.6\",\n \"@fayz-ai/plugin-financial\": \"^0.2.0\",\n \"@fayz-ai/plugin-forms\": \"^0.2.0\",\n \"@fayz-ai/plugin-inventory\": \"^0.1.7\",\n \"@fayz-ai/plugin-marketing\": \"^0.2.1\",\n \"@fayz-ai/plugin-menu\": \"^0.3.0\",\n \"@fayz-ai/plugin-orders\": \"^0.3.0\",\n \"@fayz-ai/plugin-payments\": \"^0.1.1\",\n \"@fayz-ai/plugin-reports\": \"^0.2.0\",\n \"@fayz-ai/plugin-reputation\": \"^0.2.4\",\n \"@fayz-ai/plugin-shop\": \"^0.2.5\",\n \"@fayz-ai/plugin-sites\": \"^0.2.3\",\n \"@fayz-ai/plugin-tables\": \"^0.3.0\",\n \"@fayz-ai/plugin-tasks\": \"^0.1.7\"\n }\n }\n}\n","import releaseChannels from './release-channels.json'\n\nexport type FayzPackageChannel = 'stable' | 'latest' | 'preview'\n\nexport interface FayzPackageVersionSet {\n channel: FayzPackageChannel\n packages: Record<string, string>\n}\n\nconst releaseChannelPackages = releaseChannels.channels as Record<FayzPackageChannel, Record<string, string>>\n\nfunction buildVersionSet(channel: FayzPackageChannel): FayzPackageVersionSet {\n return {\n channel,\n packages: { ...releaseChannelPackages[channel] },\n }\n}\n\nexport const fayzPackageVersionSets: Record<FayzPackageChannel, FayzPackageVersionSet> = {\n stable: buildVersionSet('stable'),\n latest: buildVersionSet('latest'),\n preview: buildVersionSet('preview'),\n}\n\nexport function resolveFayzPackageVersions(channel: FayzPackageChannel = 'stable'): FayzPackageVersionSet {\n return fayzPackageVersionSets[channel]\n}\n\nexport function resolveFayzPackageDependencies(channel: FayzPackageChannel = 'stable'): Record<string, string> {\n return { ...resolveFayzPackageVersions(channel).packages }\n}\n\nexport function resolveFayzPackageVersion(packageName: string, channel: FayzPackageChannel = 'stable'): string {\n const version = resolveFayzPackageVersions(channel).packages[packageName]\n\n if (!version) {\n throw new Error(`No Fayz package version configured for ${packageName} in ${channel} channel`)\n }\n\n return version\n}\n"]}