@ecomiq/storefront 0.1.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 +177 -0
- package/dist/core.d.ts +3400 -0
- package/dist/core.js +1127 -0
- package/dist/core.js.map +1 -0
- package/dist/find-storefront-cms-page-Bo0-G1FK.d.ts +119 -0
- package/dist/nextjs/api.d.ts +49 -0
- package/dist/nextjs/api.js +170 -0
- package/dist/nextjs/api.js.map +1 -0
- package/dist/nextjs/globals.css +14 -0
- package/dist/nextjs.d.ts +3208 -0
- package/dist/nextjs.js +2405 -0
- package/dist/nextjs.js.map +1 -0
- package/dist/postcss.config.mjs +6 -0
- package/dist/react.d.ts +1044 -0
- package/dist/react.js +3199 -0
- package/dist/react.js.map +1 -0
- package/dist/store-CYBCpY6v.d.ts +4333 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/constants/api-paths.ts","../src/core/constants/storefront-ecomiq-oauth-cookie.ts","../src/core/constants/currency.ts","../src/core/utils/format-currency.ts","../src/core/lib/customer-order-labels.ts","../src/core/lib/storefront-geo-inei.ts","../src/core/services/api-client.ts","../src/core/models/product.ts","../src/core/services/product.service.ts","../src/core/models/collection.ts","../src/core/services/collection.service.ts","../src/core/models/page.ts","../src/core/services/page.service.ts","../src/core/models/store.ts","../src/core/services/store.service.ts","../src/core/models/cart.ts","../src/core/services/cart.service.ts","../src/react/providers/query-provider.tsx","../src/react/providers/storefront-auth-context.tsx","../src/react/hooks/use-user.ts","../src/react/hooks/use-config.ts","../src/react/hooks/use-products.ts","../src/react/hooks/use-collections.ts","../src/react/hooks/use-pages.ts","../src/react/hooks/use-cart-addresses.ts","../src/react/hooks/use-cart-get.ts","../src/react/hooks/use-cart-create.ts","../src/react/hooks/use-storefront-geo-inei.ts","../src/react/stores/use-store.ts","../src/react/stores/use-cart.ts","../src/react/auth/ecomiq-oauth-password-constants.ts","../src/react/auth/ecomiq-oauth-password-types.ts","../src/react/auth/ecomiq-oauth-password-plugin.ts","../src/react/auth/ecomiq-oauth-password-client.ts","../src/react/components/cms-sections/utils.ts","../src/react/components/cms-sections/shared.tsx","../src/react/components/cms-sections/content-sections.tsx","../src/react/components/cms-sections/ecommerce-sections.tsx","../src/react/components/cms-sections/layout-sections.tsx","../src/react/components/cms-sections-renderer.tsx","../src/react/shell/components/product-variant-selector/ProductVariantSelector.tsx","../src/react/shell/components/safe-theme-injector.tsx","../src/react/shell/lib/find-storefront-cms-page.ts"],"names":["z","jsx","useQuery","useQueryClient","useMutation","useRef","useEffect","create","cart","count","jsxs","useMemo","useState","formatCurrency","StorefrontPageDetailSchema"],"mappings":"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","file":"react.js","sourcesContent":["/** Prefijo base de la API storefront (ej. v1/storefront). */\nexport const STOREFRONT_API_PATH_PREFIX = \"v1\";\n","/** Cookie HttpOnly con el bearer OAuth storefront; solo path `/api/store` (no navega a todo el sitio). */\nexport const STOREFRONT_ECOMIQ_OAUTH_COOKIE_NAME = \"ecomiq_sf_oauth_at\";\n\n/** Debe coincidir con el prefijo de la ruta proxy en Next (`app/api/store/...`). */\nexport const STOREFRONT_ECOMIQ_OAUTH_COOKIE_PATH = \"/api/store\";\n","export const countryCurrency = {\n \"PEN\": \"es-PE\",\n \"USD\": \"en-US\",\n \"COP\": \"es-CO\",\n \"MXN\": \"es-MX\",\n}\n","import { countryCurrency } from \"../constants/currency\";\n\n/**\n * Formats a number as currency using the store's locale for the given currency code.\n * Uses countryCurrency to pick the right locale (e.g. PEN → es-PE, USD → en-US).\n */\nexport function formatCurrency(\n amount: number,\n currency: string = \"USD\"\n): string {\n const locale =\n countryCurrency[currency as keyof typeof countryCurrency] ?? \"en-US\";\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(amount);\n}\n","/** Etiquetas en español para estados de pedido (upstream suele enviar PascalCase). */\nconst ORDER_STATUS_LABELS: Record<string, string> = {\n New: \"Pedido realizado\",\n Confirmed: \"Confirmado\",\n Processing: \"En preparación\",\n InTransit: \"En camino\",\n Delivered: \"Entregado\",\n Cancelled: \"Cancelado\",\n Canceled: \"Cancelado\",\n Refunded: \"Reembolsado\",\n Pending: \"Pendiente\",\n Paid: \"Pagado\",\n Captured: \"Pago confirmado\",\n};\n\nexport function formatCustomerOrderStatus(status: string): string {\n const trimmed = status.trim();\n if (!trimmed) return \"Desconocido\";\n return ORDER_STATUS_LABELS[trimmed] ?? trimmed.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nexport function customerOrderStatusTone(\n status: string\n): \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\" {\n const s = status.toLowerCase();\n if (s.includes(\"cancel\") || s.includes(\"refund\")) return \"danger\";\n if (s.includes(\"deliver\")) return \"success\";\n if (s.includes(\"transit\") || s.includes(\"ship\")) return \"info\";\n if (s.includes(\"confirm\") || s.includes(\"paid\") || s.includes(\"capture\")) return \"success\";\n if (s.includes(\"pending\") || s.includes(\"new\") || s.includes(\"process\")) return \"warning\";\n return \"default\";\n}\n\nexport function formatOrderDate(iso: string, locale = \"es-PE\"): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n return new Intl.DateTimeFormat(locale, {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }).format(d);\n}\n\nexport function formatOrderDateTime(iso: string, locale = \"es-PE\"): string {\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n return new Intl.DateTimeFormat(locale, {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(d);\n}\n","/**\n * Catálogo geo INEI vía proxy `/api/store/geo/*` (requiere `X-Store-Id`).\n */\n\nexport type GeoItem = { code: string; name: string };\n\nexport function toGeoItems(data: unknown): GeoItem[] {\n if (!Array.isArray(data)) return [];\n return data\n .map((raw) => {\n if (!raw || typeof raw !== \"object\") return null;\n const item = raw as { code?: unknown; name?: unknown };\n return {\n code: String(item.code ?? \"\"),\n name: String(item.name ?? \"\"),\n };\n })\n .filter((x): x is GeoItem => !!x && !!x.code && !!x.name);\n}\n\nlet departmentsCache: GeoItem[] | null = null;\nlet departmentsRequest: Promise<GeoItem[]> | null = null;\n\nexport function loadStorefrontGeoDepartments(headers: Record<string, string>): Promise<GeoItem[]> {\n if (departmentsCache) return Promise.resolve(departmentsCache);\n if (departmentsRequest) return departmentsRequest;\n\n departmentsRequest = fetch(\n `/api/store/geo/departments?countryCode=PE&source=inei&limit=200`,\n { cache: \"no-store\", headers }\n )\n .then((r) => r.json())\n .then((data) => {\n const items = toGeoItems(data);\n departmentsCache = items;\n return items;\n })\n .catch(() => {\n departmentsCache = [];\n return [];\n })\n .finally(() => {\n departmentsRequest = null;\n });\n\n return departmentsRequest;\n}\n\nexport async function fetchStorefrontGeoProvinces(\n headers: Record<string, string>,\n countryCode: string,\n departmentCode: string\n): Promise<GeoItem[]> {\n const res = await fetch(\n `/api/store/geo/provinces?countryCode=${encodeURIComponent(\n countryCode\n )}&departmentCode=${encodeURIComponent(departmentCode)}&source=inei&limit=200`,\n { headers }\n );\n const data = await res.json();\n return toGeoItems(data);\n}\n\nexport async function fetchStorefrontGeoDistricts(\n headers: Record<string, string>,\n countryCode: string,\n provinceCode: string\n): Promise<GeoItem[]> {\n const res = await fetch(\n `/api/store/geo/districts?countryCode=${encodeURIComponent(\n countryCode\n )}&provinceCode=${encodeURIComponent(provinceCode)}&source=inei`,\n { headers }\n );\n const data = await res.json();\n return toGeoItems(data);\n}\n\n/**\n * Resuelve códigos INEI a partir de nombres guardados en una dirección (p. ej. al editar).\n */\nexport async function resolveIneiCodesFromLabels(\n storeId: string,\n labels: { department: string; province: string; district: string },\n countryCode = \"PE\"\n): Promise<{ departmentCode: string; provinceCode: string; districtCode: string } | null> {\n const id = storeId.trim();\n if (!id) return null;\n const headers = { \"X-Store-Id\": id };\n const departments = await loadStorefrontGeoDepartments(headers);\n const dept = departments.find((d) => d.name.trim() === labels.department.trim());\n if (!dept) return null;\n const provinces = await fetchStorefrontGeoProvinces(headers, countryCode, dept.code);\n const prov = provinces.find((p) => p.name.trim() === labels.province.trim());\n if (!prov) {\n return { departmentCode: dept.code, provinceCode: \"\", districtCode: \"\" };\n }\n const districts = await fetchStorefrontGeoDistricts(headers, countryCode, prov.code);\n const dist = districts.find((d) => d.name.trim() === labels.district.trim());\n return {\n departmentCode: dept.code,\n provinceCode: prov.code,\n districtCode: dist?.code ?? \"\",\n };\n}\n","import axios, {\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n AxiosError,\n InternalAxiosRequestConfig,\n} from \"axios\";\n\nexport class ApiClient {\n private client: AxiosInstance;\n private storeId?: string;\n private storeDomain?: string;\n\n constructor(baseURL: string = \"https://storefront.ecomiq.pe\") {\n this.client = axios.create({\n baseURL,\n timeout: 10000,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n // Interceptor para agregar headers automáticamente\n this.client.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n if (config.headers) {\n if (this.storeId) config.headers[\"X-Store-Id\"] = this.storeId;\n if (this.storeDomain) config.headers[\"X-Store-Domain\"] = this.storeDomain;\n }\n return config;\n },\n );\n\n // Interceptor para manejar errores\n this.client.interceptors.response.use(\n (response: AxiosResponse) => response,\n (error: AxiosError) => {\n console.error(\"API Error:\", error);\n return Promise.reject(error);\n },\n );\n }\n\n setStoreId(storeId: string) {\n this.storeId = storeId;\n }\n\n /** Subdominio para endpoints que usan X-Store-Domain (ej. GET /v1/storefront/settings) */\n setStoreDomain(domain: string) {\n this.storeDomain = domain;\n }\n\n get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n return this.client\n .get(url, config)\n .then((response: AxiosResponse) => response.data);\n }\n\n post<T>(\n url: string,\n data?: unknown,\n config?: AxiosRequestConfig,\n ): Promise<T> {\n return this.client\n .post(url, data, config)\n .then((response: AxiosResponse) => response.data);\n }\n\n put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n return this.client\n .put(url, data, config)\n .then((response: AxiosResponse) => response.data);\n }\n\n patch<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\n return this.client\n .patch(url, data, config)\n .then((response: AxiosResponse) => response.data);\n }\n\n delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {\n return this.client\n .delete(url, config)\n .then((response: AxiosResponse) => response.data);\n }\n}\n\n// Instancia singleton del cliente API\nexport const apiClient = new ApiClient();\n","import { z } from 'zod';\n\nexport const ProductVariantSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n storeId: z.string(),\n productId: z.coerce.string(),\n basePrice: z.number().positive().optional().nullable(),\n comparePrice: z.number().positive().optional().nullable(), //TODO: remove this field\n originalPrice: z.number().positive().optional().nullable(),\n costPrice: z.number().positive().optional().nullable(),\n isDefault: z.boolean().optional().nullable(),\n reserveStock: z.number().nonnegative().optional().nullable(),\n weight: z.number().nonnegative().optional().nullable().default(0),\n width: z.number().nonnegative().optional().nullable(),\n height: z.number().nonnegative().optional().nullable(),\n unitOfMeasure: z.string().optional().nullable(),\n order: z.number().nonnegative().optional().nullable().default(0),\n sku: z.string().optional().nullable(),\n stock: z.number().nonnegative().optional().nullable(),\n leadTime: z.string().optional().nullable(),\n barCode: z.string().optional().nullable(),\n shippingWeight: z.number().nonnegative().optional().nullable(),\n images: z.array(z.string()).optional().nullable(),\n attributes: z.array(z.string()).optional().nullable(),\n variantStatus: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n createdOn: z.string().optional().nullable(),\n updatedOn: z.string().optional().nullable(),\n deletedOn: z.string().optional().nullable(),\n});\n\nexport const ProductSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n images: z.array(z.object({\n url: z.string().url(),\n name: z.string().optional(),\n isPrimary: z.boolean().optional(),\n })),\n basePrice: z.number().positive().optional(),\n salePrice: z.number().positive().optional(),\n slug: z.string(),\n description: z.string().optional(),\n categories: z.array(z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n logo: z.string().optional(),\n icon: z.string().optional(),\n })).optional(),\n tags: z.array(z.string()).optional(),\n inStock: z.boolean().optional(),\n variants: z.array(ProductVariantSchema).optional(),\n});\n\nexport const ProductsResponseSchema = z.object({\n items: z.array(ProductSchema),\n meta: z.object({\n total: z.number().int().positive(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n hasNextPage: z.boolean(),\n }),\n});\n\nexport const ProductsFiltersSchema = z.object({\n category: z.string().optional(),\n search: z.string().optional(),\n minPrice: z.number().positive().optional(),\n maxPrice: z.number().positive().optional(),\n inStock: z.boolean().optional(),\n sortBy: z.enum(['name', 'price', 'createdAt']).optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().optional(),\n});\n\n// --- Storefront API (v1/storefront/products) ---\n\nexport const StorefrontProductSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n productType: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n variantCount: z.number().int().nonnegative().optional().default(0),\n isAvailable: z.boolean(),\n totalInventory: z.number().int().nonnegative(),\n bundleItemsCount: z.number().int().nonnegative().optional().default(0),\n brand: z.string().optional().nullable(),\n category: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n tags: z.array(z.string()).optional().nullable(),\n});\n\nexport const StorefrontFacetSchema = z.object({\n value: z.string(),\n count: z.number().int().nonnegative(),\n});\n\nexport const StorefrontProductsResponseSchema = z.object({\n pageIndex: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n totalCount: z.number().int().nonnegative(),\n totalPages: z.number().int().nonnegative(),\n products: z.array(StorefrontProductSchema),\n categories: z.array(StorefrontFacetSchema).optional().default([]),\n brands: z.array(StorefrontFacetSchema).optional().default([]),\n minPrice: z.number().nonnegative().optional().nullable(),\n maxPrice: z.number().nonnegative().optional().nullable(),\n});\n\nexport const StorefrontProductsParamsSchema = z.object({\n page: z.number().int().positive().optional().default(1),\n pageSize: z.number().int().positive().optional().default(20),\n sort: z\n .enum(['price_asc', 'price_desc', 'name_asc', 'name_desc', 'newest'])\n .optional()\n .default('price_asc'),\n sellerId: z.string().optional(),\n search: z.string().optional(),\n collection: z.string().optional(),\n category: z.string().optional(),\n brand: z.string().optional(),\n productType: z.string().optional(),\n inStock: z.boolean().optional(),\n minPrice: z.number().nonnegative().optional(),\n maxPrice: z.number().nonnegative().optional(),\n});\n\n// --- Storefront product by slug (v1/storefront/products/by-slug/:slug) ---\n\nexport const StorefrontVariantOptionSchema = z.object({\n key: z.string(),\n name: z.string(),\n value: z.string(),\n});\n\nexport const StorefrontProductImageSchema = z.object({\n url: z.string(),\n name: z.string().optional().nullable(),\n order: z.number().int().nonnegative().optional(),\n});\n\nexport const StorefrontVariantSchema = z.object({\n id: z.coerce.string().optional().default(''),\n sku: z.string(),\n status: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n quantity: z.number().int().nonnegative(),\n options: z.array(StorefrontVariantOptionSchema).optional().default([]),\n images: z.array(StorefrontProductImageSchema).optional().default([]),\n});\n\nexport const StorefrontPriceTierSchema = z.object({\n variantId: z.coerce.string(),\n minQuantity: z.number().int().positive(),\n maxQuantity: z.number().int().positive().optional().nullable(),\n unitPrice: z.number().nonnegative(),\n});\n\nexport const StorefrontBundleItemSchema = z.object({\n productId: z.coerce.string(),\n variantId: z.coerce.string(),\n productName: z.string(),\n variantName: z.string().optional().nullable(),\n sku: z.string().optional().nullable(),\n brand: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n quantity: z.number().int(),\n availableStock: z.number().int().optional().default(0),\n allowBackorders: z.boolean().optional().default(false),\n requiresShipping: z.boolean().optional().default(true),\n});\n\nexport const StorefrontProductDetailSchema = z.object({\n id: z.coerce.string(),\n name: z.string(),\n slug: z.string(),\n description: z.string().optional().nullable(),\n productType: z.string().optional().nullable(),\n status: z.string().optional().nullable(),\n imageUrl: z.string().optional().nullable(),\n price: z.number().nonnegative(),\n compareAtPrice: z.number().nonnegative().optional().nullable(),\n isAvailable: z.boolean(),\n totalInventory: z.number().int().nonnegative(),\n brand: z.string().optional().nullable(),\n category: z.string().optional().nullable(),\n categoryId: z.coerce.string().optional().nullable(),\n tags: z.array(z.string()).optional().nullable(),\n specifications: z.array(z.record(z.string(), z.unknown())).optional().default([]),\n variants: z.array(StorefrontVariantSchema).optional().default([]),\n images: z.array(StorefrontProductImageSchema).optional().default([]),\n bundleItems: z.array(StorefrontBundleItemSchema).optional().default([]),\n priceTiers: z.array(StorefrontPriceTierSchema).optional().default([]),\n createdAt: z.string().optional().nullable(),\n updatedAt: z.string().optional().nullable(),\n});\n\n// Tipos TypeScript inferidos de los esquemas Zod\nexport type Product = z.infer<typeof ProductSchema>;\nexport type ProductVariant = z.infer<typeof ProductVariantSchema>;\nexport type ProductsResponse = z.infer<typeof ProductsResponseSchema>;\nexport type ProductsFilters = z.infer<typeof ProductsFiltersSchema>;\n\nexport type StorefrontProduct = z.infer<typeof StorefrontProductSchema>;\nexport type StorefrontFacet = z.infer<typeof StorefrontFacetSchema>;\nexport type StorefrontProductsResponse = z.infer<typeof StorefrontProductsResponseSchema>;\nexport type StorefrontProductsParams = z.infer<typeof StorefrontProductsParamsSchema>;\n/** Params de entrada (sort/page/pageSize opcionales con defaults en el schema) */\nexport type StorefrontProductsParamsInput = z.input<typeof StorefrontProductsParamsSchema>;\n\nexport type StorefrontVariantOption = z.infer<typeof StorefrontVariantOptionSchema>;\nexport type StorefrontVariant = z.infer<typeof StorefrontVariantSchema>;\nexport type StorefrontProductImage = z.infer<typeof StorefrontProductImageSchema>;\nexport type StorefrontPriceTier = z.infer<typeof StorefrontPriceTierSchema>;\nexport type StorefrontBundleItem = z.infer<typeof StorefrontBundleItemSchema>;\nexport type StorefrontProductDetail = z.infer<typeof StorefrontProductDetailSchema>; \n","import { apiClient } from './api-client';\nimport { STOREFRONT_API_PATH_PREFIX } from '../constants/api-paths';\nimport type {\n Product,\n ProductsResponse,\n ProductsFilters,\n StorefrontProductsResponse,\n StorefrontProductsParamsInput,\n StorefrontProductDetail,\n} from '../models/product';\nimport {\n ProductSchema,\n ProductsResponseSchema,\n ProductsFiltersSchema,\n StorefrontProductsResponseSchema,\n StorefrontProductsParamsSchema,\n StorefrontProductDetailSchema,\n} from '../models/product';\n\nexport class ProductService {\n private static instance: ProductService;\n\n private constructor() {}\n\n static getInstance(): ProductService {\n if (!ProductService.instance) {\n ProductService.instance = new ProductService();\n }\n return ProductService.instance;\n }\n\n /**\n * Obtiene todos los productos del store\n */\n async getProducts(filters?: ProductsFilters): Promise<ProductsResponse> {\n // Validar filtros si se proporcionan\n if (filters) {\n ProductsFiltersSchema.parse(filters);\n }\n\n const params = new URLSearchParams();\n \n if (filters) {\n if (filters.category) params.append('category', filters.category);\n if (filters.search) params.append('search', filters.search);\n if (filters.minPrice) params.append('minPrice', filters.minPrice.toString());\n if (filters.maxPrice) params.append('maxPrice', filters.maxPrice.toString());\n if (filters.sortBy) params.append('sortBy', filters.sortBy);\n if (filters.sortOrder) params.append('sortOrder', filters.sortOrder);\n if (filters.page) params.append('page', filters.page.toString());\n if (filters.limit) params.append('limit', filters.limit.toString());\n }\n\n const queryString = params.toString();\n const url = `/${STOREFRONT_API_PATH_PREFIX}/products${queryString ? `?${queryString}` : ''}`;\n \n const response = await apiClient.get<unknown>(url);\n return ProductsResponseSchema.parse(response);\n }\n\n /**\n * Obtiene un producto específico por ID\n */\n async getProduct(id: string): Promise<Product> {\n const response = await apiClient.get<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/products/${id}`);\n return ProductSchema.parse(response);\n }\n\n /**\n * Obtiene un producto específico por slug\n */\n async getProductBySlug(slug: string): Promise<Product> {\n const response = await apiClient.get<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/products/${encodeURIComponent(slug)}`);\n return ProductSchema.parse(response);\n }\n\n /**\n * Busca productos por término de búsqueda\n */\n async searchProducts(query: string, filters?: Omit<ProductsFilters, 'search'>): Promise<ProductsResponse> {\n return this.getProducts({ ...filters, search: query });\n }\n\n /**\n * Obtiene productos por categoría\n */\n async getProductsByCategory(category: string, filters?: Omit<ProductsFilters, 'category'>): Promise<ProductsResponse> {\n return this.getProducts({ ...filters, category });\n }\n\n /**\n * Obtiene productos en oferta (con descuento)\n */\n async getProductsOnSale(filters?: Omit<ProductsFilters, 'minPrice' | 'maxPrice'>): Promise<ProductsResponse> {\n return this.getProducts({ ...filters, minPrice: 0 });\n }\n\n /**\n * Obtiene productos en stock\n */\n async getProductsInStock(filters?: Omit<ProductsFilters, 'inStock'>): Promise<ProductsResponse> {\n return this.getProducts({ ...filters, inStock: true });\n }\n\n /**\n * Lista de productos del storefront (API v1/storefront/products).\n * Soporta paginación, orden y filtros por categoría, marca y precio.\n */\n async getStorefrontProducts(\n params?: StorefrontProductsParamsInput\n ): Promise<StorefrontProductsResponse> {\n const parsed = StorefrontProductsParamsSchema.parse(params ?? {});\n\n const searchParams = new URLSearchParams();\n searchParams.set('page', String(parsed.page));\n searchParams.set('pageSize', String(parsed.pageSize));\n if (parsed.sort) searchParams.set('sort', parsed.sort);\n if (parsed.sellerId) searchParams.set('sellerId', parsed.sellerId);\n if (parsed.collection) searchParams.set('collection', parsed.collection);\n if (parsed.category) searchParams.set('category', parsed.category);\n if (parsed.brand) searchParams.set('brand', parsed.brand);\n if (parsed.productType) searchParams.set('productType', parsed.productType);\n if (parsed.inStock != null) searchParams.set('inStock', String(parsed.inStock));\n if (parsed.minPrice != null) searchParams.set('minPrice', String(parsed.minPrice));\n if (parsed.maxPrice != null) searchParams.set('maxPrice', String(parsed.maxPrice));\n if (parsed.search) searchParams.set('search', parsed.search);\n\n const url = `/${STOREFRONT_API_PATH_PREFIX}/products?${searchParams.toString()}`;\n const response = await apiClient.get<unknown>(url);\n return StorefrontProductsResponseSchema.parse(response);\n }\n\n /**\n * Obtiene un producto del storefront por slug (API v1/storefront/products/by-slug/:slug).\n */\n async getStorefrontProductBySlug(slug: string): Promise<StorefrontProductDetail> {\n const response = await apiClient.get<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/products/by-slug/${encodeURIComponent(slug)}`);\n return StorefrontProductDetailSchema.parse(response);\n }\n}\n\n// Exportar instancia singleton\nexport const productService = ProductService.getInstance(); \n","import { z } from \"zod\";\n\nexport const StorefrontCollectionSchema = z.object({\n id: z.coerce.string(),\n slug: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n imageUrl: z.string().nullable().optional(),\n type: z.string(),\n productCount: z.number().int().nonnegative(),\n});\n\nexport const StorefrontCollectionsResponseSchema = z.array(StorefrontCollectionSchema);\nexport const StorefrontCollectionDetailSchema = StorefrontCollectionSchema;\n\nexport type StorefrontCollection = z.infer<typeof StorefrontCollectionSchema>;\nexport type StorefrontCollectionsResponse = z.infer<\n typeof StorefrontCollectionsResponseSchema\n>;\nexport type StorefrontCollectionDetail = z.infer<typeof StorefrontCollectionDetailSchema>;\n","import { apiClient } from \"./api-client\";\nimport { STOREFRONT_API_PATH_PREFIX } from \"../constants/api-paths\";\nimport type { StorefrontCollection, StorefrontCollectionDetail } from \"../models/collection\";\nimport {\n StorefrontCollectionsResponseSchema,\n StorefrontCollectionDetailSchema,\n} from \"../models/collection\";\n\nexport class CollectionService {\n private static instance: CollectionService;\n\n private constructor() {}\n\n static getInstance(): CollectionService {\n if (!CollectionService.instance) {\n CollectionService.instance = new CollectionService();\n }\n return CollectionService.instance;\n }\n\n /**\n * Lista de colecciones del storefront (GET /v1/collections).\n */\n async getStorefrontCollections(): Promise<StorefrontCollection[]> {\n const response = await apiClient.get<unknown>(\n `/${STOREFRONT_API_PATH_PREFIX}/collections`\n );\n return StorefrontCollectionsResponseSchema.parse(response);\n }\n\n /**\n * Obtiene una colección del storefront por slug (GET /v1/collections/by-slug/:slug).\n */\n async getStorefrontCollectionBySlug(\n slug: string\n ): Promise<StorefrontCollectionDetail> {\n const response = await apiClient.get<unknown>(\n `/${STOREFRONT_API_PATH_PREFIX}/collections/by-slug/${encodeURIComponent(slug)}`\n );\n return StorefrontCollectionDetailSchema.parse(response);\n }\n}\n\nexport const collectionService = CollectionService.getInstance();\n\n","import { z } from \"zod\";\n\n/** Page list item from GET /v1/pages */\nexport const StorefrontPageListItemSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string(),\n});\n\nexport type StorefrontPageListItem = z.infer<typeof StorefrontPageListItemSchema>;\n\n/** SEO settings within page settings */\nexport const StorefrontPageSeoSchema = z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n}).optional();\n\n/** Page settings (layout-specific; flexible) */\nexport const StorefrontPageSettingsSchema = z.object({\n seo: StorefrontPageSeoSchema,\n html: z.string().optional(),\n title: z.string().optional(),\n}).catchall(z.unknown());\n\n/** Section block (item, widget, etc.) */\nexport const StorefrontPageBlockSchema = z.object({\n id: z.string(),\n type: z.string(),\n order: z.number(),\n settings: z.record(z.unknown()).optional(),\n});\n\n/** Page section (page-hero, faq, widget-row, etc.) */\nexport const StorefrontPageSectionSchema = z.object({\n id: z.string(),\n type: z.string(),\n order: z.number(),\n settings: z.record(z.unknown()).optional(),\n blocks: z.array(StorefrontPageBlockSchema).optional().default([]),\n});\n\n/** Page detail from GET /v1/pages/{slug}; sections is optional */\nexport const StorefrontPageDetailSchema = z.object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string(),\n settings: StorefrontPageSettingsSchema.optional(),\n sections: z.array(StorefrontPageSectionSchema).optional(),\n});\n\nexport type StorefrontPageDetail = z.infer<typeof StorefrontPageDetailSchema>;\nexport type StorefrontPageSection = z.infer<typeof StorefrontPageSectionSchema>;\nexport type StorefrontPageBlock = z.infer<typeof StorefrontPageBlockSchema>;\n","import { z } from \"zod\";\nimport { apiClient } from \"./api-client\";\nimport { STOREFRONT_API_PATH_PREFIX } from \"../constants/api-paths\";\nimport type { StorefrontPageListItem, StorefrontPageDetail } from \"../models/page\";\nimport {\n StorefrontPageListItemSchema,\n StorefrontPageDetailSchema,\n} from \"../models/page\";\n\nexport class PageService {\n private static instance: PageService;\n\n private constructor() {}\n\n static getInstance(): PageService {\n if (!PageService.instance) {\n PageService.instance = new PageService();\n }\n return PageService.instance;\n }\n\n /**\n * Lista de páginas del storefront (GET /v1/pages).\n */\n async getPages(): Promise<StorefrontPageListItem[]> {\n const response = await apiClient.get<unknown>(\n `/${STOREFRONT_API_PATH_PREFIX}/pages`\n );\n return z.array(StorefrontPageListItemSchema).parse(response);\n }\n\n /**\n * Obtiene una página por slug (GET /v1/pages/{slug}).\n * sections puede no venir en la respuesta.\n */\n async getPageBySlug(slug: string): Promise<StorefrontPageDetail> {\n const response = await apiClient.get<unknown>(\n `/${STOREFRONT_API_PATH_PREFIX}/pages/${encodeURIComponent(slug)}`\n );\n return StorefrontPageDetailSchema.parse(response);\n }\n}\n\n// Exportar instancia singleton\nexport const pageService = PageService.getInstance();\n","import { z } from \"zod\";\n\nexport const StorefrontCheckoutSettingsSchema = z.object({\n allowGuestCheckout: z.boolean().optional(),\n identityScope: z.enum([\"store\", \"tenant\", \"global\"]).optional(),\n signInMethods: z.array(z.string()).optional(),\n});\n\nexport type StorefrontCheckoutSettings = z.infer<typeof StorefrontCheckoutSettingsSchema>;\n\nconst looseRecord = z.record(z.string(), z.unknown());\n\nexport const StorefrontThemeConfigSchema = z\n .object({\n name: z.string().nullable().optional(),\n mode: z.string().nullable().optional(),\n colors: looseRecord.optional(),\n fonts: looseRecord.optional(),\n assets: looseRecord.optional(),\n })\n .passthrough();\n\nexport const StorefrontFeaturesEnabledSchema = z\n .object({\n flags: looseRecord.optional(),\n })\n .passthrough();\n\nexport const StorefrontCmsBrandingSchema = z.object({\n logoUrl: z.string().nullable().optional(),\n logoDarkUrl: z.string().nullable().optional(),\n faviconUrl: z.string().nullable().optional(),\n socialImageUrl: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsSeoSchema = z.object({\n siteName: z.string().nullable().optional(),\n metaTitle: z.string().nullable().optional(),\n metaDescription: z.string().nullable().optional(),\n titleTemplate: z.string().nullable().optional(),\n robotsIndex: z.boolean().optional(),\n});\n\nexport const StorefrontCmsSocialLinksSchema = z.object({\n instagram: z.string().nullable().optional(),\n facebook: z.string().nullable().optional(),\n tiktok: z.string().nullable().optional(),\n youtube: z.string().nullable().optional(),\n x: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsContactSchema = z.object({\n supportEmail: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n whatsapp: z.string().nullable().optional(),\n address: z.string().nullable().optional(),\n socialLinks: StorefrontCmsSocialLinksSchema.optional(),\n});\n\nexport const StorefrontCmsTrackingSchema = z.object({\n googleAnalyticsMeasurementId: z.string().nullable().optional(),\n metaPixelId: z.string().nullable().optional(),\n googleTagManagerContainerId: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsCustomScriptsSchema = z.object({\n enabled: z.boolean().optional(),\n head: z.string().nullable().optional(),\n bodyEnd: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsSettingsSchema = z.object({\n themeKey: z.string().optional(),\n branding: StorefrontCmsBrandingSchema.optional(),\n seo: StorefrontCmsSeoSchema.optional(),\n contact: StorefrontCmsContactSchema.optional(),\n tracking: StorefrontCmsTrackingSchema.optional(),\n customScripts: StorefrontCmsCustomScriptsSchema.optional(),\n updatedOn: z.string().nullable().optional(),\n});\n\nexport const StorefrontCmsPageSchema = z\n .object({\n id: z.string(),\n name: z.string(),\n slug: z.string(),\n layout: z.string().optional(),\n version: z.number().optional(),\n settings: z.record(z.string(), z.unknown()).optional().nullable(),\n sections: z.array(z.unknown()).optional(),\n status: z.string().optional(),\n hasPublishedVersion: z.boolean().optional(),\n publishedOn: z.string().nullable().optional(),\n publishedBy: z.string().nullable().optional(),\n createdOn: z.string().nullable().optional(),\n updatedOn: z.string().nullable().optional(),\n createdBy: z.string().nullable().optional(),\n updatedBy: z.string().nullable().optional(),\n lastModifiedBy: z.string().nullable().optional(),\n })\n .passthrough();\n\n/** Respuesta antigua GET /settings (objeto plano sin `store` / `cms`). */\nexport const StorefrontSettingsLegacyFlatSchema = z\n .object({\n id: z.coerce.string(),\n tenantId: z.string().nullable().optional(),\n name: z.string(),\n slug: z.coerce.string().optional(),\n description: z.string().nullable().optional(),\n visibility: z.string().nullable().optional(),\n logo: z.string().nullable().optional(),\n favicon: z.string().nullable().optional(),\n icon: z.string().nullable().optional(),\n currency: z.string().nullable().optional(),\n language: z.string().nullable().optional(),\n themeConfig: z.unknown().optional().nullable(),\n featuresEnabled: z.unknown().optional().nullable(),\n checkoutSettings: StorefrontCheckoutSettingsSchema.optional().nullable(),\n })\n .passthrough();\n\nexport type StorefrontSettingsLegacyFlat = z.infer<typeof StorefrontSettingsLegacyFlatSchema>;\n\nfunction unwrapSettingsResponseBody(v: unknown): unknown {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return v;\n const o = v as Record<string, unknown>;\n if (\n \"data\" in o &&\n o.data != null &&\n typeof o.data === \"object\" &&\n !Array.isArray(o.data)\n ) {\n return o.data;\n }\n return v;\n}\n\nfunction isLegacyFlatSettingsPayload(v: unknown): v is Record<string, unknown> {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return false;\n const o = v as Record<string, unknown>;\n if (\"store\" in o || \"schemaVersion\" in o || \"cms\" in o) return false;\n return (\n (typeof o.id === \"string\" || typeof o.id === \"number\") &&\n typeof o.name === \"string\"\n );\n}\n\n/** Convierte el JSON plano legacy al sobre actual (misma forma que el API nuevo). */\nexport function normalizeStorefrontSettingsPayload(v: unknown): unknown {\n const body = unwrapSettingsResponseBody(v);\n if (!isLegacyFlatSettingsPayload(body)) return body;\n const raw = body;\n const parsed = StorefrontSettingsLegacyFlatSchema.safeParse(raw);\n if (!parsed.success) return body;\n\n const l = parsed.data;\n const currency = l.currency?.trim() ? l.currency : \"PEN\";\n const language = l.language?.trim() ? l.language : \"es\";\n const slug = l.slug?.trim() ? l.slug : l.id;\n\n return {\n schemaVersion: 0,\n generatedAt: new Date(0).toISOString(),\n store: {\n id: l.id,\n tenantId: l.tenantId ?? undefined,\n name: l.name,\n slug,\n description: l.description ?? null,\n logo: l.logo ?? null,\n icon: l.icon ?? null,\n visibility: l.visibility ?? undefined,\n currency,\n language,\n themeConfig: l.themeConfig ?? undefined,\n featuresEnabled: l.featuresEnabled ?? undefined,\n checkoutSettings: l.checkoutSettings ?? undefined,\n },\n cms: {\n settings: {\n branding: {\n faviconUrl: l.favicon ?? null,\n logoUrl: l.logo ?? null,\n logoDarkUrl: null,\n socialImageUrl: null,\n },\n },\n pages: [],\n },\n };\n}\n\nexport const StorefrontStoreSchema = z\n .object({\n id: z.string(),\n tenantId: z.string().optional(),\n sellerId: z.string().optional(),\n plan: z.string().optional(),\n storageLimitBytes: z.number().optional(),\n monthlyTransferLimitBytes: z.number().optional(),\n maxUploadSizeBytes: z.number().optional(),\n maxStores: z.number().optional(),\n maxMembers: z.number().optional(),\n maxProducts: z.number().optional(),\n maxCategories: z.number().optional(),\n maxBrands: z.number().optional(),\n maxAttributes: z.number().optional(),\n maxCollections: z.number().optional(),\n enableApi: z.boolean().optional(),\n isActive: z.boolean().optional(),\n name: z.string(),\n description: z.string().nullable().optional(),\n avatarUrl: z.string().nullable().optional(),\n logo: z.string().nullable().optional(),\n icon: z.string().nullable().optional(),\n slug: z.string(),\n domain: z.string().nullable().optional(),\n domains: z.array(z.string()).optional(),\n timeZone: z.string().nullable().optional(),\n currency: z.string(),\n language: z.string(),\n visibility: z.string().optional(),\n privateAccessHash: z.string().nullable().optional(),\n privateAccessVersion: z.number().optional(),\n themeConfig: StorefrontThemeConfigSchema.optional(),\n featuresEnabled: StorefrontFeaturesEnabledSchema.optional(),\n checkoutSettings: StorefrontCheckoutSettingsSchema.optional().nullable(),\n })\n .passthrough();\n\nconst StorefrontSettingsEnvelopeSchema = z\n .object({\n schemaVersion: z.number(),\n generatedAt: z.string(),\n store: StorefrontStoreSchema,\n cms: z.object({\n settings: StorefrontCmsSettingsSchema,\n pages: z.array(StorefrontCmsPageSchema),\n }),\n })\n .passthrough();\n\n/** Acepta sobre nuevo o JSON plano legacy; siempre valida contra el sobre normalizado. */\nexport const StorefrontSettingsSchema = z.preprocess(\n normalizeStorefrontSettingsPayload,\n StorefrontSettingsEnvelopeSchema\n);\n\nexport type StorefrontSettings = z.infer<typeof StorefrontSettingsSchema>;\nexport type StorefrontStore = z.infer<typeof StorefrontStoreSchema>;\nexport type StorefrontCmsSettings = z.infer<typeof StorefrontCmsSettingsSchema>;\nexport type StorefrontCmsPage = z.infer<typeof StorefrontCmsPageSchema>;\n\n/** Nodo `store` del payload público (cookies, auth, moneda). */\nexport function storefrontStoreRecord(\n settings: StorefrontSettings | null | undefined\n): StorefrontStore | null {\n return settings?.store ?? null;\n}\n\n/** Favicon: CMS branding, luego logo/icono de tienda. */\nexport function storefrontFaviconUrl(\n settings: StorefrontSettings | null | undefined\n): string | null {\n const b = settings?.cms?.settings?.branding;\n return (\n b?.faviconUrl ??\n settings?.store?.logo ??\n settings?.store?.icon ??\n null\n );\n}\n\n/** Imagen social / OG: branding, luego logo de tienda. */\nexport function storefrontOgImageUrl(\n settings: StorefrontSettings | null | undefined\n): string | null {\n const b = settings?.cms?.settings?.branding;\n return b?.socialImageUrl ?? settings?.store?.logo ?? null;\n}\n","import { apiClient } from './api-client';\nimport { STOREFRONT_API_PATH_PREFIX } from '../constants/api-paths';\nimport type { StorefrontSettings } from '../models/store';\nimport { StorefrontSettingsSchema } from '../models/store';\n\nexport class StoreService {\n private static instance: StoreService;\n\n private constructor() {}\n\n static getInstance(): StoreService {\n if (!StoreService.instance) {\n StoreService.instance = new StoreService();\n }\n return StoreService.instance;\n }\n\n /**\n * Obtiene la configuración de la tienda por subdominio (GET /v1/settings).\n * Usa el header X-Store-Domain. Si se pasa domain, se configura antes de la petición.\n */\n async getStorefrontSettings(domain?: string): Promise<StorefrontSettings> {\n if (domain) {\n apiClient.setStoreDomain(domain);\n }\n const response = await apiClient.get<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/settings`);\n return StorefrontSettingsSchema.parse(response);\n }\n}\n\nexport const storeService = StoreService.getInstance();\n","import { z } from \"zod\";\n\nexport const CartBuyerRequestSchema = z.object({\n email: z.string().email(),\n firstName: z.string().min(1),\n lastName: z.string().min(1),\n phone: z.string().min(1),\n});\n\nexport type CartBuyerRequest = z.input<typeof CartBuyerRequestSchema>;\n\nexport const CartCreateRequestSchema = z.object({\n currencyCode: z.string(),\n salesChannelId: z.string(),\n email: z.string().email(),\n});\n\nexport type CartCreateRequest = z.input<typeof CartCreateRequestSchema>;\n\nexport const CartAddressSchema = z.object({\n name: z.string().min(1),\n address1: z.string().min(1),\n city: z.string().min(1),\n countryCode: z.string().min(2),\n company: z.string().nullable().optional(),\n address2: z.string().nullable().optional(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n geo: z\n .object({\n departmentCode: z.string().nullable().optional(),\n provinceCode: z.string().nullable().optional(),\n districtCode: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const CartAddressesRequestSchema = z.object({\n shippingAddress: CartAddressSchema,\n billingAddress: CartAddressSchema,\n});\n\nexport type CartAddressesRequest = z.input<typeof CartAddressesRequestSchema>;\n\n// --- Cart items ---\n\nexport const CartItemModifierRequestSchema = z.object({\n modifierGroupId: z.coerce.string().min(1),\n optionIds: z.array(z.coerce.string().min(1)).optional().default([]),\n});\n\nexport type CartItemModifierRequest = {\n modifierGroupId: string;\n optionIds?: string[];\n};\n\nexport const CartItemRequestSchema = z.object({\n variantId: z.coerce.string().min(1),\n quantity: z.number().int().positive(),\n modifiers: z.array(CartItemModifierRequestSchema).optional(),\n});\n\nexport type CartItemRequest = {\n variantId: string;\n quantity: number;\n modifiers?: CartItemModifierRequest[];\n};\n\nexport const CartCouponRequestSchema = z.object({\n code: z.string().min(1),\n});\n\nexport type CartCouponRequest = z.input<typeof CartCouponRequestSchema>;\n\nexport const CartTotalsSchema = z.object({\n subtotal: z.number(),\n discount: z.number(),\n tax: z.number(),\n warranty: z.number().optional().default(0),\n total: z.number(),\n});\n\nexport const CartResponseAddressSchema = z.object({\n name: z.string().nullable().optional(),\n address1: z.string(),\n city: z.string(),\n countryCode: z.string(),\n company: z.string().nullable().optional(),\n address2: z.string().nullable().optional(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n geo: z\n .object({\n departmentCode: z.string().nullable().optional(),\n provinceCode: z.string().nullable().optional(),\n districtCode: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n});\n\nexport const CartResponseBundleItemSchema = z.object({\n productId: z.coerce.string(),\n variantId: z.coerce.string(),\n productName: z.string(),\n variantName: z.string().nullable().optional(),\n sku: z.string().nullable().optional(),\n brand: z.string().nullable().optional(),\n imageUrl: z.string().nullable().optional(),\n quantity: z.number().int(),\n});\n\nexport const CartResponseItemSchema = z.object({\n id: z.string(),\n title: z.string(),\n variantLabel: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n quantity: z.number().int(),\n variantId: z.coerce.string(),\n variantSku: z.string().nullable().optional(),\n unitPrice: z.number(),\n bundleItems: z.array(CartResponseBundleItemSchema).optional().default([]),\n});\n\nexport const CartResponseShippingMethodSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n total: z.number(),\n estimatedDays: z.number().int().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n});\n\nexport const CartResponseSchema = z.object({\n id: z.string(),\n regionId: z.string().nullable().optional(),\n salesChannelId: z.string().nullable().optional(),\n email: z.string().email().nullable().optional(),\n phone: z.string().nullable().optional(),\n firstName: z.string().nullable().optional(),\n lastName: z.string().nullable().optional(),\n currencyCode: z.string(),\n completedAt: z.string().nullable().optional(),\n shippingAddress: z.unknown().nullable().optional(),\n billingAddress: z.unknown().nullable().optional(),\n metadata: z.record(z.string(), z.unknown()).optional().default({}),\n promotionCodes: z.array(z.string()).optional().default([]),\n items: z.array(CartResponseItemSchema).optional().default([]),\n shippingMethods: z.array(z.unknown()).optional().default([]),\n totals: z.object({\n discountTotal: z.number(),\n shippingTotal: z.number(),\n subtotal: z.number(),\n taxTotal: z.number(),\n total: z.number(),\n warrantyTotal: z.number(),\n }),\n});\n\nexport type CartResponse = z.infer<typeof CartResponseSchema>;\n\nexport const CartCheckoutRequestSchema = z.object({\n paymentMethodCode: z.string().min(1),\n externalRef: z.string().min(1),\n receiptUrl: z.string().min(1).optional(),\n});\n\nexport type CartCheckoutRequest = z.input<typeof CartCheckoutRequestSchema>;\n\n/** Acción concreta del proveedor (redirect, embedded, QR, etc.) */\nexport const CartCheckoutPaymentActionSchema = z\n .object({\n publicConfiguration: z\n .object({\n publishableKey: z.string().nullable().optional(),\n checkoutMode: z.string().nullable().optional(),\n phoneNumber: z.string().nullable().optional(),\n accountHolder: z.string().nullable().optional(),\n qrImageUrl: z.string().nullable().optional(),\n })\n .passthrough()\n .nullable()\n .optional(),\n url: z.string().nullable().optional(),\n html: z.string().nullable().optional(),\n clientSecret: z.string().nullable().optional(),\n qrCode: z.string().nullable().optional(),\n expiresAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutPaymentAction = z.infer<\n typeof CartCheckoutPaymentActionSchema\n>;\n\n/** Objeto `payment` devuelto por POST checkout / flujo embedded */\nexport const CartCheckoutPaymentSchema = z\n .object({\n transactionId: z.string(),\n paymentMethodCode: z.string(),\n providerId: z.string().nullable().optional(),\n status: z.string(),\n amount: z.number(),\n reference: z.string(),\n actionType: z.string(),\n receiptUrl: z.string().nullable().optional(),\n action: CartCheckoutPaymentActionSchema.nullable().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutPayment = z.infer<typeof CartCheckoutPaymentSchema>;\n\nexport const CartCheckoutResponseSchema = z\n .object({\n publicKey: z.string().optional(),\n publishableKey: z.string().optional(),\n stripePublicKey: z.string().optional(),\n clientSecret: z.string().optional(),\n intentClientSecret: z.string().optional(),\n orderId: z.coerce.string().optional(),\n orderGroup: z.string().optional(),\n orderIds: z.array(z.coerce.string()).optional(),\n /** Payload de pago (embedded, redirect, etc.) */\n payment: CartCheckoutPaymentSchema.optional(),\n cart: z.unknown().optional(),\n })\n .passthrough();\n\nexport type CartCheckoutResponse = z.infer<typeof CartCheckoutResponseSchema>;\n\nexport const CartPaymentReceiptResponseSchema = z.object({\n id: z.string(),\n url: z.string(),\n});\n\nexport type CartPaymentReceiptResponse = z.infer<\n typeof CartPaymentReceiptResponseSchema\n>;\n\nexport const CartPaymentMethodSchema = z.object({\n code: z.string(),\n name: z.string(),\n description: z.string().nullable().optional(),\n kind: z.string(),\n isActive: z.boolean(),\n isDefault: z.boolean(),\n isManual: z.boolean(),\n sortOrder: z.number(),\n phoneNumber: z.string().nullable().optional(),\n accountHolder: z.string().nullable().optional(),\n qrImageUrl: z.string().nullable().optional(),\n});\n\nexport type CartPaymentMethod = z.infer<typeof CartPaymentMethodSchema>;\n\nexport const CartPaymentMethodsResponseSchema = z.object({\n methods: z.array(CartPaymentMethodSchema),\n});\n\nexport type CartPaymentMethodsResponse = z.infer<\n typeof CartPaymentMethodsResponseSchema\n>;\n\n/**\n * GET /carts/{cartId}/checkout — devuelve carrito + métodos de pago en una sola respuesta.\n */\nexport const CartCheckoutReadResponseSchema = z.object({\n cart: CartResponseSchema,\n paymentMethods: CartPaymentMethodsResponseSchema,\n});\n\nexport type CartCheckoutReadResponse = z.infer<\n typeof CartCheckoutReadResponseSchema\n>;\n\n/** GET /carts/{cartId}/shipping-options?postalCode= */\nexport const ShippingRateSchema = z\n .object({\n shippingMethodId: z.string(),\n name: z.string(),\n displayName: z.string().optional(),\n type: z.string().optional(),\n price: z.number(),\n currency: z.string().optional(),\n sortOrder: z.number().optional(),\n rateId: z.string(),\n description: z.string().nullable().optional(),\n deliveryLocationId: z.string().nullable().optional(),\n deliveryLocationName: z.string().nullable().optional(),\n estimatedDeliveryDays: z.number().nullable().optional(),\n serviceCode: z.string().nullable().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough();\n\nexport type ShippingRate = z.infer<typeof ShippingRateSchema>;\n\nexport const ShippingOptionGroupSchema = z\n .object({\n sellerId: z.string(),\n shippingProfileId: z.string().nullable().optional(),\n orderAmount: z.number().optional(),\n totalWeight: z.number().optional(),\n itemIds: z.array(z.string()).optional(),\n rates: z.array(ShippingRateSchema),\n })\n .passthrough();\n\nexport type ShippingOptionGroup = z.infer<typeof ShippingOptionGroupSchema>;\n\nexport const ShippingOptionsResponseSchema = z.object({\n groups: z.array(ShippingOptionGroupSchema),\n});\n\nexport type ShippingOptionsResponse = z.infer<\n typeof ShippingOptionsResponseSchema\n>;\n\n/** PUT /carts/{cartId}/shipping-method */\nexport const CartShippingMethodPutRequestSchema = z.object({\n rateId: z.string().min(1),\n shippingMethodId: z.string().min(1),\n serviceCode: z.string().nullable().optional(),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n locationId: z.string().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n});\n\nexport type CartShippingMethodPutRequest = z.input<\n typeof CartShippingMethodPutRequestSchema\n>;\n","import { apiClient } from './api-client';\nimport { STOREFRONT_API_PATH_PREFIX } from '../constants/api-paths';\nimport {\n CartBuyerRequestSchema,\n CartResponseSchema,\n CartAddressesRequestSchema,\n CartCreateRequestSchema,\n CartCheckoutRequestSchema,\n CartCheckoutResponseSchema,\n type CartBuyerRequest,\n type CartResponse,\n type CartAddressesRequest,\n type CartCreateRequest,\n type CartCheckoutRequest,\n type CartCheckoutResponse,\n} from '../models/cart';\n\nexport class CartService {\n private static instance: CartService;\n\n private constructor() {}\n\n static getInstance(): CartService {\n if (!CartService.instance) {\n CartService.instance = new CartService();\n }\n return CartService.instance;\n }\n\n /**\n * Obtiene el carrito actual (GET /v1/carts).\n */\n async getCart(): Promise<CartResponse> {\n const response = await apiClient.get<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/carts`);\n return CartResponseSchema.parse(response);\n }\n\n /**\n * Crea un carrito nuevo (POST /v1/carts).\n */\n async createCart(data: CartCreateRequest): Promise<CartResponse> {\n const payload = CartCreateRequestSchema.parse(data);\n const response = await apiClient.post<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/carts`, payload);\n return CartResponseSchema.parse(response);\n }\n\n /**\n * Actualiza los datos del comprador del carrito actual (PATCH /v1/carts/buyer).\n * El carrito se resuelve en backend vía contexto (token/guest), por eso no requiere cartId.\n */\n async updateBuyer(data: CartBuyerRequest): Promise<CartResponse> {\n const payload = CartBuyerRequestSchema.parse(data);\n const response = await apiClient.patch<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/carts/buyer`, payload);\n return CartResponseSchema.parse(response);\n }\n\n /**\n * Actualiza direcciones de envío y facturación del carrito (PATCH /v1/carts/addresses).\n */\n async updateAddresses(data: CartAddressesRequest): Promise<CartResponse> {\n const payload = CartAddressesRequestSchema.parse(data);\n const response = await apiClient.patch<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/carts/addresses`, payload);\n return CartResponseSchema.parse(response);\n }\n\n /**\n * Inicializa/obtiene detalles del método de pago para el checkout (POST /v1/carts/checkout).\n * Usado para providers como Stripe (public key, client secret, etc).\n */\n async checkout(data: CartCheckoutRequest): Promise<CartCheckoutResponse> {\n const payload = CartCheckoutRequestSchema.parse(data);\n const response = await apiClient.post<unknown>(`/${STOREFRONT_API_PATH_PREFIX}/carts/checkout`, payload);\n return CartCheckoutResponseSchema.parse(response);\n }\n}\n\nexport const cartService = CartService.getInstance();\n\n","\"use client\";\n\nimport {\n QueryClient,\n QueryClientProvider,\n hydrate,\n type DehydratedState,\n} from \"@tanstack/react-query\";\nimport { useRef, useEffect, type ReactNode } from \"react\";\n\nconst defaultOptions = {\n queries: {\n staleTime: 60 * 1000,\n },\n};\n\nexport interface QueryProviderProps {\n children: ReactNode;\n dehydratedState?: DehydratedState;\n}\n\nexport function QueryProvider({ children, dehydratedState }: QueryProviderProps) {\n const queryClientRef = useRef<QueryClient | null>(null);\n const hydratedRef = useRef(false);\n\n if (queryClientRef.current === null) {\n queryClientRef.current = new QueryClient({ defaultOptions });\n }\n\n const queryClient = queryClientRef.current;\n\n useEffect(() => {\n if (dehydratedState && !hydratedRef.current) {\n hydrate(queryClient, dehydratedState);\n hydratedRef.current = true;\n }\n }, [queryClient, dehydratedState]);\n\n return (\n <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useContext } from \"react\";\nimport { createAuthClient } from \"better-auth/react\";\n\n/** Instancia de `createAuthClient` (better-auth/react) con los plugins de la app. */\nexport type StorefrontAuthClientInstance = ReturnType<typeof createAuthClient>;\n\nconst StorefrontAuthContext = createContext<StorefrontAuthClientInstance | null>(null);\n\nexport function StorefrontAuthProvider({\n authClient,\n children,\n}: {\n authClient: StorefrontAuthClientInstance;\n children: React.ReactNode;\n}) {\n return (\n <StorefrontAuthContext.Provider value={authClient}>{children}</StorefrontAuthContext.Provider>\n );\n}\n\nexport function useStorefrontAuthClient(): StorefrontAuthClientInstance {\n const client = useContext(StorefrontAuthContext);\n if (!client) {\n throw new Error(\n \"useStorefrontAuthClient debe usarse dentro de StorefrontAuthProvider (o EcomiqProvider con authClient).\",\n );\n }\n return client;\n}\n\nexport type StorefrontSessionUser = {\n id: string;\n email: string;\n firstName: string;\n lastName: string;\n name?: string;\n phone?: string;\n};\n\n/** Caducidad alineada con OAuth/`expires_in` (skew en ms). El bearer ya no viene en JSON de sesión. */\nexport function storefrontSessionEndsSoon(expiresAt: Date | undefined, skewMs = 120_000): boolean {\n if (!expiresAt) return false;\n return Date.now() + skewMs >= expiresAt.getTime();\n}\n\n/** @deprecated Usar `storefrontSessionEndsSoon` */\nexport const storefrontAccessTokenNeedsRefresh = storefrontSessionEndsSoon;\n\nfunction parseStorefrontSessionExpires(at: unknown): Date | undefined {\n if (!at) return undefined;\n if (at instanceof Date) return Number.isNaN(at.getTime()) ? undefined : at;\n if (typeof at === \"string\") {\n const d = new Date(at);\n return Number.isNaN(d.getTime()) ? undefined : d;\n }\n return undefined;\n}\n\nfunction mapSessionUser(raw: unknown): StorefrontSessionUser | null {\n if (!raw || typeof raw !== \"object\") return null;\n const u = raw as Record<string, unknown>;\n const explicitFirst =\n typeof u.firstName === \"string\" ? u.firstName : typeof u.given_name === \"string\" ? u.given_name : \"\";\n const explicitLast =\n typeof u.lastName === \"string\" ? u.lastName : typeof u.family_name === \"string\" ? u.family_name : \"\";\n if (explicitFirst || explicitLast) {\n return {\n id: String(u.id ?? \"\"),\n email: String(u.email ?? \"\"),\n firstName: explicitFirst,\n lastName: explicitLast,\n name: typeof u.name === \"string\" ? u.name : undefined,\n phone: typeof u.phone === \"string\" ? u.phone : undefined,\n };\n }\n const emailLocal = String(u.email ?? \"\").split(\"@\")[0] ?? \"\";\n const full = typeof u.name === \"string\" ? u.name.trim() : emailLocal.trim();\n const parts = full ? full.split(/\\s+/) : [];\n return {\n id: String(u.id ?? \"\"),\n email: String(u.email ?? \"\"),\n firstName: parts[0] ?? \"\",\n lastName: parts.slice(1).join(\" \"),\n name: typeof u.name === \"string\" ? u.name : undefined,\n phone: typeof u.phone === \"string\" ? u.phone : undefined,\n };\n}\n\n/**\n * Sesión Better Auth + usuario mapeado para UI (headers, drawer).\n */\nexport function useStorefrontSession() {\n const authClient = useStorefrontAuthClient();\n const session = authClient.useSession();\n const user = mapSessionUser(session.data?.user);\n\n const storefrontSession = session.data?.session as { expiresAt?: unknown } | undefined;\n\n /** Misma fecha que OAuth cuando el login fijó `expires_in` en la sesión Better Auth. */\n const sessionExpiresAt = parseStorefrontSessionExpires(storefrontSession?.expiresAt);\n\n return {\n session,\n user,\n sessionExpiresAt,\n isAuthenticated: Boolean(session.data?.user),\n isPending: session.isPending,\n error: session.error,\n refetch: session.refetch,\n signOut: () => authClient.signOut(),\n };\n}\n","\"use client\";\n\nexport function useUser() {\n\n return {\n\n };\n}\n","\"use client\";\n\n\nexport function useConfig() {\n\n return {\n };\n}\n","import { useQuery, useInfiniteQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiClient } from '../../core/services/api-client';\nimport { productService } from '../../core/services/product.service';\nimport type { ProductsFilters, ProductsResponse, StorefrontProductsParamsInput } from '../../core/models/product';\n\nexport const useProducts = (storeId?: string) => {\n // Solo configurar storeId aquí. useQueryClient() se usa solo dentro de useRefresh*.\n if (storeId) {\n apiClient.setStoreId(storeId);\n }\n\n // Hook para obtener productos con filtros\n const useProductsList = (filters?: ProductsFilters) => {\n return useQuery({\n queryKey: ['products', filters],\n queryFn: () => productService.getProducts(filters),\n enabled: !!storeId,\n });\n };\n\n // Hook para obtener productos con paginación infinita\n const useInfiniteProducts = (filters?: Omit<ProductsFilters, 'page'>) => {\n return useInfiniteQuery({\n queryKey: ['products', 'infinite', filters],\n queryFn: ({ pageParam = 1 }) => \n productService.getProducts({ ...filters, page: pageParam }),\n getNextPageParam: (lastPage: ProductsResponse) =>\n lastPage.meta.hasNextPage ? lastPage.meta.page + 1 : undefined,\n initialPageParam: 1,\n enabled: !!storeId,\n });\n };\n\n // Hook para obtener un producto por ID\n const useProduct = (id: string) => {\n return useQuery({\n queryKey: ['product', id],\n queryFn: () => productService.getProduct(id),\n enabled: !!id && !!storeId,\n });\n };\n\n // Hook para obtener un producto por slug\n const useProductBySlug = (slug: string) => {\n return useQuery({\n queryKey: ['product', 'slug', slug],\n queryFn: () => productService.getProductBySlug(slug),\n enabled: !!slug && !!storeId,\n });\n };\n\n // Hook para buscar productos\n const useSearchProducts = (query: string, filters?: Omit<ProductsFilters, 'search'>) => {\n return useQuery({\n queryKey: ['products', 'search', query, filters],\n queryFn: () => productService.searchProducts(query, filters),\n enabled: !!query && !!storeId,\n });\n };\n\n // Hook para obtener productos por categoría\n const useProductsByCategory = (category: string, filters?: Omit<ProductsFilters, 'category'>) => {\n return useQuery({\n queryKey: ['products', 'category', category, filters],\n queryFn: () => productService.getProductsByCategory(category, filters),\n enabled: !!category && !!storeId,\n });\n };\n\n // Hook para obtener productos en oferta\n const useProductsOnSale = (filters?: Omit<ProductsFilters, 'minPrice' | 'maxPrice'>) => {\n return useQuery({\n queryKey: ['products', 'sale', filters],\n queryFn: () => productService.getProductsOnSale(filters),\n enabled: !!storeId,\n });\n };\n\n // Hook para obtener productos en stock\n const useProductsInStock = (filters?: Omit<ProductsFilters, 'inStock'>) => {\n return useQuery({\n queryKey: ['products', 'stock', filters],\n queryFn: () => productService.getProductsInStock(filters),\n enabled: !!storeId,\n });\n };\n\n // Mutación para refrescar productos (useQueryClient solo aquí, dentro del árbol del provider)\n const useRefreshProducts = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => productService.getProducts(),\n onSuccess: (data: unknown) => {\n queryClient.setQueryData(['products'], data);\n },\n });\n };\n\n // --- Storefront API (v1/storefront/products) ---\n\n const useStorefrontProductsList = (params?: StorefrontProductsParamsInput) => {\n return useQuery({\n queryKey: ['storefront', 'products', params],\n queryFn: () => productService.getStorefrontProducts(params),\n enabled: !!storeId,\n });\n };\n\n const useStorefrontInfiniteProducts = (params?: Omit<StorefrontProductsParamsInput, 'page'>) => {\n return useInfiniteQuery({\n queryKey: ['storefront', 'products', 'infinite', params],\n queryFn: ({ pageParam = 1 }) =>\n productService.getStorefrontProducts({ ...params, page: pageParam }),\n getNextPageParam: (lastPage) =>\n lastPage.pageIndex < lastPage.totalPages ? lastPage.pageIndex + 1 : undefined,\n initialPageParam: 1,\n enabled: !!storeId,\n });\n };\n\n const useRefreshStorefrontProducts = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (params?: StorefrontProductsParamsInput) =>\n productService.getStorefrontProducts(params),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['storefront', 'products'] });\n },\n });\n };\n\n return {\n useProductsList,\n useInfiniteProducts,\n useProduct,\n useProductBySlug,\n useSearchProducts,\n useProductsByCategory,\n useProductsOnSale,\n useProductsInStock,\n useRefreshProducts,\n useStorefrontProductsList,\n useStorefrontInfiniteProducts,\n useRefreshStorefrontProducts,\n };\n};\n","import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { apiClient } from \"../../core/services/api-client\";\nimport { collectionService } from \"../../core/services/collection.service\";\n\nexport const useCollections = (storeId?: string) => {\n if (storeId) {\n apiClient.setStoreId(storeId);\n }\n\n const useStorefrontCollectionsList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"collections\"],\n queryFn: () => collectionService.getStorefrontCollections(),\n enabled: !!storeId,\n });\n };\n\n const useStorefrontCollectionBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"collection\", \"slug\", slug],\n queryFn: () => collectionService.getStorefrontCollectionBySlug(slug),\n enabled: !!slug && !!storeId,\n });\n };\n\n const useRefreshStorefrontCollections = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => collectionService.getStorefrontCollections(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"collections\"] });\n },\n });\n };\n\n return {\n useStorefrontCollectionsList,\n useStorefrontCollectionBySlug,\n useRefreshStorefrontCollections,\n };\n};\n\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { apiClient } from \"../../core/services/api-client\";\nimport { pageService } from \"../../core/services/page.service\";\n\nexport const usePages = (storeId?: string) => {\n if (storeId) {\n apiClient.setStoreId(storeId);\n }\n\n const usePagesList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"pages\"],\n queryFn: () => pageService.getPages(),\n enabled: !!storeId,\n });\n };\n\n const usePageBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"page\", \"slug\", slug],\n queryFn: () => pageService.getPageBySlug(slug),\n enabled: !!slug && !!storeId,\n });\n };\n\n const useRefreshPages = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => pageService.getPages(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"pages\"] });\n },\n });\n };\n\n return {\n usePagesList,\n usePageBySlug,\n useRefreshPages,\n };\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { cartService } from '../../core/services/cart.service';\nimport type { CartAddressesRequest, CartResponse } from '../../core/models/cart';\n\nexport const useCartAddresses = () => {\n return useMutation<CartResponse, Error, CartAddressesRequest>({\n mutationFn: (data: CartAddressesRequest) => cartService.updateAddresses(data),\n });\n};\n\n","import { useQuery } from '@tanstack/react-query';\nimport { cartService } from '../../core/services/cart.service';\nimport type { CartResponse } from '../../core/models/cart';\n\nexport const useCartGet = () => {\n return useQuery<CartResponse, Error>({\n queryKey: ['cart'],\n queryFn: () => cartService.getCart(),\n });\n};\n\n","import { useMutation } from '@tanstack/react-query';\nimport { cartService } from '../../core/services/cart.service';\nimport type { CartCreateRequest, CartResponse } from '../../core/models/cart';\n\nexport const useCartCreate = () => {\n return useMutation<CartResponse, Error, CartCreateRequest>({\n mutationFn: (data: CartCreateRequest) => cartService.createCart(data),\n });\n};\n\n","\"use client\";\n\nimport type { Path, UseFormReturn } from \"react-hook-form\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n fetchStorefrontGeoDistricts,\n fetchStorefrontGeoProvinces,\n loadStorefrontGeoDepartments,\n type GeoItem,\n} from \"../../core/lib/storefront-geo-inei\";\n\n/** Campos mínimos que el hook sincroniza (checkout y direcciones de cuenta). */\nexport type GeoIneiFormFields = {\n countryCode: string;\n departmentCode: string;\n departmentName: string;\n provinceCode: string;\n provinceName: string;\n districtCode: string;\n districtName: string;\n};\n\nexport function useStorefrontGeoInei<T extends GeoIneiFormFields>(\n storeId: string,\n form: Pick<UseFormReturn<T>, \"watch\" | \"setValue\">\n) {\n const [departments, setDepartments] = useState<GeoItem[]>([]);\n const [provinces, setProvinces] = useState<GeoItem[]>([]);\n const [districts, setDistricts] = useState<GeoItem[]>([]);\n const [loadingDepartments, setLoadingDepartments] = useState(false);\n const [loadingProvinces, setLoadingProvinces] = useState(false);\n const [loadingDistricts, setLoadingDistricts] = useState(false);\n\n const prevDepartmentCode = useRef<string | undefined>(undefined);\n const prevProvinceCode = useRef<string | undefined>(undefined);\n\n const countryCode = (\n (form.watch(\"countryCode\" as Path<T>) as string | undefined) || \"PE\"\n ).toUpperCase();\n const departmentCode = form.watch(\"departmentCode\" as Path<T>) as string;\n const provinceCode = form.watch(\"provinceCode\" as Path<T>) as string;\n const districtCode = form.watch(\"districtCode\" as Path<T>) as string;\n\n const storeRequestHeaders = useMemo(() => {\n const id = storeId.trim();\n if (!id) return null;\n return { \"X-Store-Id\": id } as const;\n }, [storeId]);\n\n const selectedDepartment = useMemo(\n () => departments.find((d) => d.code === departmentCode),\n [departments, departmentCode]\n );\n const selectedProvince = useMemo(\n () => provinces.find((p) => p.code === provinceCode),\n [provinces, provinceCode]\n );\n const selectedDistrict = useMemo(\n () => districts.find((d) => d.code === districtCode),\n [districts, districtCode]\n );\n\n useEffect(() => {\n let active = true;\n if (!storeRequestHeaders) {\n setDepartments([]);\n setLoadingDepartments(false);\n return () => {\n active = false;\n };\n }\n setLoadingDepartments(true);\n loadStorefrontGeoDepartments(storeRequestHeaders)\n .then((items) => {\n if (!active) return;\n setDepartments(items);\n })\n .finally(() => {\n if (!active) return;\n setLoadingDepartments(false);\n });\n return () => {\n active = false;\n };\n }, [storeRequestHeaders]);\n\n useEffect(() => {\n const prev = prevDepartmentCode.current;\n const dept = departmentCode;\n const departmentChanged = prev !== undefined && prev !== dept;\n prevDepartmentCode.current = dept;\n\n if (!dept) {\n setProvinces([]);\n setDistricts([]);\n prevProvinceCode.current = \"\";\n prevDepartmentCode.current = \"\";\n return;\n }\n if (!storeRequestHeaders) {\n setProvinces([]);\n return;\n }\n\n if (departmentChanged) {\n form.setValue(\"provinceCode\" as Path<T>, \"\" as never, { shouldValidate: true });\n form.setValue(\"provinceName\" as Path<T>, \"\" as never, { shouldValidate: true });\n form.setValue(\"districtCode\" as Path<T>, \"\" as never, { shouldValidate: true });\n form.setValue(\"districtName\" as Path<T>, \"\" as never, { shouldValidate: true });\n setDistricts([]);\n prevProvinceCode.current = \"\";\n }\n\n if (selectedDepartment?.name) {\n form.setValue(\"departmentName\" as Path<T>, selectedDepartment.name as never, {\n shouldValidate: true,\n });\n }\n\n let active = true;\n setLoadingProvinces(true);\n fetchStorefrontGeoProvinces(storeRequestHeaders, countryCode, dept)\n .then((items) => {\n if (!active) return;\n setProvinces(items);\n })\n .catch(() => {\n if (!active) return;\n setProvinces([]);\n })\n .finally(() => {\n if (!active) return;\n setLoadingProvinces(false);\n });\n return () => {\n active = false;\n };\n }, [departmentCode, countryCode, selectedDepartment?.name, form, storeRequestHeaders]);\n\n useEffect(() => {\n const prev = prevProvinceCode.current;\n const prov = provinceCode;\n const provinceChanged = prev !== undefined && prev !== prov;\n prevProvinceCode.current = prov;\n\n if (!prov) {\n setDistricts([]);\n prevProvinceCode.current = \"\";\n return;\n }\n if (!storeRequestHeaders) {\n setDistricts([]);\n return;\n }\n\n if (provinceChanged) {\n form.setValue(\"districtCode\" as Path<T>, \"\" as never, { shouldValidate: true });\n form.setValue(\"districtName\" as Path<T>, \"\" as never, { shouldValidate: true });\n }\n\n if (selectedProvince?.name) {\n form.setValue(\"provinceName\" as Path<T>, selectedProvince.name as never, {\n shouldValidate: true,\n });\n }\n\n let active = true;\n setLoadingDistricts(true);\n fetchStorefrontGeoDistricts(storeRequestHeaders, countryCode, prov)\n .then((items) => {\n if (!active) return;\n setDistricts(items);\n })\n .catch(() => {\n if (!active) return;\n setDistricts([]);\n })\n .finally(() => {\n if (!active) return;\n setLoadingDistricts(false);\n });\n return () => {\n active = false;\n };\n }, [provinceCode, countryCode, selectedProvince?.name, form, storeRequestHeaders]);\n\n useEffect(() => {\n if (selectedDistrict?.name) {\n form.setValue(\"districtName\" as Path<T>, selectedDistrict.name as never, {\n shouldValidate: true,\n });\n }\n }, [selectedDistrict?.name, form]);\n\n return {\n departments,\n provinces,\n districts,\n loadingDepartments,\n loadingProvinces,\n loadingDistricts,\n departmentCode,\n provinceCode,\n districtCode,\n selectedDepartment,\n selectedProvince,\n selectedDistrict,\n storeRequestHeaders,\n };\n}\n","import { create } from 'zustand';\nimport { StorefrontSettings } from '../../core/models/store';\n\ntype Drawers = {\n cart: boolean;\n search: boolean;\n menu: boolean;\n filter: boolean;\n [key: string]: boolean;\n};\ntype Modals = {\n login: boolean;\n signup: boolean;\n [key: string]: boolean;\n};\n\ntype StoreState = {\n data: StorefrontSettings | null;\n drawers: Drawers;\n modals: Modals;\n openDrawer: (drawer: keyof Drawers) => void;\n closeDrawer: (drawer: keyof Drawers) => void;\n toggleDrawer: (drawer: keyof Drawers) => void;\n closeAllDrawers: () => void;\n openModal: (modal: keyof Modals) => void;\n closeModal: (modal: keyof Modals) => void;\n toggleModal: (modal: keyof Modals) => void;\n closeAllModals: () => void;\n};\n\nexport const useStore = create<StoreState>()(\n (set) => ({\n data: null,\n drawers: {\n cart: false,\n search: false,\n menu: false,\n filter: false,\n },\n openDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: true,\n },\n })),\n closeDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: false,\n },\n })),\n toggleDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: !state.drawers[drawer],\n },\n })),\n closeAllDrawers: () =>\n set((state) => ({\n drawers: Object.keys(state.drawers).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Drawers\n ),\n })),\n modals: {\n login: false,\n signup: false,\n },\n openModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: true,\n },\n })),\n closeModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: false,\n },\n })),\n toggleModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n [modal]: !state.modals[modal],\n },\n })),\n closeAllModals: () =>\n set((state) => ({\n modals: Object.keys(state.modals).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Modals\n ),\n })),\n }),\n);\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\nexport type CartItemVariant = {\n /** Identifier of the selected variant (if any) */\n variantId?: string;\n /** Optional SKU of the variant */\n variantSku?: string;\n /** Human readable label for the variant (e.g. \"Color: Black • Size: M\") */\n variantLabel?: string;\n};\n\nexport type CartItem = CartItemVariant & {\n id: string;\n title: string;\n image: string;\n /** Backwards‑compatible size field; usually covered by variantLabel */\n size: string;\n price: number;\n quantity: number;\n};\n\nexport type CheckoutStep =\n | 'customer'\n | 'shipping'\n | 'shippingOptions'\n | 'payment';\n\nexport type CheckoutCustomerLocal = {\n email: string;\n firstName: string;\n lastName: string;\n phone: string;\n};\n\ntype CartState = {\n count: number;\n cart: CartItem[];\n /** Token/id del carrito en backend (ownerId) */\n cartTokenId: string | null;\n setCartTokenId: (token: string | null) => void;\n checkoutStep: CheckoutStep | null;\n setCheckoutStep: (step: CheckoutStep | null) => void;\n /**\n * Customer guardado localmente para poder recrear el carrito si el backend\n * devuelve 404 por token inválido.\n */\n checkoutCustomerLocal: { cartTokenId: string; customer: CheckoutCustomerLocal } | null;\n setCheckoutCustomerLocal: (customer: CheckoutCustomerLocal) => void;\n clearCheckoutCustomerLocal: () => void;\n addCart: (item: CartItem) => void;\n removeCart: (id: string) => void;\n /** Carrito/token inválido en servidor (ej. eliminado): limpia estado local y checkout. */\n clearCartSession: () => void;\n};\n\nexport const useCart = create<CartState>()(\n persist(\n (set) => ({\n count: 0,\n cart: [],\n cartTokenId: null,\n setCartTokenId: (token) => set((state) => ({ ...state, cartTokenId: token })),\n checkoutStep: null,\n setCheckoutStep: (step) => set((state) => ({ ...state, checkoutStep: step })),\n checkoutCustomerLocal: null,\n setCheckoutCustomerLocal: (customer) =>\n set((state) => {\n if (!state.cartTokenId) return state;\n return {\n checkoutCustomerLocal: {\n cartTokenId: state.cartTokenId,\n customer,\n },\n };\n }),\n clearCheckoutCustomerLocal: () => set(() => ({ checkoutCustomerLocal: null })),\n addCart: (item) =>\n set((state) => {\n const existingItem = state.cart.find(\n (cartItem) => cartItem.id === item.id\n );\n if (existingItem) {\n const newQuantity = Math.max(0, existingItem.quantity) + 1;\n const cart = state.cart.map((cartItem) =>\n cartItem.id === item.id\n ? { ...cartItem, quantity: newQuantity }\n : cartItem\n );\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }\n const newItem: CartItem = {\n ...item,\n quantity: Math.max(1, Math.max(0, item.quantity ?? 1)),\n };\n const cart = [...state.cart, newItem];\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }),\n removeCart: (id) =>\n set((state) => {\n const existingItem = state.cart.find((item) => item.id === id);\n if (!existingItem) return state;\n if (existingItem.quantity > 1) {\n const newQuantity = Math.max(0, existingItem.quantity - 1);\n const cart = state.cart.map((cartItem) =>\n cartItem.id === id\n ? { ...cartItem, quantity: newQuantity }\n : cartItem\n );\n const count = cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0);\n return { count, cart };\n }\n const cart = state.cart.filter((item) => item.id !== id);\n const count = Math.max(0, cart.reduce((sum, i) => sum + Math.max(0, i.quantity), 0));\n return { count, cart };\n }),\n clearCartSession: () =>\n set(() => ({\n count: 0,\n cart: [],\n cartTokenId: null,\n checkoutStep: null,\n checkoutCustomerLocal: null,\n })),\n }),\n { name: 'cart-storage' }\n )\n);\n","/** Id del plugin servidor/cliente Better Auth (debe coincidir en ambos lados). */\nexport const PLUGIN_ID = \"ecomiq-oauth-password\";\nexport const ECOMIQ_OAUTH_TOKEN_URL = \"https://auth.ecomiq.pe/connect/token\";\nexport const ECOMIQ_OAUTH_USERINFO_URL = \"https://auth.ecomiq.pe/connect/userinfo\";\n","import { z } from \"zod\";\n\nexport const tokenResponseSchema = z.object({\n access_token: z.string().min(1),\n token_type: z.string().optional(),\n /** Segundos hasta expiración (Ecomiq envía ej. `86399`). Sincroniza la sesión Better Auth con el bearer. */\n expires_in: z.coerce.number().int().positive().optional(),\n});\n\n/** Respuesta típica de GET /connect/userinfo (OpenID). */\nexport const userInfoSchema = z.object({\n sub: z.string(),\n email: z.string().email().optional(),\n family_name: z.string().optional(),\n given_name: z.string().optional(),\n iss: z.string().optional(),\n aud: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\nexport const signInBody = z.object({\n email: z.string().email(),\n password: z.string().min(1),\n callbackURL: z.string().optional(),\n rememberMe: z.boolean().optional().default(true),\n});\n","import {\n createAuthEndpoint,\n createAuthMiddleware,\n formCsrfMiddleware,\n} from \"better-auth/api\";\nimport { APIError, type BetterAuthPlugin } from \"better-auth\";\nimport { z } from \"zod\";\nimport { setSessionCookie } from \"better-auth/cookies\";\nimport { parseUserOutput } from \"better-auth/db\";\n\nimport {\n STOREFRONT_ECOMIQ_OAUTH_COOKIE_NAME,\n STOREFRONT_ECOMIQ_OAUTH_COOKIE_PATH,\n} from \"../../core/constants/storefront-ecomiq-oauth-cookie\";\nimport { PLUGIN_ID, ECOMIQ_OAUTH_USERINFO_URL, ECOMIQ_OAUTH_TOKEN_URL } from \"./ecomiq-oauth-password-constants\";\nimport { signInBody, userInfoSchema, tokenResponseSchema } from \"./ecomiq-oauth-password-types\";\n\ntype IdentityContext = {\n identityScope?: string | null;\n tenantId?: string | null;\n storeId?: string | null;\n};\n\n/**\n * Inicia sesión contra el OAuth (resource owner password), obtiene el perfil por userinfo\n * y crea/actualiza el usuario en Better Auth.\n * La caducidad de la sesión Better Auth sigue `expires_in` de Ecomiq (sin `refresh_token`).\n * El bearer OAuth solo va en cookie HttpOnly acotada a `/api/store` (no en JSON de sesión).\n */\nexport function ecomiqOAuthPassword(): BetterAuthPlugin {\n const secureCookie = true //Boolean(isProduction);\n const clearStorefrontOAuthCookieMiddleware = createAuthMiddleware(async (ctx) => {\n ctx.setCookie(STOREFRONT_ECOMIQ_OAUTH_COOKIE_NAME, \"\", {\n path: STOREFRONT_ECOMIQ_OAUTH_COOKIE_PATH,\n httpOnly: true,\n sameSite: \"lax\",\n secure: secureCookie,\n maxAge: 0,\n });\n });\n\n return {\n id: PLUGIN_ID,\n schema: {\n user: {\n fields: {\n firstName: { type: \"string\", required: false },\n lastName: { type: \"string\", required: false },\n phone: { type: \"string\", required: false },\n },\n },\n },\n hooks: {\n after: [\n {\n matcher: (hookCtx) => hookCtx.path === \"/sign-out\",\n handler: clearStorefrontOAuthCookieMiddleware,\n },\n ],\n },\n endpoints: {\n signIn: createAuthEndpoint(\n \"/ecomiq-oauth/sign-in\",\n {\n method: \"POST\",\n use: [formCsrfMiddleware],\n body: signInBody,\n },\n async (ctx) => {\n const { email: loginEmail, password, callbackURL, rememberMe } = ctx.body;\n\n const tokens = await exchangePasswordGrant(loginEmail, password, {\n identityScope: ctx.getHeader(\"x-Identity-Scope\"),\n tenantId: ctx.getHeader(\"x-Tenant-Id\"),\n storeId: ctx.getHeader(\"x-Store-Id\"),\n });\n const profile = await fetchUserInfo(tokens.access_token);\n\n const profileEmail = profile.email?.toLowerCase().trim();\n const canonicalEmail = profileEmail ?? loginEmail.toLowerCase().trim();\n\n if (profileEmail && profileEmail !== loginEmail.toLowerCase().trim()) {\n throw APIError.from(\"UNAUTHORIZED\", {\n code: \"ECOMIQ_EMAIL_MISMATCH\",\n message: \"El correo del perfil OAuth no coincide con el inicio de sesión\",\n });\n }\n\n const displayName = displayNameFromUserInfo(profile, canonicalEmail);\n\n const existing = await ctx.context.internalAdapter.findUserByEmail(canonicalEmail);\n let user = existing?.user;\n if (!user) {\n user = await ctx.context.internalAdapter.createUser({\n email: canonicalEmail,\n name: displayName,\n emailVerified: true,\n });\n } else if (user.name !== displayName) {\n await ctx.context.internalAdapter.updateUser(user.id, { name: displayName });\n user = { ...user, name: displayName };\n }\n\n /** Misma ventana que el bearer: `expiresAt` de la sesión coincide con OAuth (`overrideAll`). */\n const oauthSessionExpires =\n tokens.expires_in !== undefined && tokens.expires_in > 0\n ? new Date(Date.now() + tokens.expires_in * 1000)\n : undefined;\n\n const session = await ctx.context.internalAdapter.createSession(\n user.id,\n rememberMe === false,\n oauthSessionExpires ? { expiresAt: oauthSessionExpires } : {},\n Boolean(oauthSessionExpires)\n );\n\n if (!session) {\n throw APIError.from(\"INTERNAL_SERVER_ERROR\", {\n code: \"ECOMIQ_SESSION_FAILED\",\n message: \"No se pudo crear la sesión\",\n });\n }\n\n await setSessionCookie(ctx, { session, user }, rememberMe === false);\n\n const oauthMaxAgeSec =\n oauthSessionExpires !== undefined\n ? Math.max(60, Math.ceil((oauthSessionExpires.getTime() - Date.now()) / 1000))\n : tokens.expires_in !== undefined && tokens.expires_in > 0\n ? tokens.expires_in\n : 60 * 60 * 24;\n\n await ctx.setCookie(STOREFRONT_ECOMIQ_OAUTH_COOKIE_NAME, tokens.access_token, {\n path: STOREFRONT_ECOMIQ_OAUTH_COOKIE_PATH,\n httpOnly: true,\n sameSite: \"lax\",\n secure: secureCookie,\n maxAge: oauthMaxAgeSec,\n });\n\n if (callbackURL) ctx.setHeader(\"Location\", callbackURL);\n\n return ctx.json({\n redirect: !!callbackURL,\n token: session.token,\n url: callbackURL,\n user: parseUserOutput(ctx.context.options, user),\n });\n }\n ),\n },\n } satisfies BetterAuthPlugin;\n}\n\nfunction displayNameFromUserInfo(\n profile: z.infer<typeof userInfoSchema>,\n fallbackEmail: string\n): string {\n const parts = [profile.given_name?.trim(), profile.family_name?.trim()].filter(Boolean);\n const joined = parts.join(\" \").trim();\n if (joined) return joined;\n return fallbackEmail.split(\"@\")[0] || \"Cliente\";\n}\n\nasync function fetchUserInfo(accessToken: string): Promise<z.infer<typeof userInfoSchema>> {\n const res = await fetch(ECOMIQ_OAUTH_USERINFO_URL, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n accept: \"application/json\",\n },\n });\n\n const text = await res.text();\n let json: unknown;\n try {\n json = text ? JSON.parse(text) : {};\n } catch {\n throw APIError.from(\"UNAUTHORIZED\", {\n code: \"ECOMIQ_USERINFO_INVALID_BODY\",\n message: \"Respuesta inválida del endpoint userinfo\",\n });\n }\n\n if (!res.ok) {\n const err = json as { error?: string; error_description?: string };\n throw APIError.from(\"UNAUTHORIZED\", {\n code: \"ECOMIQ_USERINFO_REJECTED\",\n message: err.error_description ?? err.error ?? \"No se pudo obtener el perfil del usuario\",\n });\n }\n\n const parsed = userInfoSchema.safeParse(json);\n if (!parsed.success) {\n throw APIError.from(\"UNAUTHORIZED\", {\n code: \"ECOMIQ_USERINFO_SHAPE\",\n message: \"Perfil OAuth con formato inválido\",\n });\n }\n return parsed.data;\n}\n\ntype OAuthErrorBody = { error?: string; error_description?: string };\n\nasync function exchangePasswordGrant(\n username: string,\n password: string,\n context: IdentityContext\n): Promise<z.infer<typeof tokenResponseSchema>> {\n const clientId = process.env.ECOMIQ_AUTH_CLIENT_ID ?? \"\";\n const clientSecret = process.env.ECOMIQ_AUTH_CLIENT_SECRET ?? \"\";\n const scope = process.env.ECOMIQ_AUTH_SCOPE ?? \"\";\n if (!clientId || !clientSecret) {\n throw APIError.from(\"INTERNAL_SERVER_ERROR\", {\n code: \"ECOMIQ_AUTH_NOT_CONFIGURED\",\n message:\n \"OAuth Ecomiq no configurado: ECOMIQ_AUTH_CLIENT_ID y ECOMIQ_AUTH_CLIENT_SECRET.\",\n });\n }\n\n const body = new URLSearchParams({\n grant_type: \"password\",\n username,\n password,\n scope: scope,\n client_id: clientId,\n client_secret: clientSecret,\n });\n\n const identityScope = context.identityScope;\n const tenantId = context.tenantId;\n const storeId = context.storeId;\n\n const headers = new Headers({\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"application/json\",\n });\n\n if (identityScope?.trim()) {\n headers.set(\"x-Identity-Scope\", identityScope.trim());\n }\n if (tenantId?.trim()) {\n headers.set(\"x-Tenant-Id\", tenantId.trim());\n }\n if (storeId?.trim()) {\n headers.set(\"x-Store-Id\", storeId.trim());\n }\n\n let res: Response;\n let text: string;\n try {\n res = await fetch(ECOMIQ_OAUTH_TOKEN_URL, {\n method: \"POST\",\n headers,\n body,\n });\n text = await res.text();\n } catch (e) {\n throw mapTokenEndpointFetchFailure(e);\n }\n\n const json = safeParseJson(text);\n if (!res.ok) {\n throwBadRequestFromOAuth(json, res.statusText || text || `HTTP ${res.status}`);\n }\n\n const parsed = tokenResponseSchema.safeParse(json);\n if (!parsed.success) {\n throwBadRequestFromOAuth(json, \"Token de acceso no recibido\");\n }\n return parsed.data;\n}\n\nfunction safeParseJson(text: string): unknown {\n try {\n return text ? JSON.parse(text) : {};\n } catch {\n return {};\n }\n}\n\nfunction throwBadRequestFromOAuth(payload: unknown, fallbackMessage: string): never {\n const err = payload as OAuthErrorBody;\n const errorCode =\n typeof err.error === \"string\" && err.error.trim()\n ? err.error.trim()\n : \"invalid_grant\";\n const errorMessage =\n typeof err.error_description === \"string\" && err.error_description.trim()\n ? err.error_description.trim()\n : typeof err.error === \"string\" && err.error.trim()\n ? err.error.trim()\n : fallbackMessage.trim() || \"Credenciales invalidas.\";\n throw APIError.from(\"BAD_REQUEST\", {\n code: errorCode,\n message: errorMessage.slice(0, 500),\n });\n}\n\n/**\n * Auth Ecomiq puede cerrar el socket ante credenciales invalidas (`TypeError: terminated`,\n * `UND_ERR_SOCKET`) en lugar de devolver JSON 400 desde Node/fetch (undici).\n */\nfunction mapTokenEndpointFetchFailure(e: unknown): never {\n const codes = collectNetworkErrorCodes(e);\n const msg = e instanceof Error ? e.message : String(e);\n\n const isDnsError = codes.some((c) => c === \"ENOTFOUND\" || c === \"EAI_AGAIN\");\n if (isDnsError) {\n throw APIError.from(\"BAD_GATEWAY\", {\n code: \"ECOMIQ_AUTH_DNS\",\n message: \"No se pudo resolver el servidor de autenticacion.\",\n });\n }\n\n const isConnectionRefused = codes.includes(\"ECONNREFUSED\");\n if (isConnectionRefused) {\n throw APIError.from(\"BAD_GATEWAY\", {\n code: \"ECOMIQ_AUTH_REFUSED\",\n message: \"Conexion rechazada al servidor de autenticacion.\",\n });\n }\n\n const looksLikeAbortOrSocketClose =\n codes.some((c) =>\n [\"UND_ERR_SOCKET\", \"ECONNRESET\", \"EPIPE\", \"ECONNABORTED\"].includes(c)\n ) ||\n /terminated|abort|closed|FIN|socket/i.test(msg);\n\n if (looksLikeAbortOrSocketClose) {\n throwBadRequestFromOAuth({}, \"Credenciales invalidas o conexion cerrada por el servidor.\");\n }\n\n throw APIError.from(\"INTERNAL_SERVER_ERROR\", {\n code: \"ECOMIQ_AUTH_REQUEST_FAILED\",\n message: msg.slice(0, 280) || \"Error al contactar el servidor de autenticacion.\",\n });\n}\n\nfunction collectNetworkErrorCodes(e: unknown): string[] {\n const out: string[] = [];\n const visit = (x: unknown): void => {\n if (!x || typeof x !== \"object\") return;\n const code = \"code\" in x && typeof (x as { code?: unknown }).code === \"string\"\n ? (x as { code: string }).code\n : undefined;\n if (code) out.push(code);\n if (\"cause\" in x && (x as { cause?: unknown }).cause) {\n visit((x as { cause: unknown }).cause);\n }\n };\n visit(e);\n return out;\n}\n","import type { BetterAuthClientPlugin } from \"better-auth/client\";\nimport { PLUGIN_ID } from \"./ecomiq-oauth-password-constants\";\n\n/**\n * Cliente Better Auth para el plugin `ecomiqOAuthPassword`.\n * Tras añadirlo a `createAuthClient`, refresca la sesión al llamar al sign-in.\n *\n * Ejemplo:\n * `authClient.$fetch(\"/ecomiq-oauth/sign-in\", { method: \"POST\", headers, body: { email, password } })`\n */\nexport function ecomiqOAuthPasswordClient(): BetterAuthClientPlugin {\n return {\n id: PLUGIN_ID,\n pathMethods: {\n \"/ecomiq-oauth/sign-in\": \"POST\",\n },\n atomListeners: [\n {\n matcher: (path) => path === \"/ecomiq-oauth/sign-in\",\n signal: \"$sessionSignal\",\n },\n ],\n };\n}\n","import type { ReactNode } from \"react\";\nimport type {\n CmsRenderBlock,\n CmsRenderSection,\n CmsRenderSettings,\n} from \"./types\";\n\nconst PRODUCT_SORTS = new Set([\n \"price_asc\",\n \"price_desc\",\n \"name_asc\",\n \"name_desc\",\n \"newest\",\n]);\n\nexport function orderedBlocks(blocks: CmsRenderBlock[] | undefined) {\n return [...(blocks ?? [])].sort((a, b) => a.order - b.order);\n}\n\nexport function getCmsSectionKey(section: CmsRenderSection, index: number) {\n return (\n section.id ??\n `${canonicalSectionType(section.type)}-${section.order}-${index}`\n );\n}\n\nexport function getCmsBlockKey(block: CmsRenderBlock, index: number) {\n return block.id ?? `${block.type}-${block.order}-${index}`;\n}\n\nexport function canonicalSectionType(type: string) {\n if (type === \"page-hero\") {\n return \"hero\";\n }\n\n if (type === \"featured-products\") {\n return \"product-list\";\n }\n\n return type;\n}\n\nexport function storefrontHref(value: string) {\n const href = value.trim();\n if (!href) {\n return \"#\";\n }\n\n if (\n href === \"#\" ||\n href.startsWith(\"http://\") ||\n href.startsWith(\"https://\") ||\n href.startsWith(\"mailto:\") ||\n href.startsWith(\"tel:\")\n ) {\n return href;\n }\n\n if (href === \"/\") {\n return \"/store\";\n }\n\n if (href.startsWith(\"/store\") || href.startsWith(\"/product\")) {\n return href;\n }\n\n if (\n href.startsWith(\"/collections\") ||\n href.startsWith(\"/pages\") ||\n href.startsWith(\"/account\")\n ) {\n return `/store${href}`;\n }\n\n return href;\n}\n\nexport function sectionTitle(section: CmsRenderSection) {\n return (\n settingString(section.settings, \"title\") ||\n settingString(section.settings, \"name\")\n );\n}\n\nexport function sectionTitleContent(section: CmsRenderSection) {\n return (\n settingContent(section.settings, \"title\") ||\n settingContent(section.settings, \"name\")\n );\n}\n\nexport function settingString(\n settings: CmsRenderSettings | undefined,\n key: string,\n) {\n const value = settings?.[key];\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function settingContent(\n settings: CmsRenderSettings | undefined,\n key: string,\n): ReactNode {\n const value = settings?.[key];\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return value;\n }\n\n if (value == null || typeof value === \"boolean\") {\n return \"\";\n }\n\n return value as ReactNode;\n}\n\nexport function settingNumber(\n settings: CmsRenderSettings | undefined,\n key: string,\n fallback: number,\n) {\n const value = settings?.[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n }\n\n return fallback;\n}\n\nexport function layoutChildren(settings: CmsRenderSettings, key: string) {\n const children = settings.children;\n if (\n typeof children !== \"object\" ||\n children === null ||\n Array.isArray(children)\n ) {\n return [];\n }\n\n const value = (children as Record<string, unknown>)[key];\n return Array.isArray(value) ? (value as CmsRenderSection[]) : [];\n}\n\nexport function layoutPadding(value: string) {\n switch (value) {\n case \"none\":\n return \"py-0\";\n case \"small\":\n return \"py-6\";\n case \"large\":\n return \"py-16\";\n default:\n return \"py-10\";\n }\n}\n\nexport function layoutMaxWidth(value: string) {\n switch (value) {\n case \"full\":\n return \"max-w-none\";\n case \"narrow\":\n return \"max-w-3xl\";\n default:\n return \"max-w-7xl\";\n }\n}\n\nexport function layoutBackground(value: string) {\n switch (value) {\n case \"muted\":\n return \"bg-neutral-50\";\n case \"dark\":\n return \"bg-neutral-950 text-white\";\n default:\n return \"bg-white\";\n }\n}\n\nexport function layoutGap(value: string) {\n switch (value) {\n case \"none\":\n return \"gap-0\";\n case \"small\":\n return \"gap-3\";\n case \"large\":\n return \"gap-8\";\n default:\n return \"gap-5\";\n }\n}\n\nexport function layoutAlign(value: string) {\n switch (value) {\n case \"start\":\n return \"items-start\";\n case \"center\":\n return \"items-center\";\n case \"end\":\n return \"items-end\";\n default:\n return \"items-stretch\";\n }\n}\n\nexport function layoutJustify(value: string) {\n switch (value) {\n case \"center\":\n return \"justify-center\";\n case \"end\":\n return \"justify-end\";\n case \"between\":\n return \"justify-between\";\n default:\n return \"justify-start\";\n }\n}\n\nexport function productSortValue(value: string) {\n return PRODUCT_SORTS.has(value) ? value : \"newest\";\n}\n\nexport function sanitizeHtml(html: string) {\n return html\n .replace(/<script[\\s\\S]*?>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style[\\s\\S]*?>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/<(iframe|object|embed|link|meta)[\\s\\S]*?>/gi, \"\")\n .replace(/\\son\\w+\\s*=\\s*(['\"]).*?\\1/gi, \"\")\n .replace(/\\s(href|src)\\s*=\\s*(['\"])\\s*javascript:[\\s\\S]*?\\2/gi, \"\");\n}\n\nexport const DEFAULT_CMS_IMAGE_URL =\n \"data:image/svg+xml;charset=UTF-8,\" +\n encodeURIComponent(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"640\" height=\"360\" viewBox=\"0 0 640 360\">\n <rect width=\"640\" height=\"360\" fill=\"#f4f4f5\"/>\n <rect x=\"40\" y=\"36\" width=\"560\" height=\"288\" rx=\"20\" fill=\"#ffffff\" stroke=\"#d4d4d8\"/>\n <path d=\"M148 246l102-102 78 78 48-48 120 120H148z\" fill=\"#d4d4d8\"/>\n <circle cx=\"456\" cy=\"118\" r=\"32\" fill=\"#e4e4e7\"/>\n </svg>\n `);\n","import type { ImgHTMLAttributes, ReactNode } from \"react\";\nimport type { CmsLinkProps, CmsRenderSection } from \"./types\";\nimport {\n DEFAULT_CMS_IMAGE_URL,\n sectionTitleContent,\n settingContent,\n} from \"./utils\";\n\nexport function SectionHeading({ section }: { section: CmsRenderSection }) {\n const title = sectionTitleContent(section);\n const subtitle = settingContent(section.settings, \"subtitle\");\n\n if (!title && !subtitle) {\n return null;\n }\n\n return (\n <div className=\"mb-6\">\n {title ? (\n <h2 className=\"text-2xl font-semibold tracking-tight text-neutral-950\">\n {title}\n </h2>\n ) : null}\n {subtitle ? (\n <p className=\"mt-2 text-sm text-neutral-600\">{subtitle}</p>\n ) : null}\n </div>\n );\n}\n\nexport function EmptyState({ children }: { children: ReactNode }) {\n return (\n <p className=\"rounded-lg border border-dashed p-6 text-center text-sm text-neutral-500\">\n {children}\n </p>\n );\n}\n\nexport function DefaultLink({ href, className, children }: CmsLinkProps) {\n return (\n <a href={href} className={className}>\n {children}\n </a>\n );\n}\n\ntype CmsImageProps = Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\"> & {\n src?: string | null;\n fallbackSrc?: string;\n};\n\nexport function CmsImage({\n src,\n fallbackSrc = DEFAULT_CMS_IMAGE_URL,\n onError,\n ...props\n}: CmsImageProps) {\n const imageSrc = src?.trim() || fallbackSrc;\n\n return (\n <img\n src={imageSrc}\n onError={(event) => {\n onError?.(event);\n const image = event.currentTarget;\n\n if (image.dataset.cmsFallback === \"true\") {\n return;\n }\n\n image.dataset.cmsFallback = \"true\";\n image.src = fallbackSrc;\n }}\n {...props}\n />\n );\n}\n","import type { ComponentType } from \"react\";\nimport { CmsImage, SectionHeading } from \"./shared\";\nimport type { CmsLinkProps, CmsRenderBlock, CmsRenderSection } from \"./types\";\nimport {\n getCmsBlockKey,\n storefrontHref,\n orderedBlocks,\n sanitizeHtml,\n sectionTitleContent,\n settingContent,\n settingNumber,\n settingString,\n} from \"./utils\";\n\nexport function RichTextSection({ section }: { section: CmsRenderSection }) {\n const html =\n settingString(section.settings, \"html\") ||\n settingString(section.settings, \"content\") ||\n settingString(section.settings, \"richText\");\n\n return (\n <section className=\"container mx-auto px-4 py-10\">\n <SectionHeading section={section} />\n {html ? (\n <div\n className=\"prose prose-neutral max-w-none\"\n dangerouslySetInnerHTML={{ __html: sanitizeHtml(html) }}\n />\n ) : null}\n </section>\n );\n}\n\nexport function CustomHtmlSection({ section }: { section: CmsRenderSection }) {\n const html =\n settingString(section.settings, \"html\") ||\n settingString(section.settings, \"content\");\n\n if (!html) {\n return null;\n }\n\n return (\n <section\n className=\"cms-custom-html\"\n dangerouslySetInnerHTML={{ __html: sanitizeHtml(html) }}\n />\n );\n}\n\nexport function FloatingBlockSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const settings = section.settings ?? {};\n const title = settingContent(settings, \"title\");\n const text = settingContent(settings, \"text\");\n const imageUrl = settingString(settings, \"imageUrl\");\n const linkText = settingContent(settings, \"linkText\");\n const linkUrl = storefrontHref(settingString(settings, \"linkUrl\"));\n const x = boundedPercent(settingNumber(settings, \"x\", 8));\n const y = boundedPercent(settingNumber(settings, \"y\", 12));\n const width = Math.min(\n Math.max(boundedPercent(settingNumber(settings, \"width\", 28)), 12),\n 90,\n );\n const zIndex = Math.max(Math.round(settingNumber(settings, \"zIndex\", 20)), 1);\n\n if (!title && !text && !imageUrl) {\n return null;\n }\n\n const content = (\n <div className=\"overflow-hidden rounded-lg border border-black/10 bg-white text-neutral-950 shadow-lg\">\n {imageUrl ? (\n <div className=\"aspect-[16/9] bg-neutral-100\">\n <CmsImage\n src={imageUrl}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n </div>\n ) : null}\n <div className=\"p-4\">\n {title ? (\n <p className=\"text-base font-semibold leading-6\">{title}</p>\n ) : null}\n {text ? (\n <p className=\"mt-1 text-sm leading-5 text-neutral-600\">{text}</p>\n ) : null}\n {linkText && linkUrl !== \"#\" ? (\n <span className=\"mt-3 inline-flex text-sm font-medium underline underline-offset-4\">\n {linkText}\n </span>\n ) : null}\n </div>\n </div>\n );\n\n return (\n <div\n className=\"absolute\"\n style={{\n left: `${x}%`,\n top: `${y}%`,\n width: `${width}%`,\n zIndex,\n }}\n >\n {linkText && linkUrl !== \"#\" ? (\n <LinkComponent href={linkUrl}>{content}</LinkComponent>\n ) : (\n content\n )}\n </div>\n );\n}\n\nexport function FaqSection({ section }: { section: CmsRenderSection }) {\n const items = orderedBlocks(section.blocks);\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"divide-y rounded-lg border bg-white\">\n {items.map((item, index) => (\n <details key={getCmsBlockKey(item, index)} className=\"group p-4\">\n <summary className=\"cursor-pointer text-sm font-medium text-neutral-950\">\n {settingContent(item.settings, \"question\") ||\n settingContent(item.settings, \"title\")}\n </summary>\n <p className=\"mt-2 text-sm leading-6 text-neutral-600\">\n {settingContent(item.settings, \"answer\") ||\n settingContent(item.settings, \"content\")}\n </p>\n </details>\n ))}\n </div>\n </section>\n );\n}\n\nfunction boundedPercent(value: number) {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), 100);\n}\n\nexport function NewsletterSection({ section }: { section: CmsRenderSection }) {\n const title = sectionTitleContent(section) || \"Recibe novedades\";\n const subtitle = settingContent(section.settings, \"subtitle\");\n const placeholder =\n settingString(section.settings, \"placeholder\") || \"tu@email.com\";\n const buttonText =\n settingContent(section.settings, \"buttonText\") || \"Suscribirme\";\n\n return (\n <section className=\"bg-neutral-950 px-4 py-14 text-white\">\n <div className=\"mx-auto max-w-2xl text-center\">\n <h2 className=\"text-3xl font-semibold\">{title}</h2>\n {subtitle ? <p className=\"mt-3 text-white/70\">{subtitle}</p> : null}\n <form className=\"mt-6 flex flex-col gap-2 sm:flex-row\">\n <input\n type=\"email\"\n placeholder={placeholder}\n className=\"h-10 flex-1 rounded-md border border-white/20 bg-white px-3 text-sm text-neutral-950 outline-none\"\n />\n <button\n type=\"submit\"\n className=\"h-10 rounded-md bg-white px-5 text-sm font-medium text-neutral-950\"\n >\n {buttonText}\n </button>\n </form>\n </div>\n </section>\n );\n}\n\nexport function IconRowSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n return (\n <section className=\"container mx-auto px-4 py-10\">\n <SectionHeading section={section} />\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {orderedBlocks(section.blocks).map((block, index) => {\n const settings = block.settings ?? {};\n const href = storefrontHref(settingString(settings, \"linkUrl\"));\n const content = (\n <div className=\"rounded-lg border bg-white p-4\">\n <p className=\"text-sm font-medium text-neutral-950\">\n {settingContent(settings, \"title\") ||\n settingContent(settings, \"label\")}\n </p>\n <p className=\"mt-1 text-sm text-neutral-600\">\n {settingContent(settings, \"subtitle\") ||\n settingContent(settings, \"description\")}\n </p>\n </div>\n );\n\n return href === \"#\" ? (\n <div key={getCmsBlockKey(block, index)}>{content}</div>\n ) : (\n <LinkComponent key={getCmsBlockKey(block, index)} href={href}>\n {content}\n </LinkComponent>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function TestimonialsSection({\n section,\n}: {\n section: CmsRenderSection;\n}) {\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"grid gap-4 md:grid-cols-3\">\n {orderedBlocks(section.blocks).map((block, index) => (\n <blockquote\n key={getCmsBlockKey(block, index)}\n className=\"rounded-lg border bg-white p-5\"\n >\n <p className=\"text-sm leading-6 text-neutral-700\">\n {settingString(block.settings, \"quote\") ||\n settingContent(block.settings, \"content\") ||\n settingContent(block.settings, \"text\")}\n </p>\n <footer className=\"mt-4 text-sm font-medium text-neutral-950\">\n {settingContent(block.settings, \"author\") ||\n settingContent(block.settings, \"name\")}\n </footer>\n </blockquote>\n ))}\n </div>\n </section>\n );\n}\n\nexport function StatsSection({ section }: { section: CmsRenderSection }) {\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {orderedBlocks(section.blocks).map((block, index) => (\n <div\n key={getCmsBlockKey(block, index)}\n className=\"rounded-lg border bg-white p-5\"\n >\n <p className=\"text-3xl font-semibold text-neutral-950\">\n {settingContent(block.settings, \"value\")}\n </p>\n <p className=\"mt-2 text-sm text-neutral-600\">\n {settingContent(block.settings, \"label\") ||\n settingContent(block.settings, \"title\")}\n </p>\n </div>\n ))}\n </div>\n </section>\n );\n}\n\nexport function TimelineSection({ section }: { section: CmsRenderSection }) {\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"space-y-4 border-l pl-5\">\n {orderedBlocks(section.blocks).map((block, index) => (\n <article key={getCmsBlockKey(block, index)} className=\"relative\">\n <span className=\"absolute -left-[27px] top-1 size-3 rounded-full bg-neutral-950\" />\n <p className=\"text-sm font-medium text-neutral-950\">\n {settingContent(block.settings, \"title\")}\n </p>\n <p className=\"mt-1 text-sm text-neutral-600\">\n {settingContent(block.settings, \"description\") ||\n settingContent(block.settings, \"content\")}\n </p>\n </article>\n ))}\n </div>\n </section>\n );\n}\n\nexport function ContactFormSection({ section }: { section: CmsRenderSection }) {\n const fields = orderedBlocks(section.blocks);\n const submitText = settingString(section.settings, \"submitText\") || \"Enviar\";\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <form className=\"mx-auto grid max-w-2xl gap-3\">\n {(fields.length > 0 ? fields : defaultContactFields()).map(\n (field, index) => (\n <ContactField key={getCmsBlockKey(field, index)} field={field} />\n ),\n )}\n <button className=\"h-10 rounded-md bg-neutral-950 px-4 text-sm font-medium text-white\">\n {submitText}\n </button>\n </form>\n </section>\n );\n}\n\nfunction ContactField({ field }: { field: CmsRenderBlock }) {\n const type = settingString(field.settings, \"type\") || \"text\";\n const label = settingString(field.settings, \"label\");\n const placeholder = settingString(field.settings, \"placeholder\");\n const name = settingString(field.settings, \"name\");\n const className = \"h-10 rounded-md border px-3 text-sm\";\n\n if (type === \"textarea\") {\n return (\n <textarea\n name={name}\n aria-label={label || placeholder}\n className=\"min-h-32 rounded-md border px-3 py-2 text-sm\"\n placeholder={placeholder || label}\n />\n );\n }\n\n if (type === \"select\") {\n const rawOptions = field.settings?.options;\n const options = Array.isArray(rawOptions)\n ? rawOptions.filter((item): item is string => typeof item === \"string\")\n : settingString(field.settings, \"options\")\n .split(\"\\n\")\n .map((item) => item.trim())\n .filter(Boolean);\n\n return (\n <select name={name} aria-label={label} className={className}>\n <option value=\"\">{placeholder || label}</option>\n {options.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <input\n name={name}\n type={type}\n aria-label={label || placeholder}\n className={className}\n placeholder={placeholder || label}\n />\n );\n}\n\nfunction defaultContactFields(): CmsRenderBlock[] {\n return [\n {\n type: \"field\",\n order: 1,\n settings: { name: \"fullName\", type: \"text\", label: \"Nombre\" },\n },\n {\n type: \"field\",\n order: 2,\n settings: { name: \"email\", type: \"email\", label: \"Email\" },\n },\n {\n type: \"field\",\n order: 3,\n settings: { name: \"message\", type: \"textarea\", label: \"Mensaje\" },\n },\n ];\n}\n\nexport function UnknownSection({ section }: { section: CmsRenderSection }) {\n return (\n <section className=\"container mx-auto px-4 py-8\">\n <div className=\"rounded border border-dashed p-4 text-sm text-neutral-500\">\n Seccion tipo "{section.type}" pendiente de renderer.\n </div>\n </section>\n );\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { StorefrontCollection } from \"../../../core/models/collection\";\nimport { formatCurrency } from \"../../../core/utils/format-currency\";\nimport { CmsImage, EmptyState, SectionHeading } from \"./shared\";\nimport type {\n CmsLinkProps,\n CmsProduct,\n CmsRenderBlock,\n CmsRenderSection,\n} from \"./types\";\nimport {\n DEFAULT_CMS_IMAGE_URL,\n getCmsBlockKey,\n storefrontHref,\n orderedBlocks,\n sectionTitleContent,\n settingContent,\n settingNumber,\n settingString,\n} from \"./utils\";\n\nexport function AnnouncementBarSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const text =\n settingContent(section.settings, \"text\") || sectionTitleContent(section);\n const linkText = settingContent(section.settings, \"linkText\");\n const href = storefrontHref(settingString(section.settings, \"linkUrl\"));\n\n if (!text) {\n return null;\n }\n\n return (\n <section className=\"bg-neutral-950 px-4 py-2 text-white\">\n <div className=\"container mx-auto flex flex-wrap items-center justify-center gap-2 text-center text-sm\">\n <span>{text}</span>\n {linkText && href !== \"#\" ? (\n <LinkComponent\n href={href}\n className=\"font-medium underline underline-offset-4\"\n >\n {linkText}\n </LinkComponent>\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function HeroSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const slides = orderedBlocks(section.blocks);\n const fallbackSlide: CmsRenderBlock = {\n id: `${section.id ?? \"section\"}-fallback`,\n type: \"slide\",\n order: 1,\n settings: section.settings ?? {},\n };\n const visibleSlides = slides.length > 0 ? slides : [fallbackSlide];\n\n return (\n <section className=\"bg-neutral-950 text-white\">\n <div className=\"flex snap-x overflow-x-auto\">\n {visibleSlides.map((slide, index) => {\n const settings = slide.settings ?? {};\n const imageUrl =\n settingString(settings, \"imageUrl\") ||\n settingString(section.settings, \"imageUrl\") ||\n DEFAULT_CMS_IMAGE_URL;\n const title =\n settingContent(settings, \"title\") ||\n settingContent(section.settings, \"title\") ||\n sectionTitleContent(section);\n const subtitle =\n settingContent(settings, \"subtitle\") ||\n settingContent(section.settings, \"subtitle\");\n const ctaText =\n settingContent(settings, \"ctaText\") ||\n settingContent(section.settings, \"ctaText\");\n const ctaUrl =\n settingString(settings, \"ctaUrl\") ||\n settingString(section.settings, \"ctaUrl\");\n const href = storefrontHref(ctaUrl);\n\n return (\n <article\n key={getCmsBlockKey(slide, index)}\n className=\"relative min-h-[520px] w-full shrink-0 snap-start overflow-hidden\"\n >\n <CmsImage\n src={imageUrl}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover opacity-75\"\n />\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/70 via-black/35 to-transparent\" />\n <div className=\"container relative z-10 mx-auto flex min-h-[520px] items-center px-4\">\n <div className=\"max-w-2xl py-16\">\n <h1 className=\"text-4xl font-semibold tracking-tight md:text-6xl\">\n {title}\n </h1>\n {subtitle ? (\n <p className=\"mt-4 max-w-xl text-base text-white/85 md:text-lg\">\n {subtitle}\n </p>\n ) : null}\n {ctaText && href !== \"#\" ? (\n <LinkComponent\n href={href}\n className=\"mt-8 inline-flex h-10 items-center rounded-md bg-white px-5 text-sm font-medium text-neutral-950 transition hover:bg-white/90\"\n >\n {ctaText}\n </LinkComponent>\n ) : null}\n </div>\n </div>\n </article>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function ProductsSection({\n section,\n products,\n carousel,\n linkComponent,\n currency,\n preview,\n}: {\n section: CmsRenderSection;\n products: CmsProduct[];\n carousel: boolean;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n preview: boolean;\n}) {\n const placeholders = preview && products.length === 0;\n const count = Math.min(\n productPreviewCount(section, carousel),\n carousel ? 5 : 8,\n );\n\n return (\n <section className={carousel ? \"py-12\" : \"container mx-auto px-4 py-12\"}>\n {carousel ? (\n <div className=\"container mx-auto px-4\">\n <SectionHeading section={section} />\n </div>\n ) : (\n <SectionHeading section={section} />\n )}\n\n <div className={carousel ? \"container mx-auto overflow-x-auto px-4\" : \"\"}>\n <div\n className={\n carousel\n ? \"flex min-w-full gap-4 pb-2\"\n : \"grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4\"\n }\n >\n {placeholders\n ? Array.from({ length: count }).map((_, index) => (\n <ProductPlaceholder key={index} carousel={carousel} />\n ))\n : products.map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n carousel={carousel}\n linkComponent={linkComponent}\n currency={currency}\n />\n ))}\n </div>\n </div>\n\n {!placeholders && products.length === 0 ? (\n <EmptyState>No hay productos para mostrar.</EmptyState>\n ) : null}\n </section>\n );\n}\n\nexport function CategoryGridSection({\n section,\n collections,\n linkComponent: LinkComponent,\n preview,\n}: {\n section: CmsRenderSection;\n collections: StorefrontCollection[];\n linkComponent: ComponentType<CmsLinkProps>;\n preview: boolean;\n}) {\n const blockItems = orderedBlocks(section.blocks)\n .map((block) => {\n const settings = block.settings ?? {};\n const name =\n settingContent(settings, \"name\") || settingContent(settings, \"title\");\n const url =\n settingString(settings, \"url\") || settingString(settings, \"linkUrl\");\n const imageUrl = settingString(settings, \"imageUrl\");\n\n if (!name) {\n return null;\n }\n\n return {\n id: getCmsBlockKey(block, block.order),\n name,\n href: storefrontHref(url || \"/collections\"),\n imageUrl: imageUrl || DEFAULT_CMS_IMAGE_URL,\n };\n })\n .filter(Boolean) as Array<{\n id: string;\n name: ReactNode;\n href: string;\n imageUrl: string;\n }>;\n const collectionItems = collections.map((collection) => ({\n id: collection.id,\n name: collection.name,\n href: `/store/collections/${collection.slug}`,\n imageUrl: collection.imageUrl || DEFAULT_CMS_IMAGE_URL,\n }));\n const previewItems = preview ? createPreviewCollections(section) : [];\n const items =\n blockItems.length > 0\n ? blockItems\n : collectionItems.length > 0\n ? collectionItems\n : previewItems;\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n {items.length > 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => (\n <LinkComponent\n key={item.id}\n href={item.href}\n className=\"group overflow-hidden rounded-lg border bg-white\"\n >\n <div className=\"aspect-[4/3] overflow-hidden bg-neutral-100\">\n <CmsImage\n src={item.imageUrl}\n alt=\"\"\n className=\"h-full w-full object-cover transition duration-300 group-hover:scale-105\"\n />\n </div>\n <div className=\"p-4\">\n <h3 className=\"text-base font-medium text-neutral-950\">\n {item.name}\n </h3>\n </div>\n </LinkComponent>\n ))}\n </div>\n ) : (\n <EmptyState>No hay categorias para mostrar.</EmptyState>\n )}\n </section>\n );\n}\n\nexport function PromoCardsSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const cards = orderedBlocks(section.blocks);\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"grid gap-4 md:grid-cols-2\">\n {cards.map((card, index) => {\n const settings = card.settings ?? {};\n const title = settingContent(settings, \"title\");\n const subtitle = settingContent(settings, \"subtitle\");\n const imageUrl =\n settingString(settings, \"imageUrl\") || DEFAULT_CMS_IMAGE_URL;\n const ctaText = settingContent(settings, \"ctaText\");\n const ctaUrl = storefrontHref(\n settingString(settings, \"ctaUrl\") || settingString(settings, \"url\"),\n );\n\n return (\n <LinkComponent\n key={getCmsBlockKey(card, index)}\n href={ctaUrl}\n className=\"group relative min-h-[260px] overflow-hidden rounded-lg bg-neutral-900 text-white\"\n >\n <CmsImage\n src={imageUrl}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover opacity-75 transition duration-300 group-hover:scale-105\"\n />\n <div className=\"absolute inset-0 bg-black/35\" />\n <div className=\"relative z-10 flex min-h-[260px] flex-col justify-end p-6\">\n <h3 className=\"text-2xl font-semibold\">{title}</h3>\n {subtitle ? (\n <p className=\"mt-2 text-white/85\">{subtitle}</p>\n ) : null}\n {ctaText ? (\n <span className=\"mt-4 text-sm font-medium\">{ctaText}</span>\n ) : null}\n </div>\n </LinkComponent>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function LogoSliderSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n return (\n <section className=\"container mx-auto px-4 py-10\">\n <SectionHeading section={section} />\n <div className=\"flex gap-4 overflow-x-auto\">\n {orderedBlocks(section.blocks).map((block, index) => {\n const settings = block.settings ?? {};\n const imageUrl =\n settingString(settings, \"imageUrl\") || DEFAULT_CMS_IMAGE_URL;\n const alt = settingString(settings, \"alt\") || \"Logo\";\n const href = storefrontHref(settingString(settings, \"linkUrl\"));\n const logo = (\n <div className=\"flex h-24 w-40 shrink-0 items-center justify-center rounded-lg border bg-white p-4\">\n <CmsImage\n src={imageUrl}\n alt={alt}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n );\n\n return href !== \"#\" ? (\n <LinkComponent key={getCmsBlockKey(block, index)} href={href}>\n {logo}\n </LinkComponent>\n ) : (\n <div key={getCmsBlockKey(block, index)}>{logo}</div>\n );\n })}\n </div>\n </section>\n );\n}\n\nfunction ProductCard({\n product,\n carousel,\n linkComponent: LinkComponent,\n currency,\n}: {\n product: CmsProduct;\n carousel: boolean;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n}) {\n const onSale =\n product.compareAtPrice != null && product.compareAtPrice > product.price;\n\n return (\n <LinkComponent\n href={`/product/${product.slug}`}\n className={\n carousel\n ? \"group w-[220px] shrink-0 sm:w-[250px] md:w-[280px]\"\n : \"group\"\n }\n >\n <div className=\"aspect-square overflow-hidden rounded-lg border border-neutral-200 bg-neutral-100 transition-all duration-300 group-hover:border-neutral-300\">\n <CmsImage\n src={product.imageUrl || DEFAULT_CMS_IMAGE_URL}\n alt={product.name}\n className=\"h-full w-full object-cover object-center transition-transform duration-500 group-hover:scale-105\"\n />\n </div>\n <div className=\"mt-4 flex flex-col\">\n <h3 className=\"line-clamp-2 text-sm font-medium text-neutral-950\">\n {product.name}\n </h3>\n <div className=\"mt-1 flex items-center gap-2\">\n <span className=\"text-sm font-medium text-neutral-950\">\n {formatCurrency(product.price, currency)}\n </span>\n {onSale ? (\n <span className=\"text-sm text-neutral-500 line-through\">\n {formatCurrency(product.compareAtPrice ?? 0, currency)}\n </span>\n ) : null}\n </div>\n </div>\n </LinkComponent>\n );\n}\n\nfunction ProductPlaceholder({ carousel }: { carousel: boolean }) {\n return (\n <div\n className={carousel ? \"w-[220px] shrink-0 sm:w-[250px] md:w-[280px]\" : \"\"}\n >\n <div className=\"aspect-square rounded-lg bg-neutral-100\" />\n <div className=\"mt-4 h-3 w-3/4 rounded bg-neutral-200\" />\n <div className=\"mt-2 h-3 w-1/2 rounded bg-neutral-100\" />\n </div>\n );\n}\n\nfunction productPreviewCount(section: CmsRenderSection, carousel: boolean) {\n const configuredBlocks = orderedBlocks(section.blocks).length;\n if (configuredBlocks > 0) {\n return configuredBlocks;\n }\n\n return settingNumber(section.settings, \"limit\", carousel ? 5 : 8);\n}\n\nfunction createPreviewCollections(section: CmsRenderSection) {\n const count = Math.min(settingNumber(section.settings, \"limit\", 6), 6);\n\n return Array.from({ length: count }, (_, index) => ({\n id: `preview-collection-${index + 1}`,\n name: `Categoria ${index + 1}`,\n href: \"/store/collections/all\",\n imageUrl: DEFAULT_CMS_IMAGE_URL,\n }));\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { CmsLinkProps, CmsRenderSection } from \"./types\";\nimport {\n layoutAlign,\n layoutBackground,\n layoutChildren,\n layoutGap,\n layoutJustify,\n layoutMaxWidth,\n layoutPadding,\n settingNumber,\n settingString,\n} from \"./utils\";\n\ntype LayoutSectionProps = {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n preview: boolean;\n renderSections: (sections: CmsRenderSection[]) => ReactNode;\n};\n\nexport function LayoutSection({ section, renderSections }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n const paddingY = settingString(settings, \"paddingY\") || \"medium\";\n const maxWidth = settingString(settings, \"maxWidth\") || \"container\";\n const background = settingString(settings, \"background\") || \"default\";\n\n return (\n <section\n className={`${layoutBackground(background)} ${layoutPadding(paddingY)}`}\n >\n <div className={`mx-auto px-4 ${layoutMaxWidth(maxWidth)}`}>\n {renderSections(layoutChildren(settings, \"content\"))}\n </div>\n </section>\n );\n}\n\nexport function LayoutGrid({ section, renderSections }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n const columnCount = Math.min(\n Math.max(Math.round(settingNumber(settings, \"columnCount\", 2)), 1),\n 6,\n );\n\n return (\n <div\n className={`grid ${layoutGap(settingString(settings, \"gap\"))}`}\n style={{\n gridTemplateColumns: `repeat(${columnCount}, minmax(0, 1fr))`,\n }}\n >\n {renderSections(layoutChildren(settings, \"content\"))}\n </div>\n );\n}\n\nexport function LayoutFlex({ section, renderSections }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n\n return (\n <div\n className={[\n \"flex\",\n settingString(settings, \"direction\") === \"column\"\n ? \"flex-col\"\n : \"flex-col md:flex-row\",\n settingString(settings, \"wrap\") === \"nowrap\"\n ? \"flex-nowrap\"\n : \"flex-wrap\",\n layoutGap(settingString(settings, \"gap\")),\n layoutAlign(settingString(settings, \"align\")),\n layoutJustify(settingString(settings, \"justify\")),\n ].join(\" \")}\n >\n {renderSections(layoutChildren(settings, \"content\"))}\n </div>\n );\n}\n\nexport function LayoutSpace({ section }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n const size = settingString(settings, \"size\") || \"24px\";\n const direction = settingString(settings, \"direction\") || \"vertical\";\n const isHorizontal = direction === \"horizontal\";\n const isBoth = direction === \"both\";\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n display: \"block\",\n width: isHorizontal || isBoth ? size : \"100%\",\n height: isHorizontal ? \"100%\" : size,\n }}\n />\n );\n}\n","import type { ComponentType } from \"react\";\nimport {\n ContactFormSection,\n CustomHtmlSection,\n FaqSection,\n FloatingBlockSection,\n IconRowSection,\n NewsletterSection,\n RichTextSection,\n StatsSection,\n TestimonialsSection,\n TimelineSection,\n UnknownSection,\n} from \"./cms-sections/content-sections\";\nimport {\n AnnouncementBarSection,\n CategoryGridSection,\n HeroSection,\n LogoSliderSection,\n ProductsSection,\n PromoCardsSection,\n} from \"./cms-sections/ecommerce-sections\";\nimport {\n LayoutFlex,\n LayoutGrid,\n LayoutSection,\n LayoutSpace,\n} from \"./cms-sections/layout-sections\";\nimport { DefaultLink } from \"./cms-sections/shared\";\nimport type {\n CmsLinkProps,\n CmsRenderSection,\n CmsSectionData,\n CmsSectionsRendererProps,\n} from \"./cms-sections/types\";\nimport {\n DEFAULT_CMS_IMAGE_URL,\n canonicalSectionType,\n getCmsSectionKey,\n productSortValue,\n sanitizeHtml,\n storefrontHref,\n} from \"./cms-sections/utils\";\n\nexport type {\n CmsLinkProps,\n CmsProduct,\n CmsRenderBlock,\n CmsRenderSection,\n CmsRenderSettings,\n CmsSectionData,\n CmsSectionsRendererProps,\n} from \"./cms-sections/types\";\n\nexport {\n DEFAULT_CMS_IMAGE_URL,\n canonicalSectionType,\n getCmsSectionKey,\n productSortValue,\n sanitizeHtml,\n storefrontHref,\n};\n\nexport function CmsSectionsRenderer({\n sections,\n sectionData,\n linkComponent,\n currency = \"PEN\",\n preview = false,\n wrap = true,\n}: CmsSectionsRendererProps) {\n const LinkComponent = linkComponent ?? DefaultLink;\n const sortedSections = [...sections].sort((a, b) => a.order - b.order);\n const content = (\n <>\n {sortedSections.map((section, index) => {\n const sectionKey = getCmsSectionKey(section, index);\n\n return (\n <CmsSection\n key={sectionKey}\n section={section}\n data={sectionData?.[sectionKey]}\n linkComponent={LinkComponent}\n currency={currency}\n preview={preview}\n />\n );\n })}\n </>\n );\n\n return wrap ? <div className=\"relative\">{content}</div> : content;\n}\n\nfunction CmsSection({\n section,\n data,\n linkComponent,\n currency,\n preview,\n}: {\n section: CmsRenderSection;\n data?: CmsSectionData;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n preview: boolean;\n}) {\n const type = canonicalSectionType(section.type);\n const renderSections = (sections: CmsRenderSection[]) => (\n <CmsSectionsRenderer\n sections={sections}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n wrap={false}\n />\n );\n\n if (type === \"layout-section\") {\n return (\n <LayoutSection\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"layout-grid\") {\n return (\n <LayoutGrid\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"layout-flex\") {\n return (\n <LayoutFlex\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"layout-space\") {\n return (\n <LayoutSpace\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"hero\") {\n return <HeroSection section={section} linkComponent={linkComponent} />;\n }\n\n if (type === \"announcement-bar\") {\n return (\n <AnnouncementBarSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"product-list\" || type === \"product-carousel\") {\n return (\n <ProductsSection\n section={section}\n products={data?.products ?? []}\n carousel={type === \"product-carousel\"}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n />\n );\n }\n\n if (type === \"category-grid\" || type === \"collection-list\") {\n return (\n <CategoryGridSection\n section={section}\n collections={data?.collections ?? []}\n linkComponent={linkComponent}\n preview={preview}\n />\n );\n }\n\n if (type === \"promo-cards\") {\n return (\n <PromoCardsSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"rich-text\" || type === \"seo-text\") {\n return <RichTextSection section={section} />;\n }\n\n if (type === \"custom-html\") {\n return <CustomHtmlSection section={section} />;\n }\n\n if (type === \"floating-block\") {\n return (\n <FloatingBlockSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"faq\") {\n return <FaqSection section={section} />;\n }\n\n if (type === \"newsletter\") {\n return <NewsletterSection section={section} />;\n }\n\n if (type === \"trust-badges\" || type === \"widget-row\") {\n return <IconRowSection section={section} linkComponent={linkComponent} />;\n }\n\n if (type === \"logo-slider\") {\n return (\n <LogoSliderSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"testimonials\") {\n return <TestimonialsSection section={section} />;\n }\n\n if (type === \"stats\") {\n return <StatsSection section={section} />;\n }\n\n if (type === \"timeline\") {\n return <TimelineSection section={section} />;\n }\n\n if (type === \"contact-form\") {\n return <ContactFormSection section={section} />;\n }\n\n return <UnknownSection section={section} />;\n}\n","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect } from \"react\";\nimport { formatCurrency, type StorefrontProductDetail, type StorefrontVariant } from \"@ecomiq/storefront/react\";\nimport type { OptionGroup, SelectedOptions } from \"./types\";\n\nfunction buildOptionGroups(variants: StorefrontVariant[]): OptionGroup[] {\n const map = new Map<string, Map<string, string>>();\n for (const v of variants) {\n for (const opt of v.options ?? []) {\n const key = opt.key;\n const name = opt.name ?? key;\n if (!map.has(key)) map.set(key, new Map());\n map.get(key)!.set(opt.value, name);\n }\n }\n return Array.from(map.entries()).map(([key, valueMap]) => ({\n key,\n name: Array.from(valueMap.values())[0] ?? key,\n values: Array.from(valueMap.keys()),\n }));\n}\n\nfunction findVariant(\n variants: StorefrontVariant[],\n selected: SelectedOptions,\n hasConfigurableOptions: boolean\n): StorefrontVariant | null {\n // Producto con variante(s) pero sin opciones (p. ej. options: []): una sola variante implícita\n if (!hasConfigurableOptions && variants.length > 0) {\n return variants[0] ?? null;\n }\n if (Object.keys(selected).length === 0) return null;\n for (const v of variants) {\n const opts = v.options ?? [];\n const match =\n opts.length > 0 &&\n opts.every((o: { key: string; value: string }) => selected[o.key] === o.value);\n if (match) return v;\n }\n return null;\n}\n\nfunction getInitialOptions(\n variants: StorefrontVariant[],\n optionGroups: OptionGroup[]\n): SelectedOptions {\n const first = variants[0];\n if (!first) return {};\n const opts = first.options ?? [];\n const selected: SelectedOptions = {};\n for (const g of optionGroups) {\n const o = opts.find((x: { key: string; value: string }) => x.key === g.key);\n if (o) selected[g.key] = o.value;\n }\n return selected;\n}\n\nexport type ProductVariantSelectorProps = {\n product: StorefrontProductDetail;\n currency?: string;\n features?: string[];\n onVariantChange?: (variant: StorefrontVariant | null, price: number) => void;\n children?: (props: {\n product: StorefrontProductDetail;\n selectedVariant: StorefrontVariant | null;\n displayPrice: number;\n compareAtPrice: number | null | undefined;\n isAvailable: boolean;\n selectedOptions: SelectedOptions;\n }) => React.ReactNode;\n};\n\nexport function ProductVariantSelector({\n product,\n currency = \"USD\",\n features = [],\n onVariantChange,\n children,\n}: ProductVariantSelectorProps) {\n const variants = useMemo(() => product.variants ?? [], [product.variants]);\n const optionGroups = useMemo(() => buildOptionGroups(variants), [variants]);\n const hasConfigurableOptions = optionGroups.length > 0;\n\n const [selectedOptions, setSelectedOptions] = useState<SelectedOptions>(() =>\n getInitialOptions(variants, optionGroups)\n );\n\n const selectedVariant = useMemo(\n () => findVariant(variants, selectedOptions, hasConfigurableOptions),\n [variants, selectedOptions, hasConfigurableOptions]\n );\n\n const displayPrice = selectedVariant?.price ?? product.price ?? 0;\n const compareAtPrice = selectedVariant?.compareAtPrice ?? product.compareAtPrice;\n const isAvailable =\n (selectedVariant ? (selectedVariant.quantity ?? 0) > 0 : product.isAvailable) ?? true;\n\n useEffect(() => {\n onVariantChange?.(selectedVariant, displayPrice);\n }, [selectedVariant, displayPrice, onVariantChange]);\n\n const setOption = useCallback((key: string, value: string) => {\n setSelectedOptions((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n const hasVariants = hasConfigurableOptions;\n\n return (\n <div className=\"space-y-5\">\n <div className=\"flex items-baseline gap-2 flex-wrap\">\n <span\n className=\"inline-flex items-center rounded-md bg-primary/10 px-2.5 py-0.5 text-base font-semibold text-primary\"\n data-testid=\"product-display-price\"\n >\n {formatCurrency(displayPrice, currency)}\n </span>\n {compareAtPrice != null && compareAtPrice > displayPrice && (\n <span className=\"text-sm text-muted-foreground line-through\">\n {formatCurrency(compareAtPrice, currency)}\n </span>\n )}\n </div>\n\n {/* Option groups (Color, Size, etc.) */}\n {hasVariants &&\n optionGroups.map((group) => (\n <div key={group.key} className=\"space-y-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {group.name}\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.values.map((value) => {\n const isSelected = selectedOptions[group.key] === value;\n const isColorLike =\n group.key.toLowerCase().includes(\"color\") ||\n group.key.toLowerCase().includes(\"colour\");\n return (\n <button\n key={value}\n type=\"button\"\n onClick={() => setOption(group.key, value)}\n className={\n isColorLike\n ? `min-w-[72px] rounded-md border-2 px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-primary text-foreground\"\n : \"border-border bg-muted/30 text-foreground hover:border-muted-foreground/50\"\n }`\n : `rounded-md border px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-muted ring-1 ring-primary\"\n : \"border-border bg-transparent text-muted-foreground hover:border-muted-foreground/50 hover:text-foreground\"\n }`\n }\n style={\n isColorLike && isSelected && value.toLowerCase() === \"black\"\n ? { backgroundColor: \"#1a1a1a\", borderColor: \"#1a1a1a\", color: \"#fff\" }\n : isColorLike && value.toLowerCase() === \"white\"\n ? { backgroundColor: \"#fafafa\", color: \"#1a1a1a\", borderColor: \"#e5e5e5\" }\n : undefined\n }\n data-testid={`variant-option-${group.key}-${value}`}\n >\n {value}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n\n {features.length > 0 && (\n <ul className=\"list-disc list-inside space-y-1 text-sm text-muted-foreground\">\n {features.map((f, i) => (\n <li key={i}>{f}</li>\n ))}\n </ul>\n )}\n\n {/* Add to cart slot */}\n {children?.({\n product,\n selectedVariant,\n displayPrice,\n compareAtPrice,\n isAvailable,\n selectedOptions,\n })}\n </div>\n );\n}\n","import { StoreTheme } from \"@ecomiq/storefront/react\"\nimport { JSX } from \"react\"\n\ninterface ThemeInjectorProps {\n theme: StoreTheme\n className?: string\n}\n\nexport function SafeThemeInjector({ theme, className }: ThemeInjectorProps): JSX.Element | null {\n try {\n // Validación de theme\n if (!theme || typeof theme !== 'object') {\n console.warn('ThemeInjector: Invalid theme provided')\n return null\n }\n\n if (!theme.colors || typeof theme.colors !== 'object') {\n console.warn('ThemeInjector: Theme colors are required')\n return null\n }\n\n const generateSafeCSSVariables = (): string => {\n const cssRules: string[] = [':root {']\n\n const toKebabCase = (input: string): string =>\n input\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/_/g, '-')\n .toLowerCase();\n \n // Helper function para validar y sanitizar valores CSS\n const sanitizeCSSValue = (value: unknown): string | null => {\n if (typeof value !== 'string') return null\n const trimmed = value.trim()\n if (!trimmed) return null\n \n // Basic CSS value validation (puedes expandir según necesites)\n const isValidCSSValue = /^[a-zA-Z0-9\\s,()#.-]+$/.test(trimmed)\n return isValidCSSValue ? trimmed : null\n }\n\n // Colors: --color-* (Tailwind) and --theme-* (globals.css var(--theme-border), etc.)\n if (theme.colors && typeof theme.colors === 'object') {\n Object.entries(theme.colors).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --color-${key}: ${sanitizedValue};`)\n cssRules.push(` --theme-${key}: ${sanitizedValue};`)\n // También inyectamos variables “raw” para componentes que usan var(--popover), var(--background), etc.\n cssRules.push(` --${key}: ${sanitizedValue};`)\n cssRules.push(` --${toKebabCase(key)}: ${sanitizedValue};`)\n }\n })\n }\n\n // Fonts con validación\n if (theme.fonts && typeof theme.fonts === 'object') {\n Object.entries(theme.fonts).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --font-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n // Spacing con validación\n if (theme.spacing && typeof theme.spacing === 'object') {\n Object.entries(theme.spacing).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --spacing-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n // Border Radius con validación\n if (theme.borderRadius && typeof theme.borderRadius === 'object') {\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --radius-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n // Shadows con validación\n if (theme.shadows && typeof theme.shadows === 'object') {\n Object.entries(theme.shadows).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --shadow-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n cssRules.push('}')\n return cssRules.join('\\n')\n }\n\n const cssVariables = generateSafeCSSVariables()\n\n return (\n <style\n dangerouslySetInnerHTML={{ __html: cssVariables }}\n data-theme-injector={theme.id}\n data-theme-name={theme.name}\n className={className}\n suppressHydrationWarning\n />\n )\n } catch (error) {\n console.error('ThemeInjector: Error generating theme styles', error)\n return null\n }\n}","import type { StorefrontPageDetail, StorefrontSettings } from \"@ecomiq/storefront/react\";\nimport { StorefrontPageDetailSchema } from \"@ecomiq/storefront/react\";\n\nfunction isRenderableCmsPage(p: { status?: string }): boolean {\n if (!p.status) return true;\n return p.status === \"published\";\n}\n\n/**\n * Busca una página CMS en `settings.cms.pages` (payload de `getPublicStore` / settings)\n * y la valida como `StorefrontPageDetail` para `DynamicPage`.\n */\nexport function findStorefrontCmsPageBySlug(\n settings: StorefrontSettings | null | undefined,\n slug: string\n): StorefrontPageDetail | null {\n const pages = settings?.cms?.pages;\n if (!pages?.length) return null;\n const raw = pages.find(\n (p) => p.slug === slug && isRenderableCmsPage(p as { status?: string })\n );\n if (!raw) return null;\n const parsed = StorefrontPageDetailSchema.safeParse(raw);\n return parsed.success ? parsed.data : null;\n}\n"]}
|