@ecomiq/storefront 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +29 -19
  2. package/dist/{chunk-TDQ53V3E.js → chunk-3C4ZLHSU.js} +7 -321
  3. package/dist/chunk-3C4ZLHSU.js.map +1 -0
  4. package/dist/{chunk-Q762YXCQ.js → chunk-3URTJY6X.js} +4 -5
  5. package/dist/chunk-3URTJY6X.js.map +1 -0
  6. package/dist/chunk-ASFU32ZM.js +236 -0
  7. package/dist/chunk-ASFU32ZM.js.map +1 -0
  8. package/dist/{chunk-PCLA4TZF.js → chunk-EADDSNJS.js} +4 -157
  9. package/dist/chunk-EADDSNJS.js.map +1 -0
  10. package/dist/chunk-S7CPZ4UE.js +6 -0
  11. package/dist/chunk-S7CPZ4UE.js.map +1 -0
  12. package/dist/chunk-W372BFMG.js +159 -0
  13. package/dist/chunk-W372BFMG.js.map +1 -0
  14. package/dist/chunks/client.d.ts +1 -643
  15. package/dist/chunks/client.js +2 -21
  16. package/dist/chunks/client.js.map +1 -1
  17. package/dist/chunks/config.js +2 -1
  18. package/dist/chunks/core-public.d.ts +130 -0
  19. package/dist/chunks/core-public.js +98 -0
  20. package/dist/chunks/core-public.js.map +1 -0
  21. package/dist/chunks/server-nextjs.d.ts +3 -2
  22. package/dist/chunks/server-nextjs.js +7 -4
  23. package/dist/chunks/server-nextjs.js.map +1 -1
  24. package/dist/chunks/server-tanstack.d.ts +3 -2
  25. package/dist/chunks/server-tanstack.js +7 -4
  26. package/dist/chunks/server-tanstack.js.map +1 -1
  27. package/dist/collection-BHD4hhQa.d.ts +3609 -0
  28. package/dist/{format-currency-oJD9jGYW.d.ts → ecomiq-oauth-password-plugin-DJCOOij3.d.ts} +165 -3299
  29. package/dist/index.d.ts +1 -12
  30. package/dist/index.js +1 -11
  31. package/dist/index.server.d.ts +1 -0
  32. package/dist/index.server.js +1 -0
  33. package/dist/nextjs/api.js +2 -1
  34. package/dist/nextjs/api.js.map +1 -1
  35. package/dist/nextjs.d.ts +1 -12
  36. package/dist/nextjs.js +2 -11
  37. package/dist/react.d.ts +1 -0
  38. package/dist/react.js +2 -0
  39. package/dist/react.js.map +1 -0
  40. package/dist/tanstack/api.js +3 -2
  41. package/dist/tanstack/api.js.map +1 -1
  42. package/dist/tanstack.d.ts +1 -12
  43. package/dist/tanstack.js +2 -11
  44. package/package.json +5 -1
  45. package/dist/chunk-PCLA4TZF.js.map +0 -1
  46. package/dist/chunk-Q762YXCQ.js.map +0 -1
  47. package/dist/chunk-TDQ53V3E.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/models/page.ts","../src/core/models/product.ts","../src/core/models/collection.ts"],"names":["z"],"mappings":"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","file":"chunk-ASFU32ZM.js","sourcesContent":["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';\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 { 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"]}
@@ -1,9 +1,6 @@
1
- import { existsSync } from 'fs';
2
- import { createRequire } from 'module';
3
- import { join } from 'path';
4
1
  import { z } from 'zod';
5
2
 
6
- // src/core/config/ecomiq-config.ts
3
+ // src/core/models/store.ts
7
4
  var StorefrontCheckoutSettingsSchema = z.object({
8
5
  allowGuestCheckout: z.boolean().optional(),
9
6
  identityScope: z.enum(["store", "tenant", "global"]).optional(),
@@ -204,156 +201,6 @@ var StorefrontSettingsSchema = z.preprocess(
204
201
  StorefrontSettingsEnvelopeSchema
205
202
  );
206
203
 
207
- // src/core/client/storefront-settings-kv.service.ts
208
- async function getCloudflareEnv() {
209
- try {
210
- const { getCloudflareContext } = await import('@opennextjs/cloudflare');
211
- const { env } = await getCloudflareContext({ async: true });
212
- return env;
213
- } catch {
214
- throw Object.assign(
215
- new Error(
216
- "Modo KV requiere @opennextjs/cloudflare en tu proyecto. Inst\xE1lalo y configura el binding KV, o usa PUBLIC_STORE_SETTINGS_SOURCE=api."
217
- ),
218
- { status: 500 }
219
- );
220
- }
221
- }
222
- var ECOMIQ_CLIENTS_STORE_KV_BINDING = "ecomiq_clients_store";
223
- var ECOMIQ_APP_APEX = "ecomiq.app";
224
- var ECOMIQ_APP_SUFFIX = [`.${ECOMIQ_APP_APEX}`, `.localhost`];
225
- function normalizeStoreHost(hostHeader) {
226
- let h = hostHeader.trim().toLowerCase();
227
- const colon = h.indexOf(":");
228
- if (colon !== -1) h = h.slice(0, colon);
229
- if (h.startsWith("www.")) h = h.slice(4);
230
- return h;
231
- }
232
- function resolveStorefrontSettingsHost(hostHeader) {
233
- const host = normalizeStoreHost(hostHeader);
234
- if (!host) {
235
- throw Object.assign(new Error("Host inv\xE1lido para tienda"), { status: 400 });
236
- }
237
- if (host === ECOMIQ_APP_APEX) {
238
- throw Object.assign(new Error("Host apex ecomiq.app sin slug de tienda"), { status: 400 });
239
- }
240
- if (ECOMIQ_APP_SUFFIX.some((suffix) => host.endsWith(suffix))) {
241
- const slug = host.slice(0, -(ECOMIQ_APP_SUFFIX.find((suffix) => host.endsWith(suffix))?.length ?? 0));
242
- if (!slug) {
243
- throw Object.assign(new Error("Host sin slug para ecomiq.app"), { status: 400 });
244
- }
245
- return slug;
246
- }
247
- return host;
248
- }
249
- function buildStorefrontKvSnapshotKeyFromStoreKey(storeKey) {
250
- const key = storeKey.trim();
251
- if (!key) {
252
- throw Object.assign(new Error("Store key vac\xEDo para KV"), { status: 400 });
253
- }
254
- return `storefront:snapshots:store:${key}`;
255
- }
256
- function buildStorefrontKvSnapshotKey(hostHeader) {
257
- return buildStorefrontKvSnapshotKeyFromStoreKey(
258
- resolveStorefrontSettingsHost(hostHeader)
259
- );
260
- }
261
- function getKvNamespace(env) {
262
- if (!env || typeof env !== "object") return void 0;
263
- const ns = env[ECOMIQ_CLIENTS_STORE_KV_BINDING];
264
- if (!ns || typeof ns !== "object" || typeof ns.get !== "function") {
265
- return void 0;
266
- }
267
- return ns;
268
- }
269
- async function getStorefrontSettingsFromKvByStoreKey(storeKey) {
270
- const env = await getCloudflareEnv();
271
- const kv = getKvNamespace(env);
272
- if (!kv) {
273
- const err = new Error(
274
- `Binding KV "${ECOMIQ_CLIENTS_STORE_KV_BINDING}" no encontrado. Configura kv_namespaces en wrangler.`
275
- );
276
- throw Object.assign(err, { status: 500 });
277
- }
278
- const cacheKey = buildStorefrontKvSnapshotKeyFromStoreKey(storeKey);
279
- const raw = await kv.get(cacheKey, { type: "json" });
280
- if (raw == null) {
281
- const err = new Error("Store settings not found in KV");
282
- throw Object.assign(err, { status: 404 });
283
- }
284
- return StorefrontSettingsSchema.parse(raw);
285
- }
286
- async function getStorefrontSettingsFromKv(hostHeader) {
287
- return getStorefrontSettingsFromKvByStoreKey(
288
- resolveStorefrontSettingsHost(hostHeader)
289
- );
290
- }
291
-
292
- // src/core/config/ecomiq-config.ts
293
- var CONFIG_FILENAMES = [
294
- "ecomiq.config.js",
295
- "ecomiq.config.cjs",
296
- "ecomiq.config.mjs"
297
- ];
298
- var EcomiqConfigSchema = z.object({
299
- /**
300
- * Slug de tienda en Ecomiq (p. ej. `mi-tienda` para `mi-tienda.ecomiq.app`).
301
- * Si está definido, tiene prioridad sobre el `Host` de la request (útil en `localhost`).
302
- */
303
- slugStore: z.string().min(1).optional()
304
- });
305
- var cachedConfig;
306
- function parseExportedConfig(raw) {
307
- const candidate = raw && typeof raw === "object" && "default" in raw ? raw.default : raw;
308
- const parsed = EcomiqConfigSchema.safeParse(candidate);
309
- if (!parsed.success) {
310
- console.warn(
311
- "[ecomiq] ecomiq.config.* inv\xE1lido:",
312
- parsed.error.flatten().fieldErrors
313
- );
314
- return null;
315
- }
316
- const slugStore = parsed.data.slugStore?.trim();
317
- return slugStore ? { slugStore } : {};
318
- }
319
- function loadEcomiqConfig(cwd = process.cwd()) {
320
- if (cachedConfig !== void 0) return cachedConfig;
321
- for (const filename of CONFIG_FILENAMES) {
322
- const configPath = join(cwd, filename);
323
- if (!existsSync(configPath)) continue;
324
- try {
325
- const requireFromApp = createRequire(join(cwd, "package.json"));
326
- const loaded = requireFromApp(configPath);
327
- const parsed = parseExportedConfig(loaded);
328
- cachedConfig = parsed;
329
- return cachedConfig;
330
- } catch (error) {
331
- console.warn(`[ecomiq] No se pudo cargar ${configPath}:`, error);
332
- }
333
- }
334
- cachedConfig = null;
335
- return null;
336
- }
337
- function clearEcomiqConfigCache() {
338
- cachedConfig = void 0;
339
- }
340
- function resolvePublicStoreKey(hostHeader, cwd) {
341
- const slugFromConfig = loadEcomiqConfig(cwd)?.slugStore?.trim();
342
- if (slugFromConfig) return slugFromConfig;
343
- if (!hostHeader?.trim()) {
344
- throw Object.assign(
345
- new Error(
346
- "Host is required, o define slugStore en ecomiq.config.js en la ra\xEDz del proyecto"
347
- ),
348
- { status: 400 }
349
- );
350
- }
351
- return resolveStorefrontSettingsHost(hostHeader);
352
- }
353
- function hasEcomiqSlugStoreConfig(cwd) {
354
- return Boolean(loadEcomiqConfig(cwd)?.slugStore?.trim());
355
- }
356
-
357
- export { ECOMIQ_CLIENTS_STORE_KV_BINDING, EcomiqConfigSchema, StorefrontSettingsSchema, buildStorefrontKvSnapshotKey, buildStorefrontKvSnapshotKeyFromStoreKey, clearEcomiqConfigCache, getStorefrontSettingsFromKv, getStorefrontSettingsFromKvByStoreKey, hasEcomiqSlugStoreConfig, loadEcomiqConfig, normalizeStoreHost, resolvePublicStoreKey, resolveStorefrontSettingsHost };
358
- //# sourceMappingURL=chunk-PCLA4TZF.js.map
359
- //# sourceMappingURL=chunk-PCLA4TZF.js.map
204
+ export { StorefrontSettingsSchema, StorefrontStoreSchema };
205
+ //# sourceMappingURL=chunk-EADDSNJS.js.map
206
+ //# sourceMappingURL=chunk-EADDSNJS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/models/store.ts"],"names":[],"mappings":"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","file":"chunk-EADDSNJS.js","sourcesContent":["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"]}
@@ -0,0 +1,6 @@
1
+ // src/core/constants/api-paths.ts
2
+ var STOREFRONT_API_PATH_PREFIX = "v1";
3
+
4
+ export { STOREFRONT_API_PATH_PREFIX };
5
+ //# sourceMappingURL=chunk-S7CPZ4UE.js.map
6
+ //# sourceMappingURL=chunk-S7CPZ4UE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/constants/api-paths.ts"],"names":[],"mappings":";AACO,IAAM,0BAAA,GAA6B","file":"chunk-S7CPZ4UE.js","sourcesContent":["/** Prefijo base de la API storefront (ej. v1/storefront). */\nexport const STOREFRONT_API_PATH_PREFIX = \"v1\";\n"]}
@@ -0,0 +1,159 @@
1
+ import { StorefrontSettingsSchema } from './chunk-EADDSNJS.js';
2
+ import { existsSync } from 'fs';
3
+ import { createRequire } from 'module';
4
+ import { join } from 'path';
5
+ import { z } from 'zod';
6
+
7
+ // src/core/client/storefront-settings-kv.service.ts
8
+ async function getCloudflareEnv() {
9
+ try {
10
+ const { getCloudflareContext } = await import('@opennextjs/cloudflare');
11
+ const { env } = await getCloudflareContext({ async: true });
12
+ return env;
13
+ } catch {
14
+ throw Object.assign(
15
+ new Error(
16
+ "Modo KV requiere @opennextjs/cloudflare en tu proyecto. Inst\xE1lalo y configura el binding KV, o usa PUBLIC_STORE_SETTINGS_SOURCE=api."
17
+ ),
18
+ { status: 500 }
19
+ );
20
+ }
21
+ }
22
+ var ECOMIQ_CLIENTS_STORE_KV_BINDING = "ecomiq_clients_store";
23
+ var ECOMIQ_APP_APEX = "ecomiq.app";
24
+ var ECOMIQ_APP_SUFFIX = [`.${ECOMIQ_APP_APEX}`, `.localhost`];
25
+ function normalizeStoreHost(hostHeader) {
26
+ let h = hostHeader.trim().toLowerCase();
27
+ const colon = h.indexOf(":");
28
+ if (colon !== -1) h = h.slice(0, colon);
29
+ if (h.startsWith("www.")) h = h.slice(4);
30
+ return h;
31
+ }
32
+ function resolveStorefrontSettingsHost(hostHeader) {
33
+ const host = normalizeStoreHost(hostHeader);
34
+ if (!host) {
35
+ throw Object.assign(new Error("Host inv\xE1lido para tienda"), { status: 400 });
36
+ }
37
+ if (host === ECOMIQ_APP_APEX) {
38
+ throw Object.assign(new Error("Host apex ecomiq.app sin slug de tienda"), { status: 400 });
39
+ }
40
+ if (ECOMIQ_APP_SUFFIX.some((suffix) => host.endsWith(suffix))) {
41
+ const slug = host.slice(0, -(ECOMIQ_APP_SUFFIX.find((suffix) => host.endsWith(suffix))?.length ?? 0));
42
+ if (!slug) {
43
+ throw Object.assign(new Error("Host sin slug para ecomiq.app"), { status: 400 });
44
+ }
45
+ return slug;
46
+ }
47
+ return host;
48
+ }
49
+ function buildStorefrontKvSnapshotKeyFromStoreKey(storeKey) {
50
+ const key = storeKey.trim();
51
+ if (!key) {
52
+ throw Object.assign(new Error("Store key vac\xEDo para KV"), { status: 400 });
53
+ }
54
+ return `storefront:snapshots:store:${key}`;
55
+ }
56
+ function buildStorefrontKvSnapshotKey(hostHeader) {
57
+ return buildStorefrontKvSnapshotKeyFromStoreKey(
58
+ resolveStorefrontSettingsHost(hostHeader)
59
+ );
60
+ }
61
+ function getKvNamespace(env) {
62
+ if (!env || typeof env !== "object") return void 0;
63
+ const ns = env[ECOMIQ_CLIENTS_STORE_KV_BINDING];
64
+ if (!ns || typeof ns !== "object" || typeof ns.get !== "function") {
65
+ return void 0;
66
+ }
67
+ return ns;
68
+ }
69
+ async function getStorefrontSettingsFromKvByStoreKey(storeKey) {
70
+ const env = await getCloudflareEnv();
71
+ const kv = getKvNamespace(env);
72
+ if (!kv) {
73
+ const err = new Error(
74
+ `Binding KV "${ECOMIQ_CLIENTS_STORE_KV_BINDING}" no encontrado. Configura kv_namespaces en wrangler.`
75
+ );
76
+ throw Object.assign(err, { status: 500 });
77
+ }
78
+ const cacheKey = buildStorefrontKvSnapshotKeyFromStoreKey(storeKey);
79
+ const raw = await kv.get(cacheKey, { type: "json" });
80
+ if (raw == null) {
81
+ const err = new Error("Store settings not found in KV");
82
+ throw Object.assign(err, { status: 404 });
83
+ }
84
+ return StorefrontSettingsSchema.parse(raw);
85
+ }
86
+ async function getStorefrontSettingsFromKv(hostHeader) {
87
+ return getStorefrontSettingsFromKvByStoreKey(
88
+ resolveStorefrontSettingsHost(hostHeader)
89
+ );
90
+ }
91
+
92
+ // src/core/config/ecomiq-config.ts
93
+ var CONFIG_FILENAMES = [
94
+ "ecomiq.config.js",
95
+ "ecomiq.config.cjs",
96
+ "ecomiq.config.mjs"
97
+ ];
98
+ var EcomiqConfigSchema = z.object({
99
+ /**
100
+ * Slug de tienda en Ecomiq (p. ej. `mi-tienda` para `mi-tienda.ecomiq.app`).
101
+ * Si está definido, tiene prioridad sobre el `Host` de la request (útil en `localhost`).
102
+ */
103
+ slugStore: z.string().min(1).optional()
104
+ });
105
+ var cachedConfig;
106
+ function parseExportedConfig(raw) {
107
+ const candidate = raw && typeof raw === "object" && "default" in raw ? raw.default : raw;
108
+ const parsed = EcomiqConfigSchema.safeParse(candidate);
109
+ if (!parsed.success) {
110
+ console.warn(
111
+ "[ecomiq] ecomiq.config.* inv\xE1lido:",
112
+ parsed.error.flatten().fieldErrors
113
+ );
114
+ return null;
115
+ }
116
+ const slugStore = parsed.data.slugStore?.trim();
117
+ return slugStore ? { slugStore } : {};
118
+ }
119
+ function loadEcomiqConfig(cwd = process.cwd()) {
120
+ if (cachedConfig !== void 0) return cachedConfig;
121
+ for (const filename of CONFIG_FILENAMES) {
122
+ const configPath = join(cwd, filename);
123
+ if (!existsSync(configPath)) continue;
124
+ try {
125
+ const requireFromApp = createRequire(join(cwd, "package.json"));
126
+ const loaded = requireFromApp(configPath);
127
+ const parsed = parseExportedConfig(loaded);
128
+ cachedConfig = parsed;
129
+ return cachedConfig;
130
+ } catch (error) {
131
+ console.warn(`[ecomiq] No se pudo cargar ${configPath}:`, error);
132
+ }
133
+ }
134
+ cachedConfig = null;
135
+ return null;
136
+ }
137
+ function clearEcomiqConfigCache() {
138
+ cachedConfig = void 0;
139
+ }
140
+ function resolvePublicStoreKey(hostHeader, cwd) {
141
+ const slugFromConfig = loadEcomiqConfig(cwd)?.slugStore?.trim();
142
+ if (slugFromConfig) return slugFromConfig;
143
+ if (!hostHeader?.trim()) {
144
+ throw Object.assign(
145
+ new Error(
146
+ "Host is required, o define slugStore en ecomiq.config.js en la ra\xEDz del proyecto"
147
+ ),
148
+ { status: 400 }
149
+ );
150
+ }
151
+ return resolveStorefrontSettingsHost(hostHeader);
152
+ }
153
+ function hasEcomiqSlugStoreConfig(cwd) {
154
+ return Boolean(loadEcomiqConfig(cwd)?.slugStore?.trim());
155
+ }
156
+
157
+ export { ECOMIQ_CLIENTS_STORE_KV_BINDING, EcomiqConfigSchema, buildStorefrontKvSnapshotKey, buildStorefrontKvSnapshotKeyFromStoreKey, clearEcomiqConfigCache, getStorefrontSettingsFromKv, getStorefrontSettingsFromKvByStoreKey, hasEcomiqSlugStoreConfig, loadEcomiqConfig, normalizeStoreHost, resolvePublicStoreKey, resolveStorefrontSettingsHost };
158
+ //# sourceMappingURL=chunk-W372BFMG.js.map
159
+ //# sourceMappingURL=chunk-W372BFMG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/client/storefront-settings-kv.service.ts","../src/core/config/ecomiq-config.ts"],"names":[],"mappings":";;;;;;;AAIA,eAAe,gBAAA,GAAqC;AAClD,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,oBAAA,EAAqB,GAAI,MAAM,OAAO,wBAAwB,CAAA;AACtE,IAAA,MAAM,EAAE,KAAI,GAAI,MAAM,qBAAqB,EAAE,KAAA,EAAO,MAAM,CAAA;AAC1D,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,MAAA,CAAO,MAAA;AAAA,MACX,IAAI,KAAA;AAAA,QACF;AAAA,OAEF;AAAA,MACA,EAAE,QAAQ,GAAA;AAAI,KAChB;AAAA,EACF;AACF;AAGO,IAAM,+BAAA,GAAkC;AAE/C,IAAM,eAAA,GAAkB,YAAA;AACxB,IAAM,iBAAA,GAAoB,CAAC,CAAA,CAAA,EAAI,eAAe,IAAI,CAAA,UAAA,CAAY,CAAA;AAOvD,SAAS,mBAAmB,UAAA,EAA4B;AAC7D,EAAA,IAAI,CAAA,GAAI,UAAA,CAAW,IAAA,EAAK,CAAE,WAAA,EAAY;AACtC,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA;AAC3B,EAAA,IAAI,UAAU,EAAA,EAAI,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,GAAG,KAAK,CAAA;AACtC,EAAA,IAAI,EAAE,UAAA,CAAW,MAAM,GAAG,CAAA,GAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AACvC,EAAA,OAAO,CAAA;AACT;AAMO,SAAS,8BAA8B,UAAA,EAA4B;AACxE,EAAA,MAAM,IAAA,GAAO,mBAAmB,UAAU,CAAA;AAC1C,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,MAAA,CAAO,OAAO,IAAI,KAAA,CAAM,8BAA2B,CAAA,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,EAC7E;AACA,EAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,IAAA,MAAM,MAAA,CAAO,OAAO,IAAI,KAAA,CAAM,yCAAyC,CAAA,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,kBAAkB,IAAA,CAAK,CAAA,MAAA,KAAU,KAAK,QAAA,CAAS,MAAM,CAAC,CAAA,EAAG;AAC3D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,iBAAA,CAAkB,IAAA,CAAK,CAAA,MAAA,KAAU,IAAA,CAAK,QAAA,CAAS,MAAM,CAAC,CAAA,EAAG,UAAU,CAAA,CAAE,CAAA;AAClG,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,MAAA,CAAO,OAAO,IAAI,KAAA,CAAM,+BAA+B,CAAA,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,yCAAyC,QAAA,EAA0B;AACjF,EAAA,MAAM,GAAA,GAAM,SAAS,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,MAAA,CAAO,OAAO,IAAI,KAAA,CAAM,4BAAyB,CAAA,EAAG,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,8BAA8B,GAAG,CAAA,CAAA;AAC1C;AAEO,SAAS,6BAA6B,UAAA,EAA4B;AACvE,EAAA,OAAO,wCAAA;AAAA,IACL,8BAA8B,UAAU;AAAA,GAC1C;AACF;AAEA,SAAS,eAAe,GAAA,EAAqC;AAC3D,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,MAAA;AAC5C,EAAA,MAAM,EAAA,GAAM,IAAgC,+BAA+B,CAAA;AAC3E,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA,KAAO,YAAY,OAAQ,EAAA,CAAiB,QAAQ,UAAA,EAAY;AAChF,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAA;AACT;AAKA,eAAsB,sCACpB,QAAA,EAC6B;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,EAAiB;AACnC,EAAA,MAAM,EAAA,GAAK,eAAe,GAAG,CAAA;AAC7B,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,MAAM,MAAM,IAAI,KAAA;AAAA,MACd,eAAe,+BAA+B,CAAA,qDAAA;AAAA,KAChD;AACA,IAAA,MAAM,OAAO,MAAA,CAAO,GAAA,EAAK,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,QAAA,GAAW,yCAAyC,QAAQ,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,GAAA,CAAI,UAAU,EAAE,IAAA,EAAM,QAAQ,CAAA;AACnD,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,gCAAgC,CAAA;AACtD,IAAA,MAAM,OAAO,MAAA,CAAO,GAAA,EAAK,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,wBAAA,CAAyB,MAAM,GAAG,CAAA;AAC3C;AAKA,eAAsB,4BAA4B,UAAA,EAAiD;AACjG,EAAA,OAAO,qCAAA;AAAA,IACL,8BAA8B,UAAU;AAAA,GAC1C;AACF;;;ACnHA,IAAM,gBAAA,GAAmB;AAAA,EACvB,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC,WAAW,CAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA;AAC/B,CAAC;AAID,IAAI,YAAA;AAEJ,SAAS,oBAAoB,GAAA,EAAmC;AAC9D,EAAA,MAAM,SAAA,GACJ,OAAO,OAAO,GAAA,KAAQ,YAAY,SAAA,IAAc,GAAA,GAC3C,IAA6B,OAAA,GAC9B,GAAA;AACN,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,SAAA,CAAU,SAAS,CAAA;AACrD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,uCAAA;AAAA,MACA,MAAA,CAAO,KAAA,CAAM,OAAA,EAAQ,CAAE;AAAA,KACzB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,IAAA,EAAK;AAC9C,EAAA,OAAO,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,EAAC;AACtC;AAMO,SAAS,gBAAA,CAAiB,GAAA,GAAM,OAAA,CAAQ,GAAA,EAAI,EAAwB;AACzE,EAAA,IAAI,YAAA,KAAiB,QAAW,OAAO,YAAA;AAEvC,EAAA,KAAA,MAAW,YAAY,gBAAA,EAAkB;AACvC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACrC,IAAA,IAAI,CAAC,UAAA,CAAW,UAAU,CAAA,EAAG;AAE7B,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,IAAA,CAAK,GAAA,EAAK,cAAc,CAAC,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,eAAe,UAAU,CAAA;AACxC,MAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,MAAA,YAAA,GAAe,MAAA;AACf,MAAA,OAAO,YAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2BAAA,EAA8B,UAAU,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IACjE;AAAA,EACF;AAEA,EAAA,YAAA,GAAe,IAAA;AACf,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,sBAAA,GAA+B;AAC7C,EAAA,YAAA,GAAe,MAAA;AACjB;AAOO,SAAS,qBAAA,CACd,YACA,GAAA,EACQ;AACR,EAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,GAAG,CAAA,EAAG,WAAW,IAAA,EAAK;AAC9D,EAAA,IAAI,gBAAgB,OAAO,cAAA;AAE3B,EAAA,IAAI,CAAC,UAAA,EAAY,IAAA,EAAK,EAAG;AACvB,IAAA,MAAM,MAAA,CAAO,MAAA;AAAA,MACX,IAAI,KAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,EAAE,QAAQ,GAAA;AAAI,KAChB;AAAA,EACF;AAEA,EAAA,OAAO,8BAA8B,UAAU,CAAA;AACjD;AAEO,SAAS,yBAAyB,GAAA,EAAuB;AAC9D,EAAA,OAAO,QAAQ,gBAAA,CAAiB,GAAG,CAAA,EAAG,SAAA,EAAW,MAAM,CAAA;AACzD","file":"chunk-W372BFMG.js","sourcesContent":["import { StorefrontSettingsSchema } from \"../models/store\";\nimport type { StorefrontSettings } from \"../models/store\";\n\n/** KV Cloudflare: el consumidor instala @opennextjs/cloudflare en su proyecto (no viene con el SDK). */\nasync function getCloudflareEnv(): Promise<unknown> {\n try {\n const { getCloudflareContext } = await import(\"@opennextjs/cloudflare\");\n const { env } = await getCloudflareContext({ async: true });\n return env;\n } catch {\n throw Object.assign(\n new Error(\n 'Modo KV requiere @opennextjs/cloudflare en tu proyecto. ' +\n \"Instálalo y configura el binding KV, o usa PUBLIC_STORE_SETTINGS_SOURCE=api.\",\n ),\n { status: 500 },\n );\n }\n}\n\n/** Debe coincidir con el `binding` en wrangler.jsonc (`kv_namespaces`). */\nexport const ECOMIQ_CLIENTS_STORE_KV_BINDING = \"ecomiq_clients_store\" as const;\n\nconst ECOMIQ_APP_APEX = \"ecomiq.app\";\nconst ECOMIQ_APP_SUFFIX = [`.${ECOMIQ_APP_APEX}`, `.localhost`];\n\ntype KvJsonGet = {\n get(key: string, options: { type: \"json\" }): Promise<unknown>;\n};\n\n/** Host sin puerto, minúsculas, sin `www.`. */\nexport function normalizeStoreHost(hostHeader: string): string {\n let h = hostHeader.trim().toLowerCase();\n const colon = h.indexOf(\":\");\n if (colon !== -1) h = h.slice(0, colon);\n if (h.startsWith(\"www.\")) h = h.slice(4);\n return h;\n}\n\n/**\n * Identificador de tienda a partir del `Host`: slug en `*.ecomiq.app`, FQDN en dominio propio.\n * Misma semántica que el sufijo de `buildStorefrontKvSnapshotKey` (sin el prefijo KV).\n */\nexport function resolveStorefrontSettingsHost(hostHeader: string): string {\n const host = normalizeStoreHost(hostHeader);\n if (!host) {\n throw Object.assign(new Error(\"Host inválido para tienda\"), { status: 400 });\n }\n if (host === ECOMIQ_APP_APEX) {\n throw Object.assign(new Error(\"Host apex ecomiq.app sin slug de tienda\"), { status: 400 });\n }\n if (ECOMIQ_APP_SUFFIX.some(suffix => host.endsWith(suffix))) {\n const slug = host.slice(0, -(ECOMIQ_APP_SUFFIX.find(suffix => host.endsWith(suffix))?.length ?? 0));\n if (!slug) {\n throw Object.assign(new Error(\"Host sin slug para ecomiq.app\"), { status: 400 });\n }\n return slug;\n }\n return host;\n}\n\n/**\n * Clave KV del snapshot de tienda.\n * - `*.ecomiq.app` → `storefront:snapshots:store:<slug>` (todo lo que va antes de `.ecomiq.app`, p. ej. `plata950`).\n * - Dominio propio (p. ej. `plata950.com`) → `storefront:snapshots:store:<dominio completo>`.\n */\nexport function buildStorefrontKvSnapshotKeyFromStoreKey(storeKey: string): string {\n const key = storeKey.trim();\n if (!key) {\n throw Object.assign(new Error(\"Store key vacío para KV\"), { status: 400 });\n }\n return `storefront:snapshots:store:${key}`;\n}\n\nexport function buildStorefrontKvSnapshotKey(hostHeader: string): string {\n return buildStorefrontKvSnapshotKeyFromStoreKey(\n resolveStorefrontSettingsHost(hostHeader),\n );\n}\n\nfunction getKvNamespace(env: unknown): KvJsonGet | undefined {\n if (!env || typeof env !== \"object\") return undefined;\n const ns = (env as Record<string, unknown>)[ECOMIQ_CLIENTS_STORE_KV_BINDING];\n if (!ns || typeof ns !== \"object\" || typeof (ns as KvJsonGet).get !== \"function\") {\n return undefined;\n }\n return ns as KvJsonGet;\n}\n\n/**\n * Lee settings desde KV con clave ya resuelta (slug o dominio).\n */\nexport async function getStorefrontSettingsFromKvByStoreKey(\n storeKey: string,\n): Promise<StorefrontSettings> {\n const env = await getCloudflareEnv();\n const kv = getKvNamespace(env);\n if (!kv) {\n const err = new Error(\n `Binding KV \"${ECOMIQ_CLIENTS_STORE_KV_BINDING}\" no encontrado. Configura kv_namespaces en wrangler.`\n );\n throw Object.assign(err, { status: 500 });\n }\n\n const cacheKey = buildStorefrontKvSnapshotKeyFromStoreKey(storeKey);\n const raw = await kv.get(cacheKey, { type: \"json\" });\n if (raw == null) {\n const err = new Error(\"Store settings not found in KV\");\n throw Object.assign(err, { status: 404 });\n }\n\n return StorefrontSettingsSchema.parse(raw);\n}\n\n/**\n * Lee settings desde KV (`ecomiq_clients_store`) usando la clave según el host.\n */\nexport async function getStorefrontSettingsFromKv(hostHeader: string): Promise<StorefrontSettings> {\n return getStorefrontSettingsFromKvByStoreKey(\n resolveStorefrontSettingsHost(hostHeader),\n );\n}\n","import { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { z } from \"zod\";\nimport { resolveStorefrontSettingsHost } from \"../client/storefront-settings-kv.service\";\n\nconst CONFIG_FILENAMES = [\n \"ecomiq.config.js\",\n \"ecomiq.config.cjs\",\n \"ecomiq.config.mjs\",\n] as const;\n\nexport const EcomiqConfigSchema = z.object({\n /**\n * Slug de tienda en Ecomiq (p. ej. `mi-tienda` para `mi-tienda.ecomiq.app`).\n * Si está definido, tiene prioridad sobre el `Host` de la request (útil en `localhost`).\n */\n slugStore: z.string().min(1).optional(),\n});\n\nexport type EcomiqConfig = z.infer<typeof EcomiqConfigSchema>;\n\nlet cachedConfig: EcomiqConfig | null | undefined;\n\nfunction parseExportedConfig(raw: unknown): EcomiqConfig | null {\n const candidate =\n raw && typeof raw === \"object\" && \"default\" in (raw as object)\n ? (raw as { default: unknown }).default\n : raw;\n const parsed = EcomiqConfigSchema.safeParse(candidate);\n if (!parsed.success) {\n console.warn(\n \"[ecomiq] ecomiq.config.* inválido:\",\n parsed.error.flatten().fieldErrors,\n );\n return null;\n }\n const slugStore = parsed.data.slugStore?.trim();\n return slugStore ? { slugStore } : {};\n}\n\n/**\n * Carga `ecomiq.config.js` (o `.cjs` / `.mjs`) desde la raíz del proyecto (`process.cwd()`).\n * Resultado en caché por proceso.\n */\nexport function loadEcomiqConfig(cwd = process.cwd()): EcomiqConfig | null {\n if (cachedConfig !== undefined) return cachedConfig;\n\n for (const filename of CONFIG_FILENAMES) {\n const configPath = join(cwd, filename);\n if (!existsSync(configPath)) continue;\n\n try {\n const requireFromApp = createRequire(join(cwd, \"package.json\"));\n const loaded = requireFromApp(configPath) as unknown;\n const parsed = parseExportedConfig(loaded);\n cachedConfig = parsed;\n return cachedConfig;\n } catch (error) {\n console.warn(`[ecomiq] No se pudo cargar ${configPath}:`, error);\n }\n }\n\n cachedConfig = null;\n return null;\n}\n\n/** Limpia la caché (tests o recarga en dev). */\nexport function clearEcomiqConfigCache(): void {\n cachedConfig = undefined;\n}\n\n/**\n * Identificador de tienda para settings (API / KV).\n * 1. `slugStore` en `ecomiq.config.*` si existe.\n * 2. Si no, deriva del header `Host` (`resolveStorefrontSettingsHost`).\n */\nexport function resolvePublicStoreKey(\n hostHeader: string | null | undefined,\n cwd?: string,\n): string {\n const slugFromConfig = loadEcomiqConfig(cwd)?.slugStore?.trim();\n if (slugFromConfig) return slugFromConfig;\n\n if (!hostHeader?.trim()) {\n throw Object.assign(\n new Error(\n \"Host is required, o define slugStore en ecomiq.config.js en la raíz del proyecto\",\n ),\n { status: 400 },\n );\n }\n\n return resolveStorefrontSettingsHost(hostHeader);\n}\n\nexport function hasEcomiqSlugStoreConfig(cwd?: string): boolean {\n return Boolean(loadEcomiqConfig(cwd)?.slugStore?.trim());\n}\n"]}