@asteby/storefront 0.23.0 → 0.25.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 +18 -0
- package/dist/{account-settings-BdKj3jWb.d.cts → account-settings-DOAM5mTk.d.cts} +42 -1
- package/dist/{account-settings-DHg2RUOH.d.ts → account-settings-mTEXvtfz.d.ts} +42 -1
- package/dist/cli.js +68 -2
- package/dist/fiscal-document.d.cts +2 -2
- package/dist/fiscal-document.d.ts +2 -2
- package/dist/index.cjs +205 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +154 -4
- package/dist/index.d.ts +154 -4
- package/dist/index.js +193 -2
- package/dist/index.js.map +1 -1
- package/dist/mock.cjs +186 -4
- package/dist/mock.cjs.map +1 -1
- package/dist/mock.d.cts +6 -1
- package/dist/mock.d.ts +6 -1
- package/dist/mock.js +186 -4
- package/dist/mock.js.map +1 -1
- package/dist/mockup.d.cts +1 -1
- package/dist/mockup.d.ts +1 -1
- package/dist/node.cjs +1 -1
- package/dist/node.js +1 -1
- package/package.json +1 -1
package/dist/mock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mock/account-seed.ts","../src/mock/region-mx.seed.ts","../src/mock/region.ts","../src/mock/seed.ts","../src/mock/subjects.ts","../src/mock/index.ts"],"names":["money","line","address","r"],"mappings":"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","file":"mock.js","sourcesContent":["/**\n * Orders of the demo buyer (`cus_1`) that rehearse every state of the account screen (contract 1.8): shipped with\n * events, an issued invoice with its credit note and a refund, a sandbox shipment (never shown as real), a pickup that\n * is ready with a section the server could not read, and a cash voucher waiting for payment. Numbers are below 1000 and\n * dates older than the original seed order, so the order list still starts at `1000` and the first checkout is `1001`.\n */\nimport type { InvoiceDoc, Money, Order, PendingPayment, Shipment } from '../types.js'\n\ntype Seeded = Order & { customer_id: string | null }\n\nconst money = (cents: number, currency: string): Money => ({ amount: (cents / 100).toFixed(2), currency_code: currency })\n\nconst line = (title: string, variant: string | null, quantity: number, unitCents: number, currency: string) => ({\n title,\n variant_title: variant,\n sku: null,\n quantity,\n unit: money(unitCents, currency),\n total: money(unitCents * quantity, currency),\n image: null,\n})\n\nconst address = { first_name: 'Ana', last_name: 'Prueba', city: 'Querétaro', province: 'Qro.', zip: '76000', country_code: 'MX' }\n\nexport function buildAccountOrders(currency: string): Seeded[] {\n const inTransit: Shipment = {\n id: 'shp_seed_1',\n number: 'ENV-00001',\n kind: 'outbound',\n status: 'in_transit',\n environment: 'production',\n test_mode: false,\n carrier: 'Estafeta',\n carrier_logo_key: 'estafeta',\n service: 'Terrestre',\n tracking_number: '8012345678',\n tracking_url: 'https://rastreo.example.com/estafeta/8012345678',\n shipped_at: '2026-08-12T15:00:00.000Z',\n delivered_at: null,\n promised_by: '2026-08-16',\n label_url: null,\n events: [\n { id: 'evt_3', status: 'in_transit', description: 'En tránsito hacia tu ciudad', location: 'Querétaro, Qro.', occurred_at: '2026-08-14T09:30:00.000Z', source: 'carrier' },\n { id: 'evt_2', status: 'in_transit', description: 'Salió del centro de distribución', location: 'Ciudad de México, CDMX', occurred_at: '2026-08-13T07:10:00.000Z', source: 'carrier' },\n { id: 'evt_1', status: 'label_created', description: 'Guía generada', location: null, occurred_at: '2026-08-12T15:00:00.000Z', source: 'store' },\n ],\n map: {\n origin: { label: 'Ciudad de México, CDMX', lat: 19.43, lng: -99.13, precision: 'city' },\n destination: { label: 'Querétaro, Qro.', lat: 20.6, lng: -100.4, precision: 'city' },\n path: [{ label: 'Querétaro, Qro.', lat: 20.59, lng: -100.39, precision: 'city' }],\n },\n }\n const invoice: InvoiceDoc = {\n id: 'inv_seed_1',\n status: 'issued',\n kind: 'invoice',\n stage: 'issued',\n action: 'download',\n can_request: false,\n folio: '8F3C1A52-6E0B-4B58-9C0D-2B7D6B4D7A11',\n series: 'A',\n folio_number: '1042',\n total: money(129900, currency),\n issued_at: '2026-08-13T10:00:00.000Z',\n payment_method: 'PUE',\n payment_form: '04',\n receiver: { rfc: 'XAXX010101000', name: 'Público en general', tax_regime: '616', cfdi_use: 'S01', postal_code: '76000' },\n test_mode: false,\n environment: 'production',\n }\n const creditNote: InvoiceDoc = {\n id: 'inv_seed_1_nc',\n status: 'issued',\n kind: 'credit_note',\n stage: 'issued',\n action: 'download',\n can_request: false,\n folio: '1D9B7E20-4A5C-4C4B-8F11-6A0E3C9D5B02',\n series: 'NC',\n folio_number: '7',\n total: money(20000, currency),\n issued_at: '2026-08-15T10:00:00.000Z',\n related_to: 'inv_seed_1',\n test_mode: false,\n environment: 'production',\n }\n return [\n {\n id: 'ord_seed_shipped',\n number: '0999',\n status: 'shipped',\n created_at: '2026-08-12T12:00:00.000Z',\n total: money(129900, currency),\n customer_id: 'cus_1',\n lines: [line('Kit de frenos', 'Delantero', 1, 109900, currency), line('Líquido de frenos', '500 ml', 1, 20000, currency)],\n delivery_method: 'shipping',\n payment_status: 'paid',\n subtotal: money(111983, currency),\n tax: money(17917, currency),\n shipping: money(0, currency),\n discount: money(0, currency),\n tax_included: true,\n shipping_method: 'Estándar',\n shipping_address: address,\n returns: [],\n shipments: [inTransit],\n invoices: [invoice, creditNote],\n payments: [{ method_label: 'Tarjeta Visa terminada en 4242', family: 'card', status: 'partially_refunded', amount: money(129900, currency), paid_at: '2026-08-12T12:01:00.000Z' }],\n refunds: [{ id: 'rfd_seed_1', amount: money(20000, currency), status: 'completed', method_label: 'Tarjeta Visa terminada en 4242', created_at: '2026-08-15T09:00:00.000Z', completed_at: '2026-08-15T10:00:00.000Z', return_id: null }],\n },\n {\n id: 'ord_seed_preparing',\n number: '0998',\n status: 'fulfilling',\n created_at: '2026-08-11T12:00:00.000Z',\n total: money(54900, currency),\n customer_id: 'cus_1',\n lines: [line('Filtro de aceite', null, 3, 18300, currency)],\n delivery_method: 'shipping',\n payment_status: 'paid',\n shipping_method: 'shipping:Envío Estafeta',\n shipping_service: { title: 'Envío Estafeta', carrier: 'estafeta', carrier_logo_key: 'estafeta', eta_days_min: 1, eta_days_max: 3 },\n shipping_address: address,\n shipments: [],\n invoices: [],\n payments: [{ method_label: 'OXXO', family: 'cash_voucher', status: 'paid', amount: money(54900, currency), paid_at: '2026-08-11T18:00:00.000Z' }],\n refunds: [],\n },\n {\n id: 'ord_seed_sandbox',\n number: '0997',\n status: 'shipped',\n created_at: '2026-08-10T12:00:00.000Z',\n total: money(31000, currency),\n customer_id: 'cus_1',\n lines: [line('Bujía iridio', null, 4, 7750, currency)],\n delivery_method: 'shipping',\n payment_status: 'paid',\n shipments: [\n {\n id: 'shp_seed_test',\n kind: 'outbound',\n status: 'label_created',\n environment: 'sandbox',\n test_mode: true,\n carrier: 'Estafeta',\n carrier_logo_key: 'estafeta',\n tracking_number: null,\n tracking_url: null,\n events: [],\n map: null,\n },\n ],\n invoices: [\n { id: 'inv_seed_test', status: 'issued', kind: 'invoice', stage: 'issued', action: 'download', can_request: false, folio: '00000000-0000-4000-8000-000000000000', test_mode: true, environment: 'sandbox' },\n ],\n payments: [],\n refunds: [],\n },\n {\n id: 'ord_seed_pickup',\n number: '0996',\n status: 'ready_for_pickup',\n created_at: '2026-08-09T12:00:00.000Z',\n total: money(88000, currency),\n customer_id: 'cus_1',\n lines: [line('Batería 12V', null, 1, 88000, currency)],\n delivery_method: 'pickup',\n pickup: { location_id: null, name: 'Sucursal Centro', address: 'Av. Reforma 100', city: 'Ciudad de México', phone: null, ready_at: '2026-08-10T10:00:00.000Z', delivered_at: null },\n payment_status: 'paid',\n shipments: [],\n invoices: [],\n payments: [],\n refunds: [],\n degraded: ['invoices'],\n },\n ]\n}\n\n/** A voucher still valid (OXXO, with barcode) and one that already expired (SPEI). */\nexport function buildPendingPayments(currency: string, nowMs: number): PendingPayment[] {\n return [\n {\n id: 'chk_seed_oxxo',\n number: null,\n status: 'pending_payment',\n created_at: new Date(nowMs - 3_600_000).toISOString(),\n total: money(45000, currency),\n expires_at: new Date(nowMs + 47 * 3_600_000).toISOString(),\n payment: {\n provider: 'mercadopago',\n method: 'oxxo',\n reference: '12345678901234',\n barcode: '12345678901234',\n clabe: null,\n voucher_url: 'https://pagos.example.com/ficha/abc',\n instructions: 'Paga en cualquier OXXO antes de la fecha de vencimiento.',\n expires_at: new Date(nowMs + 47 * 3_600_000).toISOString(),\n amount: money(45000, currency),\n },\n },\n {\n id: 'chk_seed_spei',\n number: null,\n status: 'expired',\n created_at: new Date(nowMs - 9 * 86_400_000).toISOString(),\n total: money(120000, currency),\n expires_at: new Date(nowMs - 2 * 86_400_000).toISOString(),\n payment: {\n provider: 'mercadopago',\n method: 'spei',\n reference: null,\n barcode: null,\n clabe: '646180000000000001',\n voucher_url: null,\n instructions: null,\n expires_at: new Date(nowMs - 2 * 86_400_000).toISOString(),\n amount: money(120000, currency),\n },\n },\n ]\n}\n","/**\n * The Mexican region pack as `GET /storefront/region` publishes it: the MX seed of the region_mx addon\n * (manifest.json, models region_identity_documents, region_fiscal_catalogs and region_payment_methods; payload\n * shape of regionspec.BuildPublicDocuments / PublicFiscalID). Test and mock data only: the SDK engine knows no\n * country. Regenerate it from the addon when the seed changes.\n */\nimport type { IdentityDocumentSpec, RegionFiscalEntry, RegionPaymentMethod } from '../types.js'\n\nexport const SEED_MX_CSF: IdentityDocumentSpec = {\n \"kind\": \"MX:csf\",\n \"country_code\": \"MX\",\n \"label\": \"Constancia de situación fiscal\",\n \"help\": \"Es el PDF que te da el SAT con tu RFC, tu nombre o razón social, tu régimen y tu código postal fiscal. Lo leemos en tu dispositivo para llenar tus datos de facturación.\",\n \"obtain_url\": \"https://www.sat.gob.mx/portal/public/tramites/constancia-de-situacion-fiscal\",\n \"accept\": [\n \"application/pdf\"\n ],\n \"max_bytes\": 5242880,\n \"max_pages\": 6,\n \"engine\": \"rules@1\",\n \"rules\": {\n \"version\": 1,\n \"normalize\": [\n \"nbsp\",\n \"collapse_ws\"\n ],\n \"labels\": [\n \"RFC\",\n \"CURP\",\n \"Nombre \\\\(s\\\\)\",\n \"Nombre\",\n \"Primer Apellido\",\n \"Segundo Apellido\",\n \"Denominaci[óo]n\\\\s*/\\\\s*Raz[óo]n Social\",\n \"R[ée]gimen de capital\",\n \"Nombre Comercial\",\n \"Fecha (?:de )?inicio de operaciones\",\n \"Fecha de constituci[óo]n\",\n \"Estatus en el padr[óo]n\",\n \"Fecha de [úu]ltimo cambio de estado\",\n \"Datos del domicilio registrado\",\n \"C[óo]digo Postal\",\n \"Tipo de Vialidad\",\n \"Nombre de Vialidad\",\n \"N[úu]mero Exterior\",\n \"N[úu]mero Interior\",\n \"Nombre de la Colonia\",\n \"Nombre de la Localidad\",\n \"Nombre del Municipio o Demarcaci[óo]n Territorial\",\n \"Nombre de la Entidad Federativa\",\n \"Entre Calle\",\n \"Y Calle\",\n \"Actividades Econ[óo]micas\",\n \"Reg[íi]menes\",\n \"Obligaciones\",\n \"Correo Electr[óo]nico\"\n ],\n \"qr_canonical\": \"https://siat.sat.gob.mx/app/qr/faces/pages/mobile/validadorqr.jsf?D1=10&D2=1&D3={document_id}_{tax_id}\",\n \"fields\": [\n {\n \"key\": \"tax_id\",\n \"required\": true,\n \"strategies\": [\n {\n \"strategy\": \"labeled_lines\",\n \"label\": \"RFC\",\n \"upper\": true,\n \"capture\": {\n \"pattern\": \"(?:^|[^A-Z0-9Ñ&])([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9Ñ&]|$)\",\n \"flags\": \"i\",\n \"group\": 1\n }\n },\n {\n \"strategy\": \"regex\",\n \"pattern\": \"(?:^|[^A-Z0-9Ñ&])([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9Ñ&]|$)\",\n \"flags\": \"i\",\n \"group\": 1,\n \"upper\": true\n },\n {\n \"strategy\": \"qr_param\",\n \"param\": \"D3\",\n \"split\": \"_\",\n \"parts\": 2,\n \"match\": \"^[A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3}$\"\n },\n {\n \"strategy\": \"qr_param\",\n \"scan\": \"(?:D3)?([0-9]{11})[^A-Z0-9Ñ&]{0,3}([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9]|$)\",\n \"flags\": \"i\",\n \"group\": 2\n }\n ]\n },\n {\n \"key\": \"legal_name\",\n \"required\": true,\n \"strategies\": [\n {\n \"strategy\": \"labeled_lines\",\n \"label\": \"Denominaci[óo]n\\\\s*/\\\\s*Raz[óo]n Social\"\n },\n {\n \"strategy\": \"concat_labeled\",\n \"labels\": [\n \"Nombre \\\\(s\\\\)\",\n \"Primer Apellido\",\n \"Segundo Apellido\"\n ],\n \"separator\": \" \"\n }\n ]\n },\n {\n \"key\": \"postal_code\",\n \"required\": true,\n \"strategies\": [\n {\n \"strategy\": \"labeled_lines\",\n \"label\": \"C[óo]digo Postal\",\n \"capture\": {\n \"pattern\": \"\\\\b([0-9]{5})\\\\b\",\n \"group\": 1\n }\n }\n ]\n },\n {\n \"key\": \"tax_regime\",\n \"required\": true,\n \"multiple\": true,\n \"strategies\": [\n {\n \"strategy\": \"catalog_phrases\",\n \"catalog\": \"fiscal_regime\",\n \"start\": \"Reg[íi]menes\\\\s*:?\",\n \"end\": \"Obligaciones\\\\s*:\"\n }\n ]\n },\n {\n \"key\": \"document_id\",\n \"strategies\": [\n {\n \"strategy\": \"regex\",\n \"pattern\": \"id\\\\s*CIF\\\\s*:?\\\\s*([0-9]{6,})\",\n \"flags\": \"i\",\n \"group\": 1\n },\n {\n \"strategy\": \"qr_param\",\n \"param\": \"D3\",\n \"split\": \"_\",\n \"parts\": 2,\n \"match\": \"^[0-9]+$\"\n },\n {\n \"strategy\": \"qr_param\",\n \"scan\": \"(?:D3)?([0-9]{11})[^A-Z0-9Ñ&]{0,3}([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9]|$)\",\n \"flags\": \"i\",\n \"group\": 1\n }\n ]\n },\n {\n \"key\": \"issued_on\",\n \"strategies\": [\n {\n \"strategy\": \"date\",\n \"order\": \"dmy\",\n \"pattern\": \"Fecha\\\\s+de\\\\s+Emisi[óo]n\\\\s*:?[^0-9]*?([0-9]{1,2})\\\\s+DE\\\\s+([A-Za-zÁÉÍÓÚÑáéíóúñ]+)\\\\s+DE\\\\s+([0-9]{4})\",\n \"flags\": \"i\",\n \"months\": [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\"\n ]\n }\n ]\n }\n ]\n },\n \"verify_kind\": \"qr_validator\",\n \"freshness_days\": 90,\n \"image_mode\": \"qr_only\",\n \"discard_fields\": [\n \"curp\",\n \"street\",\n \"exterior_number\",\n \"neighborhood\",\n \"activities\"\n ]\n} as IdentityDocumentSpec\n\nexport const SEED_MX_REGIMES: RegionFiscalEntry[] = [\n {\n \"code\": \"601\",\n \"label\": \"General de Ley Personas Morales\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"general de ley personas morales\"\n ]\n },\n {\n \"code\": \"603\",\n \"label\": \"Personas Morales con Fines no Lucrativos\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"fines no lucrativos\"\n ]\n },\n {\n \"code\": \"605\",\n \"label\": \"Sueldos y Salarios e Ingresos Asimilados a Salarios\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"sueldos y salarios\"\n ]\n },\n {\n \"code\": \"606\",\n \"label\": \"Arrendamiento\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"arrendamiento\"\n ]\n },\n {\n \"code\": \"607\",\n \"label\": \"Régimen de Enajenación o Adquisición de Bienes\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"enajenacion o adquisicion de bienes\"\n ]\n },\n {\n \"code\": \"608\",\n \"label\": \"Demás ingresos\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"demas ingresos\"\n ]\n },\n {\n \"code\": \"610\",\n \"label\": \"Residentes en el Extranjero sin Establecimiento Permanente en México\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"match_phrases\": [\n \"residentes en el extranjero\"\n ]\n },\n {\n \"code\": \"611\",\n \"label\": \"Ingresos por Dividendos (socios y accionistas)\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"dividendos\"\n ]\n },\n {\n \"code\": \"612\",\n \"label\": \"Personas Físicas con Actividades Empresariales y Profesionales\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"actividades empresariales y profesionales\"\n ]\n },\n {\n \"code\": \"614\",\n \"label\": \"Ingresos por intereses\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"ingresos por intereses\"\n ]\n },\n {\n \"code\": \"615\",\n \"label\": \"Régimen de los ingresos por obtención de premios\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"premios\"\n ]\n },\n {\n \"code\": \"616\",\n \"label\": \"Sin obligaciones fiscales\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"sin obligaciones fiscales\"\n ]\n },\n {\n \"code\": \"620\",\n \"label\": \"Sociedades Cooperativas de Producción que optan por diferir sus ingresos\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"sociedades cooperativas de produccion\"\n ]\n },\n {\n \"code\": \"621\",\n \"label\": \"Incorporación Fiscal\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"incorporacion fiscal\"\n ]\n },\n {\n \"code\": \"622\",\n \"label\": \"Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"actividades agricolas\"\n ]\n },\n {\n \"code\": \"623\",\n \"label\": \"Opcional para Grupos de Sociedades\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"opcional para grupos de sociedades\"\n ]\n },\n {\n \"code\": \"624\",\n \"label\": \"Coordinados\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"coordinados\"\n ]\n },\n {\n \"code\": \"625\",\n \"label\": \"Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"plataformas tecnologicas\"\n ]\n },\n {\n \"code\": \"626\",\n \"label\": \"Régimen Simplificado de Confianza\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"match_phrases\": [\n \"simplificado de confianza\"\n ]\n }\n]\n\nexport const SEED_MX_INVOICE_USES: RegionFiscalEntry[] = [\n {\n \"code\": \"G01\",\n \"label\": \"Adquisición de mercancías\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"G03\",\n \"label\": \"Gastos en general\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ],\n \"suggested_for_regimes\": [\n \"601\",\n \"612\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I01\",\n \"label\": \"Construcciones\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I02\",\n \"label\": \"Mobiliario y equipo de oficina por inversiones\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I03\",\n \"label\": \"Equipo de transporte\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I04\",\n \"label\": \"Equipo de cómputo y accesorios\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I05\",\n \"label\": \"Dados, troqueles, moldes, matrices y herramental\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I06\",\n \"label\": \"Comunicaciones telefónicas\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I07\",\n \"label\": \"Comunicaciones satelitales\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I08\",\n \"label\": \"Otra maquinaria y equipo\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"D01\",\n \"label\": \"Honorarios médicos, dentales y gastos hospitalarios\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D02\",\n \"label\": \"Gastos médicos por incapacidad o discapacidad\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D03\",\n \"label\": \"Gastos funerales\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D04\",\n \"label\": \"Donativos\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D05\",\n \"label\": \"Intereses reales efectivamente pagados por créditos hipotecarios (casa habitación)\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D06\",\n \"label\": \"Aportaciones voluntarias al SAR\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D07\",\n \"label\": \"Primas por seguros de gastos médicos\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D08\",\n \"label\": \"Gastos de transportación escolar obligatoria\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D09\",\n \"label\": \"Depósitos en cuentas para el ahorro, primas que tengan como base planes de pensiones\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D10\",\n \"label\": \"Pagos por servicios educativos (colegiaturas)\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"S01\",\n \"label\": \"Sin efectos fiscales\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"610\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"616\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ],\n \"suggested_for_regimes\": [\n \"603\",\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"610\",\n \"611\",\n \"614\",\n \"615\",\n \"616\",\n \"620\"\n ]\n }\n]\n\nexport const SEED_MX_PAYMENT_METHODS: RegionPaymentMethod[] = [\n {\n \"code\": \"card\",\n \"label\": \"Tarjeta de crédito o débito\",\n \"description\": \"Visa, Mastercard y American Express. Pago seguro procesado por tu pasarela.\",\n \"kind\": \"card\",\n \"flow\": \"inline\",\n \"providers\": [\n \"mercadopago\",\n \"stripe\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"icon\": \"CreditCard\",\n \"fiscal_payment_form\": \"04,28\"\n },\n {\n \"code\": \"mercadopago\",\n \"label\": \"Mercado Pago\",\n \"description\": \"Paga con tu cuenta de Mercado Pago: saldo, tarjetas guardadas o meses.\",\n \"kind\": \"wallet\",\n \"flow\": \"redirect\",\n \"providers\": [\n \"mercadopago\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"icon\": \"Wallet\",\n \"fiscal_payment_form\": \"06,04,28\"\n },\n {\n \"code\": \"oxxo\",\n \"label\": \"Efectivo en OXXO\",\n \"description\": \"Recibe una referencia y paga en cualquier tienda OXXO. Confirmamos tu pedido cuando se acredita el pago.\",\n \"kind\": \"cash_voucher\",\n \"flow\": \"voucher\",\n \"providers\": [\n \"mercadopago\",\n \"stripe\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"expires_hours\": 72,\n \"icon\": \"Store\",\n \"fiscal_payment_form\": \"01\"\n },\n {\n \"code\": \"spei\",\n \"label\": \"Transferencia SPEI\",\n \"description\": \"Paga desde la app de tu banco con una CLABE única para tu pedido; se confirma en minutos.\",\n \"kind\": \"bank_transfer\",\n \"flow\": \"instructions\",\n \"providers\": [\n \"mercadopago\",\n \"stripe\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"expires_hours\": 24,\n \"icon\": \"Landmark\",\n \"fiscal_payment_form\": \"03\"\n }\n] as RegionPaymentMethod[]\n\nexport const SEED_MX_FISCAL_ID_PATTERN = \"^[A-ZÑ&]{3,4}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[A-Z0-9]{2}[0-9A]$\"\nexport const SEED_MX_GENERIC_IDS: string[] = [\"XAXX010101000\", \"XEXX010101000\"]\n","/**\n * Region fixture of the mock: Mexico exactly as `GET /storefront/region` publishes it (see `region-mx.seed.ts`),\n * identity document `MX:csf` included, so a storefront can be built and tested without a server. It lives here,\n * and only here: the real data belongs to the region package, and the engine in `fiscal-document` knows no country.\n */\nimport type { IdentityDocumentSpec, IdentityRulesV1, InvoiceRequest, Region, RegionFiscalId } from '../types.js'\nimport { SEED_MX_CSF, SEED_MX_FISCAL_ID_PATTERN, SEED_MX_GENERIC_IDS, SEED_MX_INVOICE_USES, SEED_MX_PAYMENT_METHODS, SEED_MX_REGIMES } from './region-mx.seed.js'\n\nexport const MOCK_IDENTITY_DOCUMENT_MX_CSF: IdentityDocumentSpec = SEED_MX_CSF\nexport const MOCK_CSF_RULES = SEED_MX_CSF.rules as IdentityRulesV1\n\nexport const MOCK_FISCAL_ID_MX: RegionFiscalId = {\n kind: 'mx_rfc',\n label: 'RFC',\n pattern: SEED_MX_FISCAL_ID_PATTERN,\n generic_ids: SEED_MX_GENERIC_IDS,\n regimes: SEED_MX_REGIMES,\n invoice_uses: SEED_MX_INVOICE_USES,\n documents: [SEED_MX_CSF],\n // The pack's person-type patterns and check algorithm (region_settings.fiscal_id_person_patterns / _checksum).\n person_patterns: { individual: '^[A-ZÑ&]{4}[0-9]{6}[A-Z0-9]{3}$', company: '^[A-ZÑ&]{3}[0-9]{6}[A-Z0-9]{3}$' },\n checksum: 'mx_rfc',\n}\n\nexport const MOCK_REGION_MX: Region = {\n country_code: 'MX',\n name: 'México',\n locale: { default: 'es-MX', available: ['es-MX', 'en-US'], current: 'es-MX' },\n timezone: 'America/Mexico_City',\n currency: { code: 'MXN', symbol: '$', symbol_position: 'before', minor_units: 2 },\n formats: { date: 'dd/MM/yyyy', measurement: 'metric' },\n tax: { prices_include_tax: true, label: 'IVA', price_label: 'IVA incluido', show_breakdown: true, default_category: 'standard', categories: ['standard'] },\n address: { postal_code: { pattern: '^[0-9]{5}$', example: '06600' } },\n fiscal_id: MOCK_FISCAL_ID_MX,\n payment_methods: SEED_MX_PAYMENT_METHODS,\n}\n\nexport type InvoiceFieldError = { field: string; message: string }\n\n/** `individual` for a 13-character tax id, `company` for 12 (the mock's rule; a real region decides this server-side). */\nexport function mockPersonType(taxId: string): string | null {\n if (taxId.length === 13) return 'individual'\n if (taxId.length === 12) return 'company'\n return null\n}\n\n/** The first thing wrong with an invoice request against a region, as the API reports it (`field: invoice.<field>`), or `null`. */\nexport function validateInvoiceRequest(region: Region | null, input: InvoiceRequest, prefix = 'invoice'): InvoiceFieldError | null {\n const text = (...v: unknown[]) => v.map((x) => (typeof x === 'string' ? x.trim() : '')).find(Boolean) ?? ''\n const fid = region?.fiscal_id\n const taxId = text(input.tax_id, input.rfc).toUpperCase()\n const name = text(input.legal_name, input.razon_social)\n const regime = text(input.tax_regime, input.regimen)\n const use = text(input.use, input.uso_cfdi, input.invoice_use, input.cfdi_use)\n const postal = text(input.postal_code, input.cp, input.zip)\n const bad = (field: string, message: string): InvoiceFieldError => ({ field: `${prefix}.${field}`, message })\n\n if (!taxId) return bad('tax_id', 'The tax id is required')\n if (fid?.pattern && !fid.generic_ids.includes(taxId) && !new RegExp(fid.pattern).test(taxId)) return bad('tax_id', `Not a valid ${fid.kind}`)\n if (!name) return bad('legal_name', 'The legal name is required')\n if (!regime) return bad('tax_regime', 'The tax regime is required')\n const entry = fid?.regimes.find((r) => r.code === regime)\n if (fid && !entry) return bad('tax_regime', `Unknown tax regime ${regime}`)\n const person = fid?.generic_ids.includes(taxId) ? null : mockPersonType(taxId)\n if (entry && person && entry.person_types.length > 0 && !entry.person_types.includes(person)) {\n return bad('tax_regime', `The regime ${regime} does not apply to this ${fid!.kind}`)\n }\n const postalPattern = region?.address?.postal_code?.pattern\n if (!postal || (postalPattern && !new RegExp(postalPattern).test(postal))) return bad('postal_code', 'Not a valid postal code')\n if (!use) return bad('use', 'The invoice use is required')\n const useEntry = fid?.invoice_uses.find((u) => u.code === use)\n if (fid && !useEntry) return bad('use', `Unknown invoice use ${use}`)\n if (useEntry?.allowed_regimes && useEntry.allowed_regimes.length > 0 && !useEntry.allowed_regimes.includes(regime)) {\n return bad('use', `The regime ${regime} does not admit the use ${use}`)\n }\n return null\n}\n\nexport function maskTaxId(taxId: string): string {\n const v = taxId.trim()\n return v.length <= 4 ? '*'.repeat(v.length) : `${v.slice(0, 2)}${'*'.repeat(v.length - 5)}${v.slice(-3)}`\n}\n","import type {\n Article,\n Collection,\n Customer,\n Image,\n Location,\n Menu,\n Page,\n Product,\n ProductOption,\n ProductVariant,\n Shop,\n Theme,\n} from '../types.js'\n\n/**\n * Placeholder image source for all seed data. Swap it (or pass `imageUrl` to\n * `createMockStorefront`) to use your own assets.\n */\nexport const MOCK_IMAGE_URL = (seed: string, width = 800, height = 800): string =>\n `https://picsum.photos/seed/${encodeURIComponent(seed)}/${width}/${height}`\n\nexport type MockImageUrl = typeof MOCK_IMAGE_URL\n\nexport const MOCK_CURRENCY = 'MXN'\n\n/** Seed customer that already exists (log in with OTP `000000`). */\nexport const MOCK_CUSTOMER_EMAIL = 'cliente@example.com'\n\ntype ProductSpec = {\n handle: string\n title: string\n collection: string\n type: string\n vendor: string\n price: number\n compareAt?: number\n options?: ProductOption[]\n tags?: string[]\n attributes?: Product['attributes']\n /** Stock per variant index (default 12). */\n stock?: number | ((index: number, opts: Record<string, string>) => number)\n /** Extra price per option value, e.g. `{ XL: 50 }`. */\n priceDelta?: Record<string, number>\n description: string\n}\n\nconst OPT = {\n size: (values = ['S', 'M', 'L']): ProductOption => ({ name: 'Talla', values }),\n color: (values: string[]): ProductOption => ({ name: 'Color', values }),\n}\n\nexport const COLLECTION_SPECS: { handle: string; title: string; description: string; parent?: string }[] = [\n { handle: 'ropa', title: 'Ropa', description: 'Prendas básicas para todos los días.' },\n { handle: 'hogar', title: 'Hogar', description: 'Objetos útiles y bonitos para tu casa.' },\n { handle: 'accesorios', title: 'Accesorios', description: 'Complementos para llevar contigo.' },\n { handle: 'llantas', title: 'Llantas', description: 'Llantas para auto por medida.' },\n]\n\nconst tire = (width: number, aspect: number, rim: number) => ({\n width,\n aspect,\n rim,\n size_key: `${width}/${aspect}R${rim}`,\n})\n\nexport const PRODUCT_SPECS: ProductSpec[] = [\n // Ropa\n { handle: 'playera-basica', title: 'Playera básica', collection: 'ropa', type: 'Playera', vendor: 'Casa Textil', price: 249, compareAt: 299, options: [OPT.size(), OPT.color(['Blanco', 'Negro'])], tags: ['algodón', 'nuevo'], stock: (i) => (i === 5 ? 0 : 15), description: 'Playera de algodón peinado, corte recto.' },\n { handle: 'sudadera-capucha', title: 'Sudadera con capucha', collection: 'ropa', type: 'Sudadera', vendor: 'Casa Textil', price: 699, options: [OPT.size(['S', 'M', 'L', 'XL']), OPT.color(['Gris', 'Azul'])], priceDelta: { XL: 50 }, tags: ['invierno'], description: 'Sudadera afelpada con bolsa canguro.' },\n { handle: 'pantalon-chino', title: 'Pantalón chino', collection: 'ropa', type: 'Pantalón', vendor: 'Taller Urbano', price: 899, options: [OPT.size(['28', '30', '32', '34'])], stock: (i) => (i === 0 ? 0 : 6), description: 'Pantalón de gabardina con un toque de elasticidad.' },\n { handle: 'chamarra-ligera', title: 'Chamarra ligera', collection: 'ropa', type: 'Chamarra', vendor: 'Taller Urbano', price: 1299, compareAt: 1599, options: [OPT.size()], tags: ['oferta'], description: 'Chamarra rompevientos plegable.' },\n { handle: 'gorra-clasica', title: 'Gorra clásica', collection: 'ropa', type: 'Gorra', vendor: 'Casa Textil', price: 199, options: [OPT.color(['Negro', 'Beige', 'Verde'])], description: 'Gorra de seis paneles con ajuste trasero.' },\n { handle: 'calcetines-paquete', title: 'Calcetines (paquete de 3)', collection: 'ropa', type: 'Calcetines', vendor: 'Casa Textil', price: 149, stock: 0, description: 'Tres pares de calcetines de algodón.' },\n // Hogar\n { handle: 'taza-ceramica', title: 'Taza de cerámica', collection: 'hogar', type: 'Cocina', vendor: 'Barro Vivo', price: 129, options: [OPT.color(['Blanco', 'Terracota'])], tags: ['regalo'], description: 'Taza de 350 ml hecha a mano.' },\n { handle: 'lampara-mesa', title: 'Lámpara de mesa', collection: 'hogar', type: 'Iluminación', vendor: 'Luz Serena', price: 1199, description: 'Lámpara con pantalla de lino y base de madera.' },\n { handle: 'cojin-decorativo', title: 'Cojín decorativo', collection: 'hogar', type: 'Textil', vendor: 'Casa Textil', price: 349, compareAt: 399, options: [OPT.color(['Mostaza', 'Verde', 'Gris'])], description: 'Cojín de 45 × 45 cm con funda removible.' },\n { handle: 'set-sartenes', title: 'Set de sartenes', collection: 'hogar', type: 'Cocina', vendor: 'Cocina Diaria', price: 1899, compareAt: 2299, tags: ['oferta'], description: 'Tres sartenes antiadherentes de 20, 24 y 28 cm.' },\n { handle: 'manta-tejida', title: 'Manta tejida', collection: 'hogar', type: 'Textil', vendor: 'Casa Textil', price: 799, description: 'Manta de punto grueso, 130 × 170 cm.' },\n { handle: 'maceta-barro', title: 'Maceta de barro', collection: 'hogar', type: 'Jardín', vendor: 'Barro Vivo', price: 189, options: [{ name: 'Tamaño', values: ['Chica', 'Mediana', 'Grande'] }], priceDelta: { Mediana: 60, Grande: 140 }, description: 'Maceta de barro natural con plato.' },\n // Accesorios\n { handle: 'mochila-diaria', title: 'Mochila diaria', collection: 'accesorios', type: 'Mochila', vendor: 'Ruta Libre', price: 999, options: [OPT.color(['Negro', 'Azul'])], tags: ['nuevo'], description: 'Mochila de 20 L con compartimento para laptop.' },\n { handle: 'botella-termica', title: 'Botella térmica', collection: 'accesorios', type: 'Botella', vendor: 'Ruta Libre', price: 399, options: [{ name: 'Capacidad', values: ['500 ml', '750 ml'] }], priceDelta: { '750 ml': 80 }, description: 'Mantiene frío 24 h y caliente 12 h.' },\n { handle: 'lentes-sol', title: 'Lentes de sol', collection: 'accesorios', type: 'Lentes', vendor: 'Vista Clara', price: 599, compareAt: 749, description: 'Lentes polarizados con protección UV400.' },\n { handle: 'reloj-analogico', title: 'Reloj analógico', collection: 'accesorios', type: 'Reloj', vendor: 'Vista Clara', price: 1499, description: 'Reloj con correa de piel y cristal mineral.' },\n { handle: 'cartera-piel', title: 'Cartera de piel', collection: 'accesorios', type: 'Cartera', vendor: 'Taller Urbano', price: 549, options: [OPT.color(['Café', 'Negro'])], description: 'Cartera delgada con seis ranuras.' },\n { handle: 'paraguas-compacto', title: 'Paraguas compacto', collection: 'accesorios', type: 'Paraguas', vendor: 'Ruta Libre', price: 299, stock: 3, description: 'Paraguas plegable resistente al viento.' },\n // Llantas (exercise attribute facets)\n { handle: 'llanta-205-55-r16-touring', title: 'Llanta 205/55 R16 Touring', collection: 'llantas', type: 'Llanta', vendor: 'Marca Norte', price: 1899, compareAt: 2099, attributes: { ...tire(205, 55, 16), load_index: 91, speed_rating: 'V', runflat: false }, tags: ['auto'], description: 'Llanta de turismo silenciosa y de bajo consumo.' },\n { handle: 'llanta-205-55-r16-sport', title: 'Llanta 205/55 R16 Sport', collection: 'llantas', type: 'Llanta', vendor: 'Marca Sur', price: 2199, attributes: { ...tire(205, 55, 16), load_index: 94, speed_rating: 'W', runflat: false }, tags: ['auto'], description: 'Agarre deportivo en seco y mojado.' },\n { handle: 'llanta-195-65-r15-eco', title: 'Llanta 195/65 R15 Eco', collection: 'llantas', type: 'Llanta', vendor: 'Marca Norte', price: 1499, attributes: { ...tire(195, 65, 15), load_index: 91, speed_rating: 'H', runflat: false }, tags: ['auto'], description: 'Baja resistencia al rodamiento.' },\n { handle: 'llanta-225-45-r17-runflat', title: 'Llanta 225/45 R17 Run Flat', collection: 'llantas', type: 'Llanta', vendor: 'Marca Centro', price: 3299, attributes: { ...tire(225, 45, 17), load_index: 91, speed_rating: 'W', runflat: true }, tags: ['auto'], stock: 2, description: 'Permite rodar hasta 80 km sin presión.' },\n { handle: 'llanta-265-70-r16-at', title: 'Llanta 265/70 R16 All Terrain', collection: 'llantas', type: 'Llanta', vendor: 'Marca Sur', price: 3599, attributes: { ...tire(265, 70, 16), load_index: 112, speed_rating: 'T', runflat: false }, tags: ['camioneta'], description: 'Para camioneta, asfalto y terracería.' },\n { handle: 'llanta-175-70-r13-city', title: 'Llanta 175/70 R13 City', collection: 'llantas', type: 'Llanta', vendor: 'Marca Centro', price: 999, attributes: { ...tire(175, 70, 13), load_index: 82, speed_rating: 'T', runflat: false }, tags: ['auto'], stock: 0, description: 'Económica y durable para ciudad.' },\n]\n\nconst money = (n: number, currency: string) => ({ amount: n.toFixed(2), currency_code: currency })\n\nfunction cartesian(options: ProductOption[]): Record<string, string>[] {\n let combos: Record<string, string>[] = [{}]\n for (const opt of options) {\n const next: Record<string, string>[] = []\n for (const c of combos) for (const v of opt.values) next.push({ ...c, [opt.name]: v })\n combos = next\n }\n return combos\n}\n\nconst BASE_DATE = Date.UTC(2026, 8, 30, 12, 0, 0)\n\nfunction image(url: MockImageUrl, seed: string, alt: string): Image {\n return { url: url(seed), alt, width: 800, height: 800 }\n}\n\nexport function buildProducts(currency: string, imageUrl: MockImageUrl = MOCK_IMAGE_URL): Product[] {\n return PRODUCT_SPECS.map((spec, pi) => {\n const options = spec.options ?? []\n const combos = options.length ? cartesian(options) : [{}]\n const images = [image(imageUrl, spec.handle, spec.title), image(imageUrl, `${spec.handle}-2`, `${spec.title}, detalle`)]\n const variants: ProductVariant[] = combos.map((opts, vi) => {\n const delta = Object.values(opts).reduce((sum, v) => sum + (spec.priceDelta?.[v] ?? 0), 0)\n const price = spec.price + delta\n const stock = typeof spec.stock === 'function' ? spec.stock(vi, opts) : (spec.stock ?? 12)\n const title = Object.values(opts).join(' / ') || 'Predeterminado'\n const firstValue = Object.values(opts)[0]\n return {\n id: `var_${pi + 1}_${vi + 1}`,\n sku: `${spec.handle.toUpperCase().replace(/-/g, '')}-${vi + 1}`.slice(0, 32),\n title,\n selected_options: Object.entries(opts).map(([name, value]) => ({ name, value })),\n price: money(price, currency),\n compare_at_price: spec.compareAt ? money(spec.compareAt + delta, currency) : null,\n available_for_sale: stock > 0,\n quantity_available: stock,\n image: firstValue ? image(imageUrl, `${spec.handle}-${firstValue}`, `${spec.title} ${firstValue}`) : null,\n barcode: `75000000${String(pi * 100 + vi).padStart(5, '0')}`,\n }\n })\n const prices = variants.map((v) => Number(v.price.amount))\n const compares = variants.map((v) => (v.compare_at_price ? Number(v.compare_at_price.amount) : null)).filter((n): n is number => n !== null)\n const collection = COLLECTION_SPECS.find((c) => c.handle === spec.collection)!\n return {\n id: `prod_${pi + 1}`,\n handle: spec.handle,\n title: spec.title,\n description: spec.description,\n description_html: `<p>${spec.description}</p>`,\n vendor: spec.vendor,\n product_type: spec.type,\n category: { id: `cat_${spec.collection}`, handle: collection.handle, title: collection.title },\n tags: spec.tags ?? [],\n attributes: spec.attributes ?? {},\n featured_image: images[0] ?? null,\n images,\n options,\n variants,\n price_range: { min: money(Math.min(...prices), currency), max: money(Math.max(...prices), currency) },\n compare_at_price_range: compares.length\n ? { min: money(Math.min(...compares), currency), max: money(Math.max(...compares), currency) }\n : null,\n available_for_sale: variants.some((v) => v.available_for_sale),\n seo: { title: `${spec.title} | Mi tienda`, description: spec.description },\n updated_at: new Date(BASE_DATE - pi * 86_400_000).toISOString(),\n }\n })\n}\n\n/** Product handle → collection handles. */\nexport function buildMemberships(): Record<string, string[]> {\n const out: Record<string, string[]> = {}\n for (const p of PRODUCT_SPECS) out[p.handle] = [p.collection]\n return out\n}\n\nexport function buildCollections(imageUrl: MockImageUrl = MOCK_IMAGE_URL): Collection[] {\n return COLLECTION_SPECS.map((c) => ({\n id: `col_${c.handle}`,\n handle: c.handle,\n title: c.title,\n description: c.description,\n image: image(imageUrl, `col-${c.handle}`, c.title),\n seo: { title: `${c.title} | Mi tienda`, description: c.description },\n parent_handle: c.parent ?? null,\n }))\n}\n\nconst MX_TZ = 'America/Mexico_City'\nconst weekdays = (open: string, close: string, days = [1, 2, 3, 4, 5]) => days.map((day) => ({ day, open, close }))\n\n/** Three example branches (CDMX, Monterrey, Guadalajara) with structured hours. */\nexport function buildLocations(currency: string): Location[] {\n const contacts = (phone: string | null) => ({ phone, email: null, whatsapp: null })\n return [\n {\n id: 'br_centro', name: 'Sucursal Centro', kind: 'store', address: 'Av. Principal 100, Col. Centro', city: 'Ciudad de México', postal_code: '06000',\n phone: '+52 55 0000 0001', lat: 19.4326, lng: -99.1332, timezone: MX_TZ,\n hours: 'Mo-Fr 09:00-19:00, Sa 09:00-14:00', opening_hours_text: 'Lun–Vie 9:00–19:00 · Sáb 9:00–14:00',\n opening_hours: { weekly: [...weekdays('09:00', '19:00'), { day: 6, open: '09:00', close: '14:00' }] },\n services: ['pickup', 'returns'], contacts: contacts('+52 55 0000 0001'),\n pickup: { enabled: true, fee: null, prep_days: 0 },\n },\n {\n id: 'br_norte', name: 'Sucursal Norte', kind: 'store', address: 'Calle Secundaria 25, Col. Norte', city: 'Monterrey', postal_code: '64000',\n phone: null, lat: 25.6866, lng: -100.3161, timezone: MX_TZ,\n hours: 'Mo-Sa 10:00-18:00', opening_hours_text: 'Lun–Sáb 10:00–18:00',\n opening_hours: { weekly: weekdays('10:00', '18:00', [1, 2, 3, 4, 5, 6]) },\n services: ['pickup'], contacts: contacts(null),\n pickup: { enabled: true, fee: money(30, currency), prep_days: 1 },\n },\n {\n id: 'br_occidente', name: 'Punto de recolección Occidente', kind: 'pickup_point', address: 'Av. Vallarta 1500, Col. Americana', city: 'Guadalajara', postal_code: '44100',\n phone: '+52 33 0000 0003', lat: 20.6736, lng: -103.3897, timezone: MX_TZ,\n hours: 'Mo-Fr 11:00-20:00', opening_hours_text: 'Lun–Vie 11:00–20:00',\n opening_hours: { weekly: weekdays('11:00', '20:00') },\n services: ['pickup'], contacts: contacts('+52 33 0000 0003'),\n pickup: { enabled: false, fee: null, prep_days: 2 },\n },\n ]\n}\n\n/** Postal-code centroids the mock can resolve (the real API resolves any Mexican CP). */\nexport const MOCK_POSTAL_CENTROIDS: Record<string, { lat: number; lng: number }> = {\n '06000': { lat: 19.4326, lng: -99.1332 },\n '64000': { lat: 25.6714, lng: -100.309 },\n '44100': { lat: 20.6767, lng: -103.3475 },\n '03100': { lat: 19.3885, lng: -99.1719 },\n}\n\nexport function buildShop(currency: string, imageUrl: MockImageUrl = MOCK_IMAGE_URL): Shop {\n return {\n name: 'Mi tienda',\n description: 'Tienda de ejemplo para desarrollar sin backend.',\n domain: 'mi-tienda.example',\n currency_code: currency,\n locale: 'es-MX',\n locales: ['es-MX', 'en-US'],\n country_code: 'MX',\n logo: { url: imageUrl('logo', 256, 256), alt: 'Mi tienda', width: 256, height: 256 },\n contact: { email: 'hola@mi-tienda.example', phone: '+52 55 0000 0000', whatsapp: '+5215500000000' },\n branches: buildLocations(currency),\n policies: { free_shipping_min: money(999, currency), returns_days: 30 },\n }\n}\n\nexport function buildTheme(): Theme {\n return {\n tokens: {\n background: '#ffffff',\n foreground: '#111827',\n primary: '#0f766e',\n 'primary-foreground': '#ffffff',\n secondary: '#f1f5f9',\n 'secondary-foreground': '#0f172a',\n muted: '#f8fafc',\n 'muted-foreground': '#64748b',\n accent: '#f59e0b',\n 'accent-foreground': '#111827',\n border: '#e2e8f0',\n destructive: '#dc2626',\n },\n fonts: { heading: 'Inter', body: 'Inter' },\n radius: '0.5rem',\n }\n}\n\nexport function buildPages(imageUrl: MockImageUrl = MOCK_IMAGE_URL): Page[] {\n return [\n {\n handle: 'home',\n title: 'Inicio',\n seo: { title: 'Mi tienda', description: 'Ropa, hogar, accesorios y llantas con envío a todo el país.' },\n sections: [\n { id: 'hero-1', type: 'hero', props: { title: 'Todo lo que necesitas, en un solo lugar', subtitle: 'Envío gratis desde $999', cta_label: 'Ver productos', cta_url: '/collections/ropa', image: imageUrl('hero', 1600, 700) } },\n { id: 'grid-1', type: 'product_grid', props: { title: 'Lo más nuevo', collection: 'ropa', limit: 8 } },\n { id: 'collections-1', type: 'collection_list', props: { title: 'Compra por categoría', handles: ['ropa', 'hogar', 'accesorios', 'llantas'] } },\n { id: 'text-1', type: 'rich_text', props: { title: 'Sobre nosotros', html: '<p>Somos una tienda de ejemplo. Edita este texto desde el panel.</p>' } },\n {\n id: 'faq-1',\n type: 'faq',\n props: {\n title: 'Preguntas frecuentes',\n items: [\n { question: '¿Cuánto tarda el envío?', answer: 'De 2 a 5 días hábiles.' },\n { question: '¿Puedo recoger en tienda?', answer: 'Sí, elige recoger en sucursal al pagar.' },\n { question: '¿Cómo pido factura?', answer: 'Desde tu cuenta, en el detalle del pedido.' },\n ],\n },\n },\n ],\n },\n legal('terminos', 'Términos y condiciones', 'Al comprar en Mi tienda aceptas estos términos.'),\n legal('privacidad', 'Aviso de privacidad', 'Tratamos tus datos solo para procesar tus pedidos.'),\n legal('devoluciones', 'Política de devoluciones', 'Tienes 30 días para devolver tu compra.'),\n ]\n}\n\nfunction legal(handle: string, title: string, body: string): Page {\n return {\n handle,\n title,\n seo: { title: `${title} | Mi tienda`, description: body },\n sections: [{ id: `${handle}-text`, type: 'rich_text', props: { title, html: `<p>${body}</p>` } }],\n }\n}\n\nexport function buildMenus(): Menu[] {\n return [\n {\n handle: 'main',\n items: [\n { title: 'Inicio', url: '/' },\n {\n title: 'Tienda',\n url: '/search',\n items: COLLECTION_SPECS.map((c) => ({ title: c.title, url: `/collections/${c.handle}` })),\n },\n { title: 'Blog', url: '/blogs/noticias' },\n ],\n },\n {\n handle: 'footer',\n items: [\n { title: 'Términos y condiciones', url: '/pages/terminos' },\n { title: 'Aviso de privacidad', url: '/pages/privacidad' },\n { title: 'Devoluciones', url: '/pages/devoluciones' },\n ],\n },\n ]\n}\n\nexport function buildArticles(imageUrl: MockImageUrl = MOCK_IMAGE_URL): Article[] {\n return [\n {\n id: 'art_1',\n handle: 'como-elegir-llantas',\n title: 'Cómo elegir las llantas correctas',\n excerpt: 'Lee la medida en el costado de tu llanta: ancho, perfil y rin.',\n content_html: '<p>La medida 205/55 R16 indica 205 mm de ancho, perfil del 55 % y rin de 16 pulgadas.</p>',\n image: image(imageUrl, 'blog-llantas', 'Llantas'),\n author: 'Equipo Mi tienda',\n tags: ['llantas', 'guías'],\n published_at: '2026-09-15T15:00:00.000Z',\n seo: { title: 'Cómo elegir llantas | Mi tienda', description: 'Guía rápida para leer la medida de tus llantas.' },\n },\n {\n id: 'art_2',\n handle: 'cuidado-prendas-algodon',\n title: 'Cuida tus prendas de algodón',\n excerpt: 'Tres consejos para que tus playeras duren más.',\n content_html: '<p>Lava en frío, seca a la sombra y plancha al revés.</p>',\n image: image(imageUrl, 'blog-algodon', 'Prendas de algodón'),\n author: 'Equipo Mi tienda',\n tags: ['ropa', 'guías'],\n published_at: '2026-09-01T15:00:00.000Z',\n seo: { title: 'Cuida tus prendas | Mi tienda', description: 'Consejos de lavado para prendas de algodón.' },\n },\n ]\n}\n\nexport function buildCustomers(): Customer[] {\n return [\n {\n id: 'cus_1',\n email: MOCK_CUSTOMER_EMAIL,\n phone: '+525500000002',\n first_name: 'Cliente',\n last_name: 'Demo',\n default_address_id: null,\n created_at: '2026-01-10T12:00:00.000Z',\n },\n ]\n}\n","// Subject kinds for the mock («My items», contract 1.9). A store that declares none (the default) has no such section;\n// pass `subjectKinds: MOCK_SUBJECT_KINDS` to rehearse one that declares a «garage» (a cascade catalog with model years\n// and a private field) and a catalog-less «size».\nimport type { SubjectKind } from '../types.js'\n\nexport const MOCK_SUBJECT_KINDS: SubjectKind[] = [\n {\n key: 'vehicle',\n label: 'Vehículo',\n label_plural: 'Mi garage',\n max_per_account: 3,\n attach_to_order: true,\n fit_key_template: '{make}/{model}/{year}/{engine}',\n fields: [\n { key: 'make', label: 'Marca', type: 'select', source: 'catalog', required: true },\n { key: 'model', label: 'Modelo', type: 'select', source: 'catalog', depends_on: 'make', required: true },\n { key: 'year', label: 'Año', type: 'year', source: 'catalog', depends_on: 'model', required: true },\n { key: 'engine', label: 'Versión / motor', type: 'select', source: 'catalog', depends_on: 'year' },\n { key: 'plate', label: 'Placas (opcional)', type: 'text', max: 12, private: true },\n ],\n catalog: {\n version: 'mock-1',\n tree: {\n nissan: {\n label: 'Nissan',\n children: {\n np300: {\n label: 'NP300 Frontier',\n from: 2008,\n to: 2022,\n children: { '2.5': { label: '2.5 L', ranges: [[2010, 2015]] }, '2.4': { label: '2.4 L' } },\n },\n versa: { label: 'Versa', from: 2012, to: 2024, children: { '1.6': { label: '1.6 L' } } },\n },\n },\n ford: { label: 'Ford', children: { f150: { label: 'F-150', from: 2000, to: 2020, children: { '5.0': { label: '5.0 L' } } } } },\n },\n },\n },\n {\n key: 'size',\n label: 'Talla',\n label_plural: 'Mis tallas',\n max_per_account: 5,\n fit_key_template: '{garment}/{value}',\n fields: [\n { key: 'garment', label: 'Prenda', type: 'text', required: true },\n { key: 'value', label: 'Talla', type: 'text', required: true, max: 8 },\n ],\n catalog: null,\n },\n]\n","/**\n * In-memory implementation of the whole Storefront API v1 contract, exposed\n * as a `fetch` function. Use it to develop and test storefronts without OPS:\n *\n * const mock = createMockStorefront()\n * const sf = createStorefrontClient({ baseUrl: 'https://mock.local/api/gw', token: 'sk_mock', fetch: mock.fetch })\n */\nimport type {\n Address,\n Availability,\n InsufficientStockLine,\n Article,\n Cart,\n CartLine,\n CartRecommendation,\n Collection,\n Customer,\n CustomerCapabilities,\n CustomerSession,\n FiscalIdentity,\n FiscalProfile,\n FiscalProfileInput,\n InvoiceRequest,\n InvoiceDoc,\n InvoiceFile,\n InvoiceStage,\n InvoiceSummary,\n Facet,\n Location,\n Menu,\n Order,\n PendingPayment,\n Page,\n PaymentAttemptResult,\n PaymentConfig,\n PaymentMethod,\n Product,\n ProductVariant,\n PromotionAnnouncement,\n Region,\n AddressSuggestion,\n ShippingRate,\n Shop,\n StorefrontErrorCode,\n Subject,\n SubjectKind,\n Theme,\n} from '../types.js'\nimport { nextAction, orderProgress, orderShipments, shipmentsStatus, sortTrackingEvents, isTestShipment } from '../order-progress.js'\nimport { isValidPoint, rankByDistance } from '../geo.js'\nimport { resolveAvailability } from '../availability.js'\nimport { buildAccountOrders, buildPendingPayments } from './account-seed.js'\nimport { MOCK_REGION_MX, maskTaxId, validateInvoiceRequest } from './region.js'\nimport { isMasked, PRIVATE_MASK, resolveSubject, type SubjectValues } from '../subjects.js'\nimport {\n MOCK_CURRENCY,\n MOCK_IMAGE_URL,\n buildArticles,\n buildCollections,\n MOCK_POSTAL_CENTROIDS,\n buildCustomers,\n buildMemberships,\n buildMenus,\n buildPages,\n buildProducts,\n buildShop,\n buildTheme,\n type MockImageUrl,\n} from './seed.js'\n\nexport { MOCK_CURRENCY, MOCK_CUSTOMER_EMAIL, MOCK_IMAGE_URL, MOCK_POSTAL_CENTROIDS } from './seed.js'\nexport { MOCK_SUBJECT_KINDS } from './subjects.js'\nexport { MOCK_CSF_RULES, MOCK_FISCAL_ID_MX, MOCK_IDENTITY_DOCUMENT_MX_CSF, MOCK_REGION_MX } from './region.js'\nexport type { MockImageUrl } from './seed.js'\n\nexport type MockStorefrontOptions = {\n /** Currency for all prices (default `MXN`). */\n currency?: string\n /** Image URL builder for seed data (default: picsum.photos placeholders). */\n imageUrl?: MockImageUrl\n /** OTP code accepted by `/customer/session` (default `000000`). */\n otpCode?: string\n /**\n * What `GET /customer/capabilities` reports (default `{ password: true, email_verification: true, otp_channels: ['email'] }`).\n * `password: false` makes register / login / password routes answer `403`; `email_verification: false` makes `register`\n * create the account straight away (`201`).\n */\n customerCapabilities?: Partial<CustomerCapabilities>\n /**\n * Scopes the mock's `sk_`/`pk_` tokens do NOT have (e.g. `['customer:write']`), to rehearse an under-provisioned\n * store. Routes needing one answer `403 insufficient_scope` with `required_scopes`; `GET /_token` lists them in\n * `missing_scopes`; and `customer/capabilities` reports `password: false`, `unavailable_reason: 'missing_scope'`\n * when `customer:write` is among them. Implies scope enforcement.\n */\n missingScopes?: string[]\n /** Failed password logins per email before `429 rate_limited` (default 5; a success or a reset clears the count). */\n maxLoginAttempts?: number\n /** Discount codes → percentage off the subtotal (default `{ BIENVENIDA10: 10 }`). */\n discountCodes?: Record<string, number>\n /** Flat shipping rate (default 149). Free from `shop.policies.free_shipping_min`. */\n flatShipping?: number\n /** Enforce token scopes (`pk_` cannot checkout or use customer routes). Default true. */\n enforceScopes?: boolean\n /**\n * Mock `show_stock`: `low_stock_threshold:N` semantics. At or below this quantity a variant is `low_stock`\n * and only then `availability.quantity` is published (default 5; `0` disables `low_stock`).\n */\n lowStockThreshold?: number\n /** Artificial latency per request, in ms (default 0). */\n latencyMs?: number\n /** Override seed data. */\n shop?: Partial<Shop>\n products?: Product[]\n collections?: Collection[]\n /** Product handle → collection handles (required when overriding `products`). */\n memberships?: Record<string, string[]>\n theme?: Theme\n pages?: Page[]\n menus?: Menu[]\n articles?: Article[]\n /** Entry pop-up announcements served by `GET /storefront/promotions` (default none). */\n announcements?: PromotionAnnouncement[]\n /** Payment attempts allowed per checkout before `429 too_many_attempts` (default 5). */\n maxPaymentAttempts?: number\n /**\n * Carrier-style rates served by `delivery-options` instead of the flat / express pair (to design a checkout with\n * carriers, ETAs and quote deadlines). `expires_at` missing: 24 h from the request. Free shipping still applies.\n */\n shippingRates?: ShippingRate[]\n /**\n * `fixed_when_free`: past `policies.free_shipping_min` `delivery-options` serves ONLY the shop's free rate and flags\n * `free` / `fixed` (what the `storefront_cart` addon does with the setting of the same name). Default: the usual list.\n */\n shippingQuoteMode?: 'carriers' | 'fixed_when_free'\n /** Methods served by `payment-methods` (default one builtin `mock`). */\n paymentMethods?: PaymentMethod[]\n /**\n * What `GET /storefront/region` serves (default `MOCK_REGION_MX`, with its `MX:csf` identity document). `null`: the\n * organization has no region, the route answers `404` and invoice requests are not validated against a region.\n */\n region?: Region | null\n /**\n * What `GET /storefront/address/suggest` can answer (matched by `label` containing the typed text). Default: none, so\n * the route answers `{ suggestions: [], available: false }` like a market without a suggestion provider and address\n * forms stay manual.\n */\n addressSuggestions?: AddressSuggestion[]\n /**\n * The kinds of buyer item («My items») the store declares, served by `GET /subject-kinds` and enforced by\n * `customer.subjects`. Default none: no such section, as in a store that declares nothing (`MOCK_SUBJECT_KINDS` has two).\n */\n subjectKinds?: SubjectKind[]\n}\n\ntype CartRecord = {\n id: string\n lines: { id: string; variant_id: string; quantity: number }[]\n codes: string[]\n buyer: Cart['buyer']\n shipping_address: Address | null\n delivery: Cart['delivery']\n note: string | null\n /** Invoice asked for (`PUT /carts/:id/invoice`). */\n invoice: InvoiceRequest | null\n checkedOut: boolean\n updated_at: string\n}\n\nexport type MockState = {\n shop: Shop\n products: Product[]\n collections: Collection[]\n memberships: Record<string, string[]>\n theme: Theme\n pages: Page[]\n menus: Menu[]\n articles: Article[]\n carts: Map<string, CartRecord>\n customers: Customer[]\n addresses: Map<string, Address[]>\n /** Saved fiscal profiles by customer id (contract 1.9). */\n fiscalProfiles: Map<string, FiscalProfile[]>\n /** Saved items by customer id (contract 1.9); `private` holds the values the API only returns masked. */\n subjects: Map<string, (Subject & { private: Record<string, string> })[]>\n orders: (Order & { customer_id: string | null })[]\n otps: Map<string, string>\n /** Email → password (plain text: it is a mock). The seed customer starts without one. */\n passwords: Map<string, string>\n /** Registrations waiting for their code, by email. */\n pendingRegistrations: Map<string, { password: string; first_name: string | null; last_name: string | null }>\n /** Consecutive failed password logins by email. */\n loginFailures: Map<string, number>\n sessions: Map<string, string>\n /** What «Devices» shows for each session token (contract 1.9). */\n sessionInfo: Map<string, { id: string; customer_id: string; created_at: string; last_used_at: string; login_method: string; reauth_at: number | null }>\n /** Wrong re-authentications per customer (5 and the mock answers 429). */\n reauthFailures: Map<string, number>\n /** Data exports served per customer (3 a day). */\n exportsServed: Map<string, number>\n /** Tokens of accounts that were deleted: deleting again answers 204, as the server does. */\n deletedTokens: Set<string>\n idempotency: Map<string, { status: number; body: unknown }>\n checkouts: Map<string, unknown>\n /** Payment attempts per checkout (`n`, last result). */\n payments: Map<string, { attempts: number; last: PaymentAttemptResult | null }>\n /** `contact|sku` of accepted \"notify me\" subscriptions. */\n restock: Set<string>\n /** Cash vouchers waiting for payment (`GET /customer/pending-payments`); `cus_1` only. */\n pendingPayments: PendingPayment[]\n /** Invoice requested per order id. */\n invoices: Map<string, { stage: InvoiceStage; request: InvoiceRequest }>\n seq: number\n}\n\nclass HttpError extends Error {\n constructor(\n readonly status: number,\n readonly code: StorefrontErrorCode,\n message: string,\n readonly field?: string,\n readonly details?: unknown,\n readonly requiredScopes?: string[],\n ) {\n super(message)\n }\n}\n\nconst PUBLIC_CACHE = 'public, max-age=60, stale-while-revalidate=600'\nconst PRIVATE_CACHE = 'private, no-store'\n\nconst toCents = (amount: string) => Math.round(Number.parseFloat(amount) * 100)\nconst fromCents = (cents: number, currency: string) => ({ amount: (cents / 100).toFixed(2), currency_code: currency })\n\nfunction fnv1a(input: string): string {\n let h = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i)\n h = Math.imul(h, 0x01000193)\n }\n return (h >>> 0).toString(16)\n}\n\nfunction encodeCursor(offset: number): string {\n return btoa(`o:${offset}`)\n}\n\nfunction decodeCursor(cursor: string | null): number {\n if (!cursor) return 0\n try {\n const raw = atob(cursor)\n if (!raw.startsWith('o:')) throw new Error('bad cursor')\n const n = Number(raw.slice(2))\n if (!Number.isInteger(n) || n < 0) throw new Error('bad cursor')\n return n\n } catch {\n throw new HttpError(400, 'validation', 'Invalid cursor', 'after')\n }\n}\n\nfunction paginate<T>(items: T[], search: URLSearchParams, defaultFirst = 24, maxFirst = 100) {\n const first = search.has('first') ? Number(search.get('first')) : defaultFirst\n if (!Number.isInteger(first) || first < 1 || first > maxFirst) throw new HttpError(400, 'validation', `\\`first\\` must be between 1 and ${maxFirst}`, 'first')\n const start = decodeCursor(search.get('after'))\n const nodes = items.slice(start, start + first)\n const end = start + nodes.length\n return {\n nodes,\n page_info: { has_next_page: end < items.length, end_cursor: nodes.length ? encodeCursor(end) : null },\n total_count: items.length,\n }\n}\n\nconst now = () => new Date().toISOString()\n\nexport function createMockStorefront(options: MockStorefrontOptions = {}) {\n const currency = options.currency ?? MOCK_CURRENCY\n const imageUrl = options.imageUrl ?? MOCK_IMAGE_URL\n const otpCode = options.otpCode ?? '000000'\n const capabilities: CustomerCapabilities = {\n password: true,\n email_verification: true,\n otp_channels: ['email'],\n invoicing: {\n available: true,\n countries: ['MX'],\n checkout: 'optional',\n post_purchase: true,\n window_days: 30,\n identity_documents: ['MX:csf'],\n online_verify: false,\n },\n fiscal_profiles: { max: 10 },\n notifications: { channels: ['email'] },\n data_export: true,\n account_delete: true,\n email_change: true,\n ...((options.subjectKinds?.length ?? 0) > 0 ? { subjects: { kinds: options.subjectKinds!.map((k) => k.key), share_with_workshop: false } } : {}),\n ...options.customerCapabilities,\n }\n const missingScopes = options.missingScopes ?? []\n if (missingScopes.includes('customer:write')) {\n capabilities.password = false\n capabilities.unavailable_reason = 'missing_scope'\n capabilities.missing_scopes = ['customer:write']\n }\n const region = options.region === undefined ? MOCK_REGION_MX : options.region\n const maxLoginAttempts = options.maxLoginAttempts ?? 5\n const MIN_PASSWORD = 10\n const MAX_PASSWORD = 128\n const discountCodes = Object.fromEntries(\n Object.entries(options.discountCodes ?? { BIENVENIDA10: 10 }).map(([k, v]) => [k.toUpperCase(), v]),\n )\n const flatShippingCents = Math.round((options.flatShipping ?? 149) * 100)\n const enforceScopes = options.enforceScopes ?? true\n\n function seed(): MockState {\n return {\n shop: { ...buildShop(currency, imageUrl), ...options.shop },\n products: structuredClone(options.products ?? buildProducts(currency, imageUrl)),\n collections: structuredClone(options.collections ?? buildCollections(imageUrl)),\n memberships: structuredClone(options.memberships ?? buildMemberships()),\n theme: structuredClone(options.theme ?? buildTheme()),\n pages: structuredClone(options.pages ?? buildPages(imageUrl)),\n menus: structuredClone(options.menus ?? buildMenus()),\n articles: structuredClone(options.articles ?? buildArticles(imageUrl)),\n carts: new Map(),\n customers: buildCustomers(),\n addresses: new Map(),\n fiscalProfiles: new Map(),\n subjects: new Map(),\n orders: [\n {\n id: 'ord_seed_1',\n number: '1000',\n status: 'fulfilled',\n created_at: '2026-08-20T18:00:00.000Z',\n total: fromCents(24900, currency),\n customer_id: 'cus_1',\n lines: [\n { title: 'Playera básica', variant_title: 'M / Blanco', sku: null, quantity: 1, unit: fromCents(24900, currency), total: fromCents(24900, currency), image: null },\n ],\n },\n ...buildAccountOrders(currency),\n ],\n pendingPayments: buildPendingPayments(currency, Date.now()),\n otps: new Map(),\n passwords: new Map(),\n pendingRegistrations: new Map(),\n loginFailures: new Map(),\n sessions: new Map(),\n sessionInfo: new Map(),\n reauthFailures: new Map(),\n exportsServed: new Map(),\n deletedTokens: new Set(),\n idempotency: new Map(),\n checkouts: new Map(),\n payments: new Map(),\n restock: new Set(),\n invoices: new Map(),\n seq: 0,\n }\n }\n\n const lowStockThreshold = options.lowStockThreshold ?? 5\n\n /** Recomputes `availability` (and the legacy fields) of every variant/product from `quantity_available`. */\n function syncAvailability(products: Product[]) {\n for (const p of products) {\n for (const v of p.variants) {\n const qty = v.quantity_available\n const sellable = v.available_for_sale && (qty === null || qty > 0)\n v.available_for_sale = sellable\n const low = sellable && qty !== null && lowStockThreshold > 0 && qty <= lowStockThreshold\n v.availability = {\n status: !sellable ? 'out_of_stock' : low ? 'low_stock' : 'in_stock',\n quantity: low ? qty : null,\n max_per_order: sellable ? (qty === null ? null : Math.min(qty, 10)) : null,\n restock_eta: null,\n preorder_release_at: null,\n notify_available: !sellable,\n }\n }\n p.available_for_sale = p.variants.some((v) => v.available_for_sale)\n const rank = ['in_stock', 'low_stock', 'backorder', 'preorder', 'out_of_stock']\n const best = p.variants.map((v) => v.availability as Availability).sort((a, b) => rank.indexOf(a.status) - rank.indexOf(b.status))[0]\n p.availability = best ?? resolveAvailability(p)\n }\n }\n\n let state = seed()\n syncAvailability(state.products)\n const nextId = (prefix: string) => `${prefix}_${(++state.seq).toString(36)}${Math.random().toString(36).slice(2, 8)}`\n\n // -------------------------------------------------------------------------\n // Catalog helpers\n // -------------------------------------------------------------------------\n\n function findVariant(variantId: string): { product: Product; variant: ProductVariant } | null {\n for (const product of state.products) {\n const variant = product.variants.find((v) => v.id === variantId)\n if (variant) return { product, variant }\n }\n return null\n }\n\n const minPriceCents = (p: Product) => toCents(p.price_range.min.amount)\n\n function attrValue(p: Product, key: string): string | null {\n if (key === 'vendor') return p.vendor\n if (key === 'product_type') return p.product_type\n if (key === 'tag') return null\n const v = p.attributes[key]\n return v === undefined ? null : String(v)\n }\n\n function matchesText(p: Product, q: string): number {\n const terms = q.toLowerCase().split(/\\s+/).filter(Boolean)\n const hay = [p.title, p.description, p.vendor ?? '', p.product_type ?? '', ...p.tags, ...Object.values(p.attributes).map(String)]\n .join(' ')\n .toLowerCase()\n let score = 0\n for (const t of terms) {\n if (!hay.includes(t)) return 0\n score += p.title.toLowerCase().includes(t) ? 2 : 1\n }\n return score\n }\n\n function listProducts(search: URLSearchParams) {\n let items = state.products.slice()\n const q = search.get('q')?.trim()\n const scores = new Map<string, number>()\n if (q) {\n items = items.filter((p) => {\n const s = matchesText(p, q)\n scores.set(p.id, s)\n return s > 0\n })\n }\n const collection = search.get('collection')\n if (collection) {\n if (!state.collections.some((c) => c.handle === collection)) throw new HttpError(404, 'not_found', `Collection ${collection} not found`, 'collection')\n items = items.filter((p) => state.memberships[p.handle]?.includes(collection))\n }\n const handles = search.get('handles')\n if (handles) {\n const list = handles.split(',').map((h) => h.trim()).filter(Boolean)\n if (list.length > 100) throw new HttpError(400, 'validation', 'At most 100 handles', 'handles')\n items = items.filter((p) => list.includes(p.handle))\n }\n\n // `tags_any` (contract 1.9) is a hard filter of the base set: facets count inside it, nothing relaxes it.\n const tagsAny = (search.get('tags_any') ?? '').split(',').map((t) => t.trim().toLowerCase()).filter(Boolean)\n if (tagsAny.length > 5 || tagsAny.some((t) => t.length > 120)) throw new HttpError(400, 'validation', 'tags_any takes at most 5 tags of 120 characters', 'tags_any')\n if (tagsAny.length > 0) items = items.filter((p) => p.tags.some((t) => tagsAny.includes(t.toLowerCase())))\n\n // Facets are computed over the base set (text/collection/handles), before refinement.\n const base = items\n\n if (search.get('available') === 'true') items = items.filter((p) => p.available_for_sale)\n const priceMin = search.get('price_min')\n const priceMax = search.get('price_max')\n if (priceMin) items = items.filter((p) => minPriceCents(p) >= Math.round(Number(priceMin) * 100))\n if (priceMax) items = items.filter((p) => minPriceCents(p) <= Math.round(Number(priceMax) * 100))\n\n const filters = new Map<string, string[]>()\n for (const [key, value] of search) {\n if (!key.startsWith('filter.')) continue\n const name = key.slice(7)\n filters.set(name, [...(filters.get(name) ?? []), value])\n }\n for (const [key, values] of filters) {\n if (key === 'tag') items = items.filter((p) => values.some((v) => p.tags.includes(v)))\n else items = items.filter((p) => values.includes(attrValue(p, key) ?? '\\u0000'))\n }\n\n const sort = search.get('sort') ?? 'relevance'\n const sorters: Record<string, (a: Product, b: Product) => number> = {\n relevance: (a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0),\n price_asc: (a, b) => minPriceCents(a) - minPriceCents(b),\n price_desc: (a, b) => minPriceCents(b) - minPriceCents(a),\n newest: (a, b) => b.updated_at.localeCompare(a.updated_at),\n title_asc: (a, b) => a.title.localeCompare(b.title, 'es'),\n }\n const sorter = sorters[sort]\n if (!sorter) throw new HttpError(400, 'validation', `Unknown sort ${sort}`, 'sort')\n items = items.slice().sort(sorter)\n\n return { ...paginate(items, search), facets: buildFacets(base) }\n }\n\n function buildFacets(products: Product[]): Facet[] {\n const facets: Facet[] = []\n const listFacet = (key: string, label: string, pick: (p: Product) => string | null) => {\n const counts = new Map<string, number>()\n for (const p of products) {\n const v = pick(p)\n if (v !== null && v !== '') counts.set(v, (counts.get(v) ?? 0) + 1)\n }\n if (counts.size === 0) return\n const values = [...counts.entries()]\n .sort(([a], [b]) => a.localeCompare(b, 'es', { numeric: true }))\n .map(([value, count]) => ({ value, label: value, count }))\n facets.push({ key, label, type: 'list', values })\n }\n listFacet('vendor', 'Marca', (p) => p.vendor)\n listFacet('product_type', 'Tipo', (p) => p.product_type)\n const attrKeys = new Set<string>()\n for (const p of products) for (const k of Object.keys(p.attributes)) attrKeys.add(k)\n const labels: Record<string, string> = { width: 'Ancho', aspect: 'Perfil', rim: 'Rin', size_key: 'Medida', load_index: 'Índice de carga', speed_rating: 'Índice de velocidad', runflat: 'Run flat' }\n for (const k of [...attrKeys].sort()) listFacet(k, labels[k] ?? k, (p) => (p.attributes[k] === undefined ? null : String(p.attributes[k])))\n if (products.length) {\n const prices = products.map(minPriceCents)\n const min = Math.min(...prices)\n const max = Math.max(...prices)\n facets.push({\n key: 'price',\n label: 'Precio',\n type: 'price_range',\n values: [\n { value: (min / 100).toFixed(2), label: 'min', count: products.length },\n { value: (max / 100).toFixed(2), label: 'max', count: products.length },\n ],\n })\n }\n return facets\n }\n\n // -------------------------------------------------------------------------\n // Cart helpers\n // -------------------------------------------------------------------------\n\n function getCartRecord(id: string): CartRecord {\n const cart = state.carts.get(id)\n if (!cart) throw new HttpError(404, 'not_found', `Cart ${id} not found`, 'id')\n return cart\n }\n\n function validateLines(lines: unknown, cart?: CartRecord): { variant_id: string; quantity: number }[] {\n if (!Array.isArray(lines)) throw new HttpError(400, 'validation', '`lines` must be an array', 'lines')\n const toCheck: Parameters<typeof checkStock>[0] = []\n const out = lines.map((raw, i) => {\n const l = raw as { variant_id?: unknown; quantity?: unknown }\n if (typeof l.variant_id !== 'string') throw new HttpError(400, 'validation', 'variant_id is required', `lines[${i}].variant_id`)\n const quantity = l.quantity === undefined ? 1 : l.quantity\n if (typeof quantity !== 'number' || !Number.isInteger(quantity) || quantity < 1) {\n throw new HttpError(400, 'validation', 'quantity must be a positive integer', `lines[${i}].quantity`)\n }\n const found = findVariant(l.variant_id)\n if (!found) throw new HttpError(400, 'validation', `Unknown variant ${l.variant_id}`, `lines[${i}].variant_id`)\n const existing = cart?.lines.find((x) => x.variant_id === l.variant_id)\n toCheck.push({ variant: found.variant, quantity: (existing?.quantity ?? 0) + quantity, lineId: existing?.id ?? null, field: `lines[${i}].quantity` })\n return { variant_id: l.variant_id, quantity }\n })\n checkStock(toCheck)\n return out\n }\n\n /** Visible cap for a variant: only published when the mock's show_stock lets the buyer see it. */\n function visibleMax(variant: ProductVariant): number | null {\n const a = variant.availability\n if (!a || a.status === 'out_of_stock') return 0\n return a.status === 'low_stock' ? a.quantity : null\n }\n\n function lineProblem(variant: ProductVariant, quantity: number): CartLine['problem'] {\n if (!variant.available_for_sale) return { code: 'out_of_stock', max_quantity: 0 }\n if (variant.quantity_available !== null && quantity > variant.quantity_available) {\n return { code: 'insufficient_stock', max_quantity: visibleMax(variant) }\n }\n return null\n }\n\n /** Throws one `409 insufficient_stock` listing every affected line; the message never carries quantities. */\n function checkStock(items: { variant: ProductVariant; quantity: number; lineId: string | null; field: string }[]) {\n const bad = items.filter((i) => lineProblem(i.variant, i.quantity))\n if (bad.length === 0) return\n const lines: InsufficientStockLine[] = bad.map((i) => ({\n line_id: i.lineId,\n variant_id: i.variant.id,\n sku: i.variant.sku,\n status: i.variant.availability?.status ?? 'out_of_stock',\n max_quantity: visibleMax(i.variant),\n }))\n throw new HttpError(409, 'insufficient_stock', 'Algunos productos ya no tienen existencias suficientes', bad[0]!.field, { lines })\n }\n\n function addLines(cart: CartRecord, lines: { variant_id: string; quantity: number }[]) {\n for (const l of lines) {\n const existing = cart.lines.find((x) => x.variant_id === l.variant_id)\n if (existing) existing.quantity += l.quantity\n else cart.lines.push({ id: nextId('line'), variant_id: l.variant_id, quantity: l.quantity })\n }\n }\n\n const isKnownCode = (code: string) => code.toUpperCase() in discountCodes\n const percentFor = (code: string) => discountCodes[code.toUpperCase()] ?? 0\n\n function shippingRates(subtotalCents: number): ShippingRate[] {\n const freeMin = state.shop.policies.free_shipping_min\n const free = freeMin !== null && subtotalCents >= toCents(freeMin.amount)\n if (options.shippingRates?.length) {\n const expires = new Date(Date.now() + 24 * 3_600_000).toISOString()\n return options.shippingRates.map((r) => ({ ...r, expires_at: r.expires_at ?? expires, cost: free ? fromCents(0, r.cost.currency_code) : r.cost }))\n }\n // Like the server with `shipping_quote_mode: fixed_when_free`: past the free-shipping minimum the shop's own price is\n // the only rate (no carrier is asked, there is nothing to choose).\n if (free && options.shippingQuoteMode === 'fixed_when_free') return [{ id: 'flat', title: 'Envío gratis', cost: fromCents(0, currency), eta: '2 a 5 días hábiles' }]\n return [\n { id: 'flat', title: free ? 'Envío estándar (gratis)' : 'Envío estándar', cost: fromCents(free ? 0 : flatShippingCents, currency), eta: '2 a 5 días hábiles' },\n { id: 'express', title: 'Envío exprés', cost: fromCents(flatShippingCents + 10000, currency), eta: '1 a 2 días hábiles' },\n ]\n }\n\n function renderCart(cart: CartRecord): Cart {\n const lines: CartLine[] = []\n let subtotal = 0\n let quantity = 0\n for (const l of cart.lines) {\n const found = findVariant(l.variant_id)\n if (!found) continue\n const { product, variant } = found\n const unit = toCents(variant.price.amount)\n subtotal += unit * l.quantity\n quantity += l.quantity\n lines.push({\n id: l.id,\n quantity: l.quantity,\n problem: lineProblem(variant, l.quantity),\n merchandise: {\n ...variant,\n product: { handle: product.handle, title: product.title, featured_image: product.featured_image },\n },\n cost: {\n unit: variant.price,\n total: fromCents(unit * l.quantity, currency),\n compare_at_unit: variant.compare_at_price,\n },\n })\n }\n const codes = cart.codes.map((code) => ({ code, applicable: isKnownCode(code) && subtotal > 0 }))\n const percent = codes.filter((d) => d.applicable).reduce((max, d) => Math.max(max, percentFor(d.code)), 0)\n const discount = Math.round((subtotal * percent) / 100)\n let shipping: number | null = null\n if (cart.delivery.method === 'pickup') shipping = toCents(state.shop.branches.find((b) => b.id === cart.delivery.branch_id)?.pickup?.fee?.amount ?? '0')\n else if (cart.delivery.method === 'shipping' && cart.delivery.rate_id) {\n const rate = shippingRates(subtotal - discount).find((r) => r.id === cart.delivery.rate_id)\n shipping = rate ? toCents(rate.cost.amount) : null\n }\n const total = subtotal - discount + (shipping ?? 0)\n // IVA 16 % included in prices.\n const tax = Math.round(total - total / 1.16)\n return {\n id: cart.id,\n lines,\n total_quantity: quantity,\n discount_codes: codes,\n buyer: { ...cart.buyer },\n shipping_address: cart.shipping_address ? { ...cart.shipping_address } : null,\n delivery: { ...cart.delivery },\n cost: {\n subtotal: fromCents(subtotal, currency),\n discount: fromCents(discount, currency),\n shipping: shipping === null ? null : fromCents(shipping, currency),\n tax: fromCents(tax, currency),\n total: fromCents(total, currency),\n tax_included: true,\n },\n note: cart.note,\n invoice: cart.invoice ? cartInvoiceOf(cart.invoice) : null,\n updated_at: cart.updated_at,\n }\n }\n\n function cartInvoiceOf(inv: InvoiceRequest): NonNullable<Cart['invoice']> {\n const taxId = typeof inv.tax_id === 'string' ? inv.tax_id : typeof inv.rfc === 'string' ? inv.rfc : ''\n const name = typeof inv.legal_name === 'string' ? inv.legal_name : typeof inv.razon_social === 'string' ? inv.razon_social : null\n return {\n requested: true,\n tax_id_masked: taxId ? maskTaxId(taxId) : null,\n legal_name: name,\n country_code: inv.country_code ?? region?.country_code ?? null,\n document_kind: inv.document?.kind ?? null,\n }\n }\n\n /** `null` for \"no invoice\" (absent, `requested: false`), the request when it is valid, a 422 `invoice.<field>` otherwise. */\n function parseInvoice(raw: unknown, prefix = 'invoice'): InvoiceRequest | null {\n if (raw === null || raw === undefined) return null\n if (typeof raw !== 'object' || Array.isArray(raw)) throw new HttpError(400, 'validation', 'invoice must be an object', prefix)\n const inv = raw as InvoiceRequest\n if (inv.requested === false) return null\n const problem = validateInvoiceRequest(region, inv, prefix)\n if (problem) throw new HttpError(422, 'invalid_state', problem.message, problem.field)\n return inv\n }\n\n const orderInvoice = (order: MockState['orders'][number]): InvoiceSummary => {\n const doc = order.invoices?.find((d) => d.kind === 'invoice')\n if (doc) {\n // Seeded document: the summary says what the document says, with no link (the file comes from `invoiceFile`).\n const { id: _id, kind: _k, total: _t, issued_at: _i, cancelled_at: _c, series: _s, folio_number: _f, related_to: _r, links_expire_at: _l, test_mode: _tm, environment: _e, ...summary } = doc\n return { ...summary, url: null, xml_url: null }\n }\n const entry = state.invoices.get(order.id)\n const paid = order.status !== 'pending_payment'\n if (entry) {\n const stage: InvoiceStage = entry.stage === 'awaiting_payment' && paid ? 'queued' : entry.stage\n return { stage, requested: true, status: stage === 'issued' ? 'issued' : 'requested', action: stage === 'awaiting_payment' ? 'wait' : 'none', can_request: false, url: null, xml_url: null }\n }\n return paid\n ? { status: 'not_requested', stage: 'not_requested', requested: false, action: 'request', can_request: true, blocked_reason: null }\n : { status: 'not_requested', stage: 'not_requested', requested: false, action: 'none', can_request: false, blocked_reason: 'awaiting_payment' }\n }\n\n // -------------------------------------------------------------------------\n // Customer helpers\n // -------------------------------------------------------------------------\n\n function requireCustomer(headers: Headers): Customer {\n const token = headers.get('x-customer-token')\n const id = token ? state.sessions.get(token) : undefined\n const customer = id ? state.customers.find((c) => c.id === id) : undefined\n if (!customer) throw new HttpError(401, 'unauthorized', 'Missing or invalid customer session')\n return customer\n }\n\n function identifierOf(body: Record<string, unknown>): string {\n const email = typeof body.email === 'string' ? body.email.trim().toLowerCase() : ''\n const phone = typeof body.phone === 'string' ? body.phone.replace(/\\s+/g, '') : ''\n if (!email && !phone) throw new HttpError(400, 'validation', 'email or phone is required', 'email')\n if (email && !/^[^@\\s]+@[^@\\s]+$/.test(email)) throw new HttpError(400, 'validation', 'Invalid email', 'email')\n return email ? `email:${email}` : `phone:${phone}`\n }\n\n function emailOf(body: Record<string, unknown>): string {\n const email = typeof body.email === 'string' ? body.email.trim().toLowerCase() : ''\n if (!email || !/^[^@\\s]+@[^@\\s]+$/.test(email)) throw new HttpError(400, 'validation', 'Invalid email', 'email')\n return email\n }\n\n function passwordOf(body: Record<string, unknown>, field = 'password'): string {\n const value = body[field]\n if (typeof value !== 'string' || value.length < MIN_PASSWORD || value.length > MAX_PASSWORD) {\n throw new HttpError(400, 'validation', `${field} must be ${MIN_PASSWORD}-${MAX_PASSWORD} characters`, field)\n }\n return value\n }\n\n function requirePasswordEnabled() {\n if (!capabilities.password) throw new HttpError(403, 'forbidden', 'Password accounts are disabled for this store')\n }\n\n function sessionFor(email: string, extra: { first_name?: string | null; last_name?: string | null } = {}): CustomerSession {\n let customer = state.customers.find((c) => c.email === email)\n if (!customer) {\n customer = {\n id: nextId('cus'),\n email,\n phone: null,\n first_name: extra.first_name ?? null,\n last_name: extra.last_name ?? null,\n default_address_id: null,\n created_at: now(),\n // Registered with no mail connector: the e-mail is only a login name until a code proves it.\n email_verified: capabilities.email_verification,\n }\n state.customers.push(customer)\n }\n const token = `ct_${customer.id}_${Math.random().toString(36).slice(2)}`\n state.sessions.set(token, customer.id)\n trackSession(token, 'password')\n return { token, expires_at: new Date(Date.now() + 30 * 86_400_000).toISOString(), customer }\n }\n\n function trackSession(token: string, loginMethod: string) {\n const at = now()\n state.sessionInfo.set(token, { id: nextId('ses'), customer_id: state.sessions.get(token) ?? '', created_at: at, last_used_at: at, login_method: loginMethod, reauth_at: null })\n }\n\n function validateAddress(body: Record<string, unknown>, partial = false): Partial<Address> {\n const required = ['address1', 'city', 'zip', 'country_code'] as const\n if (!partial) {\n for (const f of required) {\n if (typeof body[f] !== 'string' || !(body[f] as string).trim()) throw new HttpError(400, 'validation', `${f} is required`, f)\n }\n }\n const fields = ['first_name', 'last_name', 'company', 'address1', 'address2', 'city', 'province', 'zip', 'country_code', 'phone'] as const\n const out: Partial<Address> = {}\n for (const f of fields) {\n if (f in body) (out as Record<string, unknown>)[f] = body[f] ?? null\n else if (!partial) (out as Record<string, unknown>)[f] = null\n }\n return out\n }\n\n // -------------------------------------------------------------------------\n // Router\n // -------------------------------------------------------------------------\n\n type Ctx = {\n method: string\n params: string[]\n search: URLSearchParams\n headers: Headers\n body: Record<string, unknown>\n scopes: Set<string>\n }\n type Result = { status?: number; body?: unknown; cache?: 'public' | 'private'; headers?: Record<string, string> }\n type Route = { method: string; pattern: RegExp; scope: string; handler: (ctx: Ctx) => Result | Promise<Result> }\n\n const routes: Route[] = []\n const route = (method: string, path: string, scope: string, handler: Route['handler']) => {\n const pattern = new RegExp('^' + path.replace(/:[a-z_]+/g, '([^/]+)') + '$')\n routes.push({ method, pattern, scope, handler })\n }\n\n const requireNode = <T>(value: T | undefined, what: string, field = 'handle'): T => {\n if (value === undefined) throw new HttpError(404, 'not_found', `${what} not found`, field)\n return value\n }\n\n // Catalog\n route('GET', '/shop', 'catalog:read', () => ({ body: state.shop, cache: 'public' }))\n route('GET', '/region', 'catalog:read', () => {\n if (!region) throw new HttpError(404, 'not_found', 'No region configured')\n return { body: region, cache: 'public' }\n })\n route('GET', '/address/suggest', 'catalog:read', ({ search }) => {\n const q = (search.get('q') ?? '').trim().replace(/\\s+/g, ' ')\n if ([...q].length < 3) throw new HttpError(400, 'validation', 'q needs at least 3 characters', 'q')\n const pool = options.addressSuggestions\n if (!pool) return { body: { suggestions: [], available: false }, cache: 'private' }\n const fold = (v: string) => v.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase()\n const country = search.get('country')?.toUpperCase()\n const zip = search.get('zip')?.trim()\n const limit = Math.min(Math.max(Number(search.get('limit')) || 5, 1), 8)\n const hits = pool.filter((p) => fold(p.label).includes(fold(q)) && (!country || p.country === country) && (!zip || !p.zip || p.zip === zip))\n return { body: { suggestions: hits.slice(0, limit), available: true }, cache: 'private' }\n })\n route('GET', '/products', 'catalog:read', ({ search }) => ({ body: listProducts(search), cache: 'public' }))\n route('GET', '/products/:handle', 'catalog:read', ({ params }) => ({\n body: requireNode(state.products.find((p) => p.handle === params[0]), `Product ${params[0]}`),\n cache: 'public',\n }))\n route('GET', '/products/:handle/recommendations', 'catalog:read', ({ params }) => {\n const product = requireNode(state.products.find((p) => p.handle === params[0]), `Product ${params[0]}`)\n const cols = state.memberships[product.handle] ?? []\n const nodes = state.products\n .filter((p) => p.id !== product.id && p.available_for_sale && (state.memberships[p.handle] ?? []).some((c) => cols.includes(c)))\n .slice(0, 4)\n return { body: { nodes }, cache: 'public' }\n })\n route('GET', '/collections', 'catalog:read', ({ search }) => ({ body: paginate(state.collections, search), cache: 'public' }))\n route('GET', '/collections/:handle', 'catalog:read', ({ params }) => ({\n body: requireNode(state.collections.find((c) => c.handle === params[0]), `Collection ${params[0]}`),\n cache: 'public',\n }))\n // Locations. `nearest` must be registered before `:id`. Like the real API it rounds the point to 0.01° and keeps nothing.\n const visibleLocations = () => state.shop.branches as Location[]\n const round2 = (n: number) => Math.round(n * 100) / 100\n const withDistance = (origin: { lat: number; lng: number }) =>\n rankByDistance(visibleLocations(), origin).map(({ item, distanceKm }) => ({ ...item, distance_km: Math.round(distanceKm * 10) / 10 }))\n route('GET', '/locations', 'catalog:read', ({ search }) => {\n const cp = search.get('postal_code')\n const origin = cp ? MOCK_POSTAL_CENTROIDS[cp] : undefined\n return { body: { nodes: origin ? withDistance(origin) : visibleLocations() }, cache: 'public' }\n })\n route('GET', '/locations/nearest', 'catalog:read', ({ search }) => {\n const origin = { lat: Number(search.get('lat') ?? NaN), lng: Number(search.get('lng') ?? NaN) }\n if (search.get('lat') === null || search.get('lng') === null || !isValidPoint(origin)) {\n throw new HttpError(400, 'validation', 'lat and lng must be a valid point', 'lat')\n }\n return { body: { nodes: withDistance({ lat: round2(origin.lat), lng: round2(origin.lng) }) }, cache: 'private' }\n })\n route('GET', '/locations/:id', 'catalog:read', ({ params }) => ({\n body: requireNode(visibleLocations().find((b) => b.id === params[0]), `Location ${params[0]}`, 'id'),\n cache: 'public',\n }))\n route('GET', '/stock', 'catalog:read', ({ search }) => {\n const skus = search.getAll('sku')\n if (skus.length > 250) throw new HttpError(400, 'validation', 'At most 250 SKUs', 'sku')\n const nodes = skus.flatMap((sku) => {\n for (const p of state.products) {\n const v = p.variants.find((x) => x.sku === sku)\n if (v) return [{ sku, quantity_available: v.quantity_available, ...(v.availability ? { availability: v.availability } : {}) }]\n }\n return []\n })\n return { body: { nodes }, cache: 'public' }\n })\n\n // Cart\n route('POST', '/carts', 'cart:write', ({ body }) => {\n const cart: CartRecord = {\n id: nextId('cart'),\n lines: [],\n codes: [],\n buyer: { email: null, phone: null, customer_id: null },\n shipping_address: null,\n delivery: { method: null, rate_id: null, branch_id: null },\n note: null,\n invoice: null,\n checkedOut: false,\n updated_at: now(),\n }\n if (body.lines !== undefined) addLines(cart, validateLines(body.lines))\n state.carts.set(cart.id, cart)\n return { status: 201, body: renderCart(cart), cache: 'private' }\n })\n route('GET', '/carts/:id', 'cart:write', ({ params }) => ({ body: renderCart(getCartRecord(params[0]!)), cache: 'private' }))\n route('POST', '/carts/:id/lines', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n addLines(cart, validateLines(body.lines, cart))\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PATCH', '/carts/:id/lines', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (!Array.isArray(body.lines)) throw new HttpError(400, 'validation', '`lines` must be an array', 'lines')\n const updates = body.lines as { id?: unknown; quantity?: unknown }[]\n updates.forEach((u, i) => {\n const line = cart.lines.find((l) => l.id === u.id)\n if (!line) throw new HttpError(400, 'validation', `Unknown line ${String(u.id)}`, `lines[${i}].id`)\n if (typeof u.quantity !== 'number' || !Number.isInteger(u.quantity) || u.quantity < 0) {\n throw new HttpError(400, 'validation', 'quantity must be a non-negative integer', `lines[${i}].quantity`)\n }\n })\n checkStock(\n updates.flatMap((u, i) => {\n const line = cart.lines.find((l) => l.id === u.id)!\n return (u.quantity as number) > 0\n ? [{ variant: findVariant(line.variant_id)!.variant, quantity: u.quantity as number, lineId: line.id, field: `lines[${i}].quantity` }]\n : []\n }),\n )\n for (const u of updates) {\n const line = cart.lines.find((l) => l.id === u.id)!\n line.quantity = u.quantity as number\n }\n cart.lines = cart.lines.filter((l) => l.quantity > 0)\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/discount-codes', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (!Array.isArray(body.codes) || body.codes.some((c) => typeof c !== 'string')) {\n throw new HttpError(400, 'validation', '`codes` must be an array of strings', 'codes')\n }\n cart.codes = [...new Set((body.codes as string[]).map((c) => c.trim().toUpperCase()).filter(Boolean))]\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/buyer', 'cart:write', ({ params, body, headers }) => {\n const cart = getCartRecord(params[0]!)\n const email = typeof body.email === 'string' ? body.email.trim() : null\n const phone = typeof body.phone === 'string' ? body.phone.trim() : null\n if (email && !/^[^@\\s]+@[^@\\s]+$/.test(email)) throw new HttpError(400, 'validation', 'Invalid email', 'email')\n const token = headers.get('x-customer-token')\n const customerId = token ? (state.sessions.get(token) ?? null) : null\n cart.buyer = { email: email || null, phone: phone || null, customer_id: customerId }\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/shipping-address', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n cart.shipping_address = validateAddress(body) as Address\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('GET', '/carts/:id/delivery-options', 'cart:write', ({ params }) => {\n const cart = renderCart(getCartRecord(params[0]!))\n const net = toCents(cart.cost.subtotal.amount) - toCents(cart.cost.discount.amount)\n const rates = shippingRates(net)\n const free = options.shippingQuoteMode === 'fixed_when_free' && rates.length > 0 && rates.every((r) => toCents(r.cost.amount) === 0)\n return {\n body: { rates, free, fixed: free, pickup: state.shop.branches.filter((b) => b.pickup?.enabled !== false).map((b) => ({ branch_id: b.id, name: b.name, address: b.address, city: b.city })), partial: false, unavailable: [] },\n cache: 'private',\n }\n })\n route('GET', '/carts/:id/payment-methods', 'cart:write', ({ params }) => {\n getCartRecord(params[0]!)\n return { body: { methods: options.paymentMethods ?? [{ key: 'mock', kind: 'builtin', default: true }], market: null }, cache: 'private' }\n })\n route('PUT', '/carts/:id/delivery', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (body.method === 'shipping') {\n const rateId = body.rate_id\n if (typeof rateId !== 'string' || !shippingRates(0).some((r) => r.id === rateId)) {\n throw new HttpError(400, 'validation', 'Unknown rate_id', 'rate_id')\n }\n cart.delivery = { method: 'shipping', rate_id: rateId, branch_id: null }\n } else if (body.method === 'pickup') {\n const branchId = body.branch_id\n if (typeof branchId !== 'string' || !state.shop.branches.some((b) => b.id === branchId && b.pickup?.enabled !== false)) {\n throw new HttpError(400, 'validation', 'Unknown branch_id', 'branch_id')\n }\n cart.delivery = { method: 'pickup', rate_id: null, branch_id: branchId }\n } else {\n throw new HttpError(400, 'validation', 'method must be shipping or pickup', 'method')\n }\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/invoice', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (cart.checkedOut) throw new HttpError(409, 'already_checked_out', 'The cart is already an order')\n cart.invoice = parseInvoice(body)\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n // Order note, cross-sell and promotions (contract 1.2)\n route('PUT', '/carts/:id/note', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n const raw = body.note\n if (raw !== null && raw !== undefined && typeof raw !== 'string') throw new HttpError(400, 'validation', 'note must be a string or null', 'note')\n const text = typeof raw === 'string' ? raw.trim() : ''\n if (text.length > 1000) throw new HttpError(400, 'validation', 'note must be at most 1000 characters', 'note')\n cart.note = text || null\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('GET', '/carts/:id/recommendations', 'cart:write', ({ params, search }) => {\n const cart = getCartRecord(params[0]!)\n const first = Math.min(8, Math.max(1, Number.parseInt(search.get('first') ?? '4', 10) || 4))\n const inCart = new Set(cart.lines.map((l) => findVariant(l.variant_id)?.product.id))\n const nodes: CartRecommendation[] = []\n for (const p of state.products) {\n if (inCart.has(p.id)) continue\n const variants = p.variants.filter((v) => v.available_for_sale)\n if (variants.length === 0) continue\n nodes.push({\n product: { id: p.id, handle: p.handle, title: p.title, featured_image: p.featured_image, options: p.options, vendor: p.vendor },\n variants,\n default_variant_id: variants[0]!.id,\n source: 'similar',\n unlocks: null,\n })\n if (nodes.length >= first) break\n }\n return { body: { nodes, promotions: null }, cache: 'private' }\n })\n route('GET', '/promotions', 'catalog:read', () => ({\n body: { nodes: [], announcements: options.announcements ?? [] },\n cache: 'public',\n }))\n\n route('POST', '/carts/:id/checkout', 'checkout:write', ({ params, body, headers }) => {\n const key = headers.get('idempotency-key')\n if (key) {\n const prev = state.idempotency.get(`${params[0]}:${key}`)\n if (prev) return { status: prev.status, body: prev.body, cache: 'private' }\n }\n const record = getCartRecord(params[0]!)\n const cart = renderCart(record)\n if (cart.lines.length === 0) throw new HttpError(422, 'invalid_state', 'Cart is empty', 'lines')\n if (!cart.buyer.email && !cart.buyer.phone) throw new HttpError(422, 'invalid_state', 'Buyer email or phone is required', 'buyer')\n if (!cart.delivery.method) throw new HttpError(422, 'invalid_state', 'Delivery method is required', 'delivery')\n if (cart.delivery.method === 'shipping' && !cart.shipping_address) {\n throw new HttpError(422, 'invalid_state', 'Shipping address is required', 'shipping_address')\n }\n if (typeof body.payment_method !== 'string' || !body.payment_method) throw new HttpError(400, 'validation', 'payment_method is required', 'payment_method')\n if (typeof body.return_url !== 'string' || !body.return_url) throw new HttpError(400, 'validation', 'return_url is required', 'return_url')\n // The invoice is checked against the region BEFORE anything is reserved or charged.\n const invoice = body.invoice !== undefined ? parseInvoice(body.invoice) : record.invoice\n // Reserve stock.\n checkStock(record.lines.map((l, i) => ({ variant: findVariant(l.variant_id)!.variant, quantity: l.quantity, lineId: l.id, field: `lines[${i}].quantity` })))\n for (const l of record.lines) {\n const v = findVariant(l.variant_id)!.variant\n if (v.quantity_available !== null) {\n v.quantity_available -= l.quantity\n v.available_for_sale = v.quantity_available > 0\n }\n }\n syncAvailability(state.products)\n\n const orderId = nextId('ord')\n const number = String(Math.max(1000, ...state.orders.map((o) => Number(o.number) || 0)) + 1)\n const customerId = cart.buyer.customer_id ?? state.customers.find((c) => c.email && c.email === cart.buyer.email)?.id ?? null\n state.orders.push({\n id: orderId,\n number,\n status: 'pending_payment',\n created_at: now(),\n total: cart.cost.total,\n customer_id: customerId,\n lines: cart.lines.map((l) => ({\n title: l.merchandise.product.title,\n variant_title: l.merchandise.title,\n sku: l.merchandise.sku,\n quantity: l.quantity,\n unit: l.cost.unit,\n total: l.cost.total,\n image: l.merchandise.image ?? l.merchandise.product.featured_image,\n })),\n })\n const redirect = new URL(`https://mock.local/pay/${orderId}`)\n redirect.searchParams.set('return_url', body.return_url)\n const checkoutId = nextId('chk')\n const result = {\n order: { id: orderId, number },\n payment: { provider: 'mock', status: 'pending', redirect_url: redirect.toString(), client_secret: null, instructions: null },\n checkout: {\n id: checkoutId,\n status: 'pending',\n external_order_id: orderId,\n total: cart.cost.total,\n stock_hold_expires_at: new Date(Date.now() + 30 * 60_000).toISOString(),\n },\n }\n state.checkouts.set(checkoutId, result)\n record.checkedOut = true\n if (invoice) state.invoices.set(orderId, { stage: 'awaiting_payment', request: invoice })\n if (key) state.idempotency.set(`${params[0]}:${key}`, { status: 201, body: result })\n return { status: 201, body: result, cache: 'private' }\n })\n route('GET', '/checkouts/:id', 'checkout:write', ({ params }) => {\n const found = state.checkouts.get(params[0]!)\n if (!found) throw new HttpError(404, 'not_found', 'Checkout not found')\n return { body: found, cache: 'private' }\n })\n\n // Embedded payment (contract 1.2). The result depends on the provider token, like the sandbox cardholder names.\n const DECLINES: Record<string, NonNullable<PaymentAttemptResult['payment']['decline_code']>> = {\n tok_OTHE: 'declined',\n tok_CALL: 'call_issuer',\n tok_FUND: 'insufficient_funds',\n tok_SECU: 'invalid_cvc',\n tok_EXPI: 'invalid_expiry',\n tok_FORM: 'invalid_card_data',\n }\n const maxPaymentAttempts = options.maxPaymentAttempts ?? 5\n route('GET', '/checkouts/:id/payment-config', 'checkout:write', ({ params }) => {\n const found = state.checkouts.get(params[0]!) as { checkout: PaymentConfig['checkout'] } | undefined\n if (!found) throw new HttpError(404, 'not_found', 'Checkout not found')\n const st = state.payments.get(params[0]!)\n const config: PaymentConfig = {\n provider: 'mock',\n flow: 'embedded',\n option: 'card',\n payable: found.checkout.status === 'pending' && (st?.attempts ?? 0) < maxPaymentAttempts,\n reason: null,\n amount: found.checkout.total,\n currency: found.checkout.total.currency_code,\n public_key: 'TEST-mock-public-key',\n methods: ['card', 'cash'],\n options: [{ key: 'card', redirect: false, max_installments: 12 }, { key: 'cash', redirect: false }],\n client: { kind: 'mock', sdk_url: 'https://mock.local/sdk.js', public_key: 'TEST-mock-public-key' },\n checkout: found.checkout,\n action: st?.last?.payment.action ?? null,\n attempts_left: maxPaymentAttempts - (st?.attempts ?? 0),\n }\n return { body: config, cache: 'private' }\n })\n route('POST', '/checkouts/:id/payment', 'checkout:write', ({ params, body, headers }) => {\n const key = headers.get('idempotency-key')\n if (!key) throw new HttpError(400, 'validation', 'Idempotency-Key header is required', 'Idempotency-Key')\n const id = params[0]!\n const prev = state.idempotency.get(`pay:${id}:${key}`)\n if (prev) return { status: prev.status, body: prev.body, cache: 'private' }\n const found = state.checkouts.get(id) as { checkout: { status: string; external_order_id: string; total: { amount: string; currency_code: string }; stock_hold_expires_at: string | null } } | undefined\n if (!found) throw new HttpError(404, 'not_found', 'Checkout not found')\n const method = body.method\n if (method !== 'card' && method !== 'cash' && method !== 'bank_transfer') throw new HttpError(400, 'validation', 'method must be card, cash or bank_transfer', 'method')\n const data = body.provider_data\n if (typeof data !== 'object' || data === null || Array.isArray(data)) throw new HttpError(400, 'validation', 'provider_data is required', 'provider_data')\n const exp = body.expected_total as { amount?: string } | undefined\n if (exp && exp.amount !== undefined && toCents(exp.amount) !== toCents(found.checkout.total.amount)) {\n throw new HttpError(422, 'price_mismatch', 'The total changed', 'expected_total', { cost: found.checkout.total })\n }\n const st = state.payments.get(id) ?? { attempts: 0, last: null }\n if (found.checkout.status === 'paid' || st.last?.payment.status === 'pending' || st.last?.payment.status === 'requires_action') {\n throw new HttpError(409, 'conflict', 'A payment is already in progress', 'payment_in_progress')\n }\n if (found.checkout.stock_hold_expires_at && Date.parse(found.checkout.stock_hold_expires_at) < Date.now()) {\n throw new HttpError(409, 'expired', 'The reservation expired')\n }\n if (st.attempts >= maxPaymentAttempts) throw new HttpError(429, 'rate_limited', 'too_many_attempts')\n st.attempts += 1\n const token = typeof (data as Record<string, unknown>).token === 'string' ? ((data as Record<string, unknown>).token as string) : ''\n const attemptsLeft = maxPaymentAttempts - st.attempts\n let payment: PaymentAttemptResult['payment']\n if (method !== 'card') {\n const pointId = String((data as Record<string, unknown>).payment_method_id ?? 'oxxo')\n payment = {\n provider: 'mock',\n status: 'requires_action',\n action: {\n type: 'voucher',\n voucher: {\n payment_point: pointId,\n reference: `${pointId.toUpperCase()}-${id.slice(-6).toUpperCase()}`,\n voucher_url: `https://mock.local/voucher/${id}`,\n amount: found.checkout.total.amount,\n currency: found.checkout.total.currency_code,\n expires_at: new Date(Date.now() + 48 * 3_600_000).toISOString(),\n },\n },\n }\n } else if (token in DECLINES) {\n payment = { provider: 'mock', status: 'failed', decline_code: DECLINES[token]!, retryable: true }\n } else if (token === 'tok_CONT') {\n payment = { provider: 'mock', status: 'pending', action: { type: 'none' } }\n } else if (token === 'tok_3DS') {\n payment = { provider: 'mock', status: 'requires_action', action: { type: 'challenge', challenge: { url: 'https://mock.local/3ds', creq: 'creq' } } }\n } else {\n payment = { provider: 'mock', status: 'paid' }\n found.checkout.status = 'paid'\n const order = state.orders.find((o) => o.id === found.checkout.external_order_id)\n if (order) order.status = 'paid'\n }\n payment.outcome =\n payment.status === 'paid' ? 'approved' : payment.status === 'failed' ? 'rejected' : payment.action?.type === 'challenge' ? 'challenge' : 'pending'\n const result: PaymentAttemptResult = { attempt: { n: st.attempts }, payment, checkout: found.checkout as PaymentAttemptResult['checkout'], attempts_left: attemptsLeft }\n st.last = result\n state.payments.set(id, st)\n state.idempotency.set(`pay:${id}:${key}`, { status: 200, body: result })\n return { body: result, cache: 'private' }\n })\n\n // Restock subscriptions (\"notify me when it is back\")\n route('POST', '/restock-subscriptions', 'customer:write', ({ body }) => {\n if (typeof body.sku !== 'string' || !body.sku) throw new HttpError(400, 'validation', 'sku is required', 'sku')\n if (typeof body.locale !== 'string' || !body.locale) throw new HttpError(400, 'validation', 'locale is required', 'locale')\n if (body.consent !== true) throw new HttpError(422, 'invalid_state', 'consent must be true', 'consent')\n const contact = typeof body.email === 'string' && body.email ? body.email.toLowerCase() : typeof body.phone === 'string' ? body.phone : ''\n if (!contact) throw new HttpError(400, 'validation', 'email or phone is required', 'email')\n const known = state.products.some((p) => p.variants.some((v) => v.sku === body.sku))\n if (!known) throw new HttpError(404, 'not_found', `SKU ${body.sku} not found`, 'sku')\n state.restock.add(`${contact}|${body.sku}`)\n return { status: 202, body: { status: 'pending' }, cache: 'private' }\n })\n\n // Customer\n route('POST', '/customer/otp', 'customer:write', ({ body }) => {\n state.otps.set(identifierOf(body), otpCode)\n return { status: 204 }\n })\n route('POST', '/customer/session', 'customer:write', ({ body }) => {\n const id = identifierOf(body)\n if (typeof body.code !== 'string' || state.otps.get(id) !== body.code) {\n throw new HttpError(401, 'unauthorized', 'Invalid or expired code', 'code')\n }\n state.otps.delete(id)\n const [kind, value] = id.split(/:(.*)/s) as [string, string]\n let customer = state.customers.find((c) => (kind === 'email' ? c.email === value : c.phone === value))\n if (!customer) {\n customer = {\n id: nextId('cus'),\n email: kind === 'email' ? value : null,\n phone: kind === 'phone' ? value : null,\n first_name: null,\n last_name: null,\n default_address_id: null,\n created_at: now(),\n email_verified: kind === 'email',\n }\n state.customers.push(customer)\n }\n const token = `ct_${customer.id}_${Math.random().toString(36).slice(2)}`\n state.sessions.set(token, customer.id)\n trackSession(token, kind)\n return {\n status: 201,\n body: { token, expires_at: new Date(Date.now() + 30 * 86_400_000).toISOString(), customer },\n cache: 'private',\n }\n })\n route('GET', '/customer/capabilities', 'customer:read', () => ({ body: capabilities, cache: 'private' }))\n route('POST', '/customer/register', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n const password = passwordOf(body)\n const text = (v: unknown) => (typeof v === 'string' && v.trim() ? v.trim() : null)\n const first_name = text(body.first_name)\n const last_name = text(body.last_name)\n if (capabilities.email_verification) {\n // Like OPS: with verification the answer is the same whether or not the email already has an account (no\n // enumeration). Proving the mailbox then sets this password on the existing account.\n state.pendingRegistrations.set(email, { password, first_name, last_name })\n state.otps.set(`email:${email}`, otpCode)\n return { status: 202, body: { status: 'verification_required' }, cache: 'private' }\n }\n // Without verification the only way to avoid handing out someone else's session is a 409 (the one residual oracle).\n if (state.passwords.has(email)) throw new HttpError(409, 'conflict', 'An account with this email already exists', 'email')\n state.passwords.set(email, password)\n return { status: 201, body: sessionFor(email, { first_name, last_name }), cache: 'private' }\n })\n route('POST', '/customer/register/verify', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n const pending = state.pendingRegistrations.get(email)\n if (!pending || typeof body.code !== 'string' || state.otps.get(`email:${email}`) !== body.code) {\n throw new HttpError(401, 'unauthorized', 'Invalid or expired code', 'code')\n }\n state.pendingRegistrations.delete(email)\n state.otps.delete(`email:${email}`)\n state.passwords.set(email, pending.password)\n return { status: 201, body: sessionFor(email, pending), cache: 'private' }\n })\n route('POST', '/customer/login', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n if ((state.loginFailures.get(email) ?? 0) >= maxLoginAttempts) {\n throw new HttpError(429, 'rate_limited', 'Too many failed attempts, try again later')\n }\n const stored = state.passwords.get(email)\n if (stored === undefined || typeof body.password !== 'string' || body.password !== stored) {\n state.loginFailures.set(email, (state.loginFailures.get(email) ?? 0) + 1)\n throw new HttpError(401, 'unauthorized', 'Invalid email or password')\n }\n state.loginFailures.delete(email)\n return { status: 201, body: sessionFor(email), cache: 'private' }\n })\n route('PUT', '/customer/password', 'customer:write', ({ headers, body }) => {\n requirePasswordEnabled()\n const customer = requireCustomer(headers)\n const password = passwordOf(body)\n const email = customer.email\n if (!email) throw new HttpError(422, 'invalid_state', 'The account has no email', 'email')\n const current = state.passwords.get(email)\n if (current !== undefined && body.current_password !== current) {\n throw new HttpError(401, 'unauthorized', 'current_password is missing or wrong', 'current_password')\n }\n state.passwords.set(email, password)\n return { status: 204 }\n })\n route('POST', '/customer/password/reset', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n const password = passwordOf(body)\n if (typeof body.code !== 'string' || state.otps.get(`email:${email}`) !== body.code || !state.customers.some((c) => c.email === email)) {\n throw new HttpError(401, 'unauthorized', 'Invalid or expired code', 'code')\n }\n state.otps.delete(`email:${email}`)\n state.passwords.set(email, password)\n state.loginFailures.delete(email)\n return { status: 204 }\n })\n /** The customer as the API serves it: the fiscal evidence keeps no file hash. */\n const publicCustomer = (c0: Customer): Customer => {\n const c: Customer = { ...c0, locale: c0.locale ?? null, preferences: c0.preferences ?? { notifications: {} } }\n if (!c.fiscal?.document) return c\n const { sha256: _sha, ...document } = c.fiscal.document\n return { ...c, fiscal: { ...c.fiscal, document } }\n }\n route('GET', '/customer', 'customer:read', ({ headers }) => ({ body: publicCustomer(requireCustomer(headers)), cache: 'private' }))\n route('PATCH', '/customer', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const text = (v: unknown) => (typeof v === 'string' && v.trim() ? v.trim() : null)\n if ('first_name' in body) c.first_name = text(body.first_name)\n if ('last_name' in body) c.last_name = text(body.last_name)\n if ('phone' in body) c.phone = text(body.phone)\n if ('locale' in body) c.locale = parseLocale(body.locale)\n if ('preferences' in body) c.preferences = parsePreferences(c.preferences, body.preferences)\n if ('fiscal' in body) {\n if (body.fiscal === null) c.fiscal = null\n else {\n const fiscal = parseInvoice({ ...(body.fiscal as object), requested: true }, 'fiscal') as InvoiceRequest\n const fid: FiscalIdentity = {\n country_code: String(fiscal.country_code ?? region?.country_code ?? ''),\n tax_id: String(fiscal.tax_id ?? fiscal.rfc).toUpperCase(),\n legal_name: String(fiscal.legal_name ?? fiscal.razon_social),\n tax_regime: String(fiscal.tax_regime ?? fiscal.regimen),\n postal_code: String(fiscal.postal_code ?? fiscal.cp),\n invoice_use: String(fiscal.use ?? fiscal.uso_cfdi ?? fiscal.invoice_use ?? '') || null,\n document: fiscal.document ?? null,\n verification: { status: 'reviewed', checked_at: now() },\n }\n c.fiscal = fid\n }\n }\n return { body: publicCustomer(c), cache: 'private' }\n })\n // Account settings (contract 1.9): language, notification preferences, sessions, re-authentication, export, delete.\n const OPTIONAL_EVENTS = new Set(['order_updates', 'shipping', 'restock'])\n const MANDATORY_EVENTS = new Set(['order_confirmation', 'payment', 'invoice', 'security'])\n const CHANNELS = new Set(['email', 'whatsapp'])\n const REAUTH_WINDOW_MS = 5 * 60_000\n const supportedLocales = () => [state.shop.locale, ...state.shop.locales].filter((l, i, a) => l && a.indexOf(l) === i)\n\n function parseLocale(raw: unknown): string | null {\n if (raw === null || (typeof raw === 'string' && !raw.trim())) return null\n if (typeof raw !== 'string') throw new HttpError(400, 'validation', 'locale must be a string', 'locale')\n const tag = raw.trim().replace('_', '-')\n const [lang = '', ...rest] = tag.split('-')\n const canonical = [lang.toLowerCase(), ...rest.map((p) => p.toUpperCase())].join('-')\n const supported = supportedLocales()\n const hit = supported.find((l) => l.toLowerCase() === canonical.toLowerCase()) ?? (rest.length === 0 ? supported.find((l) => l.split('-')[0]!.toLowerCase() === canonical) : undefined)\n if (!hit) throw new HttpError(400, 'validation', 'this store is not available in that language', 'locale')\n return hit\n }\n\n function parsePreferences(current: Customer['preferences'], raw: unknown): Customer['preferences'] {\n if (raw === null) return { notifications: {} }\n if (typeof raw !== 'object' || Array.isArray(raw)) throw new HttpError(400, 'validation', 'preferences must be an object', 'preferences')\n const merged: Record<string, Record<string, boolean>> = structuredClone(current?.notifications ?? {})\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n if (key !== 'notifications') throw new HttpError(400, 'validation', 'unknown preference', `preferences.${key}`)\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new HttpError(400, 'validation', 'notifications must map each event to its channels', 'preferences.notifications')\n for (const [event, channels] of Object.entries(value as Record<string, unknown>)) {\n const field = `preferences.notifications.${event}`\n if (MANDATORY_EVENTS.has(event)) throw new HttpError(400, 'validation', 'this notification is required and cannot be turned off', field)\n if (!OPTIONAL_EVENTS.has(event)) throw new HttpError(400, 'validation', 'unknown notification', field)\n if (!channels || typeof channels !== 'object' || Array.isArray(channels)) throw new HttpError(400, 'validation', 'each event maps its channels to true or false', field)\n for (const [channel, on] of Object.entries(channels as Record<string, unknown>)) {\n if (!CHANNELS.has(channel)) throw new HttpError(400, 'validation', 'unknown channel', `${field}.${channel}`)\n if (typeof on !== 'boolean') throw new HttpError(400, 'validation', 'each channel must be true or false', `${field}.${channel}`)\n ;(merged[event] ??= {})[channel] = on\n }\n }\n }\n return { notifications: merged }\n }\n\n /** The session of the request (its token); the customer must have one. */\n function sessionOf(headers: Headers) {\n const c = requireCustomer(headers)\n const token = headers.get('x-customer-token')!\n if (!state.sessionInfo.has(token)) trackSession(token, 'email')\n return { c, token, info: state.sessionInfo.get(token)! }\n }\n function requireRecentReauth(info: { reauth_at: number | null }) {\n if (info.reauth_at === null || Date.now() - info.reauth_at > REAUTH_WINDOW_MS) {\n throw new HttpError(403, 'reauth_required', 'confirm your password or a code first (customer.reauth)')\n }\n }\n\n route('GET', '/customer/sessions', 'customer:read', ({ headers }) => {\n const { c, token } = sessionOf(headers)\n const nodes = [...state.sessions.entries()]\n .filter(([, id]) => id === c.id)\n .map(([t]) => ({ t, info: state.sessionInfo.get(t)! }))\n .sort((a, b) => b.info.last_used_at.localeCompare(a.info.last_used_at))\n .map(({ t, info }) => ({\n id: info.id,\n current: t === token,\n device_label: 'Mock browser · Test',\n login_method: info.login_method,\n last_used_at: info.last_used_at,\n created_at: info.created_at,\n }))\n return { body: { nodes }, cache: 'private' }\n })\n route('DELETE', '/customer/sessions/:id', 'customer:write', ({ headers, params }) => {\n const { c, token } = sessionOf(headers)\n const mine = [...state.sessions.entries()].filter(([, id]) => id === c.id).map(([t]) => t)\n if (params[0] === 'others') {\n for (const t of mine) if (t !== token) state.sessions.delete(t)\n return { status: 204 }\n }\n const entry = [...state.sessionInfo.entries()].find(([, i]) => i.id === params[0])\n // A session of someone else and one that never existed are the same 404; a closed one of mine is fine to close again.\n if (!entry || entry[1].customer_id !== c.id) throw new HttpError(404, 'not_found', 'Session not found', 'id')\n state.sessions.delete(entry[0])\n return { status: 204 }\n })\n route('POST', '/customer/reauth', 'customer:write', ({ headers, body }) => {\n const { c, info } = sessionOf(headers)\n const hasPassword = typeof body.password === 'string' && body.password !== ''\n const hasCode = typeof body.otp_code === 'string' && body.otp_code !== ''\n if (hasPassword === hasCode) throw new HttpError(400, 'validation', 'send either password or otp_code', 'password')\n if ((state.reauthFailures.get(c.id) ?? 0) >= 5) throw new HttpError(429, 'rate_limited', 'Too many attempts, try again later')\n const field = hasPassword ? 'password' : 'otp_code'\n const ok = hasPassword\n ? c.email !== null && state.passwords.get(c.email) === body.password\n : [c.email && `email:${c.email}`, c.phone && `phone:${c.phone}`].some((id) => !!id && state.otps.get(id) === body.otp_code)\n if (!ok) {\n state.reauthFailures.set(c.id, (state.reauthFailures.get(c.id) ?? 0) + 1)\n throw new HttpError(400, 'validation', 'could not verify; check the credential and try again', field)\n }\n state.reauthFailures.delete(c.id)\n info.reauth_at = Date.now()\n return { body: { reauth_at: new Date(info.reauth_at).toISOString(), valid_for_seconds: REAUTH_WINDOW_MS / 1000 }, cache: 'private' }\n })\n // E-mail of the account (contract 1.15). The mock's code is `otpCode`, like the sign-in one.\n const emailCodeKey = (kind: 'verify' | 'change', customerId: string, email: string) => `${kind}_email:${customerId}:${email}`\n route('POST', '/customer/email/verification', 'customer:write', ({ headers }) => {\n const { c } = sessionOf(headers)\n if (!c.email) throw new HttpError(422, 'invalid_state', 'The account has no email', 'email')\n if (c.email_verified !== false) throw new HttpError(422, 'invalid_state', 'The email is already verified', 'email')\n state.otps.set(emailCodeKey('verify', c.id, c.email), otpCode)\n return { status: 204 }\n })\n route('POST', '/customer/email/verification/confirm', 'customer:write', ({ headers, body }) => {\n const { c } = sessionOf(headers)\n if (!c.email) throw new HttpError(422, 'invalid_state', 'The account has no email', 'email')\n if (c.email_verified !== false) throw new HttpError(422, 'invalid_state', 'The email is already verified', 'email')\n const key = emailCodeKey('verify', c.id, c.email)\n if (typeof body.code !== 'string' || state.otps.get(key) !== body.code) throw new HttpError(400, 'validation', 'The code is invalid or expired; request a new one', 'code')\n state.otps.delete(key)\n c.email_verified = true\n return { body: c, cache: 'private' }\n })\n route('POST', '/customer/email/change', 'customer:write', ({ headers, body }) => {\n const { c, info } = sessionOf(headers)\n requireRecentReauth(info)\n const email = emailOf(body)\n if (email === c.email) throw new HttpError(400, 'validation', 'This is already the email of the account', 'email')\n // Same answer whether or not the address has an account; if it has, no code exists for it.\n const taken = state.customers.some((x) => x.email === email) || state.passwords.has(email)\n if (!taken) state.otps.set(emailCodeKey('change', c.id, email), otpCode)\n return { status: 202, body: { status: 'verification_required' }, cache: 'private' }\n })\n route('POST', '/customer/email/change/confirm', 'customer:write', ({ headers, body }) => {\n const { c, token } = sessionOf(headers)\n const email = emailOf(body)\n const key = emailCodeKey('change', c.id, email)\n if (typeof body.code !== 'string' || state.otps.get(key) !== body.code) throw new HttpError(400, 'validation', 'The code is invalid or expired; request a new one', 'code')\n state.otps.delete(key)\n if (c.email && state.passwords.has(c.email)) {\n state.passwords.set(email, state.passwords.get(c.email)!)\n state.passwords.delete(c.email)\n }\n c.email = email\n c.email_verified = true\n for (const [t, id] of [...state.sessions.entries()]) if (id === c.id && t !== token) state.sessions.delete(t)\n return { body: c, cache: 'private' }\n })\n route('POST', '/customer/data-export', 'customer:write', ({ headers }) => {\n const { c, info } = sessionOf(headers)\n requireRecentReauth(info)\n if ((state.exportsServed.get(c.id) ?? 0) >= 3) throw new HttpError(429, 'rate_limited', 'Three exports a day; try again tomorrow')\n state.exportsServed.set(c.id, (state.exportsServed.get(c.id) ?? 0) + 1)\n const doc = {\n format: 'storefront-customer-data/1',\n exported_at: now(),\n account: { id: c.id, email: c.email, phone: c.phone, first_name: c.first_name, last_name: c.last_name, locale: c.locale ?? null, created_at: c.created_at },\n preferences: c.preferences ?? { notifications: {} },\n addresses: state.addresses.get(c.id) ?? [],\n fiscal_profiles: state.fiscalProfiles.get(c.id) ?? [],\n orders: state.orders.filter((o) => o.customer_id === c.id).map((o) => ({ id: o.id, number: o.number, created_at: o.created_at, status: o.status, total: o.total })),\n }\n return {\n body: {\n filename: `account-data-${now().slice(0, 10)}.json`,\n content_type: 'application/json',\n content_base64: btoa(unescape(encodeURIComponent(JSON.stringify(doc, null, 2)))),\n },\n cache: 'private',\n }\n })\n route('DELETE', '/customer', 'customer:write', ({ headers, body }) => {\n const token = headers.get('x-customer-token')\n if (token && state.deletedTokens.has(token)) return { status: 204 }\n const { c, info } = sessionOf(headers)\n requireRecentReauth(info)\n if (typeof body.confirm !== 'string' || !body.confirm.trim() || body.confirm.length > 100) {\n throw new HttpError(400, 'validation', 'confirm is required: the text the buyer typed', 'confirm')\n }\n const closed = new Set(['fulfilled', 'delivered', 'cancelled'])\n if (state.orders.some((o) => o.customer_id === c.id && !closed.has(o.status))) {\n throw new HttpError(409, 'conflict', 'you have an order in progress; you can delete the account once it is delivered', 'orders')\n }\n if (c.id === 'cus_1' && state.pendingPayments.some((p) => p.status === 'pending_payment')) {\n throw new HttpError(409, 'conflict', 'you have a payment waiting to be completed', 'pending_payments')\n }\n // Personal data goes; orders stay (they keep the customer id) and a new sign-up starts from nothing.\n for (const [t, id] of [...state.sessions.entries()]) {\n if (id === c.id) {\n state.sessions.delete(t)\n state.deletedTokens.add(t)\n }\n }\n if (c.email) state.passwords.delete(c.email)\n state.addresses.delete(c.id)\n state.fiscalProfiles.delete(c.id)\n state.customers = state.customers.filter((x) => x.id !== c.id)\n return { status: 204 }\n })\n\n /**\n * The order as the API serves it. The list is a summary (`shipments_summary`); the detail carries the shipments, invoices,\n * payments, refunds and the address. A sandbox shipment loses its guide, as the real server does in production.\n */\n const orderView = ({ customer_id: _c, ...o }: MockState['orders'][number], detail: boolean): Order => {\n const order: Order = { ...o, invoice: orderInvoice(o as MockState['orders'][number]) }\n if (order.shipments) order.shipments = order.shipments.map((s) => (isTestShipment(s) ? { ...s, tracking_number: null, tracking_url: null } : { ...s, events: sortTrackingEvents(s.events) }))\n order.progress = orderProgress(order)\n order.next_action = nextAction(order)\n const live = orderShipments(order).filter((s) => !isTestShipment(s))\n if (order.shipments?.length) {\n order.shipments_summary = { count: order.shipments.length, status: shipmentsStatus(order) ?? 'pending', carrier: live[0]?.carrier ?? null, ...(live[0]?.tracking_url ? { tracking_url: live[0].tracking_url } : {}) }\n }\n if (!detail) {\n delete order.shipments\n delete order.invoices\n delete order.payments\n delete order.refunds\n delete order.shipping_address\n }\n return order\n }\n route('GET', '/customer/orders', 'orders:read', ({ headers, search }) => {\n const c = requireCustomer(headers)\n const orders = state.orders.filter((o) => o.customer_id === c.id).sort((a, b) => b.created_at.localeCompare(a.created_at)).map((o) => orderView(o, false))\n return { body: paginate(orders, search, 20), cache: 'private' }\n })\n const findOrder = (headers: Headers, id: string) => {\n const c = requireCustomer(headers)\n return requireNode(state.orders.find((o) => o.id === id && o.customer_id === c.id), `Order ${id}`, 'id')\n }\n route('GET', '/customer/orders/:id', 'orders:read', ({ headers, params }) => ({ body: orderView(findOrder(headers, params[0]!), true), cache: 'private' }))\n route('POST', '/customer/orders/:id/returns', 'customer:write', ({ headers, params, body }) => {\n const order = findOrder(headers, params[0]!)\n if (!Array.isArray(body.lines) || body.lines.length === 0) throw new HttpError(400, 'validation', 'lines are required', 'lines')\n return { status: 201, body: { id: nextId('ret'), order_id: order.id, status: 'requested' }, cache: 'private' }\n })\n route('POST', '/customer/orders/:id/invoice', 'customer:write', ({ headers, params, body }) => {\n const order = findOrder(headers, params[0]!)\n const existing = state.invoices.get(order.id)\n if (existing && existing.stage !== 'awaiting_payment') {\n return { status: existing.stage === 'issued' ? 200 : 202, body: { status: existing.stage === 'issued' ? 'issued' : 'requested', url: null, stage: existing.stage, invoice: orderInvoice(order) }, cache: 'private' }\n }\n const request = parseInvoice({ ...body, requested: true }, 'invoice') as InvoiceRequest\n if (order.status === 'pending_payment') throw new HttpError(409, 'awaiting_payment', 'The order is not paid yet')\n state.invoices.set(order.id, { stage: 'queued', request })\n return { status: 202, body: { status: 'requested', url: null, stage: 'queued', invoice: orderInvoice(order) }, cache: 'private' }\n })\n route('GET', '/customer/pending-payments', 'orders:read', ({ headers, search }) => {\n const c = requireCustomer(headers)\n const nodes = c.id === 'cus_1' ? state.pendingPayments : []\n return { body: paginate(nodes, search, 20), cache: 'private' }\n })\n route('GET', '/customer/orders/:id/invoices/:invoice_id/:kind', 'orders:read', ({ headers, params }) => {\n const order = findOrder(headers, params[0]!)\n const doc = order.invoices?.find((d: InvoiceDoc) => d.id === params[1])\n if (!doc || (params[2] !== 'pdf' && params[2] !== 'xml')) throw new HttpError(404, 'not_found', 'Invoice file not found', 'invoice_id')\n const pdf = params[2] === 'pdf'\n const text = pdf ? `%PDF-1.4\\n% mock invoice ${doc.id}\\n%%EOF\\n` : `<?xml version=\"1.0\"?><cfdi:Comprobante mock=\"true\" id=\"${doc.id}\"/>`\n const file: InvoiceFile = {\n filename: `${doc.kind === 'credit_note' ? 'nota-de-credito' : 'factura'}-${doc.id}.${params[2]}`,\n content_type: pdf ? 'application/pdf' : 'application/xml',\n content_base64: btoa(text),\n }\n return { body: file, headers: { 'Cache-Control': 'no-store' } }\n })\n // Saved fiscal profiles (contract 1.9): up to MAX_FISCAL_PROFILES per buyer, one default, physical delete.\n const MAX_FISCAL_PROFILES = 10\n const profilesOf = (c: Customer) => state.fiscalProfiles.get(c.id) ?? []\n /** What the API serves: the evidence keeps no file hash. */\n const publicProfile = (p: FiscalProfile): FiscalProfile => {\n if (!p.document) return p\n const { sha256: _sha, ...document } = p.document\n return { ...p, document }\n }\n const personTypeOf = (taxId: string): string | null => {\n for (const [type, pattern] of Object.entries(region?.fiscal_id?.person_patterns ?? {})) if (new RegExp(pattern).test(taxId)) return type\n return null\n }\n /** `Customer.fiscal` mirrors the default profile, as the real server does. */\n const mirrorDefaultProfile = (c: Customer) => {\n const d = profilesOf(c).find((p) => p.is_default)\n c.fiscal = d\n ? { country_code: d.country_code, tax_id: d.tax_id, legal_name: d.legal_name, tax_regime: d.tax_regime, postal_code: d.postal_code, invoice_use: d.invoice_use ?? null, document: d.document ?? null, verification: d.verification ?? null }\n : null\n }\n const profileFields = (body: Record<string, unknown>, base?: FiscalProfile): FiscalIdentity => {\n const merged: Record<string, unknown> = {\n ...(base ? { tax_id: base.tax_id, legal_name: base.legal_name, tax_regime: base.tax_regime, postal_code: base.postal_code, country_code: base.country_code, ...(base.invoice_use ? { use: base.invoice_use } : {}) } : {}),\n ...body,\n requested: true,\n }\n delete merged.label\n delete merged.is_default\n delete merged.verification\n const fiscal = parseInvoice(merged, 'fiscal') as InvoiceRequest\n return {\n country_code: String(fiscal.country_code ?? region?.country_code ?? ''),\n tax_id: String(fiscal.tax_id ?? fiscal.rfc).toUpperCase(),\n legal_name: String(fiscal.legal_name ?? fiscal.razon_social),\n tax_regime: String(fiscal.tax_regime ?? fiscal.regimen),\n postal_code: String(fiscal.postal_code ?? fiscal.cp),\n invoice_use: String(fiscal.use ?? fiscal.uso_cfdi ?? fiscal.invoice_use ?? '') || null,\n document: fiscal.document ?? base?.document ?? null,\n }\n }\n const ownProfile = (c: Customer, id: string | undefined) => {\n const p = profilesOf(c).find((x) => x.id === id)\n if (!p) throw new HttpError(404, 'not_found', 'Fiscal profile not found', 'id')\n return p\n }\n const makeDefault = (c: Customer, id: string) => state.fiscalProfiles.set(c.id, profilesOf(c).map((p) => ({ ...p, is_default: p.id === id })))\n route('GET', '/customer/fiscal-profiles', 'customer:read', ({ headers }) => {\n const c = requireCustomer(headers)\n const nodes = [...profilesOf(c)].sort((a, b) => Number(b.is_default) - Number(a.is_default) || (b.last_used_at ?? '').localeCompare(a.last_used_at ?? ''))\n return { body: { nodes: nodes.map(publicProfile) }, cache: 'private' }\n })\n route('POST', '/customer/fiscal-profiles', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const list = profilesOf(c)\n const fid = profileFields(body)\n if (list.length >= MAX_FISCAL_PROFILES) throw new HttpError(409, 'conflict', 'Fiscal profile limit reached; delete one first')\n if (list.some((p) => p.country_code === fid.country_code && p.tax_id === fid.tax_id)) throw new HttpError(409, 'conflict', 'A profile with this tax id already exists', 'tax_id')\n const at = now()\n const label = typeof body.label === 'string' && body.label.trim() ? body.label.trim().slice(0, 40) : fid.legal_name.slice(0, 40)\n const profile: FiscalProfile = { ...fid, id: nextId('fisc'), label, person_type: personTypeOf(fid.tax_id), is_default: false, last_used_at: null, created_at: at, updated_at: at, verification: { status: 'unverified', checked_at: null } }\n state.fiscalProfiles.set(c.id, [...list, profile])\n if (list.length === 0 || body.is_default === true) makeDefault(c, profile.id)\n mirrorDefaultProfile(c)\n return { status: 201, body: publicProfile(profilesOf(c).find((p) => p.id === profile.id)!), cache: 'private' }\n })\n route('PATCH', '/customer/fiscal-profiles/:id', 'customer:write', ({ headers, params, body }) => {\n const c = requireCustomer(headers)\n const cur = ownProfile(c, params[0])\n if ('verification' in body) throw new HttpError(400, 'validation', 'verification is set by the server', 'verification')\n if (body.is_default === false && cur.is_default) throw new HttpError(400, 'validation', 'Make another profile the default instead', 'is_default')\n const fid = profileFields(body as FiscalProfileInput as Record<string, unknown>, cur)\n if (profilesOf(c).some((p) => p.id !== cur.id && p.country_code === fid.country_code && p.tax_id === fid.tax_id)) throw new HttpError(409, 'conflict', 'A profile with this tax id already exists', 'tax_id')\n const identityChanged = fid.tax_id !== cur.tax_id || fid.country_code !== cur.country_code\n const updated: FiscalProfile = {\n ...cur,\n ...fid,\n document: 'document' in body ? fid.document : identityChanged ? null : cur.document,\n label: typeof body.label === 'string' && body.label.trim() ? body.label.trim().slice(0, 40) : cur.label,\n person_type: personTypeOf(fid.tax_id),\n verification: identityChanged ? { status: 'unverified', checked_at: null } : cur.verification,\n updated_at: now(),\n }\n state.fiscalProfiles.set(c.id, profilesOf(c).map((p) => (p.id === cur.id ? updated : p)))\n if (body.is_default === true) makeDefault(c, cur.id)\n mirrorDefaultProfile(c)\n return { body: publicProfile(profilesOf(c).find((p) => p.id === cur.id)!), cache: 'private' }\n })\n route('DELETE', '/customer/fiscal-profiles/:id', 'customer:write', ({ headers, params }) => {\n const c = requireCustomer(headers)\n const cur = ownProfile(c, params[0])\n const rest = profilesOf(c).filter((p) => p.id !== cur.id)\n state.fiscalProfiles.set(c.id, rest)\n if (cur.is_default && rest[0]) makeDefault(c, rest[0].id)\n mirrorDefaultProfile(c)\n return { status: 204 }\n })\n // Buyer items, «My items» (contract 1.9): kinds are data the store declares; the server validates against them,\n // builds `label` / `fit_key` and keeps private fields apart (returned only masked). Physical delete.\n const MAX_SUBJECTS = 50\n const subjectsOf = (c: Customer) => state.subjects.get(c.id) ?? []\n const kinds = () => options.subjectKinds ?? []\n const publicSubject = (s: Subject & { private: Record<string, string> }): Subject => {\n const { private: priv, ...rest } = s\n return { ...rest, attributes: { ...s.attributes, ...Object.fromEntries(Object.keys(priv).map((k) => [k, PRIVATE_MASK + (priv[k]!.length > 3 ? priv[k]!.slice(-2) : '')])) } }\n }\n const ownSubject = (c: Customer, id: string | undefined) => {\n const s = subjectsOf(c).find((x) => x.id === id)\n if (!s) throw new HttpError(404, 'not_found', 'Item not found', 'id')\n return s\n }\n const setDefaultSubject = (c: Customer, id: string) => {\n const kind = ownSubject(c, id).kind\n state.subjects.set(c.id, subjectsOf(c).map((s) => (s.kind !== kind ? s : s.id === id ? { ...s, is_default: true, last_used_at: now() } : { ...s, is_default: false })))\n }\n const resolveOrThrow = (kind: SubjectKind, values: SubjectValues) => {\n const r = resolveSubject(kind, values)\n if (!r.ok) {\n const [field, code] = Object.entries(r.problems)[0]!\n throw new HttpError(422, 'validation', `${field}: ${code}`, field === '_' ? 'attributes' : `attributes.${field}`)\n }\n return r.subject\n }\n const cleanNickname = (v: unknown): string | null => {\n if (v === undefined || v === null || v === '') return null\n if (typeof v !== 'string' || [...v.trim()].length > 40) throw new HttpError(422, 'validation', 'nickname is too long (max 40)', 'nickname')\n return v.trim().split(/\\s+/).join(' ')\n }\n route('GET', '/subject-kinds', 'content:read', () => ({ body: { nodes: kinds() }, cache: 'public' }))\n route('GET', '/customer/subjects', 'customer:read', ({ headers, search }) => {\n const c = requireCustomer(headers)\n const kind = search.get('kind')\n const nodes = subjectsOf(c)\n .filter((s) => !kind || s.kind === kind)\n .sort((a, b) => a.kind.localeCompare(b.kind) || Number(b.is_default) - Number(a.is_default) || (b.last_used_at ?? '').localeCompare(a.last_used_at ?? ''))\n return { body: { nodes: nodes.map(publicSubject) }, cache: 'private' }\n })\n route('POST', '/customer/subjects', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const kind = kinds().find((k) => k.key === body.kind)\n if (!kind) throw new HttpError(422, 'validation', 'This store has no such kind', 'kind')\n const attrs = body.attributes\n if (!attrs || typeof attrs !== 'object' || Array.isArray(attrs)) throw new HttpError(422, 'validation', 'attributes must be an object', 'attributes')\n const r = resolveOrThrow(kind, attrs as SubjectValues)\n const list = subjectsOf(c)\n if (list.length >= MAX_SUBJECTS || list.filter((s) => s.kind === kind.key).length >= kind.max_per_account) throw new HttpError(409, 'conflict', 'Limit reached; delete one first', 'kind')\n if (r.fit_key && list.some((s) => s.kind === kind.key && s.fit_key === r.fit_key)) throw new HttpError(409, 'conflict', 'You already saved this item', 'attributes')\n const subject = { id: nextId('subj'), kind: kind.key, label: r.label, nickname: cleanNickname(body.nickname), fit_key: r.fit_key, attributes: r.attributes, private: r.private, is_default: false, last_used_at: null, created_at: now() }\n state.subjects.set(c.id, [...list, subject])\n if (!list.some((s) => s.kind === kind.key) || body.is_default === true) setDefaultSubject(c, subject.id)\n return { status: 201, body: publicSubject(ownSubject(c, subject.id)), cache: 'private' }\n })\n route('PATCH', '/customer/subjects/:id', 'customer:write', ({ headers, params, body }) => {\n const c = requireCustomer(headers)\n const cur = ownSubject(c, params[0])\n if (body.is_default === false && cur.is_default) throw new HttpError(422, 'validation', 'Make another item the default instead', 'is_default')\n let next = { ...cur }\n if ('nickname' in body) next.nickname = cleanNickname(body.nickname)\n if ('attributes' in body) {\n const kind = kinds().find((k) => k.key === cur.kind)\n if (!kind) throw new HttpError(422, 'validation', 'This store no longer offers this kind', 'kind')\n const sent = (body.attributes ?? {}) as Record<string, unknown>\n const merged: Record<string, unknown> = { ...cur.attributes, ...cur.private }\n for (const [k, v] of Object.entries(sent)) {\n if (k in cur.private && isMasked(v)) continue // the mask the client was shown: keep the stored value\n if (v === null) delete merged[k]\n else merged[k] = v\n }\n const r = resolveOrThrow(kind, merged as SubjectValues)\n if (r.fit_key && subjectsOf(c).some((s) => s.id !== cur.id && s.kind === cur.kind && s.fit_key === r.fit_key)) throw new HttpError(409, 'conflict', 'You already saved this item', 'attributes')\n next = { ...next, label: r.label, fit_key: r.fit_key, attributes: r.attributes, private: r.private }\n }\n state.subjects.set(c.id, subjectsOf(c).map((s) => (s.id === cur.id ? next : s)))\n if (body.is_default === true && !cur.is_default) setDefaultSubject(c, cur.id)\n return { body: publicSubject(ownSubject(c, cur.id)), cache: 'private' }\n })\n route('DELETE', '/customer/subjects/:id', 'customer:write', ({ headers, params }) => {\n const c = requireCustomer(headers)\n const cur = ownSubject(c, params[0])\n state.subjects.set(c.id, subjectsOf(c).filter((s) => s.id !== cur.id))\n const heir = subjectsOf(c).filter((s) => s.kind === cur.kind).sort((a, b) => (b.last_used_at ?? '').localeCompare(a.last_used_at ?? ''))[0]\n if (cur.is_default && heir) setDefaultSubject(c, heir.id)\n return { status: 204 }\n })\n route('GET', '/customer/addresses', 'customer:read', ({ headers }) => {\n const c = requireCustomer(headers)\n return { body: { nodes: state.addresses.get(c.id) ?? [] }, cache: 'private' }\n })\n route('POST', '/customer/addresses', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const address = { ...(validateAddress(body) as Address), id: nextId('addr') }\n state.addresses.set(c.id, [...(state.addresses.get(c.id) ?? []), address])\n if (!c.default_address_id) c.default_address_id = address.id\n return { status: 201, body: address, cache: 'private' }\n })\n route('PATCH', '/customer/addresses/:id', 'customer:write', ({ headers, params, body }) => {\n const c = requireCustomer(headers)\n const list = state.addresses.get(c.id) ?? []\n const idx = list.findIndex((a) => a.id === params[0])\n if (idx < 0) throw new HttpError(404, 'not_found', 'Address not found', 'id')\n const updated = { ...list[idx]!, ...validateAddress(body, true), id: list[idx]!.id }\n list[idx] = updated\n return { body: updated, cache: 'private' }\n })\n route('DELETE', '/customer/addresses/:id', 'customer:write', ({ headers, params }) => {\n const c = requireCustomer(headers)\n const list = state.addresses.get(c.id) ?? []\n if (!list.some((a) => a.id === params[0])) throw new HttpError(404, 'not_found', 'Address not found', 'id')\n state.addresses.set(c.id, list.filter((a) => a.id !== params[0]))\n if (c.default_address_id === params[0]) c.default_address_id = null\n return { status: 204 }\n })\n\n // Content\n const previewCache = (search: URLSearchParams): 'public' | 'private' => (search.has('preview') ? 'private' : 'public')\n route('GET', '/content/theme', 'content:read', () => ({ body: state.theme, cache: 'public' }))\n route('GET', '/content/pages/:handle', 'content:read', ({ params, search }) => {\n const page = requireNode(state.pages.find((p) => p.handle === params[0]), `Page ${params[0]}`)\n const body = search.has('preview') ? { ...page, title: `${page.title} (borrador)` } : page\n return { body, cache: previewCache(search) }\n })\n route('GET', '/content/menus/:handle', 'content:read', ({ params }) => ({\n body: requireNode(state.menus.find((m) => m.handle === params[0]), `Menu ${params[0]}`),\n cache: 'public',\n }))\n route('GET', '/content/articles', 'content:read', ({ search }) => {\n let items = state.articles.slice().sort((a, b) => b.published_at.localeCompare(a.published_at))\n const tag = search.get('tag')\n if (tag) items = items.filter((a) => a.tags.includes(tag))\n const q = search.get('q')?.toLowerCase()\n if (q) items = items.filter((a) => `${a.title} ${a.excerpt ?? ''}`.toLowerCase().includes(q))\n return { body: paginate(items, search, 10, 50), cache: 'public' }\n })\n route('GET', '/content/articles/:handle', 'content:read', ({ params, search }) => ({\n body: requireNode(state.articles.find((a) => a.handle === params[0]), `Article ${params[0]}`),\n cache: previewCache(search),\n }))\n\n // -------------------------------------------------------------------------\n // fetch\n // -------------------------------------------------------------------------\n\n function scopesFor(token: string | null): Set<string> | null {\n if (!token) return null\n let all: string[]\n if (token.startsWith('pk_')) all = ['catalog:read', 'content:read', 'cart:write']\n else if (token.startsWith('sk_')) all = ['catalog:read', 'content:read', 'cart:write', 'checkout:write', 'customer:read', 'customer:write', 'orders:read']\n else return null\n return new Set(all.filter((sc) => !missingScopes.includes(sc)))\n }\n\n function json(status: number, body: unknown, headers: Record<string, string> = {}): Response {\n return new Response(status === 204 || body === undefined ? null : JSON.stringify(body), {\n status,\n headers: { 'Content-Type': 'application/json; charset=utf-8', ...headers },\n })\n }\n\n function errorResponse(err: HttpError): Response {\n return json(\n err.status,\n { error: { code: err.code, message: err.message, ...(err.field ? { field: err.field } : {}), ...(err.details !== undefined ? { details: err.details } : {}), ...(err.requiredScopes ? { required_scopes: err.requiredScopes } : {}) } },\n { 'Cache-Control': PRIVATE_CACHE },\n )\n }\n\n async function handle(request: Request): Promise<Response> {\n const url = new URL(request.url)\n if (/\\/_token\\/?$/.test(url.pathname)) {\n const tok = request.headers.get('authorization')?.match(/^Bearer\\s+(.+)$/i)?.[1] ?? null\n const granted = scopesFor(tok)\n if (!tok || !granted) return errorResponse(new HttpError(401, 'unauthorized', 'Missing or invalid storefront token'))\n return json(200, { success: true, data: { kind: tok.startsWith('pk_') ? 'publishable' : 'secret', environment: 'sandbox', scopes: [...granted], missing_scopes: missingScopes, connection_id: 'conn_mock', expires_at: null } }, { 'Cache-Control': PRIVATE_CACHE })\n }\n const idx = url.pathname.indexOf('/storefront/')\n if (idx < 0) return errorResponse(new HttpError(404, 'not_found', `No route for ${url.pathname}`))\n const path = url.pathname.slice(idx + '/storefront'.length).replace(/\\/+$/, '') || '/'\n const method = request.method.toUpperCase()\n\n const matching = routes.filter((r) => r.pattern.test(path))\n if (matching.length === 0) return errorResponse(new HttpError(404, 'not_found', `No route for ${method} ${path}`))\n const r = matching.find((x) => x.method === method)\n if (!r) return json(405, { error: { code: 'method_not_allowed', message: `${method} not allowed on ${path}` } }, { Allow: matching.map((x) => x.method).join(', ') })\n\n const auth = request.headers.get('authorization')\n const token = auth?.match(/^Bearer\\s+(.+)$/i)?.[1] ?? null\n const scopes = scopesFor(token)\n if (!scopes) return errorResponse(new HttpError(401, 'unauthorized', 'Missing or invalid storefront token'))\n if ((enforceScopes || missingScopes.length > 0) && !scopes.has(r.scope)) {\n return errorResponse(new HttpError(403, 'insufficient_scope', `Token lacks scope ${r.scope}`, undefined, undefined, [r.scope]))\n }\n\n let body: Record<string, unknown> = {}\n if (method !== 'GET') {\n const text = await request.text()\n if (text) {\n try {\n const parsed: unknown = JSON.parse(text)\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) throw new Error('not an object')\n body = parsed as Record<string, unknown>\n } catch {\n return errorResponse(new HttpError(400, 'validation', 'Body must be a JSON object'))\n }\n }\n }\n\n const params = (r.pattern.exec(path) ?? []).slice(1).map((p) => decodeURIComponent(p))\n try {\n const result = await r.handler({ method, params, search: url.searchParams, headers: request.headers, body, scopes })\n const status = result.status ?? 200\n const headers: Record<string, string> = { ...result.headers }\n if (result.cache === 'public') headers['Cache-Control'] = PUBLIC_CACHE\n if (result.cache === 'private') headers['Cache-Control'] = PRIVATE_CACHE\n if (method === 'GET' && result.cache === 'public' && status === 200) {\n const etag = `W/\"${fnv1a(JSON.stringify(result.body))}\"`\n headers.ETag = etag\n if (request.headers.get('if-none-match') === etag) return new Response(null, { status: 304, headers })\n }\n return json(status, result.body, headers)\n } catch (err) {\n if (err instanceof HttpError) return errorResponse(err)\n return json(500, { error: { code: 'server_error', message: err instanceof Error ? err.message : 'Internal error' } })\n }\n }\n\n const mockFetch = async (input: string | URL | Request, init?: RequestInit): Promise<Response> => {\n if (options.latencyMs) await new Promise((r) => setTimeout(r, options.latencyMs))\n const request = input instanceof Request && !init ? input : new Request(input instanceof Request ? input.url : String(input), init)\n if (request.signal?.aborted) throw request.signal.reason ?? new DOMException('Aborted', 'AbortError')\n return handle(request)\n }\n\n return {\n /** Drop-in `fetch` serving `/storefront/*` from memory. */\n fetch: mockFetch,\n /** Live in-memory state (mutable; useful in tests). */\n get state(): Readonly<MockState> {\n return state\n },\n /** Restores the seed data and clears carts, sessions and orders. */\n reset() {\n state = seed()\n syncAvailability(state.products)\n },\n /** OTP code accepted by `/customer/session`. */\n otpCode,\n }\n}\n\nexport type MockStorefront = ReturnType<typeof createMockStorefront>\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/mock/account-seed.ts","../src/mock/region-mx.seed.ts","../src/mock/region.ts","../src/mock/seed.ts","../src/mock/subjects.ts","../src/mock/index.ts"],"names":["money","line","address","r"],"mappings":"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","file":"mock.js","sourcesContent":["/**\n * Orders of the demo buyer (`cus_1`) that rehearse every state of the account screen (contract 1.8): shipped with\n * events, an issued invoice with its credit note and a refund, a sandbox shipment (never shown as real), a pickup that\n * is ready with a section the server could not read, and a cash voucher waiting for payment. Numbers are below 1000 and\n * dates older than the original seed order, so the order list still starts at `1000` and the first checkout is `1001`.\n */\nimport type { InvoiceDoc, Money, Order, PendingPayment, Shipment } from '../types.js'\n\ntype Seeded = Order & { customer_id: string | null }\n\nconst money = (cents: number, currency: string): Money => ({ amount: (cents / 100).toFixed(2), currency_code: currency })\n\nconst line = (title: string, variant: string | null, quantity: number, unitCents: number, currency: string) => ({\n title,\n variant_title: variant,\n sku: null,\n quantity,\n unit: money(unitCents, currency),\n total: money(unitCents * quantity, currency),\n image: null,\n})\n\nconst address = { first_name: 'Ana', last_name: 'Prueba', city: 'Querétaro', province: 'Qro.', zip: '76000', country_code: 'MX' }\n\nexport function buildAccountOrders(currency: string): Seeded[] {\n const inTransit: Shipment = {\n id: 'shp_seed_1',\n number: 'ENV-00001',\n kind: 'outbound',\n status: 'in_transit',\n environment: 'production',\n test_mode: false,\n carrier: 'Estafeta',\n carrier_logo_key: 'estafeta',\n service: 'Terrestre',\n tracking_number: '8012345678',\n tracking_url: 'https://rastreo.example.com/estafeta/8012345678',\n shipped_at: '2026-08-12T15:00:00.000Z',\n delivered_at: null,\n promised_by: '2026-08-16',\n label_url: null,\n events: [\n { id: 'evt_3', status: 'in_transit', description: 'En tránsito hacia tu ciudad', location: 'Querétaro, Qro.', occurred_at: '2026-08-14T09:30:00.000Z', source: 'carrier' },\n { id: 'evt_2', status: 'in_transit', description: 'Salió del centro de distribución', location: 'Ciudad de México, CDMX', occurred_at: '2026-08-13T07:10:00.000Z', source: 'carrier' },\n { id: 'evt_1', status: 'label_created', description: 'Guía generada', location: null, occurred_at: '2026-08-12T15:00:00.000Z', source: 'store' },\n ],\n map: {\n origin: { label: 'Ciudad de México, CDMX', lat: 19.43, lng: -99.13, precision: 'city' },\n destination: { label: 'Querétaro, Qro.', lat: 20.6, lng: -100.4, precision: 'city' },\n path: [{ label: 'Querétaro, Qro.', lat: 20.59, lng: -100.39, precision: 'city' }],\n },\n }\n const invoice: InvoiceDoc = {\n id: 'inv_seed_1',\n status: 'issued',\n kind: 'invoice',\n stage: 'issued',\n action: 'download',\n can_request: false,\n folio: '8F3C1A52-6E0B-4B58-9C0D-2B7D6B4D7A11',\n series: 'A',\n folio_number: '1042',\n total: money(129900, currency),\n issued_at: '2026-08-13T10:00:00.000Z',\n payment_method: 'PUE',\n payment_form: '04',\n receiver: { rfc: 'XAXX010101000', name: 'Público en general', tax_regime: '616', cfdi_use: 'S01', postal_code: '76000' },\n test_mode: false,\n environment: 'production',\n }\n const creditNote: InvoiceDoc = {\n id: 'inv_seed_1_nc',\n status: 'issued',\n kind: 'credit_note',\n stage: 'issued',\n action: 'download',\n can_request: false,\n folio: '1D9B7E20-4A5C-4C4B-8F11-6A0E3C9D5B02',\n series: 'NC',\n folio_number: '7',\n total: money(20000, currency),\n issued_at: '2026-08-15T10:00:00.000Z',\n related_to: 'inv_seed_1',\n test_mode: false,\n environment: 'production',\n }\n return [\n {\n id: 'ord_seed_shipped',\n number: '0999',\n status: 'shipped',\n created_at: '2026-08-12T12:00:00.000Z',\n total: money(129900, currency),\n customer_id: 'cus_1',\n lines: [line('Kit de frenos', 'Delantero', 1, 109900, currency), line('Líquido de frenos', '500 ml', 1, 20000, currency)],\n delivery_method: 'shipping',\n payment_status: 'paid',\n subtotal: money(111983, currency),\n tax: money(17917, currency),\n shipping: money(0, currency),\n discount: money(0, currency),\n tax_included: true,\n shipping_method: 'Estándar',\n shipping_address: address,\n returns: [],\n shipments: [inTransit],\n invoices: [invoice, creditNote],\n payments: [{ method_label: 'Tarjeta Visa terminada en 4242', family: 'card', status: 'partially_refunded', amount: money(129900, currency), paid_at: '2026-08-12T12:01:00.000Z' }],\n refunds: [{ id: 'rfd_seed_1', amount: money(20000, currency), status: 'completed', method_label: 'Tarjeta Visa terminada en 4242', created_at: '2026-08-15T09:00:00.000Z', completed_at: '2026-08-15T10:00:00.000Z', return_id: null }],\n },\n {\n id: 'ord_seed_preparing',\n number: '0998',\n status: 'fulfilling',\n created_at: '2026-08-11T12:00:00.000Z',\n total: money(54900, currency),\n customer_id: 'cus_1',\n lines: [line('Filtro de aceite', null, 3, 18300, currency)],\n delivery_method: 'shipping',\n payment_status: 'paid',\n shipping_method: 'shipping:Envío Estafeta',\n shipping_service: { title: 'Envío Estafeta', carrier: 'estafeta', carrier_logo_key: 'estafeta', eta_days_min: 1, eta_days_max: 3 },\n shipping_address: address,\n shipments: [],\n invoices: [],\n payments: [{ method_label: 'OXXO', family: 'cash_voucher', status: 'paid', amount: money(54900, currency), paid_at: '2026-08-11T18:00:00.000Z' }],\n refunds: [],\n },\n {\n id: 'ord_seed_sandbox',\n number: '0997',\n status: 'shipped',\n created_at: '2026-08-10T12:00:00.000Z',\n total: money(31000, currency),\n customer_id: 'cus_1',\n lines: [line('Bujía iridio', null, 4, 7750, currency)],\n delivery_method: 'shipping',\n payment_status: 'paid',\n shipments: [\n {\n id: 'shp_seed_test',\n kind: 'outbound',\n status: 'label_created',\n environment: 'sandbox',\n test_mode: true,\n carrier: 'Estafeta',\n carrier_logo_key: 'estafeta',\n tracking_number: null,\n tracking_url: null,\n events: [],\n map: null,\n },\n ],\n invoices: [\n { id: 'inv_seed_test', status: 'issued', kind: 'invoice', stage: 'issued', action: 'download', can_request: false, folio: '00000000-0000-4000-8000-000000000000', test_mode: true, environment: 'sandbox' },\n ],\n payments: [],\n refunds: [],\n },\n {\n id: 'ord_seed_pickup',\n number: '0996',\n status: 'ready_for_pickup',\n created_at: '2026-08-09T12:00:00.000Z',\n total: money(88000, currency),\n customer_id: 'cus_1',\n lines: [line('Batería 12V', null, 1, 88000, currency)],\n delivery_method: 'pickup',\n pickup: { location_id: null, name: 'Sucursal Centro', address: 'Av. Reforma 100', city: 'Ciudad de México', phone: null, ready_at: '2026-08-10T10:00:00.000Z', delivered_at: null },\n payment_status: 'paid',\n shipments: [],\n invoices: [],\n payments: [],\n refunds: [],\n degraded: ['invoices'],\n },\n ]\n}\n\n/** A voucher still valid (OXXO, with barcode) and one that already expired (SPEI). */\nexport function buildPendingPayments(currency: string, nowMs: number): PendingPayment[] {\n return [\n {\n id: 'chk_seed_oxxo',\n number: null,\n status: 'pending_payment',\n created_at: new Date(nowMs - 3_600_000).toISOString(),\n total: money(45000, currency),\n expires_at: new Date(nowMs + 47 * 3_600_000).toISOString(),\n payment: {\n provider: 'mercadopago',\n method: 'oxxo',\n reference: '12345678901234',\n barcode: '12345678901234',\n clabe: null,\n voucher_url: 'https://pagos.example.com/ficha/abc',\n instructions: 'Paga en cualquier OXXO antes de la fecha de vencimiento.',\n expires_at: new Date(nowMs + 47 * 3_600_000).toISOString(),\n amount: money(45000, currency),\n },\n },\n {\n id: 'chk_seed_spei',\n number: null,\n status: 'expired',\n created_at: new Date(nowMs - 9 * 86_400_000).toISOString(),\n total: money(120000, currency),\n expires_at: new Date(nowMs - 2 * 86_400_000).toISOString(),\n payment: {\n provider: 'mercadopago',\n method: 'spei',\n reference: null,\n barcode: null,\n clabe: '646180000000000001',\n voucher_url: null,\n instructions: null,\n expires_at: new Date(nowMs - 2 * 86_400_000).toISOString(),\n amount: money(120000, currency),\n },\n },\n ]\n}\n\n/**\n * `count` more orders of the demo buyer, to rehearse a long history (paging, filters, a B2B buyer with hundreds of\n * orders): numbers `S0001`…, one an hour back from 2026-08-01, with a mix of states, delivery methods, parcels and invoices.\n * Deterministic: the same count always gives the same orders.\n */\nexport function buildSyntheticOrders(count: number, currency: string): Seeded[] {\n const out: Seeded[] = []\n const base = Date.parse('2026-08-01T12:00:00.000Z')\n for (let i = 1; i <= count; i++) {\n const kind = i % 6\n const status = kind === 0 ? 'cancelled' : kind === 1 ? 'pending_payment' : kind === 2 ? 'fulfilling' : kind === 3 ? 'shipped' : 'delivered'\n const pickup = i % 5 === 0\n const number = `S${String(i).padStart(4, '0')}`\n const total = 10000 + ((i * 7919) % 90000)\n const o: Seeded = {\n id: `ord_syn_${i}`,\n number,\n status,\n created_at: new Date(base - i * 3600_000).toISOString(),\n total: money(total, currency),\n customer_id: 'cus_1',\n lines: [line(`Producto ${i}`, null, 1 + (i % 3), Math.round(total / (1 + (i % 3))), currency)],\n delivery_method: pickup ? 'pickup' : 'shipping',\n payment_status: status === 'pending_payment' ? 'pending' : status === 'cancelled' ? 'cancelled' : 'paid',\n shipping_address: address,\n }\n if (!pickup && (status === 'shipped' || status === 'delivered')) {\n o.shipments = [\n {\n id: `shp_syn_${i}`,\n number: `ENV-S${i}`,\n kind: 'outbound',\n status: status === 'delivered' ? 'delivered' : 'in_transit',\n environment: 'production',\n test_mode: false,\n carrier: i % 2 ? 'Estafeta' : 'DHL',\n carrier_logo_key: i % 2 ? 'estafeta' : 'dhl',\n service: 'Terrestre',\n tracking_number: `SYN${String(i).padStart(8, '0')}`,\n tracking_url: `https://rastreo.example.com/syn/${i}`,\n shipped_at: new Date(base - i * 3600_000 + 7200_000).toISOString(),\n delivered_at: status === 'delivered' ? new Date(base - i * 3600_000 + 86400_000).toISOString() : null,\n promised_by: null,\n label_url: null,\n events: [],\n map: null,\n },\n ]\n } else if (!pickup && status === 'fulfilling') {\n o.shipping_service = { title: 'Envío Estafeta', carrier: 'estafeta', carrier_logo_key: 'estafeta', eta_days_min: 1, eta_days_max: 3 }\n o.shipments = []\n }\n if (status === 'delivered' && i % 3 === 1) {\n o.invoices = [\n {\n id: `inv_syn_${i}`,\n status: 'issued',\n kind: 'invoice',\n stage: 'issued',\n action: 'download',\n can_request: false,\n folio: `SYN-${String(i).padStart(8, '0')}`,\n series: 'A',\n folio_number: String(2000 + i),\n total: money(total, currency),\n issued_at: new Date(base - i * 3600_000 + 3600_000).toISOString(),\n test_mode: false,\n environment: 'production',\n },\n ]\n }\n out.push(o)\n }\n return out\n}\n","/**\n * The Mexican region pack as `GET /storefront/region` publishes it: the MX seed of the region_mx addon\n * (manifest.json, models region_identity_documents, region_fiscal_catalogs and region_payment_methods; payload\n * shape of regionspec.BuildPublicDocuments / PublicFiscalID). Test and mock data only: the SDK engine knows no\n * country. Regenerate it from the addon when the seed changes.\n */\nimport type { IdentityDocumentSpec, RegionFiscalEntry, RegionPaymentMethod } from '../types.js'\n\nexport const SEED_MX_CSF: IdentityDocumentSpec = {\n \"kind\": \"MX:csf\",\n \"country_code\": \"MX\",\n \"label\": \"Constancia de situación fiscal\",\n \"help\": \"Es el PDF que te da el SAT con tu RFC, tu nombre o razón social, tu régimen y tu código postal fiscal. Lo leemos en tu dispositivo para llenar tus datos de facturación.\",\n \"obtain_url\": \"https://www.sat.gob.mx/portal/public/tramites/constancia-de-situacion-fiscal\",\n \"accept\": [\n \"application/pdf\"\n ],\n \"max_bytes\": 5242880,\n \"max_pages\": 6,\n \"engine\": \"rules@1\",\n \"rules\": {\n \"version\": 1,\n \"normalize\": [\n \"nbsp\",\n \"collapse_ws\"\n ],\n \"labels\": [\n \"RFC\",\n \"CURP\",\n \"Nombre \\\\(s\\\\)\",\n \"Nombre\",\n \"Primer Apellido\",\n \"Segundo Apellido\",\n \"Denominaci[óo]n\\\\s*/\\\\s*Raz[óo]n Social\",\n \"R[ée]gimen de capital\",\n \"Nombre Comercial\",\n \"Fecha (?:de )?inicio de operaciones\",\n \"Fecha de constituci[óo]n\",\n \"Estatus en el padr[óo]n\",\n \"Fecha de [úu]ltimo cambio de estado\",\n \"Datos del domicilio registrado\",\n \"C[óo]digo Postal\",\n \"Tipo de Vialidad\",\n \"Nombre de Vialidad\",\n \"N[úu]mero Exterior\",\n \"N[úu]mero Interior\",\n \"Nombre de la Colonia\",\n \"Nombre de la Localidad\",\n \"Nombre del Municipio o Demarcaci[óo]n Territorial\",\n \"Nombre de la Entidad Federativa\",\n \"Entre Calle\",\n \"Y Calle\",\n \"Actividades Econ[óo]micas\",\n \"Reg[íi]menes\",\n \"Obligaciones\",\n \"Correo Electr[óo]nico\"\n ],\n \"qr_canonical\": \"https://siat.sat.gob.mx/app/qr/faces/pages/mobile/validadorqr.jsf?D1=10&D2=1&D3={document_id}_{tax_id}\",\n \"fields\": [\n {\n \"key\": \"tax_id\",\n \"required\": true,\n \"strategies\": [\n {\n \"strategy\": \"labeled_lines\",\n \"label\": \"RFC\",\n \"upper\": true,\n \"capture\": {\n \"pattern\": \"(?:^|[^A-Z0-9Ñ&])([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9Ñ&]|$)\",\n \"flags\": \"i\",\n \"group\": 1\n }\n },\n {\n \"strategy\": \"regex\",\n \"pattern\": \"(?:^|[^A-Z0-9Ñ&])([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9Ñ&]|$)\",\n \"flags\": \"i\",\n \"group\": 1,\n \"upper\": true\n },\n {\n \"strategy\": \"qr_param\",\n \"param\": \"D3\",\n \"split\": \"_\",\n \"parts\": 2,\n \"match\": \"^[A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3}$\"\n },\n {\n \"strategy\": \"qr_param\",\n \"scan\": \"(?:D3)?([0-9]{11})[^A-Z0-9Ñ&]{0,3}([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9]|$)\",\n \"flags\": \"i\",\n \"group\": 2\n }\n ]\n },\n {\n \"key\": \"legal_name\",\n \"required\": true,\n \"strategies\": [\n {\n \"strategy\": \"labeled_lines\",\n \"label\": \"Denominaci[óo]n\\\\s*/\\\\s*Raz[óo]n Social\"\n },\n {\n \"strategy\": \"concat_labeled\",\n \"labels\": [\n \"Nombre \\\\(s\\\\)\",\n \"Primer Apellido\",\n \"Segundo Apellido\"\n ],\n \"separator\": \" \"\n }\n ]\n },\n {\n \"key\": \"postal_code\",\n \"required\": true,\n \"strategies\": [\n {\n \"strategy\": \"labeled_lines\",\n \"label\": \"C[óo]digo Postal\",\n \"capture\": {\n \"pattern\": \"\\\\b([0-9]{5})\\\\b\",\n \"group\": 1\n }\n }\n ]\n },\n {\n \"key\": \"tax_regime\",\n \"required\": true,\n \"multiple\": true,\n \"strategies\": [\n {\n \"strategy\": \"catalog_phrases\",\n \"catalog\": \"fiscal_regime\",\n \"start\": \"Reg[íi]menes\\\\s*:?\",\n \"end\": \"Obligaciones\\\\s*:\"\n }\n ]\n },\n {\n \"key\": \"document_id\",\n \"strategies\": [\n {\n \"strategy\": \"regex\",\n \"pattern\": \"id\\\\s*CIF\\\\s*:?\\\\s*([0-9]{6,})\",\n \"flags\": \"i\",\n \"group\": 1\n },\n {\n \"strategy\": \"qr_param\",\n \"param\": \"D3\",\n \"split\": \"_\",\n \"parts\": 2,\n \"match\": \"^[0-9]+$\"\n },\n {\n \"strategy\": \"qr_param\",\n \"scan\": \"(?:D3)?([0-9]{11})[^A-Z0-9Ñ&]{0,3}([A-ZÑ&]{3,4}[0-9]{6}[A-Z0-9]{3})(?:[^A-Z0-9]|$)\",\n \"flags\": \"i\",\n \"group\": 1\n }\n ]\n },\n {\n \"key\": \"issued_on\",\n \"strategies\": [\n {\n \"strategy\": \"date\",\n \"order\": \"dmy\",\n \"pattern\": \"Fecha\\\\s+de\\\\s+Emisi[óo]n\\\\s*:?[^0-9]*?([0-9]{1,2})\\\\s+DE\\\\s+([A-Za-zÁÉÍÓÚÑáéíóúñ]+)\\\\s+DE\\\\s+([0-9]{4})\",\n \"flags\": \"i\",\n \"months\": [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\"\n ]\n }\n ]\n }\n ]\n },\n \"verify_kind\": \"qr_validator\",\n \"freshness_days\": 90,\n \"image_mode\": \"qr_only\",\n \"discard_fields\": [\n \"curp\",\n \"street\",\n \"exterior_number\",\n \"neighborhood\",\n \"activities\"\n ]\n} as IdentityDocumentSpec\n\nexport const SEED_MX_REGIMES: RegionFiscalEntry[] = [\n {\n \"code\": \"601\",\n \"label\": \"General de Ley Personas Morales\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"general de ley personas morales\"\n ]\n },\n {\n \"code\": \"603\",\n \"label\": \"Personas Morales con Fines no Lucrativos\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"fines no lucrativos\"\n ]\n },\n {\n \"code\": \"605\",\n \"label\": \"Sueldos y Salarios e Ingresos Asimilados a Salarios\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"sueldos y salarios\"\n ]\n },\n {\n \"code\": \"606\",\n \"label\": \"Arrendamiento\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"arrendamiento\"\n ]\n },\n {\n \"code\": \"607\",\n \"label\": \"Régimen de Enajenación o Adquisición de Bienes\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"enajenacion o adquisicion de bienes\"\n ]\n },\n {\n \"code\": \"608\",\n \"label\": \"Demás ingresos\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"demas ingresos\"\n ]\n },\n {\n \"code\": \"610\",\n \"label\": \"Residentes en el Extranjero sin Establecimiento Permanente en México\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"match_phrases\": [\n \"residentes en el extranjero\"\n ]\n },\n {\n \"code\": \"611\",\n \"label\": \"Ingresos por Dividendos (socios y accionistas)\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"dividendos\"\n ]\n },\n {\n \"code\": \"612\",\n \"label\": \"Personas Físicas con Actividades Empresariales y Profesionales\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"actividades empresariales y profesionales\"\n ]\n },\n {\n \"code\": \"614\",\n \"label\": \"Ingresos por intereses\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"ingresos por intereses\"\n ]\n },\n {\n \"code\": \"615\",\n \"label\": \"Régimen de los ingresos por obtención de premios\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"premios\"\n ]\n },\n {\n \"code\": \"616\",\n \"label\": \"Sin obligaciones fiscales\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"sin obligaciones fiscales\"\n ]\n },\n {\n \"code\": \"620\",\n \"label\": \"Sociedades Cooperativas de Producción que optan por diferir sus ingresos\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"sociedades cooperativas de produccion\"\n ]\n },\n {\n \"code\": \"621\",\n \"label\": \"Incorporación Fiscal\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"incorporacion fiscal\"\n ]\n },\n {\n \"code\": \"622\",\n \"label\": \"Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"actividades agricolas\"\n ]\n },\n {\n \"code\": \"623\",\n \"label\": \"Opcional para Grupos de Sociedades\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"opcional para grupos de sociedades\"\n ]\n },\n {\n \"code\": \"624\",\n \"label\": \"Coordinados\",\n \"person_types\": [\n \"company\"\n ],\n \"match_phrases\": [\n \"coordinados\"\n ]\n },\n {\n \"code\": \"625\",\n \"label\": \"Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas\",\n \"person_types\": [\n \"individual\"\n ],\n \"match_phrases\": [\n \"plataformas tecnologicas\"\n ]\n },\n {\n \"code\": \"626\",\n \"label\": \"Régimen Simplificado de Confianza\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"match_phrases\": [\n \"simplificado de confianza\"\n ]\n }\n]\n\nexport const SEED_MX_INVOICE_USES: RegionFiscalEntry[] = [\n {\n \"code\": \"G01\",\n \"label\": \"Adquisición de mercancías\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"G03\",\n \"label\": \"Gastos en general\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ],\n \"suggested_for_regimes\": [\n \"601\",\n \"612\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I01\",\n \"label\": \"Construcciones\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I02\",\n \"label\": \"Mobiliario y equipo de oficina por inversiones\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I03\",\n \"label\": \"Equipo de transporte\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I04\",\n \"label\": \"Equipo de cómputo y accesorios\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I05\",\n \"label\": \"Dados, troqueles, moldes, matrices y herramental\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I06\",\n \"label\": \"Comunicaciones telefónicas\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I07\",\n \"label\": \"Comunicaciones satelitales\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"I08\",\n \"label\": \"Otra maquinaria y equipo\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"606\",\n \"612\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ]\n },\n {\n \"code\": \"D01\",\n \"label\": \"Honorarios médicos, dentales y gastos hospitalarios\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D02\",\n \"label\": \"Gastos médicos por incapacidad o discapacidad\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D03\",\n \"label\": \"Gastos funerales\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D04\",\n \"label\": \"Donativos\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D05\",\n \"label\": \"Intereses reales efectivamente pagados por créditos hipotecarios (casa habitación)\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D06\",\n \"label\": \"Aportaciones voluntarias al SAR\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D07\",\n \"label\": \"Primas por seguros de gastos médicos\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D08\",\n \"label\": \"Gastos de transportación escolar obligatoria\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D09\",\n \"label\": \"Depósitos en cuentas para el ahorro, primas que tengan como base planes de pensiones\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"D10\",\n \"label\": \"Pagos por servicios educativos (colegiaturas)\",\n \"person_types\": [\n \"individual\"\n ],\n \"allowed_regimes\": [\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"625\"\n ]\n },\n {\n \"code\": \"S01\",\n \"label\": \"Sin efectos fiscales\",\n \"person_types\": [\n \"individual\",\n \"company\"\n ],\n \"allowed_regimes\": [\n \"601\",\n \"603\",\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"610\",\n \"611\",\n \"612\",\n \"614\",\n \"615\",\n \"616\",\n \"620\",\n \"621\",\n \"622\",\n \"623\",\n \"624\",\n \"625\",\n \"626\"\n ],\n \"suggested_for_regimes\": [\n \"603\",\n \"605\",\n \"606\",\n \"607\",\n \"608\",\n \"610\",\n \"611\",\n \"614\",\n \"615\",\n \"616\",\n \"620\"\n ]\n }\n]\n\nexport const SEED_MX_PAYMENT_METHODS: RegionPaymentMethod[] = [\n {\n \"code\": \"card\",\n \"label\": \"Tarjeta de crédito o débito\",\n \"description\": \"Visa, Mastercard y American Express. Pago seguro procesado por tu pasarela.\",\n \"kind\": \"card\",\n \"flow\": \"inline\",\n \"providers\": [\n \"mercadopago\",\n \"stripe\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"icon\": \"CreditCard\",\n \"fiscal_payment_form\": \"04,28\"\n },\n {\n \"code\": \"mercadopago\",\n \"label\": \"Mercado Pago\",\n \"description\": \"Paga con tu cuenta de Mercado Pago: saldo, tarjetas guardadas o meses.\",\n \"kind\": \"wallet\",\n \"flow\": \"redirect\",\n \"providers\": [\n \"mercadopago\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"icon\": \"Wallet\",\n \"fiscal_payment_form\": \"06,04,28\"\n },\n {\n \"code\": \"oxxo\",\n \"label\": \"Efectivo en OXXO\",\n \"description\": \"Recibe una referencia y paga en cualquier tienda OXXO. Confirmamos tu pedido cuando se acredita el pago.\",\n \"kind\": \"cash_voucher\",\n \"flow\": \"voucher\",\n \"providers\": [\n \"mercadopago\",\n \"stripe\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"expires_hours\": 72,\n \"icon\": \"Store\",\n \"fiscal_payment_form\": \"01\"\n },\n {\n \"code\": \"spei\",\n \"label\": \"Transferencia SPEI\",\n \"description\": \"Paga desde la app de tu banco con una CLABE única para tu pedido; se confirma en minutos.\",\n \"kind\": \"bank_transfer\",\n \"flow\": \"instructions\",\n \"providers\": [\n \"mercadopago\",\n \"stripe\"\n ],\n \"installments\": null,\n \"min_amount\": null,\n \"max_amount\": null,\n \"expires_hours\": 24,\n \"icon\": \"Landmark\",\n \"fiscal_payment_form\": \"03\"\n }\n] as RegionPaymentMethod[]\n\nexport const SEED_MX_FISCAL_ID_PATTERN = \"^[A-ZÑ&]{3,4}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[A-Z0-9]{2}[0-9A]$\"\nexport const SEED_MX_GENERIC_IDS: string[] = [\"XAXX010101000\", \"XEXX010101000\"]\n","/**\n * Region fixture of the mock: Mexico exactly as `GET /storefront/region` publishes it (see `region-mx.seed.ts`),\n * identity document `MX:csf` included, so a storefront can be built and tested without a server. It lives here,\n * and only here: the real data belongs to the region package, and the engine in `fiscal-document` knows no country.\n */\nimport type { IdentityDocumentSpec, IdentityRulesV1, InvoiceRequest, Region, RegionFiscalId } from '../types.js'\nimport { SEED_MX_CSF, SEED_MX_FISCAL_ID_PATTERN, SEED_MX_GENERIC_IDS, SEED_MX_INVOICE_USES, SEED_MX_PAYMENT_METHODS, SEED_MX_REGIMES } from './region-mx.seed.js'\n\nexport const MOCK_IDENTITY_DOCUMENT_MX_CSF: IdentityDocumentSpec = SEED_MX_CSF\nexport const MOCK_CSF_RULES = SEED_MX_CSF.rules as IdentityRulesV1\n\nexport const MOCK_FISCAL_ID_MX: RegionFiscalId = {\n kind: 'mx_rfc',\n label: 'RFC',\n pattern: SEED_MX_FISCAL_ID_PATTERN,\n generic_ids: SEED_MX_GENERIC_IDS,\n regimes: SEED_MX_REGIMES,\n invoice_uses: SEED_MX_INVOICE_USES,\n documents: [SEED_MX_CSF],\n // The pack's person-type patterns and check algorithm (region_settings.fiscal_id_person_patterns / _checksum).\n person_patterns: { individual: '^[A-ZÑ&]{4}[0-9]{6}[A-Z0-9]{3}$', company: '^[A-ZÑ&]{3}[0-9]{6}[A-Z0-9]{3}$' },\n checksum: 'mx_rfc',\n}\n\nexport const MOCK_REGION_MX: Region = {\n country_code: 'MX',\n name: 'México',\n locale: { default: 'es-MX', available: ['es-MX', 'en-US'], current: 'es-MX' },\n timezone: 'America/Mexico_City',\n currency: { code: 'MXN', symbol: '$', symbol_position: 'before', minor_units: 2 },\n formats: { date: 'dd/MM/yyyy', measurement: 'metric' },\n tax: { prices_include_tax: true, label: 'IVA', price_label: 'IVA incluido', show_breakdown: true, default_category: 'standard', categories: ['standard'] },\n address: { postal_code: { pattern: '^[0-9]{5}$', example: '06600' } },\n fiscal_id: MOCK_FISCAL_ID_MX,\n payment_methods: SEED_MX_PAYMENT_METHODS,\n}\n\nexport type InvoiceFieldError = { field: string; message: string }\n\n/** `individual` for a 13-character tax id, `company` for 12 (the mock's rule; a real region decides this server-side). */\nexport function mockPersonType(taxId: string): string | null {\n if (taxId.length === 13) return 'individual'\n if (taxId.length === 12) return 'company'\n return null\n}\n\n/** The first thing wrong with an invoice request against a region, as the API reports it (`field: invoice.<field>`), or `null`. */\nexport function validateInvoiceRequest(region: Region | null, input: InvoiceRequest, prefix = 'invoice'): InvoiceFieldError | null {\n const text = (...v: unknown[]) => v.map((x) => (typeof x === 'string' ? x.trim() : '')).find(Boolean) ?? ''\n const fid = region?.fiscal_id\n const taxId = text(input.tax_id, input.rfc).toUpperCase()\n const name = text(input.legal_name, input.razon_social)\n const regime = text(input.tax_regime, input.regimen)\n const use = text(input.use, input.uso_cfdi, input.invoice_use, input.cfdi_use)\n const postal = text(input.postal_code, input.cp, input.zip)\n const bad = (field: string, message: string): InvoiceFieldError => ({ field: `${prefix}.${field}`, message })\n\n if (!taxId) return bad('tax_id', 'The tax id is required')\n if (fid?.pattern && !fid.generic_ids.includes(taxId) && !new RegExp(fid.pattern).test(taxId)) return bad('tax_id', `Not a valid ${fid.kind}`)\n if (!name) return bad('legal_name', 'The legal name is required')\n if (!regime) return bad('tax_regime', 'The tax regime is required')\n const entry = fid?.regimes.find((r) => r.code === regime)\n if (fid && !entry) return bad('tax_regime', `Unknown tax regime ${regime}`)\n const person = fid?.generic_ids.includes(taxId) ? null : mockPersonType(taxId)\n if (entry && person && entry.person_types.length > 0 && !entry.person_types.includes(person)) {\n return bad('tax_regime', `The regime ${regime} does not apply to this ${fid!.kind}`)\n }\n const postalPattern = region?.address?.postal_code?.pattern\n if (!postal || (postalPattern && !new RegExp(postalPattern).test(postal))) return bad('postal_code', 'Not a valid postal code')\n if (!use) return bad('use', 'The invoice use is required')\n const useEntry = fid?.invoice_uses.find((u) => u.code === use)\n if (fid && !useEntry) return bad('use', `Unknown invoice use ${use}`)\n if (useEntry?.allowed_regimes && useEntry.allowed_regimes.length > 0 && !useEntry.allowed_regimes.includes(regime)) {\n return bad('use', `The regime ${regime} does not admit the use ${use}`)\n }\n return null\n}\n\nexport function maskTaxId(taxId: string): string {\n const v = taxId.trim()\n return v.length <= 4 ? '*'.repeat(v.length) : `${v.slice(0, 2)}${'*'.repeat(v.length - 5)}${v.slice(-3)}`\n}\n","import type {\n Article,\n Collection,\n Customer,\n Image,\n Location,\n Menu,\n Page,\n Product,\n ProductOption,\n ProductVariant,\n Shop,\n Theme,\n} from '../types.js'\n\n/**\n * Placeholder image source for all seed data. Swap it (or pass `imageUrl` to\n * `createMockStorefront`) to use your own assets.\n */\nexport const MOCK_IMAGE_URL = (seed: string, width = 800, height = 800): string =>\n `https://picsum.photos/seed/${encodeURIComponent(seed)}/${width}/${height}`\n\nexport type MockImageUrl = typeof MOCK_IMAGE_URL\n\nexport const MOCK_CURRENCY = 'MXN'\n\n/** Seed customer that already exists (log in with OTP `000000`). */\nexport const MOCK_CUSTOMER_EMAIL = 'cliente@example.com'\n\ntype ProductSpec = {\n handle: string\n title: string\n collection: string\n type: string\n vendor: string\n price: number\n compareAt?: number\n options?: ProductOption[]\n tags?: string[]\n attributes?: Product['attributes']\n /** Stock per variant index (default 12). */\n stock?: number | ((index: number, opts: Record<string, string>) => number)\n /** Extra price per option value, e.g. `{ XL: 50 }`. */\n priceDelta?: Record<string, number>\n description: string\n}\n\nconst OPT = {\n size: (values = ['S', 'M', 'L']): ProductOption => ({ name: 'Talla', values }),\n color: (values: string[]): ProductOption => ({ name: 'Color', values }),\n}\n\nexport const COLLECTION_SPECS: { handle: string; title: string; description: string; parent?: string }[] = [\n { handle: 'ropa', title: 'Ropa', description: 'Prendas básicas para todos los días.' },\n { handle: 'hogar', title: 'Hogar', description: 'Objetos útiles y bonitos para tu casa.' },\n { handle: 'accesorios', title: 'Accesorios', description: 'Complementos para llevar contigo.' },\n { handle: 'llantas', title: 'Llantas', description: 'Llantas para auto por medida.' },\n]\n\nconst tire = (width: number, aspect: number, rim: number) => ({\n width,\n aspect,\n rim,\n size_key: `${width}/${aspect}R${rim}`,\n})\n\nexport const PRODUCT_SPECS: ProductSpec[] = [\n // Ropa\n { handle: 'playera-basica', title: 'Playera básica', collection: 'ropa', type: 'Playera', vendor: 'Casa Textil', price: 249, compareAt: 299, options: [OPT.size(), OPT.color(['Blanco', 'Negro'])], tags: ['algodón', 'nuevo'], stock: (i) => (i === 5 ? 0 : 15), description: 'Playera de algodón peinado, corte recto.' },\n { handle: 'sudadera-capucha', title: 'Sudadera con capucha', collection: 'ropa', type: 'Sudadera', vendor: 'Casa Textil', price: 699, options: [OPT.size(['S', 'M', 'L', 'XL']), OPT.color(['Gris', 'Azul'])], priceDelta: { XL: 50 }, tags: ['invierno'], description: 'Sudadera afelpada con bolsa canguro.' },\n { handle: 'pantalon-chino', title: 'Pantalón chino', collection: 'ropa', type: 'Pantalón', vendor: 'Taller Urbano', price: 899, options: [OPT.size(['28', '30', '32', '34'])], stock: (i) => (i === 0 ? 0 : 6), description: 'Pantalón de gabardina con un toque de elasticidad.' },\n { handle: 'chamarra-ligera', title: 'Chamarra ligera', collection: 'ropa', type: 'Chamarra', vendor: 'Taller Urbano', price: 1299, compareAt: 1599, options: [OPT.size()], tags: ['oferta'], description: 'Chamarra rompevientos plegable.' },\n { handle: 'gorra-clasica', title: 'Gorra clásica', collection: 'ropa', type: 'Gorra', vendor: 'Casa Textil', price: 199, options: [OPT.color(['Negro', 'Beige', 'Verde'])], description: 'Gorra de seis paneles con ajuste trasero.' },\n { handle: 'calcetines-paquete', title: 'Calcetines (paquete de 3)', collection: 'ropa', type: 'Calcetines', vendor: 'Casa Textil', price: 149, stock: 0, description: 'Tres pares de calcetines de algodón.' },\n // Hogar\n { handle: 'taza-ceramica', title: 'Taza de cerámica', collection: 'hogar', type: 'Cocina', vendor: 'Barro Vivo', price: 129, options: [OPT.color(['Blanco', 'Terracota'])], tags: ['regalo'], description: 'Taza de 350 ml hecha a mano.' },\n { handle: 'lampara-mesa', title: 'Lámpara de mesa', collection: 'hogar', type: 'Iluminación', vendor: 'Luz Serena', price: 1199, description: 'Lámpara con pantalla de lino y base de madera.' },\n { handle: 'cojin-decorativo', title: 'Cojín decorativo', collection: 'hogar', type: 'Textil', vendor: 'Casa Textil', price: 349, compareAt: 399, options: [OPT.color(['Mostaza', 'Verde', 'Gris'])], description: 'Cojín de 45 × 45 cm con funda removible.' },\n { handle: 'set-sartenes', title: 'Set de sartenes', collection: 'hogar', type: 'Cocina', vendor: 'Cocina Diaria', price: 1899, compareAt: 2299, tags: ['oferta'], description: 'Tres sartenes antiadherentes de 20, 24 y 28 cm.' },\n { handle: 'manta-tejida', title: 'Manta tejida', collection: 'hogar', type: 'Textil', vendor: 'Casa Textil', price: 799, description: 'Manta de punto grueso, 130 × 170 cm.' },\n { handle: 'maceta-barro', title: 'Maceta de barro', collection: 'hogar', type: 'Jardín', vendor: 'Barro Vivo', price: 189, options: [{ name: 'Tamaño', values: ['Chica', 'Mediana', 'Grande'] }], priceDelta: { Mediana: 60, Grande: 140 }, description: 'Maceta de barro natural con plato.' },\n // Accesorios\n { handle: 'mochila-diaria', title: 'Mochila diaria', collection: 'accesorios', type: 'Mochila', vendor: 'Ruta Libre', price: 999, options: [OPT.color(['Negro', 'Azul'])], tags: ['nuevo'], description: 'Mochila de 20 L con compartimento para laptop.' },\n { handle: 'botella-termica', title: 'Botella térmica', collection: 'accesorios', type: 'Botella', vendor: 'Ruta Libre', price: 399, options: [{ name: 'Capacidad', values: ['500 ml', '750 ml'] }], priceDelta: { '750 ml': 80 }, description: 'Mantiene frío 24 h y caliente 12 h.' },\n { handle: 'lentes-sol', title: 'Lentes de sol', collection: 'accesorios', type: 'Lentes', vendor: 'Vista Clara', price: 599, compareAt: 749, description: 'Lentes polarizados con protección UV400.' },\n { handle: 'reloj-analogico', title: 'Reloj analógico', collection: 'accesorios', type: 'Reloj', vendor: 'Vista Clara', price: 1499, description: 'Reloj con correa de piel y cristal mineral.' },\n { handle: 'cartera-piel', title: 'Cartera de piel', collection: 'accesorios', type: 'Cartera', vendor: 'Taller Urbano', price: 549, options: [OPT.color(['Café', 'Negro'])], description: 'Cartera delgada con seis ranuras.' },\n { handle: 'paraguas-compacto', title: 'Paraguas compacto', collection: 'accesorios', type: 'Paraguas', vendor: 'Ruta Libre', price: 299, stock: 3, description: 'Paraguas plegable resistente al viento.' },\n // Llantas (exercise attribute facets)\n { handle: 'llanta-205-55-r16-touring', title: 'Llanta 205/55 R16 Touring', collection: 'llantas', type: 'Llanta', vendor: 'Marca Norte', price: 1899, compareAt: 2099, attributes: { ...tire(205, 55, 16), load_index: 91, speed_rating: 'V', runflat: false }, tags: ['auto'], description: 'Llanta de turismo silenciosa y de bajo consumo.' },\n { handle: 'llanta-205-55-r16-sport', title: 'Llanta 205/55 R16 Sport', collection: 'llantas', type: 'Llanta', vendor: 'Marca Sur', price: 2199, attributes: { ...tire(205, 55, 16), load_index: 94, speed_rating: 'W', runflat: false }, tags: ['auto'], description: 'Agarre deportivo en seco y mojado.' },\n { handle: 'llanta-195-65-r15-eco', title: 'Llanta 195/65 R15 Eco', collection: 'llantas', type: 'Llanta', vendor: 'Marca Norte', price: 1499, attributes: { ...tire(195, 65, 15), load_index: 91, speed_rating: 'H', runflat: false }, tags: ['auto'], description: 'Baja resistencia al rodamiento.' },\n { handle: 'llanta-225-45-r17-runflat', title: 'Llanta 225/45 R17 Run Flat', collection: 'llantas', type: 'Llanta', vendor: 'Marca Centro', price: 3299, attributes: { ...tire(225, 45, 17), load_index: 91, speed_rating: 'W', runflat: true }, tags: ['auto'], stock: 2, description: 'Permite rodar hasta 80 km sin presión.' },\n { handle: 'llanta-265-70-r16-at', title: 'Llanta 265/70 R16 All Terrain', collection: 'llantas', type: 'Llanta', vendor: 'Marca Sur', price: 3599, attributes: { ...tire(265, 70, 16), load_index: 112, speed_rating: 'T', runflat: false }, tags: ['camioneta'], description: 'Para camioneta, asfalto y terracería.' },\n { handle: 'llanta-175-70-r13-city', title: 'Llanta 175/70 R13 City', collection: 'llantas', type: 'Llanta', vendor: 'Marca Centro', price: 999, attributes: { ...tire(175, 70, 13), load_index: 82, speed_rating: 'T', runflat: false }, tags: ['auto'], stock: 0, description: 'Económica y durable para ciudad.' },\n]\n\nconst money = (n: number, currency: string) => ({ amount: n.toFixed(2), currency_code: currency })\n\nfunction cartesian(options: ProductOption[]): Record<string, string>[] {\n let combos: Record<string, string>[] = [{}]\n for (const opt of options) {\n const next: Record<string, string>[] = []\n for (const c of combos) for (const v of opt.values) next.push({ ...c, [opt.name]: v })\n combos = next\n }\n return combos\n}\n\nconst BASE_DATE = Date.UTC(2026, 8, 30, 12, 0, 0)\n\nfunction image(url: MockImageUrl, seed: string, alt: string): Image {\n return { url: url(seed), alt, width: 800, height: 800 }\n}\n\nexport function buildProducts(currency: string, imageUrl: MockImageUrl = MOCK_IMAGE_URL): Product[] {\n return PRODUCT_SPECS.map((spec, pi) => {\n const options = spec.options ?? []\n const combos = options.length ? cartesian(options) : [{}]\n const images = [image(imageUrl, spec.handle, spec.title), image(imageUrl, `${spec.handle}-2`, `${spec.title}, detalle`)]\n const variants: ProductVariant[] = combos.map((opts, vi) => {\n const delta = Object.values(opts).reduce((sum, v) => sum + (spec.priceDelta?.[v] ?? 0), 0)\n const price = spec.price + delta\n const stock = typeof spec.stock === 'function' ? spec.stock(vi, opts) : (spec.stock ?? 12)\n const title = Object.values(opts).join(' / ') || 'Predeterminado'\n const firstValue = Object.values(opts)[0]\n return {\n id: `var_${pi + 1}_${vi + 1}`,\n sku: `${spec.handle.toUpperCase().replace(/-/g, '')}-${vi + 1}`.slice(0, 32),\n title,\n selected_options: Object.entries(opts).map(([name, value]) => ({ name, value })),\n price: money(price, currency),\n compare_at_price: spec.compareAt ? money(spec.compareAt + delta, currency) : null,\n available_for_sale: stock > 0,\n quantity_available: stock,\n image: firstValue ? image(imageUrl, `${spec.handle}-${firstValue}`, `${spec.title} ${firstValue}`) : null,\n barcode: `75000000${String(pi * 100 + vi).padStart(5, '0')}`,\n }\n })\n const prices = variants.map((v) => Number(v.price.amount))\n const compares = variants.map((v) => (v.compare_at_price ? Number(v.compare_at_price.amount) : null)).filter((n): n is number => n !== null)\n const collection = COLLECTION_SPECS.find((c) => c.handle === spec.collection)!\n return {\n id: `prod_${pi + 1}`,\n handle: spec.handle,\n title: spec.title,\n description: spec.description,\n description_html: `<p>${spec.description}</p>`,\n vendor: spec.vendor,\n product_type: spec.type,\n category: { id: `cat_${spec.collection}`, handle: collection.handle, title: collection.title },\n tags: spec.tags ?? [],\n attributes: spec.attributes ?? {},\n featured_image: images[0] ?? null,\n images,\n options,\n variants,\n price_range: { min: money(Math.min(...prices), currency), max: money(Math.max(...prices), currency) },\n compare_at_price_range: compares.length\n ? { min: money(Math.min(...compares), currency), max: money(Math.max(...compares), currency) }\n : null,\n available_for_sale: variants.some((v) => v.available_for_sale),\n seo: { title: `${spec.title} | Mi tienda`, description: spec.description },\n updated_at: new Date(BASE_DATE - pi * 86_400_000).toISOString(),\n }\n })\n}\n\n/** Product handle → collection handles. */\nexport function buildMemberships(): Record<string, string[]> {\n const out: Record<string, string[]> = {}\n for (const p of PRODUCT_SPECS) out[p.handle] = [p.collection]\n return out\n}\n\nexport function buildCollections(imageUrl: MockImageUrl = MOCK_IMAGE_URL): Collection[] {\n return COLLECTION_SPECS.map((c) => ({\n id: `col_${c.handle}`,\n handle: c.handle,\n title: c.title,\n description: c.description,\n image: image(imageUrl, `col-${c.handle}`, c.title),\n seo: { title: `${c.title} | Mi tienda`, description: c.description },\n parent_handle: c.parent ?? null,\n }))\n}\n\nconst MX_TZ = 'America/Mexico_City'\nconst weekdays = (open: string, close: string, days = [1, 2, 3, 4, 5]) => days.map((day) => ({ day, open, close }))\n\n/** Three example branches (CDMX, Monterrey, Guadalajara) with structured hours. */\nexport function buildLocations(currency: string): Location[] {\n const contacts = (phone: string | null) => ({ phone, email: null, whatsapp: null })\n return [\n {\n id: 'br_centro', name: 'Sucursal Centro', kind: 'store', address: 'Av. Principal 100, Col. Centro', city: 'Ciudad de México', postal_code: '06000',\n phone: '+52 55 0000 0001', lat: 19.4326, lng: -99.1332, timezone: MX_TZ,\n hours: 'Mo-Fr 09:00-19:00, Sa 09:00-14:00', opening_hours_text: 'Lun–Vie 9:00–19:00 · Sáb 9:00–14:00',\n opening_hours: { weekly: [...weekdays('09:00', '19:00'), { day: 6, open: '09:00', close: '14:00' }] },\n services: ['pickup', 'returns'], contacts: contacts('+52 55 0000 0001'),\n pickup: { enabled: true, fee: null, prep_days: 0 },\n },\n {\n id: 'br_norte', name: 'Sucursal Norte', kind: 'store', address: 'Calle Secundaria 25, Col. Norte', city: 'Monterrey', postal_code: '64000',\n phone: null, lat: 25.6866, lng: -100.3161, timezone: MX_TZ,\n hours: 'Mo-Sa 10:00-18:00', opening_hours_text: 'Lun–Sáb 10:00–18:00',\n opening_hours: { weekly: weekdays('10:00', '18:00', [1, 2, 3, 4, 5, 6]) },\n services: ['pickup'], contacts: contacts(null),\n pickup: { enabled: true, fee: money(30, currency), prep_days: 1 },\n },\n {\n id: 'br_occidente', name: 'Punto de recolección Occidente', kind: 'pickup_point', address: 'Av. Vallarta 1500, Col. Americana', city: 'Guadalajara', postal_code: '44100',\n phone: '+52 33 0000 0003', lat: 20.6736, lng: -103.3897, timezone: MX_TZ,\n hours: 'Mo-Fr 11:00-20:00', opening_hours_text: 'Lun–Vie 11:00–20:00',\n opening_hours: { weekly: weekdays('11:00', '20:00') },\n services: ['pickup'], contacts: contacts('+52 33 0000 0003'),\n pickup: { enabled: false, fee: null, prep_days: 2 },\n },\n ]\n}\n\n/** Postal-code centroids the mock can resolve (the real API resolves any Mexican CP). */\nexport const MOCK_POSTAL_CENTROIDS: Record<string, { lat: number; lng: number }> = {\n '06000': { lat: 19.4326, lng: -99.1332 },\n '64000': { lat: 25.6714, lng: -100.309 },\n '44100': { lat: 20.6767, lng: -103.3475 },\n '03100': { lat: 19.3885, lng: -99.1719 },\n}\n\nexport function buildShop(currency: string, imageUrl: MockImageUrl = MOCK_IMAGE_URL): Shop {\n return {\n name: 'Mi tienda',\n description: 'Tienda de ejemplo para desarrollar sin backend.',\n domain: 'mi-tienda.example',\n currency_code: currency,\n locale: 'es-MX',\n locales: ['es-MX', 'en-US'],\n country_code: 'MX',\n logo: { url: imageUrl('logo', 256, 256), alt: 'Mi tienda', width: 256, height: 256 },\n contact: { email: 'hola@mi-tienda.example', phone: '+52 55 0000 0000', whatsapp: '+5215500000000' },\n branches: buildLocations(currency),\n policies: { free_shipping_min: money(999, currency), returns_days: 30 },\n }\n}\n\nexport function buildTheme(): Theme {\n return {\n tokens: {\n background: '#ffffff',\n foreground: '#111827',\n primary: '#0f766e',\n 'primary-foreground': '#ffffff',\n secondary: '#f1f5f9',\n 'secondary-foreground': '#0f172a',\n muted: '#f8fafc',\n 'muted-foreground': '#64748b',\n accent: '#f59e0b',\n 'accent-foreground': '#111827',\n border: '#e2e8f0',\n destructive: '#dc2626',\n },\n fonts: { heading: 'Inter', body: 'Inter' },\n radius: '0.5rem',\n }\n}\n\nexport function buildPages(imageUrl: MockImageUrl = MOCK_IMAGE_URL): Page[] {\n return [\n {\n handle: 'home',\n title: 'Inicio',\n seo: { title: 'Mi tienda', description: 'Ropa, hogar, accesorios y llantas con envío a todo el país.' },\n sections: [\n { id: 'hero-1', type: 'hero', props: { title: 'Todo lo que necesitas, en un solo lugar', subtitle: 'Envío gratis desde $999', cta_label: 'Ver productos', cta_url: '/collections/ropa', image: imageUrl('hero', 1600, 700) } },\n { id: 'grid-1', type: 'product_grid', props: { title: 'Lo más nuevo', collection: 'ropa', limit: 8 } },\n { id: 'collections-1', type: 'collection_list', props: { title: 'Compra por categoría', handles: ['ropa', 'hogar', 'accesorios', 'llantas'] } },\n { id: 'text-1', type: 'rich_text', props: { title: 'Sobre nosotros', html: '<p>Somos una tienda de ejemplo. Edita este texto desde el panel.</p>' } },\n {\n id: 'faq-1',\n type: 'faq',\n props: {\n title: 'Preguntas frecuentes',\n items: [\n { question: '¿Cuánto tarda el envío?', answer: 'De 2 a 5 días hábiles.' },\n { question: '¿Puedo recoger en tienda?', answer: 'Sí, elige recoger en sucursal al pagar.' },\n { question: '¿Cómo pido factura?', answer: 'Desde tu cuenta, en el detalle del pedido.' },\n ],\n },\n },\n ],\n },\n legal('terminos', 'Términos y condiciones', 'Al comprar en Mi tienda aceptas estos términos.'),\n legal('privacidad', 'Aviso de privacidad', 'Tratamos tus datos solo para procesar tus pedidos.'),\n legal('devoluciones', 'Política de devoluciones', 'Tienes 30 días para devolver tu compra.'),\n ]\n}\n\nfunction legal(handle: string, title: string, body: string): Page {\n return {\n handle,\n title,\n seo: { title: `${title} | Mi tienda`, description: body },\n sections: [{ id: `${handle}-text`, type: 'rich_text', props: { title, html: `<p>${body}</p>` } }],\n }\n}\n\nexport function buildMenus(): Menu[] {\n return [\n {\n handle: 'main',\n items: [\n { title: 'Inicio', url: '/' },\n {\n title: 'Tienda',\n url: '/search',\n items: COLLECTION_SPECS.map((c) => ({ title: c.title, url: `/collections/${c.handle}` })),\n },\n { title: 'Blog', url: '/blogs/noticias' },\n ],\n },\n {\n handle: 'footer',\n items: [\n { title: 'Términos y condiciones', url: '/pages/terminos' },\n { title: 'Aviso de privacidad', url: '/pages/privacidad' },\n { title: 'Devoluciones', url: '/pages/devoluciones' },\n ],\n },\n ]\n}\n\nexport function buildArticles(imageUrl: MockImageUrl = MOCK_IMAGE_URL): Article[] {\n return [\n {\n id: 'art_1',\n handle: 'como-elegir-llantas',\n title: 'Cómo elegir las llantas correctas',\n excerpt: 'Lee la medida en el costado de tu llanta: ancho, perfil y rin.',\n content_html: '<p>La medida 205/55 R16 indica 205 mm de ancho, perfil del 55 % y rin de 16 pulgadas.</p>',\n image: image(imageUrl, 'blog-llantas', 'Llantas'),\n author: 'Equipo Mi tienda',\n tags: ['llantas', 'guías'],\n published_at: '2026-09-15T15:00:00.000Z',\n seo: { title: 'Cómo elegir llantas | Mi tienda', description: 'Guía rápida para leer la medida de tus llantas.' },\n },\n {\n id: 'art_2',\n handle: 'cuidado-prendas-algodon',\n title: 'Cuida tus prendas de algodón',\n excerpt: 'Tres consejos para que tus playeras duren más.',\n content_html: '<p>Lava en frío, seca a la sombra y plancha al revés.</p>',\n image: image(imageUrl, 'blog-algodon', 'Prendas de algodón'),\n author: 'Equipo Mi tienda',\n tags: ['ropa', 'guías'],\n published_at: '2026-09-01T15:00:00.000Z',\n seo: { title: 'Cuida tus prendas | Mi tienda', description: 'Consejos de lavado para prendas de algodón.' },\n },\n ]\n}\n\nexport function buildCustomers(): Customer[] {\n return [\n {\n id: 'cus_1',\n email: MOCK_CUSTOMER_EMAIL,\n phone: '+525500000002',\n first_name: 'Cliente',\n last_name: 'Demo',\n default_address_id: null,\n created_at: '2026-01-10T12:00:00.000Z',\n },\n ]\n}\n","// Subject kinds for the mock («My items», contract 1.9). A store that declares none (the default) has no such section;\n// pass `subjectKinds: MOCK_SUBJECT_KINDS` to rehearse one that declares a «garage» (a cascade catalog with model years\n// and a private field) and a catalog-less «size».\nimport type { SubjectKind } from '../types.js'\n\nexport const MOCK_SUBJECT_KINDS: SubjectKind[] = [\n {\n key: 'vehicle',\n label: 'Vehículo',\n label_plural: 'Mi garage',\n max_per_account: 3,\n attach_to_order: true,\n fit_key_template: '{make}/{model}/{year}/{engine}',\n fields: [\n { key: 'make', label: 'Marca', type: 'select', source: 'catalog', required: true },\n { key: 'model', label: 'Modelo', type: 'select', source: 'catalog', depends_on: 'make', required: true },\n { key: 'year', label: 'Año', type: 'year', source: 'catalog', depends_on: 'model', required: true },\n { key: 'engine', label: 'Versión / motor', type: 'select', source: 'catalog', depends_on: 'year' },\n { key: 'plate', label: 'Placas (opcional)', type: 'text', max: 12, private: true },\n ],\n catalog: {\n version: 'mock-1',\n tree: {\n nissan: {\n label: 'Nissan',\n children: {\n np300: {\n label: 'NP300 Frontier',\n from: 2008,\n to: 2022,\n children: { '2.5': { label: '2.5 L', ranges: [[2010, 2015]] }, '2.4': { label: '2.4 L' } },\n },\n versa: { label: 'Versa', from: 2012, to: 2024, children: { '1.6': { label: '1.6 L' } } },\n },\n },\n ford: { label: 'Ford', children: { f150: { label: 'F-150', from: 2000, to: 2020, children: { '5.0': { label: '5.0 L' } } } } },\n },\n },\n },\n {\n key: 'size',\n label: 'Talla',\n label_plural: 'Mis tallas',\n max_per_account: 5,\n fit_key_template: '{garment}/{value}',\n fields: [\n { key: 'garment', label: 'Prenda', type: 'text', required: true },\n { key: 'value', label: 'Talla', type: 'text', required: true, max: 8 },\n ],\n catalog: null,\n },\n]\n","/**\n * In-memory implementation of the whole Storefront API v1 contract, exposed\n * as a `fetch` function. Use it to develop and test storefronts without OPS:\n *\n * const mock = createMockStorefront()\n * const sf = createStorefrontClient({ baseUrl: 'https://mock.local/api/gw', token: 'sk_mock', fetch: mock.fetch })\n */\nimport type {\n Address,\n Availability,\n InsufficientStockLine,\n Article,\n Cart,\n CartLine,\n CartRecommendation,\n Collection,\n Customer,\n CustomerCapabilities,\n CustomerSession,\n FiscalIdentity,\n FiscalProfile,\n FiscalProfileInput,\n InvoiceRequest,\n InvoiceDoc,\n InvoiceFile,\n InvoiceStage,\n InvoiceSummary,\n Facet,\n Location,\n Menu,\n Order,\n PendingPayment,\n Page,\n PaymentAttemptResult,\n PaymentConfig,\n PaymentMethod,\n Product,\n ProductVariant,\n PromotionAnnouncement,\n Region,\n AddressSuggestion,\n ShippingRate,\n Shop,\n StorefrontErrorCode,\n Subject,\n SubjectKind,\n Theme,\n} from '../types.js'\nimport { nextAction, orderProgress, orderShipments, shipmentsStatus, sortTrackingEvents, isTestShipment } from '../order-progress.js'\nimport { isValidPoint, rankByDistance } from '../geo.js'\nimport { resolveAvailability } from '../availability.js'\nimport { buildAccountOrders, buildPendingPayments, buildSyntheticOrders } from './account-seed.js'\nimport { MOCK_REGION_MX, maskTaxId, validateInvoiceRequest } from './region.js'\nimport { isMasked, PRIVATE_MASK, resolveSubject, type SubjectValues } from '../subjects.js'\nimport {\n MOCK_CURRENCY,\n MOCK_IMAGE_URL,\n buildArticles,\n buildCollections,\n MOCK_POSTAL_CENTROIDS,\n buildCustomers,\n buildMemberships,\n buildMenus,\n buildPages,\n buildProducts,\n buildShop,\n buildTheme,\n type MockImageUrl,\n} from './seed.js'\n\nexport { MOCK_CURRENCY, MOCK_CUSTOMER_EMAIL, MOCK_IMAGE_URL, MOCK_POSTAL_CENTROIDS } from './seed.js'\nexport { MOCK_SUBJECT_KINDS } from './subjects.js'\nexport { MOCK_CSF_RULES, MOCK_FISCAL_ID_MX, MOCK_IDENTITY_DOCUMENT_MX_CSF, MOCK_REGION_MX } from './region.js'\nexport type { MockImageUrl } from './seed.js'\n\nexport type MockStorefrontOptions = {\n /** Currency for all prices (default `MXN`). */\n currency?: string\n /** Image URL builder for seed data (default: picsum.photos placeholders). */\n imageUrl?: MockImageUrl\n /** OTP code accepted by `/customer/session` (default `000000`). */\n otpCode?: string\n /**\n * What `GET /customer/capabilities` reports (default `{ password: true, email_verification: true, otp_channels: ['email'] }`).\n * `password: false` makes register / login / password routes answer `403`; `email_verification: false` makes `register`\n * create the account straight away (`201`).\n */\n customerCapabilities?: Partial<CustomerCapabilities>\n /**\n * Scopes the mock's `sk_`/`pk_` tokens do NOT have (e.g. `['customer:write']`), to rehearse an under-provisioned\n * store. Routes needing one answer `403 insufficient_scope` with `required_scopes`; `GET /_token` lists them in\n * `missing_scopes`; and `customer/capabilities` reports `password: false`, `unavailable_reason: 'missing_scope'`\n * when `customer:write` is among them. Implies scope enforcement.\n */\n missingScopes?: string[]\n /**\n * How many MORE orders the demo buyer (`cus_1`) has, numbered `S0001`…, to rehearse a long history (paging, filters,\n * a B2B buyer with hundreds of orders). Default 0.\n */\n syntheticOrders?: number\n /** Failed password logins per email before `429 rate_limited` (default 5; a success or a reset clears the count). */\n maxLoginAttempts?: number\n /** Discount codes → percentage off the subtotal (default `{ BIENVENIDA10: 10 }`). */\n discountCodes?: Record<string, number>\n /** Flat shipping rate (default 149). Free from `shop.policies.free_shipping_min`. */\n flatShipping?: number\n /** Enforce token scopes (`pk_` cannot checkout or use customer routes). Default true. */\n enforceScopes?: boolean\n /**\n * Mock `show_stock`: `low_stock_threshold:N` semantics. At or below this quantity a variant is `low_stock`\n * and only then `availability.quantity` is published (default 5; `0` disables `low_stock`).\n */\n lowStockThreshold?: number\n /** Artificial latency per request, in ms (default 0). */\n latencyMs?: number\n /** Override seed data. */\n shop?: Partial<Shop>\n products?: Product[]\n collections?: Collection[]\n /** Product handle → collection handles (required when overriding `products`). */\n memberships?: Record<string, string[]>\n theme?: Theme\n pages?: Page[]\n menus?: Menu[]\n articles?: Article[]\n /** Entry pop-up announcements served by `GET /storefront/promotions` (default none). */\n announcements?: PromotionAnnouncement[]\n /** Payment attempts allowed per checkout before `429 too_many_attempts` (default 5). */\n maxPaymentAttempts?: number\n /**\n * Carrier-style rates served by `delivery-options` instead of the flat / express pair (to design a checkout with\n * carriers, ETAs and quote deadlines). `expires_at` missing: 24 h from the request. Free shipping still applies.\n */\n shippingRates?: ShippingRate[]\n /**\n * `fixed_when_free`: past `policies.free_shipping_min` `delivery-options` serves ONLY the shop's free rate and flags\n * `free` / `fixed` (what the `storefront_cart` addon does with the setting of the same name). Default: the usual list.\n */\n shippingQuoteMode?: 'carriers' | 'fixed_when_free'\n /** Methods served by `payment-methods` (default one builtin `mock`). */\n paymentMethods?: PaymentMethod[]\n /**\n * What `GET /storefront/region` serves (default `MOCK_REGION_MX`, with its `MX:csf` identity document). `null`: the\n * organization has no region, the route answers `404` and invoice requests are not validated against a region.\n */\n region?: Region | null\n /**\n * What `GET /storefront/address/suggest` can answer (matched by `label` containing the typed text). Default: none, so\n * the route answers `{ suggestions: [], available: false }` like a market without a suggestion provider and address\n * forms stay manual.\n */\n addressSuggestions?: AddressSuggestion[]\n /**\n * The kinds of buyer item («My items») the store declares, served by `GET /subject-kinds` and enforced by\n * `customer.subjects`. Default none: no such section, as in a store that declares nothing (`MOCK_SUBJECT_KINDS` has two).\n */\n subjectKinds?: SubjectKind[]\n}\n\ntype CartRecord = {\n id: string\n lines: { id: string; variant_id: string; quantity: number }[]\n codes: string[]\n buyer: Cart['buyer']\n shipping_address: Address | null\n delivery: Cart['delivery']\n note: string | null\n /** Invoice asked for (`PUT /carts/:id/invoice`). */\n invoice: InvoiceRequest | null\n checkedOut: boolean\n updated_at: string\n}\n\nexport type MockState = {\n shop: Shop\n products: Product[]\n collections: Collection[]\n memberships: Record<string, string[]>\n theme: Theme\n pages: Page[]\n menus: Menu[]\n articles: Article[]\n carts: Map<string, CartRecord>\n customers: Customer[]\n addresses: Map<string, Address[]>\n /** Saved fiscal profiles by customer id (contract 1.9). */\n fiscalProfiles: Map<string, FiscalProfile[]>\n /** Saved items by customer id (contract 1.9); `private` holds the values the API only returns masked. */\n subjects: Map<string, (Subject & { private: Record<string, string> })[]>\n orders: (Order & { customer_id: string | null })[]\n otps: Map<string, string>\n /** Email → password (plain text: it is a mock). The seed customer starts without one. */\n passwords: Map<string, string>\n /** Registrations waiting for their code, by email. */\n pendingRegistrations: Map<string, { password: string; first_name: string | null; last_name: string | null }>\n /** Consecutive failed password logins by email. */\n loginFailures: Map<string, number>\n sessions: Map<string, string>\n /** What «Devices» shows for each session token (contract 1.9). */\n sessionInfo: Map<string, { id: string; customer_id: string; created_at: string; last_used_at: string; login_method: string; reauth_at: number | null }>\n /** Wrong re-authentications per customer (5 and the mock answers 429). */\n reauthFailures: Map<string, number>\n /** Data exports served per customer (3 a day). */\n exportsServed: Map<string, number>\n /** Tokens of accounts that were deleted: deleting again answers 204, as the server does. */\n deletedTokens: Set<string>\n idempotency: Map<string, { status: number; body: unknown }>\n checkouts: Map<string, unknown>\n /** Payment attempts per checkout (`n`, last result). */\n payments: Map<string, { attempts: number; last: PaymentAttemptResult | null }>\n /** `contact|sku` of accepted \"notify me\" subscriptions. */\n restock: Set<string>\n /** Cash vouchers waiting for payment (`GET /customer/pending-payments`); `cus_1` only. */\n pendingPayments: PendingPayment[]\n /** Invoice requested per order id. */\n invoices: Map<string, { stage: InvoiceStage; request: InvoiceRequest }>\n seq: number\n}\n\nclass HttpError extends Error {\n constructor(\n readonly status: number,\n readonly code: StorefrontErrorCode,\n message: string,\n readonly field?: string,\n readonly details?: unknown,\n readonly requiredScopes?: string[],\n ) {\n super(message)\n }\n}\n\nconst PUBLIC_CACHE = 'public, max-age=60, stale-while-revalidate=600'\nconst PRIVATE_CACHE = 'private, no-store'\n\nconst toCents = (amount: string) => Math.round(Number.parseFloat(amount) * 100)\nconst fromCents = (cents: number, currency: string) => ({ amount: (cents / 100).toFixed(2), currency_code: currency })\n\nfunction fnv1a(input: string): string {\n let h = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i)\n h = Math.imul(h, 0x01000193)\n }\n return (h >>> 0).toString(16)\n}\n\nfunction encodeCursor(offset: number): string {\n return btoa(`o:${offset}`)\n}\n\nfunction decodeCursor(cursor: string | null): number {\n if (!cursor) return 0\n try {\n const raw = atob(cursor)\n if (!raw.startsWith('o:')) throw new Error('bad cursor')\n const n = Number(raw.slice(2))\n if (!Number.isInteger(n) || n < 0) throw new Error('bad cursor')\n return n\n } catch {\n throw new HttpError(400, 'validation', 'Invalid cursor', 'after')\n }\n}\n\nfunction paginate<T>(items: T[], search: URLSearchParams, defaultFirst = 24, maxFirst = 100) {\n const first = search.has('first') ? Number(search.get('first')) : defaultFirst\n if (!Number.isInteger(first) || first < 1 || first > maxFirst) throw new HttpError(400, 'validation', `\\`first\\` must be between 1 and ${maxFirst}`, 'first')\n const start = decodeCursor(search.get('after'))\n const nodes = items.slice(start, start + first)\n const end = start + nodes.length\n return {\n nodes,\n page_info: { has_next_page: end < items.length, end_cursor: nodes.length ? encodeCursor(end) : null },\n total_count: items.length,\n }\n}\n\nconst now = () => new Date().toISOString()\n\nexport function createMockStorefront(options: MockStorefrontOptions = {}) {\n const currency = options.currency ?? MOCK_CURRENCY\n const imageUrl = options.imageUrl ?? MOCK_IMAGE_URL\n const otpCode = options.otpCode ?? '000000'\n const capabilities: CustomerCapabilities = {\n password: true,\n email_verification: true,\n otp_channels: ['email'],\n invoicing: {\n available: true,\n countries: ['MX'],\n checkout: 'optional',\n post_purchase: true,\n window_days: 30,\n identity_documents: ['MX:csf'],\n online_verify: false,\n },\n fiscal_profiles: { max: 10 },\n notifications: { channels: ['email'] },\n data_export: true,\n account_delete: true,\n email_change: true,\n ...((options.subjectKinds?.length ?? 0) > 0 ? { subjects: { kinds: options.subjectKinds!.map((k) => k.key), share_with_workshop: false } } : {}),\n ...options.customerCapabilities,\n }\n const missingScopes = options.missingScopes ?? []\n if (missingScopes.includes('customer:write')) {\n capabilities.password = false\n capabilities.unavailable_reason = 'missing_scope'\n capabilities.missing_scopes = ['customer:write']\n }\n const region = options.region === undefined ? MOCK_REGION_MX : options.region\n const maxLoginAttempts = options.maxLoginAttempts ?? 5\n const MIN_PASSWORD = 10\n const MAX_PASSWORD = 128\n const discountCodes = Object.fromEntries(\n Object.entries(options.discountCodes ?? { BIENVENIDA10: 10 }).map(([k, v]) => [k.toUpperCase(), v]),\n )\n const flatShippingCents = Math.round((options.flatShipping ?? 149) * 100)\n const enforceScopes = options.enforceScopes ?? true\n\n function seed(): MockState {\n return {\n shop: { ...buildShop(currency, imageUrl), ...options.shop },\n products: structuredClone(options.products ?? buildProducts(currency, imageUrl)),\n collections: structuredClone(options.collections ?? buildCollections(imageUrl)),\n memberships: structuredClone(options.memberships ?? buildMemberships()),\n theme: structuredClone(options.theme ?? buildTheme()),\n pages: structuredClone(options.pages ?? buildPages(imageUrl)),\n menus: structuredClone(options.menus ?? buildMenus()),\n articles: structuredClone(options.articles ?? buildArticles(imageUrl)),\n carts: new Map(),\n customers: buildCustomers(),\n addresses: new Map(),\n fiscalProfiles: new Map(),\n subjects: new Map(),\n orders: [\n {\n id: 'ord_seed_1',\n number: '1000',\n status: 'fulfilled',\n created_at: '2026-08-20T18:00:00.000Z',\n total: fromCents(24900, currency),\n customer_id: 'cus_1',\n lines: [\n { title: 'Playera básica', variant_title: 'M / Blanco', sku: null, quantity: 1, unit: fromCents(24900, currency), total: fromCents(24900, currency), image: null },\n ],\n },\n ...buildAccountOrders(currency),\n ...buildSyntheticOrders(options.syntheticOrders ?? 0, currency),\n ],\n pendingPayments: buildPendingPayments(currency, Date.now()),\n otps: new Map(),\n passwords: new Map(),\n pendingRegistrations: new Map(),\n loginFailures: new Map(),\n sessions: new Map(),\n sessionInfo: new Map(),\n reauthFailures: new Map(),\n exportsServed: new Map(),\n deletedTokens: new Set(),\n idempotency: new Map(),\n checkouts: new Map(),\n payments: new Map(),\n restock: new Set(),\n invoices: new Map(),\n seq: 0,\n }\n }\n\n const lowStockThreshold = options.lowStockThreshold ?? 5\n\n /** Recomputes `availability` (and the legacy fields) of every variant/product from `quantity_available`. */\n function syncAvailability(products: Product[]) {\n for (const p of products) {\n for (const v of p.variants) {\n const qty = v.quantity_available\n const sellable = v.available_for_sale && (qty === null || qty > 0)\n v.available_for_sale = sellable\n const low = sellable && qty !== null && lowStockThreshold > 0 && qty <= lowStockThreshold\n v.availability = {\n status: !sellable ? 'out_of_stock' : low ? 'low_stock' : 'in_stock',\n quantity: low ? qty : null,\n max_per_order: sellable ? (qty === null ? null : Math.min(qty, 10)) : null,\n restock_eta: null,\n preorder_release_at: null,\n notify_available: !sellable,\n }\n }\n p.available_for_sale = p.variants.some((v) => v.available_for_sale)\n const rank = ['in_stock', 'low_stock', 'backorder', 'preorder', 'out_of_stock']\n const best = p.variants.map((v) => v.availability as Availability).sort((a, b) => rank.indexOf(a.status) - rank.indexOf(b.status))[0]\n p.availability = best ?? resolveAvailability(p)\n }\n }\n\n let state = seed()\n syncAvailability(state.products)\n const nextId = (prefix: string) => `${prefix}_${(++state.seq).toString(36)}${Math.random().toString(36).slice(2, 8)}`\n\n // -------------------------------------------------------------------------\n // Catalog helpers\n // -------------------------------------------------------------------------\n\n function findVariant(variantId: string): { product: Product; variant: ProductVariant } | null {\n for (const product of state.products) {\n const variant = product.variants.find((v) => v.id === variantId)\n if (variant) return { product, variant }\n }\n return null\n }\n\n const minPriceCents = (p: Product) => toCents(p.price_range.min.amount)\n\n function attrValue(p: Product, key: string): string | null {\n if (key === 'vendor') return p.vendor\n if (key === 'product_type') return p.product_type\n if (key === 'tag') return null\n const v = p.attributes[key]\n return v === undefined ? null : String(v)\n }\n\n function matchesText(p: Product, q: string): number {\n const terms = q.toLowerCase().split(/\\s+/).filter(Boolean)\n const hay = [p.title, p.description, p.vendor ?? '', p.product_type ?? '', ...p.tags, ...Object.values(p.attributes).map(String)]\n .join(' ')\n .toLowerCase()\n let score = 0\n for (const t of terms) {\n if (!hay.includes(t)) return 0\n score += p.title.toLowerCase().includes(t) ? 2 : 1\n }\n return score\n }\n\n function listProducts(search: URLSearchParams) {\n let items = state.products.slice()\n const q = search.get('q')?.trim()\n const scores = new Map<string, number>()\n if (q) {\n items = items.filter((p) => {\n const s = matchesText(p, q)\n scores.set(p.id, s)\n return s > 0\n })\n }\n const collection = search.get('collection')\n if (collection) {\n if (!state.collections.some((c) => c.handle === collection)) throw new HttpError(404, 'not_found', `Collection ${collection} not found`, 'collection')\n items = items.filter((p) => state.memberships[p.handle]?.includes(collection))\n }\n const handles = search.get('handles')\n if (handles) {\n const list = handles.split(',').map((h) => h.trim()).filter(Boolean)\n if (list.length > 100) throw new HttpError(400, 'validation', 'At most 100 handles', 'handles')\n items = items.filter((p) => list.includes(p.handle))\n }\n\n // `tags_any` (contract 1.9) is a hard filter of the base set: facets count inside it, nothing relaxes it.\n const tagsAny = (search.get('tags_any') ?? '').split(',').map((t) => t.trim().toLowerCase()).filter(Boolean)\n if (tagsAny.length > 5 || tagsAny.some((t) => t.length > 120)) throw new HttpError(400, 'validation', 'tags_any takes at most 5 tags of 120 characters', 'tags_any')\n if (tagsAny.length > 0) items = items.filter((p) => p.tags.some((t) => tagsAny.includes(t.toLowerCase())))\n\n // Facets are computed over the base set (text/collection/handles), before refinement.\n const base = items\n\n if (search.get('available') === 'true') items = items.filter((p) => p.available_for_sale)\n const priceMin = search.get('price_min')\n const priceMax = search.get('price_max')\n if (priceMin) items = items.filter((p) => minPriceCents(p) >= Math.round(Number(priceMin) * 100))\n if (priceMax) items = items.filter((p) => minPriceCents(p) <= Math.round(Number(priceMax) * 100))\n\n const filters = new Map<string, string[]>()\n for (const [key, value] of search) {\n if (!key.startsWith('filter.')) continue\n const name = key.slice(7)\n filters.set(name, [...(filters.get(name) ?? []), value])\n }\n for (const [key, values] of filters) {\n if (key === 'tag') items = items.filter((p) => values.some((v) => p.tags.includes(v)))\n else items = items.filter((p) => values.includes(attrValue(p, key) ?? '\\u0000'))\n }\n\n const sort = search.get('sort') ?? 'relevance'\n const sorters: Record<string, (a: Product, b: Product) => number> = {\n relevance: (a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0),\n price_asc: (a, b) => minPriceCents(a) - minPriceCents(b),\n price_desc: (a, b) => minPriceCents(b) - minPriceCents(a),\n newest: (a, b) => b.updated_at.localeCompare(a.updated_at),\n title_asc: (a, b) => a.title.localeCompare(b.title, 'es'),\n }\n const sorter = sorters[sort]\n if (!sorter) throw new HttpError(400, 'validation', `Unknown sort ${sort}`, 'sort')\n items = items.slice().sort(sorter)\n\n return { ...paginate(items, search), facets: buildFacets(base) }\n }\n\n function buildFacets(products: Product[]): Facet[] {\n const facets: Facet[] = []\n const listFacet = (key: string, label: string, pick: (p: Product) => string | null) => {\n const counts = new Map<string, number>()\n for (const p of products) {\n const v = pick(p)\n if (v !== null && v !== '') counts.set(v, (counts.get(v) ?? 0) + 1)\n }\n if (counts.size === 0) return\n const values = [...counts.entries()]\n .sort(([a], [b]) => a.localeCompare(b, 'es', { numeric: true }))\n .map(([value, count]) => ({ value, label: value, count }))\n facets.push({ key, label, type: 'list', values })\n }\n listFacet('vendor', 'Marca', (p) => p.vendor)\n listFacet('product_type', 'Tipo', (p) => p.product_type)\n const attrKeys = new Set<string>()\n for (const p of products) for (const k of Object.keys(p.attributes)) attrKeys.add(k)\n const labels: Record<string, string> = { width: 'Ancho', aspect: 'Perfil', rim: 'Rin', size_key: 'Medida', load_index: 'Índice de carga', speed_rating: 'Índice de velocidad', runflat: 'Run flat' }\n for (const k of [...attrKeys].sort()) listFacet(k, labels[k] ?? k, (p) => (p.attributes[k] === undefined ? null : String(p.attributes[k])))\n if (products.length) {\n const prices = products.map(minPriceCents)\n const min = Math.min(...prices)\n const max = Math.max(...prices)\n facets.push({\n key: 'price',\n label: 'Precio',\n type: 'price_range',\n values: [\n { value: (min / 100).toFixed(2), label: 'min', count: products.length },\n { value: (max / 100).toFixed(2), label: 'max', count: products.length },\n ],\n })\n }\n return facets\n }\n\n // -------------------------------------------------------------------------\n // Cart helpers\n // -------------------------------------------------------------------------\n\n function getCartRecord(id: string): CartRecord {\n const cart = state.carts.get(id)\n if (!cart) throw new HttpError(404, 'not_found', `Cart ${id} not found`, 'id')\n return cart\n }\n\n function validateLines(lines: unknown, cart?: CartRecord): { variant_id: string; quantity: number }[] {\n if (!Array.isArray(lines)) throw new HttpError(400, 'validation', '`lines` must be an array', 'lines')\n const toCheck: Parameters<typeof checkStock>[0] = []\n const out = lines.map((raw, i) => {\n const l = raw as { variant_id?: unknown; quantity?: unknown }\n if (typeof l.variant_id !== 'string') throw new HttpError(400, 'validation', 'variant_id is required', `lines[${i}].variant_id`)\n const quantity = l.quantity === undefined ? 1 : l.quantity\n if (typeof quantity !== 'number' || !Number.isInteger(quantity) || quantity < 1) {\n throw new HttpError(400, 'validation', 'quantity must be a positive integer', `lines[${i}].quantity`)\n }\n const found = findVariant(l.variant_id)\n if (!found) throw new HttpError(400, 'validation', `Unknown variant ${l.variant_id}`, `lines[${i}].variant_id`)\n const existing = cart?.lines.find((x) => x.variant_id === l.variant_id)\n toCheck.push({ variant: found.variant, quantity: (existing?.quantity ?? 0) + quantity, lineId: existing?.id ?? null, field: `lines[${i}].quantity` })\n return { variant_id: l.variant_id, quantity }\n })\n checkStock(toCheck)\n return out\n }\n\n /** Visible cap for a variant: only published when the mock's show_stock lets the buyer see it. */\n function visibleMax(variant: ProductVariant): number | null {\n const a = variant.availability\n if (!a || a.status === 'out_of_stock') return 0\n return a.status === 'low_stock' ? a.quantity : null\n }\n\n function lineProblem(variant: ProductVariant, quantity: number): CartLine['problem'] {\n if (!variant.available_for_sale) return { code: 'out_of_stock', max_quantity: 0 }\n if (variant.quantity_available !== null && quantity > variant.quantity_available) {\n return { code: 'insufficient_stock', max_quantity: visibleMax(variant) }\n }\n return null\n }\n\n /** Throws one `409 insufficient_stock` listing every affected line; the message never carries quantities. */\n function checkStock(items: { variant: ProductVariant; quantity: number; lineId: string | null; field: string }[]) {\n const bad = items.filter((i) => lineProblem(i.variant, i.quantity))\n if (bad.length === 0) return\n const lines: InsufficientStockLine[] = bad.map((i) => ({\n line_id: i.lineId,\n variant_id: i.variant.id,\n sku: i.variant.sku,\n status: i.variant.availability?.status ?? 'out_of_stock',\n max_quantity: visibleMax(i.variant),\n }))\n throw new HttpError(409, 'insufficient_stock', 'Algunos productos ya no tienen existencias suficientes', bad[0]!.field, { lines })\n }\n\n function addLines(cart: CartRecord, lines: { variant_id: string; quantity: number }[]) {\n for (const l of lines) {\n const existing = cart.lines.find((x) => x.variant_id === l.variant_id)\n if (existing) existing.quantity += l.quantity\n else cart.lines.push({ id: nextId('line'), variant_id: l.variant_id, quantity: l.quantity })\n }\n }\n\n const isKnownCode = (code: string) => code.toUpperCase() in discountCodes\n const percentFor = (code: string) => discountCodes[code.toUpperCase()] ?? 0\n\n function shippingRates(subtotalCents: number): ShippingRate[] {\n const freeMin = state.shop.policies.free_shipping_min\n const free = freeMin !== null && subtotalCents >= toCents(freeMin.amount)\n if (options.shippingRates?.length) {\n const expires = new Date(Date.now() + 24 * 3_600_000).toISOString()\n return options.shippingRates.map((r) => ({ ...r, expires_at: r.expires_at ?? expires, cost: free ? fromCents(0, r.cost.currency_code) : r.cost }))\n }\n // Like the server with `shipping_quote_mode: fixed_when_free`: past the free-shipping minimum the shop's own price is\n // the only rate (no carrier is asked, there is nothing to choose).\n if (free && options.shippingQuoteMode === 'fixed_when_free') return [{ id: 'flat', title: 'Envío gratis', cost: fromCents(0, currency), eta: '2 a 5 días hábiles' }]\n return [\n { id: 'flat', title: free ? 'Envío estándar (gratis)' : 'Envío estándar', cost: fromCents(free ? 0 : flatShippingCents, currency), eta: '2 a 5 días hábiles' },\n { id: 'express', title: 'Envío exprés', cost: fromCents(flatShippingCents + 10000, currency), eta: '1 a 2 días hábiles' },\n ]\n }\n\n function renderCart(cart: CartRecord): Cart {\n const lines: CartLine[] = []\n let subtotal = 0\n let quantity = 0\n for (const l of cart.lines) {\n const found = findVariant(l.variant_id)\n if (!found) continue\n const { product, variant } = found\n const unit = toCents(variant.price.amount)\n subtotal += unit * l.quantity\n quantity += l.quantity\n lines.push({\n id: l.id,\n quantity: l.quantity,\n problem: lineProblem(variant, l.quantity),\n merchandise: {\n ...variant,\n product: { handle: product.handle, title: product.title, featured_image: product.featured_image },\n },\n cost: {\n unit: variant.price,\n total: fromCents(unit * l.quantity, currency),\n compare_at_unit: variant.compare_at_price,\n },\n })\n }\n const codes = cart.codes.map((code) => ({ code, applicable: isKnownCode(code) && subtotal > 0 }))\n const percent = codes.filter((d) => d.applicable).reduce((max, d) => Math.max(max, percentFor(d.code)), 0)\n const discount = Math.round((subtotal * percent) / 100)\n let shipping: number | null = null\n if (cart.delivery.method === 'pickup') shipping = toCents(state.shop.branches.find((b) => b.id === cart.delivery.branch_id)?.pickup?.fee?.amount ?? '0')\n else if (cart.delivery.method === 'shipping' && cart.delivery.rate_id) {\n const rate = shippingRates(subtotal - discount).find((r) => r.id === cart.delivery.rate_id)\n shipping = rate ? toCents(rate.cost.amount) : null\n }\n const total = subtotal - discount + (shipping ?? 0)\n // IVA 16 % included in prices.\n const tax = Math.round(total - total / 1.16)\n return {\n id: cart.id,\n lines,\n total_quantity: quantity,\n discount_codes: codes,\n buyer: { ...cart.buyer },\n shipping_address: cart.shipping_address ? { ...cart.shipping_address } : null,\n delivery: { ...cart.delivery },\n cost: {\n subtotal: fromCents(subtotal, currency),\n discount: fromCents(discount, currency),\n shipping: shipping === null ? null : fromCents(shipping, currency),\n tax: fromCents(tax, currency),\n total: fromCents(total, currency),\n tax_included: true,\n },\n note: cart.note,\n invoice: cart.invoice ? cartInvoiceOf(cart.invoice) : null,\n updated_at: cart.updated_at,\n }\n }\n\n function cartInvoiceOf(inv: InvoiceRequest): NonNullable<Cart['invoice']> {\n const taxId = typeof inv.tax_id === 'string' ? inv.tax_id : typeof inv.rfc === 'string' ? inv.rfc : ''\n const name = typeof inv.legal_name === 'string' ? inv.legal_name : typeof inv.razon_social === 'string' ? inv.razon_social : null\n return {\n requested: true,\n tax_id_masked: taxId ? maskTaxId(taxId) : null,\n legal_name: name,\n country_code: inv.country_code ?? region?.country_code ?? null,\n document_kind: inv.document?.kind ?? null,\n }\n }\n\n /** `null` for \"no invoice\" (absent, `requested: false`), the request when it is valid, a 422 `invoice.<field>` otherwise. */\n function parseInvoice(raw: unknown, prefix = 'invoice'): InvoiceRequest | null {\n if (raw === null || raw === undefined) return null\n if (typeof raw !== 'object' || Array.isArray(raw)) throw new HttpError(400, 'validation', 'invoice must be an object', prefix)\n const inv = raw as InvoiceRequest\n if (inv.requested === false) return null\n const problem = validateInvoiceRequest(region, inv, prefix)\n if (problem) throw new HttpError(422, 'invalid_state', problem.message, problem.field)\n return inv\n }\n\n const orderInvoice = (order: MockState['orders'][number]): InvoiceSummary => {\n const doc = order.invoices?.find((d) => d.kind === 'invoice')\n if (doc) {\n // Seeded document: the summary says what the document says, with no link (the file comes from `invoiceFile`).\n const { id: _id, kind: _k, total: _t, issued_at: _i, cancelled_at: _c, series: _s, folio_number: _f, related_to: _r, links_expire_at: _l, test_mode: _tm, environment: _e, ...summary } = doc\n return { ...summary, url: null, xml_url: null }\n }\n const entry = state.invoices.get(order.id)\n const paid = order.status !== 'pending_payment'\n if (entry) {\n const stage: InvoiceStage = entry.stage === 'awaiting_payment' && paid ? 'queued' : entry.stage\n return { stage, requested: true, status: stage === 'issued' ? 'issued' : 'requested', action: stage === 'awaiting_payment' ? 'wait' : 'none', can_request: false, url: null, xml_url: null }\n }\n return paid\n ? { status: 'not_requested', stage: 'not_requested', requested: false, action: 'request', can_request: true, blocked_reason: null }\n : { status: 'not_requested', stage: 'not_requested', requested: false, action: 'none', can_request: false, blocked_reason: 'awaiting_payment' }\n }\n\n // -------------------------------------------------------------------------\n // Customer helpers\n // -------------------------------------------------------------------------\n\n function requireCustomer(headers: Headers): Customer {\n const token = headers.get('x-customer-token')\n const id = token ? state.sessions.get(token) : undefined\n const customer = id ? state.customers.find((c) => c.id === id) : undefined\n if (!customer) throw new HttpError(401, 'unauthorized', 'Missing or invalid customer session')\n return customer\n }\n\n function identifierOf(body: Record<string, unknown>): string {\n const email = typeof body.email === 'string' ? body.email.trim().toLowerCase() : ''\n const phone = typeof body.phone === 'string' ? body.phone.replace(/\\s+/g, '') : ''\n if (!email && !phone) throw new HttpError(400, 'validation', 'email or phone is required', 'email')\n if (email && !/^[^@\\s]+@[^@\\s]+$/.test(email)) throw new HttpError(400, 'validation', 'Invalid email', 'email')\n return email ? `email:${email}` : `phone:${phone}`\n }\n\n function emailOf(body: Record<string, unknown>): string {\n const email = typeof body.email === 'string' ? body.email.trim().toLowerCase() : ''\n if (!email || !/^[^@\\s]+@[^@\\s]+$/.test(email)) throw new HttpError(400, 'validation', 'Invalid email', 'email')\n return email\n }\n\n function passwordOf(body: Record<string, unknown>, field = 'password'): string {\n const value = body[field]\n if (typeof value !== 'string' || value.length < MIN_PASSWORD || value.length > MAX_PASSWORD) {\n throw new HttpError(400, 'validation', `${field} must be ${MIN_PASSWORD}-${MAX_PASSWORD} characters`, field)\n }\n return value\n }\n\n function requirePasswordEnabled() {\n if (!capabilities.password) throw new HttpError(403, 'forbidden', 'Password accounts are disabled for this store')\n }\n\n function sessionFor(email: string, extra: { first_name?: string | null; last_name?: string | null } = {}): CustomerSession {\n let customer = state.customers.find((c) => c.email === email)\n if (!customer) {\n customer = {\n id: nextId('cus'),\n email,\n phone: null,\n first_name: extra.first_name ?? null,\n last_name: extra.last_name ?? null,\n default_address_id: null,\n created_at: now(),\n // Registered with no mail connector: the e-mail is only a login name until a code proves it.\n email_verified: capabilities.email_verification,\n }\n state.customers.push(customer)\n }\n const token = `ct_${customer.id}_${Math.random().toString(36).slice(2)}`\n state.sessions.set(token, customer.id)\n trackSession(token, 'password')\n return { token, expires_at: new Date(Date.now() + 30 * 86_400_000).toISOString(), customer }\n }\n\n function trackSession(token: string, loginMethod: string) {\n const at = now()\n state.sessionInfo.set(token, { id: nextId('ses'), customer_id: state.sessions.get(token) ?? '', created_at: at, last_used_at: at, login_method: loginMethod, reauth_at: null })\n }\n\n function validateAddress(body: Record<string, unknown>, partial = false): Partial<Address> {\n const required = ['address1', 'city', 'zip', 'country_code'] as const\n if (!partial) {\n for (const f of required) {\n if (typeof body[f] !== 'string' || !(body[f] as string).trim()) throw new HttpError(400, 'validation', `${f} is required`, f)\n }\n }\n const fields = ['first_name', 'last_name', 'company', 'address1', 'address2', 'city', 'province', 'zip', 'country_code', 'phone'] as const\n const out: Partial<Address> = {}\n for (const f of fields) {\n if (f in body) (out as Record<string, unknown>)[f] = body[f] ?? null\n else if (!partial) (out as Record<string, unknown>)[f] = null\n }\n return out\n }\n\n // -------------------------------------------------------------------------\n // Router\n // -------------------------------------------------------------------------\n\n type Ctx = {\n method: string\n params: string[]\n search: URLSearchParams\n headers: Headers\n body: Record<string, unknown>\n scopes: Set<string>\n }\n type Result = { status?: number; body?: unknown; cache?: 'public' | 'private'; headers?: Record<string, string> }\n type Route = { method: string; pattern: RegExp; scope: string; handler: (ctx: Ctx) => Result | Promise<Result> }\n\n const routes: Route[] = []\n const route = (method: string, path: string, scope: string, handler: Route['handler']) => {\n const pattern = new RegExp('^' + path.replace(/:[a-z_]+/g, '([^/]+)') + '$')\n routes.push({ method, pattern, scope, handler })\n }\n\n const requireNode = <T>(value: T | undefined, what: string, field = 'handle'): T => {\n if (value === undefined) throw new HttpError(404, 'not_found', `${what} not found`, field)\n return value\n }\n\n // Catalog\n route('GET', '/shop', 'catalog:read', () => ({ body: state.shop, cache: 'public' }))\n route('GET', '/region', 'catalog:read', () => {\n if (!region) throw new HttpError(404, 'not_found', 'No region configured')\n return { body: region, cache: 'public' }\n })\n route('GET', '/address/suggest', 'catalog:read', ({ search }) => {\n const q = (search.get('q') ?? '').trim().replace(/\\s+/g, ' ')\n if ([...q].length < 3) throw new HttpError(400, 'validation', 'q needs at least 3 characters', 'q')\n const pool = options.addressSuggestions\n if (!pool) return { body: { suggestions: [], available: false }, cache: 'private' }\n const fold = (v: string) => v.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase()\n const country = search.get('country')?.toUpperCase()\n const zip = search.get('zip')?.trim()\n const limit = Math.min(Math.max(Number(search.get('limit')) || 5, 1), 8)\n const hits = pool.filter((p) => fold(p.label).includes(fold(q)) && (!country || p.country === country) && (!zip || !p.zip || p.zip === zip))\n return { body: { suggestions: hits.slice(0, limit), available: true }, cache: 'private' }\n })\n route('GET', '/products', 'catalog:read', ({ search }) => ({ body: listProducts(search), cache: 'public' }))\n route('GET', '/products/:handle', 'catalog:read', ({ params }) => ({\n body: requireNode(state.products.find((p) => p.handle === params[0]), `Product ${params[0]}`),\n cache: 'public',\n }))\n route('GET', '/products/:handle/recommendations', 'catalog:read', ({ params }) => {\n const product = requireNode(state.products.find((p) => p.handle === params[0]), `Product ${params[0]}`)\n const cols = state.memberships[product.handle] ?? []\n const nodes = state.products\n .filter((p) => p.id !== product.id && p.available_for_sale && (state.memberships[p.handle] ?? []).some((c) => cols.includes(c)))\n .slice(0, 4)\n return { body: { nodes }, cache: 'public' }\n })\n route('GET', '/collections', 'catalog:read', ({ search }) => ({ body: paginate(state.collections, search), cache: 'public' }))\n route('GET', '/collections/:handle', 'catalog:read', ({ params }) => ({\n body: requireNode(state.collections.find((c) => c.handle === params[0]), `Collection ${params[0]}`),\n cache: 'public',\n }))\n // Locations. `nearest` must be registered before `:id`. Like the real API it rounds the point to 0.01° and keeps nothing.\n const visibleLocations = () => state.shop.branches as Location[]\n const round2 = (n: number) => Math.round(n * 100) / 100\n const withDistance = (origin: { lat: number; lng: number }) =>\n rankByDistance(visibleLocations(), origin).map(({ item, distanceKm }) => ({ ...item, distance_km: Math.round(distanceKm * 10) / 10 }))\n route('GET', '/locations', 'catalog:read', ({ search }) => {\n const cp = search.get('postal_code')\n const origin = cp ? MOCK_POSTAL_CENTROIDS[cp] : undefined\n return { body: { nodes: origin ? withDistance(origin) : visibleLocations() }, cache: 'public' }\n })\n route('GET', '/locations/nearest', 'catalog:read', ({ search }) => {\n const origin = { lat: Number(search.get('lat') ?? NaN), lng: Number(search.get('lng') ?? NaN) }\n if (search.get('lat') === null || search.get('lng') === null || !isValidPoint(origin)) {\n throw new HttpError(400, 'validation', 'lat and lng must be a valid point', 'lat')\n }\n return { body: { nodes: withDistance({ lat: round2(origin.lat), lng: round2(origin.lng) }) }, cache: 'private' }\n })\n route('GET', '/locations/:id', 'catalog:read', ({ params }) => ({\n body: requireNode(visibleLocations().find((b) => b.id === params[0]), `Location ${params[0]}`, 'id'),\n cache: 'public',\n }))\n route('GET', '/stock', 'catalog:read', ({ search }) => {\n const skus = search.getAll('sku')\n if (skus.length > 250) throw new HttpError(400, 'validation', 'At most 250 SKUs', 'sku')\n const nodes = skus.flatMap((sku) => {\n for (const p of state.products) {\n const v = p.variants.find((x) => x.sku === sku)\n if (v) return [{ sku, quantity_available: v.quantity_available, ...(v.availability ? { availability: v.availability } : {}) }]\n }\n return []\n })\n return { body: { nodes }, cache: 'public' }\n })\n\n // Cart\n route('POST', '/carts', 'cart:write', ({ body }) => {\n const cart: CartRecord = {\n id: nextId('cart'),\n lines: [],\n codes: [],\n buyer: { email: null, phone: null, customer_id: null },\n shipping_address: null,\n delivery: { method: null, rate_id: null, branch_id: null },\n note: null,\n invoice: null,\n checkedOut: false,\n updated_at: now(),\n }\n if (body.lines !== undefined) addLines(cart, validateLines(body.lines))\n state.carts.set(cart.id, cart)\n return { status: 201, body: renderCart(cart), cache: 'private' }\n })\n route('GET', '/carts/:id', 'cart:write', ({ params }) => ({ body: renderCart(getCartRecord(params[0]!)), cache: 'private' }))\n route('POST', '/carts/:id/lines', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n addLines(cart, validateLines(body.lines, cart))\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PATCH', '/carts/:id/lines', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (!Array.isArray(body.lines)) throw new HttpError(400, 'validation', '`lines` must be an array', 'lines')\n const updates = body.lines as { id?: unknown; quantity?: unknown }[]\n updates.forEach((u, i) => {\n const line = cart.lines.find((l) => l.id === u.id)\n if (!line) throw new HttpError(400, 'validation', `Unknown line ${String(u.id)}`, `lines[${i}].id`)\n if (typeof u.quantity !== 'number' || !Number.isInteger(u.quantity) || u.quantity < 0) {\n throw new HttpError(400, 'validation', 'quantity must be a non-negative integer', `lines[${i}].quantity`)\n }\n })\n checkStock(\n updates.flatMap((u, i) => {\n const line = cart.lines.find((l) => l.id === u.id)!\n return (u.quantity as number) > 0\n ? [{ variant: findVariant(line.variant_id)!.variant, quantity: u.quantity as number, lineId: line.id, field: `lines[${i}].quantity` }]\n : []\n }),\n )\n for (const u of updates) {\n const line = cart.lines.find((l) => l.id === u.id)!\n line.quantity = u.quantity as number\n }\n cart.lines = cart.lines.filter((l) => l.quantity > 0)\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/discount-codes', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (!Array.isArray(body.codes) || body.codes.some((c) => typeof c !== 'string')) {\n throw new HttpError(400, 'validation', '`codes` must be an array of strings', 'codes')\n }\n cart.codes = [...new Set((body.codes as string[]).map((c) => c.trim().toUpperCase()).filter(Boolean))]\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/buyer', 'cart:write', ({ params, body, headers }) => {\n const cart = getCartRecord(params[0]!)\n const email = typeof body.email === 'string' ? body.email.trim() : null\n const phone = typeof body.phone === 'string' ? body.phone.trim() : null\n if (email && !/^[^@\\s]+@[^@\\s]+$/.test(email)) throw new HttpError(400, 'validation', 'Invalid email', 'email')\n const token = headers.get('x-customer-token')\n const customerId = token ? (state.sessions.get(token) ?? null) : null\n cart.buyer = { email: email || null, phone: phone || null, customer_id: customerId }\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/shipping-address', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n cart.shipping_address = validateAddress(body) as Address\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('GET', '/carts/:id/delivery-options', 'cart:write', ({ params }) => {\n const cart = renderCart(getCartRecord(params[0]!))\n const net = toCents(cart.cost.subtotal.amount) - toCents(cart.cost.discount.amount)\n const rates = shippingRates(net)\n const free = options.shippingQuoteMode === 'fixed_when_free' && rates.length > 0 && rates.every((r) => toCents(r.cost.amount) === 0)\n return {\n body: { rates, free, fixed: free, pickup: state.shop.branches.filter((b) => b.pickup?.enabled !== false).map((b) => ({ branch_id: b.id, name: b.name, address: b.address, city: b.city })), partial: false, unavailable: [] },\n cache: 'private',\n }\n })\n route('GET', '/carts/:id/payment-methods', 'cart:write', ({ params }) => {\n getCartRecord(params[0]!)\n return { body: { methods: options.paymentMethods ?? [{ key: 'mock', kind: 'builtin', default: true }], market: null }, cache: 'private' }\n })\n route('PUT', '/carts/:id/delivery', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (body.method === 'shipping') {\n const rateId = body.rate_id\n if (typeof rateId !== 'string' || !shippingRates(0).some((r) => r.id === rateId)) {\n throw new HttpError(400, 'validation', 'Unknown rate_id', 'rate_id')\n }\n cart.delivery = { method: 'shipping', rate_id: rateId, branch_id: null }\n } else if (body.method === 'pickup') {\n const branchId = body.branch_id\n if (typeof branchId !== 'string' || !state.shop.branches.some((b) => b.id === branchId && b.pickup?.enabled !== false)) {\n throw new HttpError(400, 'validation', 'Unknown branch_id', 'branch_id')\n }\n cart.delivery = { method: 'pickup', rate_id: null, branch_id: branchId }\n } else {\n throw new HttpError(400, 'validation', 'method must be shipping or pickup', 'method')\n }\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('PUT', '/carts/:id/invoice', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n if (cart.checkedOut) throw new HttpError(409, 'already_checked_out', 'The cart is already an order')\n cart.invoice = parseInvoice(body)\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n // Order note, cross-sell and promotions (contract 1.2)\n route('PUT', '/carts/:id/note', 'cart:write', ({ params, body }) => {\n const cart = getCartRecord(params[0]!)\n const raw = body.note\n if (raw !== null && raw !== undefined && typeof raw !== 'string') throw new HttpError(400, 'validation', 'note must be a string or null', 'note')\n const text = typeof raw === 'string' ? raw.trim() : ''\n if (text.length > 1000) throw new HttpError(400, 'validation', 'note must be at most 1000 characters', 'note')\n cart.note = text || null\n cart.updated_at = now()\n return { body: renderCart(cart), cache: 'private' }\n })\n route('GET', '/carts/:id/recommendations', 'cart:write', ({ params, search }) => {\n const cart = getCartRecord(params[0]!)\n const first = Math.min(8, Math.max(1, Number.parseInt(search.get('first') ?? '4', 10) || 4))\n const inCart = new Set(cart.lines.map((l) => findVariant(l.variant_id)?.product.id))\n const nodes: CartRecommendation[] = []\n for (const p of state.products) {\n if (inCart.has(p.id)) continue\n const variants = p.variants.filter((v) => v.available_for_sale)\n if (variants.length === 0) continue\n nodes.push({\n product: { id: p.id, handle: p.handle, title: p.title, featured_image: p.featured_image, options: p.options, vendor: p.vendor },\n variants,\n default_variant_id: variants[0]!.id,\n source: 'similar',\n unlocks: null,\n })\n if (nodes.length >= first) break\n }\n return { body: { nodes, promotions: null }, cache: 'private' }\n })\n route('GET', '/promotions', 'catalog:read', () => ({\n body: { nodes: [], announcements: options.announcements ?? [] },\n cache: 'public',\n }))\n\n route('POST', '/carts/:id/checkout', 'checkout:write', ({ params, body, headers }) => {\n const key = headers.get('idempotency-key')\n if (key) {\n const prev = state.idempotency.get(`${params[0]}:${key}`)\n if (prev) return { status: prev.status, body: prev.body, cache: 'private' }\n }\n const record = getCartRecord(params[0]!)\n const cart = renderCart(record)\n if (cart.lines.length === 0) throw new HttpError(422, 'invalid_state', 'Cart is empty', 'lines')\n if (!cart.buyer.email && !cart.buyer.phone) throw new HttpError(422, 'invalid_state', 'Buyer email or phone is required', 'buyer')\n if (!cart.delivery.method) throw new HttpError(422, 'invalid_state', 'Delivery method is required', 'delivery')\n if (cart.delivery.method === 'shipping' && !cart.shipping_address) {\n throw new HttpError(422, 'invalid_state', 'Shipping address is required', 'shipping_address')\n }\n if (typeof body.payment_method !== 'string' || !body.payment_method) throw new HttpError(400, 'validation', 'payment_method is required', 'payment_method')\n if (typeof body.return_url !== 'string' || !body.return_url) throw new HttpError(400, 'validation', 'return_url is required', 'return_url')\n // The invoice is checked against the region BEFORE anything is reserved or charged.\n const invoice = body.invoice !== undefined ? parseInvoice(body.invoice) : record.invoice\n // Reserve stock.\n checkStock(record.lines.map((l, i) => ({ variant: findVariant(l.variant_id)!.variant, quantity: l.quantity, lineId: l.id, field: `lines[${i}].quantity` })))\n for (const l of record.lines) {\n const v = findVariant(l.variant_id)!.variant\n if (v.quantity_available !== null) {\n v.quantity_available -= l.quantity\n v.available_for_sale = v.quantity_available > 0\n }\n }\n syncAvailability(state.products)\n\n const orderId = nextId('ord')\n const number = String(Math.max(1000, ...state.orders.map((o) => Number(o.number) || 0)) + 1)\n const customerId = cart.buyer.customer_id ?? state.customers.find((c) => c.email && c.email === cart.buyer.email)?.id ?? null\n state.orders.push({\n id: orderId,\n number,\n status: 'pending_payment',\n created_at: now(),\n total: cart.cost.total,\n customer_id: customerId,\n lines: cart.lines.map((l) => ({\n title: l.merchandise.product.title,\n variant_title: l.merchandise.title,\n sku: l.merchandise.sku,\n quantity: l.quantity,\n unit: l.cost.unit,\n total: l.cost.total,\n image: l.merchandise.image ?? l.merchandise.product.featured_image,\n })),\n })\n const redirect = new URL(`https://mock.local/pay/${orderId}`)\n redirect.searchParams.set('return_url', body.return_url)\n const checkoutId = nextId('chk')\n const result = {\n order: { id: orderId, number },\n payment: { provider: 'mock', status: 'pending', redirect_url: redirect.toString(), client_secret: null, instructions: null },\n checkout: {\n id: checkoutId,\n status: 'pending',\n external_order_id: orderId,\n total: cart.cost.total,\n stock_hold_expires_at: new Date(Date.now() + 30 * 60_000).toISOString(),\n },\n }\n state.checkouts.set(checkoutId, result)\n record.checkedOut = true\n if (invoice) state.invoices.set(orderId, { stage: 'awaiting_payment', request: invoice })\n if (key) state.idempotency.set(`${params[0]}:${key}`, { status: 201, body: result })\n return { status: 201, body: result, cache: 'private' }\n })\n route('GET', '/checkouts/:id', 'checkout:write', ({ params }) => {\n const found = state.checkouts.get(params[0]!)\n if (!found) throw new HttpError(404, 'not_found', 'Checkout not found')\n return { body: found, cache: 'private' }\n })\n\n // Embedded payment (contract 1.2). The result depends on the provider token, like the sandbox cardholder names.\n const DECLINES: Record<string, NonNullable<PaymentAttemptResult['payment']['decline_code']>> = {\n tok_OTHE: 'declined',\n tok_CALL: 'call_issuer',\n tok_FUND: 'insufficient_funds',\n tok_SECU: 'invalid_cvc',\n tok_EXPI: 'invalid_expiry',\n tok_FORM: 'invalid_card_data',\n }\n const maxPaymentAttempts = options.maxPaymentAttempts ?? 5\n route('GET', '/checkouts/:id/payment-config', 'checkout:write', ({ params }) => {\n const found = state.checkouts.get(params[0]!) as { checkout: PaymentConfig['checkout'] } | undefined\n if (!found) throw new HttpError(404, 'not_found', 'Checkout not found')\n const st = state.payments.get(params[0]!)\n const config: PaymentConfig = {\n provider: 'mock',\n flow: 'embedded',\n option: 'card',\n payable: found.checkout.status === 'pending' && (st?.attempts ?? 0) < maxPaymentAttempts,\n reason: null,\n amount: found.checkout.total,\n currency: found.checkout.total.currency_code,\n public_key: 'TEST-mock-public-key',\n methods: ['card', 'cash'],\n options: [{ key: 'card', redirect: false, max_installments: 12 }, { key: 'cash', redirect: false }],\n client: { kind: 'mock', sdk_url: 'https://mock.local/sdk.js', public_key: 'TEST-mock-public-key' },\n checkout: found.checkout,\n action: st?.last?.payment.action ?? null,\n attempts_left: maxPaymentAttempts - (st?.attempts ?? 0),\n }\n return { body: config, cache: 'private' }\n })\n route('POST', '/checkouts/:id/payment', 'checkout:write', ({ params, body, headers }) => {\n const key = headers.get('idempotency-key')\n if (!key) throw new HttpError(400, 'validation', 'Idempotency-Key header is required', 'Idempotency-Key')\n const id = params[0]!\n const prev = state.idempotency.get(`pay:${id}:${key}`)\n if (prev) return { status: prev.status, body: prev.body, cache: 'private' }\n const found = state.checkouts.get(id) as { checkout: { status: string; external_order_id: string; total: { amount: string; currency_code: string }; stock_hold_expires_at: string | null } } | undefined\n if (!found) throw new HttpError(404, 'not_found', 'Checkout not found')\n const method = body.method\n if (method !== 'card' && method !== 'cash' && method !== 'bank_transfer') throw new HttpError(400, 'validation', 'method must be card, cash or bank_transfer', 'method')\n const data = body.provider_data\n if (typeof data !== 'object' || data === null || Array.isArray(data)) throw new HttpError(400, 'validation', 'provider_data is required', 'provider_data')\n const exp = body.expected_total as { amount?: string } | undefined\n if (exp && exp.amount !== undefined && toCents(exp.amount) !== toCents(found.checkout.total.amount)) {\n throw new HttpError(422, 'price_mismatch', 'The total changed', 'expected_total', { cost: found.checkout.total })\n }\n const st = state.payments.get(id) ?? { attempts: 0, last: null }\n if (found.checkout.status === 'paid' || st.last?.payment.status === 'pending' || st.last?.payment.status === 'requires_action') {\n throw new HttpError(409, 'conflict', 'A payment is already in progress', 'payment_in_progress')\n }\n if (found.checkout.stock_hold_expires_at && Date.parse(found.checkout.stock_hold_expires_at) < Date.now()) {\n throw new HttpError(409, 'expired', 'The reservation expired')\n }\n if (st.attempts >= maxPaymentAttempts) throw new HttpError(429, 'rate_limited', 'too_many_attempts')\n st.attempts += 1\n const token = typeof (data as Record<string, unknown>).token === 'string' ? ((data as Record<string, unknown>).token as string) : ''\n const attemptsLeft = maxPaymentAttempts - st.attempts\n let payment: PaymentAttemptResult['payment']\n if (method !== 'card') {\n const pointId = String((data as Record<string, unknown>).payment_method_id ?? 'oxxo')\n payment = {\n provider: 'mock',\n status: 'requires_action',\n action: {\n type: 'voucher',\n voucher: {\n payment_point: pointId,\n reference: `${pointId.toUpperCase()}-${id.slice(-6).toUpperCase()}`,\n voucher_url: `https://mock.local/voucher/${id}`,\n amount: found.checkout.total.amount,\n currency: found.checkout.total.currency_code,\n expires_at: new Date(Date.now() + 48 * 3_600_000).toISOString(),\n },\n },\n }\n } else if (token in DECLINES) {\n payment = { provider: 'mock', status: 'failed', decline_code: DECLINES[token]!, retryable: true }\n } else if (token === 'tok_CONT') {\n payment = { provider: 'mock', status: 'pending', action: { type: 'none' } }\n } else if (token === 'tok_3DS') {\n payment = { provider: 'mock', status: 'requires_action', action: { type: 'challenge', challenge: { url: 'https://mock.local/3ds', creq: 'creq' } } }\n } else {\n payment = { provider: 'mock', status: 'paid' }\n found.checkout.status = 'paid'\n const order = state.orders.find((o) => o.id === found.checkout.external_order_id)\n if (order) order.status = 'paid'\n }\n payment.outcome =\n payment.status === 'paid' ? 'approved' : payment.status === 'failed' ? 'rejected' : payment.action?.type === 'challenge' ? 'challenge' : 'pending'\n const result: PaymentAttemptResult = { attempt: { n: st.attempts }, payment, checkout: found.checkout as PaymentAttemptResult['checkout'], attempts_left: attemptsLeft }\n st.last = result\n state.payments.set(id, st)\n state.idempotency.set(`pay:${id}:${key}`, { status: 200, body: result })\n return { body: result, cache: 'private' }\n })\n\n // Restock subscriptions (\"notify me when it is back\")\n route('POST', '/restock-subscriptions', 'customer:write', ({ body }) => {\n if (typeof body.sku !== 'string' || !body.sku) throw new HttpError(400, 'validation', 'sku is required', 'sku')\n if (typeof body.locale !== 'string' || !body.locale) throw new HttpError(400, 'validation', 'locale is required', 'locale')\n if (body.consent !== true) throw new HttpError(422, 'invalid_state', 'consent must be true', 'consent')\n const contact = typeof body.email === 'string' && body.email ? body.email.toLowerCase() : typeof body.phone === 'string' ? body.phone : ''\n if (!contact) throw new HttpError(400, 'validation', 'email or phone is required', 'email')\n const known = state.products.some((p) => p.variants.some((v) => v.sku === body.sku))\n if (!known) throw new HttpError(404, 'not_found', `SKU ${body.sku} not found`, 'sku')\n state.restock.add(`${contact}|${body.sku}`)\n return { status: 202, body: { status: 'pending' }, cache: 'private' }\n })\n\n // Customer\n route('POST', '/customer/otp', 'customer:write', ({ body }) => {\n state.otps.set(identifierOf(body), otpCode)\n return { status: 204 }\n })\n route('POST', '/customer/session', 'customer:write', ({ body }) => {\n const id = identifierOf(body)\n if (typeof body.code !== 'string' || state.otps.get(id) !== body.code) {\n throw new HttpError(401, 'unauthorized', 'Invalid or expired code', 'code')\n }\n state.otps.delete(id)\n const [kind, value] = id.split(/:(.*)/s) as [string, string]\n let customer = state.customers.find((c) => (kind === 'email' ? c.email === value : c.phone === value))\n if (!customer) {\n customer = {\n id: nextId('cus'),\n email: kind === 'email' ? value : null,\n phone: kind === 'phone' ? value : null,\n first_name: null,\n last_name: null,\n default_address_id: null,\n created_at: now(),\n email_verified: kind === 'email',\n }\n state.customers.push(customer)\n }\n const token = `ct_${customer.id}_${Math.random().toString(36).slice(2)}`\n state.sessions.set(token, customer.id)\n trackSession(token, kind)\n return {\n status: 201,\n body: { token, expires_at: new Date(Date.now() + 30 * 86_400_000).toISOString(), customer },\n cache: 'private',\n }\n })\n route('GET', '/customer/capabilities', 'customer:read', () => ({ body: capabilities, cache: 'private' }))\n route('POST', '/customer/register', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n const password = passwordOf(body)\n const text = (v: unknown) => (typeof v === 'string' && v.trim() ? v.trim() : null)\n const first_name = text(body.first_name)\n const last_name = text(body.last_name)\n if (capabilities.email_verification) {\n // Like OPS: with verification the answer is the same whether or not the email already has an account (no\n // enumeration). Proving the mailbox then sets this password on the existing account.\n state.pendingRegistrations.set(email, { password, first_name, last_name })\n state.otps.set(`email:${email}`, otpCode)\n return { status: 202, body: { status: 'verification_required' }, cache: 'private' }\n }\n // Without verification the only way to avoid handing out someone else's session is a 409 (the one residual oracle).\n if (state.passwords.has(email)) throw new HttpError(409, 'conflict', 'An account with this email already exists', 'email')\n state.passwords.set(email, password)\n return { status: 201, body: sessionFor(email, { first_name, last_name }), cache: 'private' }\n })\n route('POST', '/customer/register/verify', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n const pending = state.pendingRegistrations.get(email)\n if (!pending || typeof body.code !== 'string' || state.otps.get(`email:${email}`) !== body.code) {\n throw new HttpError(401, 'unauthorized', 'Invalid or expired code', 'code')\n }\n state.pendingRegistrations.delete(email)\n state.otps.delete(`email:${email}`)\n state.passwords.set(email, pending.password)\n return { status: 201, body: sessionFor(email, pending), cache: 'private' }\n })\n route('POST', '/customer/login', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n if ((state.loginFailures.get(email) ?? 0) >= maxLoginAttempts) {\n throw new HttpError(429, 'rate_limited', 'Too many failed attempts, try again later')\n }\n const stored = state.passwords.get(email)\n if (stored === undefined || typeof body.password !== 'string' || body.password !== stored) {\n state.loginFailures.set(email, (state.loginFailures.get(email) ?? 0) + 1)\n throw new HttpError(401, 'unauthorized', 'Invalid email or password')\n }\n state.loginFailures.delete(email)\n return { status: 201, body: sessionFor(email), cache: 'private' }\n })\n route('PUT', '/customer/password', 'customer:write', ({ headers, body }) => {\n requirePasswordEnabled()\n const customer = requireCustomer(headers)\n const password = passwordOf(body)\n const email = customer.email\n if (!email) throw new HttpError(422, 'invalid_state', 'The account has no email', 'email')\n const current = state.passwords.get(email)\n if (current !== undefined && body.current_password !== current) {\n throw new HttpError(401, 'unauthorized', 'current_password is missing or wrong', 'current_password')\n }\n state.passwords.set(email, password)\n return { status: 204 }\n })\n route('POST', '/customer/password/reset', 'customer:write', ({ body }) => {\n requirePasswordEnabled()\n const email = emailOf(body)\n const password = passwordOf(body)\n if (typeof body.code !== 'string' || state.otps.get(`email:${email}`) !== body.code || !state.customers.some((c) => c.email === email)) {\n throw new HttpError(401, 'unauthorized', 'Invalid or expired code', 'code')\n }\n state.otps.delete(`email:${email}`)\n state.passwords.set(email, password)\n state.loginFailures.delete(email)\n return { status: 204 }\n })\n /** The customer as the API serves it: the fiscal evidence keeps no file hash. */\n const publicCustomer = (c0: Customer): Customer => {\n const c: Customer = { ...c0, locale: c0.locale ?? null, preferences: c0.preferences ?? { notifications: {} } }\n if (!c.fiscal?.document) return c\n const { sha256: _sha, ...document } = c.fiscal.document\n return { ...c, fiscal: { ...c.fiscal, document } }\n }\n route('GET', '/customer', 'customer:read', ({ headers }) => ({ body: publicCustomer(requireCustomer(headers)), cache: 'private' }))\n route('PATCH', '/customer', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const text = (v: unknown) => (typeof v === 'string' && v.trim() ? v.trim() : null)\n if ('first_name' in body) c.first_name = text(body.first_name)\n if ('last_name' in body) c.last_name = text(body.last_name)\n if ('phone' in body) c.phone = text(body.phone)\n if ('locale' in body) c.locale = parseLocale(body.locale)\n if ('preferences' in body) c.preferences = parsePreferences(c.preferences, body.preferences)\n if ('fiscal' in body) {\n if (body.fiscal === null) c.fiscal = null\n else {\n const fiscal = parseInvoice({ ...(body.fiscal as object), requested: true }, 'fiscal') as InvoiceRequest\n const fid: FiscalIdentity = {\n country_code: String(fiscal.country_code ?? region?.country_code ?? ''),\n tax_id: String(fiscal.tax_id ?? fiscal.rfc).toUpperCase(),\n legal_name: String(fiscal.legal_name ?? fiscal.razon_social),\n tax_regime: String(fiscal.tax_regime ?? fiscal.regimen),\n postal_code: String(fiscal.postal_code ?? fiscal.cp),\n invoice_use: String(fiscal.use ?? fiscal.uso_cfdi ?? fiscal.invoice_use ?? '') || null,\n document: fiscal.document ?? null,\n verification: { status: 'reviewed', checked_at: now() },\n }\n c.fiscal = fid\n }\n }\n return { body: publicCustomer(c), cache: 'private' }\n })\n // Account settings (contract 1.9): language, notification preferences, sessions, re-authentication, export, delete.\n const OPTIONAL_EVENTS = new Set(['order_updates', 'shipping', 'restock'])\n const MANDATORY_EVENTS = new Set(['order_confirmation', 'payment', 'invoice', 'security'])\n const CHANNELS = new Set(['email', 'whatsapp'])\n const REAUTH_WINDOW_MS = 5 * 60_000\n const supportedLocales = () => [state.shop.locale, ...state.shop.locales].filter((l, i, a) => l && a.indexOf(l) === i)\n\n function parseLocale(raw: unknown): string | null {\n if (raw === null || (typeof raw === 'string' && !raw.trim())) return null\n if (typeof raw !== 'string') throw new HttpError(400, 'validation', 'locale must be a string', 'locale')\n const tag = raw.trim().replace('_', '-')\n const [lang = '', ...rest] = tag.split('-')\n const canonical = [lang.toLowerCase(), ...rest.map((p) => p.toUpperCase())].join('-')\n const supported = supportedLocales()\n const hit = supported.find((l) => l.toLowerCase() === canonical.toLowerCase()) ?? (rest.length === 0 ? supported.find((l) => l.split('-')[0]!.toLowerCase() === canonical) : undefined)\n if (!hit) throw new HttpError(400, 'validation', 'this store is not available in that language', 'locale')\n return hit\n }\n\n function parsePreferences(current: Customer['preferences'], raw: unknown): Customer['preferences'] {\n if (raw === null) return { notifications: {} }\n if (typeof raw !== 'object' || Array.isArray(raw)) throw new HttpError(400, 'validation', 'preferences must be an object', 'preferences')\n const merged: Record<string, Record<string, boolean>> = structuredClone(current?.notifications ?? {})\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n if (key !== 'notifications') throw new HttpError(400, 'validation', 'unknown preference', `preferences.${key}`)\n if (!value || typeof value !== 'object' || Array.isArray(value)) throw new HttpError(400, 'validation', 'notifications must map each event to its channels', 'preferences.notifications')\n for (const [event, channels] of Object.entries(value as Record<string, unknown>)) {\n const field = `preferences.notifications.${event}`\n if (MANDATORY_EVENTS.has(event)) throw new HttpError(400, 'validation', 'this notification is required and cannot be turned off', field)\n if (!OPTIONAL_EVENTS.has(event)) throw new HttpError(400, 'validation', 'unknown notification', field)\n if (!channels || typeof channels !== 'object' || Array.isArray(channels)) throw new HttpError(400, 'validation', 'each event maps its channels to true or false', field)\n for (const [channel, on] of Object.entries(channels as Record<string, unknown>)) {\n if (!CHANNELS.has(channel)) throw new HttpError(400, 'validation', 'unknown channel', `${field}.${channel}`)\n if (typeof on !== 'boolean') throw new HttpError(400, 'validation', 'each channel must be true or false', `${field}.${channel}`)\n ;(merged[event] ??= {})[channel] = on\n }\n }\n }\n return { notifications: merged }\n }\n\n /** The session of the request (its token); the customer must have one. */\n function sessionOf(headers: Headers) {\n const c = requireCustomer(headers)\n const token = headers.get('x-customer-token')!\n if (!state.sessionInfo.has(token)) trackSession(token, 'email')\n return { c, token, info: state.sessionInfo.get(token)! }\n }\n function requireRecentReauth(info: { reauth_at: number | null }) {\n if (info.reauth_at === null || Date.now() - info.reauth_at > REAUTH_WINDOW_MS) {\n throw new HttpError(403, 'reauth_required', 'confirm your password or a code first (customer.reauth)')\n }\n }\n\n route('GET', '/customer/sessions', 'customer:read', ({ headers }) => {\n const { c, token } = sessionOf(headers)\n const nodes = [...state.sessions.entries()]\n .filter(([, id]) => id === c.id)\n .map(([t]) => ({ t, info: state.sessionInfo.get(t)! }))\n .sort((a, b) => b.info.last_used_at.localeCompare(a.info.last_used_at))\n .map(({ t, info }) => ({\n id: info.id,\n current: t === token,\n device_label: 'Mock browser · Test',\n login_method: info.login_method,\n last_used_at: info.last_used_at,\n created_at: info.created_at,\n }))\n return { body: { nodes }, cache: 'private' }\n })\n route('DELETE', '/customer/sessions/:id', 'customer:write', ({ headers, params }) => {\n const { c, token } = sessionOf(headers)\n const mine = [...state.sessions.entries()].filter(([, id]) => id === c.id).map(([t]) => t)\n if (params[0] === 'others') {\n for (const t of mine) if (t !== token) state.sessions.delete(t)\n return { status: 204 }\n }\n const entry = [...state.sessionInfo.entries()].find(([, i]) => i.id === params[0])\n // A session of someone else and one that never existed are the same 404; a closed one of mine is fine to close again.\n if (!entry || entry[1].customer_id !== c.id) throw new HttpError(404, 'not_found', 'Session not found', 'id')\n state.sessions.delete(entry[0])\n return { status: 204 }\n })\n route('POST', '/customer/reauth', 'customer:write', ({ headers, body }) => {\n const { c, info } = sessionOf(headers)\n const hasPassword = typeof body.password === 'string' && body.password !== ''\n const hasCode = typeof body.otp_code === 'string' && body.otp_code !== ''\n if (hasPassword === hasCode) throw new HttpError(400, 'validation', 'send either password or otp_code', 'password')\n if ((state.reauthFailures.get(c.id) ?? 0) >= 5) throw new HttpError(429, 'rate_limited', 'Too many attempts, try again later')\n const field = hasPassword ? 'password' : 'otp_code'\n const ok = hasPassword\n ? c.email !== null && state.passwords.get(c.email) === body.password\n : [c.email && `email:${c.email}`, c.phone && `phone:${c.phone}`].some((id) => !!id && state.otps.get(id) === body.otp_code)\n if (!ok) {\n state.reauthFailures.set(c.id, (state.reauthFailures.get(c.id) ?? 0) + 1)\n throw new HttpError(400, 'validation', 'could not verify; check the credential and try again', field)\n }\n state.reauthFailures.delete(c.id)\n info.reauth_at = Date.now()\n return { body: { reauth_at: new Date(info.reauth_at).toISOString(), valid_for_seconds: REAUTH_WINDOW_MS / 1000 }, cache: 'private' }\n })\n // E-mail of the account (contract 1.15). The mock's code is `otpCode`, like the sign-in one.\n const emailCodeKey = (kind: 'verify' | 'change', customerId: string, email: string) => `${kind}_email:${customerId}:${email}`\n route('POST', '/customer/email/verification', 'customer:write', ({ headers }) => {\n const { c } = sessionOf(headers)\n if (!c.email) throw new HttpError(422, 'invalid_state', 'The account has no email', 'email')\n if (c.email_verified !== false) throw new HttpError(422, 'invalid_state', 'The email is already verified', 'email')\n state.otps.set(emailCodeKey('verify', c.id, c.email), otpCode)\n return { status: 204 }\n })\n route('POST', '/customer/email/verification/confirm', 'customer:write', ({ headers, body }) => {\n const { c } = sessionOf(headers)\n if (!c.email) throw new HttpError(422, 'invalid_state', 'The account has no email', 'email')\n if (c.email_verified !== false) throw new HttpError(422, 'invalid_state', 'The email is already verified', 'email')\n const key = emailCodeKey('verify', c.id, c.email)\n if (typeof body.code !== 'string' || state.otps.get(key) !== body.code) throw new HttpError(400, 'validation', 'The code is invalid or expired; request a new one', 'code')\n state.otps.delete(key)\n c.email_verified = true\n return { body: c, cache: 'private' }\n })\n route('POST', '/customer/email/change', 'customer:write', ({ headers, body }) => {\n const { c, info } = sessionOf(headers)\n requireRecentReauth(info)\n const email = emailOf(body)\n if (email === c.email) throw new HttpError(400, 'validation', 'This is already the email of the account', 'email')\n // Same answer whether or not the address has an account; if it has, no code exists for it.\n const taken = state.customers.some((x) => x.email === email) || state.passwords.has(email)\n if (!taken) state.otps.set(emailCodeKey('change', c.id, email), otpCode)\n return { status: 202, body: { status: 'verification_required' }, cache: 'private' }\n })\n route('POST', '/customer/email/change/confirm', 'customer:write', ({ headers, body }) => {\n const { c, token } = sessionOf(headers)\n const email = emailOf(body)\n const key = emailCodeKey('change', c.id, email)\n if (typeof body.code !== 'string' || state.otps.get(key) !== body.code) throw new HttpError(400, 'validation', 'The code is invalid or expired; request a new one', 'code')\n state.otps.delete(key)\n if (c.email && state.passwords.has(c.email)) {\n state.passwords.set(email, state.passwords.get(c.email)!)\n state.passwords.delete(c.email)\n }\n c.email = email\n c.email_verified = true\n for (const [t, id] of [...state.sessions.entries()]) if (id === c.id && t !== token) state.sessions.delete(t)\n return { body: c, cache: 'private' }\n })\n route('POST', '/customer/data-export', 'customer:write', ({ headers }) => {\n const { c, info } = sessionOf(headers)\n requireRecentReauth(info)\n if ((state.exportsServed.get(c.id) ?? 0) >= 3) throw new HttpError(429, 'rate_limited', 'Three exports a day; try again tomorrow')\n state.exportsServed.set(c.id, (state.exportsServed.get(c.id) ?? 0) + 1)\n const doc = {\n format: 'storefront-customer-data/1',\n exported_at: now(),\n account: { id: c.id, email: c.email, phone: c.phone, first_name: c.first_name, last_name: c.last_name, locale: c.locale ?? null, created_at: c.created_at },\n preferences: c.preferences ?? { notifications: {} },\n addresses: state.addresses.get(c.id) ?? [],\n fiscal_profiles: state.fiscalProfiles.get(c.id) ?? [],\n orders: state.orders.filter((o) => o.customer_id === c.id).map((o) => ({ id: o.id, number: o.number, created_at: o.created_at, status: o.status, total: o.total })),\n }\n return {\n body: {\n filename: `account-data-${now().slice(0, 10)}.json`,\n content_type: 'application/json',\n content_base64: btoa(unescape(encodeURIComponent(JSON.stringify(doc, null, 2)))),\n },\n cache: 'private',\n }\n })\n route('DELETE', '/customer', 'customer:write', ({ headers, body }) => {\n const token = headers.get('x-customer-token')\n if (token && state.deletedTokens.has(token)) return { status: 204 }\n const { c, info } = sessionOf(headers)\n requireRecentReauth(info)\n if (typeof body.confirm !== 'string' || !body.confirm.trim() || body.confirm.length > 100) {\n throw new HttpError(400, 'validation', 'confirm is required: the text the buyer typed', 'confirm')\n }\n const closed = new Set(['fulfilled', 'delivered', 'cancelled'])\n if (state.orders.some((o) => o.customer_id === c.id && !closed.has(o.status))) {\n throw new HttpError(409, 'conflict', 'you have an order in progress; you can delete the account once it is delivered', 'orders')\n }\n if (c.id === 'cus_1' && state.pendingPayments.some((p) => p.status === 'pending_payment')) {\n throw new HttpError(409, 'conflict', 'you have a payment waiting to be completed', 'pending_payments')\n }\n // Personal data goes; orders stay (they keep the customer id) and a new sign-up starts from nothing.\n for (const [t, id] of [...state.sessions.entries()]) {\n if (id === c.id) {\n state.sessions.delete(t)\n state.deletedTokens.add(t)\n }\n }\n if (c.email) state.passwords.delete(c.email)\n state.addresses.delete(c.id)\n state.fiscalProfiles.delete(c.id)\n state.customers = state.customers.filter((x) => x.id !== c.id)\n return { status: 204 }\n })\n\n /**\n * The order as the API serves it. The list is a summary (`shipments_summary`); the detail carries the shipments, invoices,\n * payments, refunds and the address. A sandbox shipment loses its guide, as the real server does in production.\n */\n const orderView = ({ customer_id: _c, ...o }: MockState['orders'][number], detail: boolean): Order => {\n const order: Order = { ...o, invoice: orderInvoice(o as MockState['orders'][number]) }\n if (order.shipments) order.shipments = order.shipments.map((s) => (isTestShipment(s) ? { ...s, tracking_number: null, tracking_url: null } : { ...s, events: sortTrackingEvents(s.events) }))\n order.progress = orderProgress(order)\n order.next_action = nextAction(order)\n const live = orderShipments(order).filter((s) => !isTestShipment(s))\n if (order.shipments?.length) {\n order.shipments_summary = { count: order.shipments.length, status: shipmentsStatus(order) ?? 'pending', carrier: live[0]?.carrier ?? null, ...(live[0]?.tracking_url ? { tracking_url: live[0].tracking_url } : {}) }\n }\n if (!detail) {\n delete order.shipments\n delete order.invoices\n delete order.payments\n delete order.refunds\n delete order.shipping_address\n }\n return order\n }\n /**\n * The account lists (contract 1.19): keyset cursor on (created_at, id), newest first, `first` 1–50 (10 by default),\n * `after` / `before`, filters. The cursor is opaque and stable while orders are added.\n */\n const accountPage = <S, N>(rows: { order: S; key: { t: string; id: string } }[], search: URLSearchParams, view: (o: S) => N, keep: ((o: S) => boolean) | null, total: ((n: number) => number) | null) => {\n const asked = search.has('first') ? Number(search.get('first')) : 10\n if (!Number.isInteger(asked) || asked < 1 || asked > 100) throw new HttpError(400, 'validation', '`first` must be an integer between 1 and 100 (a page has at most 50)', 'first')\n const first = Math.min(asked, 50)\n const after = search.get('after')\n const before = search.get('before')\n if (after && before) throw new HttpError(400, 'validation', 'use after or before, not both', 'before')\n const parse = (raw: string, field: string) => {\n let parts: string[] = []\n try {\n parts = atob(raw.replace(/-/g, '+').replace(/_/g, '/')).split('|')\n } catch {\n /* falls through */\n }\n if (parts.length !== 3 || parts[0] !== 'k1' || !parts[1] || !parts[2]) throw new HttpError(400, 'validation', `${field} is not a valid cursor`, field)\n return { t: parts[1], id: parts[2] }\n }\n const enc = (k: { t: string; id: string }) => btoa(`k1|${k.t}|${k.id}`).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n const newer = (a: { t: string; id: string }, b: { t: string; id: string }) => (a.t === b.t ? a.id > b.id : a.t > b.t)\n const sorted = rows.slice().sort((a, b) => (newer(a.key, b.key) ? -1 : newer(b.key, a.key) ? 1 : 0))\n const kept = keep ? sorted.filter((r) => keep(r.order)).map((r) => ({ r })) : sorted.map((r) => ({ r }))\n let slice: typeof kept\n let more: boolean\n if (before) {\n const c = parse(before, 'before')\n const prior = kept.filter((x) => newer(x.r.key, c))\n slice = prior.slice(Math.max(0, prior.length - first))\n more = prior.length > first\n } else {\n const c = after ? parse(after, 'after') : null\n const rest = c ? kept.filter((x) => newer(c, x.r.key)) : kept\n slice = rest.slice(0, first)\n more = rest.length > first\n }\n const nodes = slice.map((x) => view(x.r.order))\n const startKey = slice[0]?.r.key\n const endKey = slice[slice.length - 1]?.r.key\n const page_info = before\n ? { has_next_page: true, has_previous_page: more, start_cursor: startKey ? enc(startKey) : null, end_cursor: endKey ? enc(endKey) : null }\n : { has_next_page: more, has_previous_page: !!after, start_cursor: startKey ? enc(startKey) : null, end_cursor: endKey ? enc(endKey) : null }\n return { nodes, page_info, ...(total ? { total_count: total(kept.length) } : {}) }\n }\n const dayBounds = (search: URLSearchParams) => {\n const bound = (k: string, end: boolean) => {\n const v = search.get(k)\n if (!v) return null\n const day = /^\\d{4}-\\d{2}-\\d{2}$/.test(v)\n const t = Date.parse(day ? `${v}T00:00:00.000Z` : v)\n if (Number.isNaN(t)) throw new HttpError(400, 'validation', `${k} must be a date (YYYY-MM-DD) or an RFC 3339 time`, k)\n return day && end ? t + 86400_000 : t\n }\n return { from: bound('from', false), to: bound('to', true) }\n }\n type MockOrder = MockState['orders'][number]\n const ownRows = (headers: Headers, search: URLSearchParams) => {\n const c = requireCustomer(headers)\n const { from, to } = dayBounds(search)\n const q = (search.get('q') ?? '').trim().replace(/^#/, '').toLowerCase()\n return state.orders\n .filter((o) => o.customer_id === c.id)\n .filter((o) => (from === null || Date.parse(o.created_at) >= from) && (to === null || Date.parse(o.created_at) < to))\n .filter((o) => !q || o.number.toLowerCase() === q)\n .map((o) => ({ order: o as MockOrder, key: { t: o.created_at, id: o.id } }))\n }\n const hasInvoice = (o: MockOrder) => (o.invoices ?? []).length > 0 || ['issuing', 'queued', 'requested', 'issued', 'needs_data', 'needs_review'].includes(orderInvoice(o).stage ?? '')\n route('GET', '/customer/orders', 'orders:read', ({ headers, search }) => {\n const status = search.get('status')\n const delivery = search.get('delivery_method')\n const wantInvoice = search.get('has_invoice')\n if (delivery && delivery !== 'shipping' && delivery !== 'pickup') throw new HttpError(400, 'validation', 'delivery_method must be pickup or shipping', 'delivery_method')\n if (wantInvoice && wantInvoice !== 'true' && wantInvoice !== 'false') throw new HttpError(400, 'validation', 'has_invoice must be true or false', 'has_invoice')\n const rows = ownRows(headers, search)\n const filtered = !!(status || delivery || wantInvoice || search.get('q'))\n const body = accountPage(\n rows,\n search,\n (o) => orderView(o, false),\n filtered\n ? (o) => {\n const view = orderView(o, false)\n if (status && view.status !== status && view.progress?.stage !== status) return false\n if (delivery && o.delivery_method !== delivery) return false\n if (wantInvoice && hasInvoice(o) !== (wantInvoice === 'true')) return false\n return true\n }\n : null,\n filtered ? null : (n) => n,\n )\n return { body, cache: 'private' }\n })\n route('GET', '/customer/invoices', 'orders:read', ({ headers, search }) => {\n const status = search.get('status')\n return {\n body: accountPage(\n ownRows(headers, search),\n search,\n (o) => ({ order: { id: o.id, number: o.number, created_at: o.created_at }, invoices: (o.invoices ?? []).filter((d) => !status || d.status === status) }),\n (o) => (o.invoices ?? []).some((d) => !status || d.status === status),\n null,\n ),\n cache: 'private',\n }\n })\n route('GET', '/customer/shipments', 'orders:read', ({ headers, search }) => {\n const status = search.get('status')\n return {\n body: accountPage(\n ownRows(headers, search),\n search,\n (o) => {\n const v = orderView(o, true)\n const shipments = (v.shipments ?? []).map((s) => ({ ...s, events: [], map: null }))\n return { order: { id: o.id, number: o.number, created_at: o.created_at }, stage: v.progress?.stage ?? o.status, service: v.shipping_service ?? null, shipments }\n },\n (o) => {\n if (o.delivery_method === 'pickup' || ['cancelled', 'refunded', 'pending_payment'].includes(o.status)) return false\n const v = orderView(o, true)\n const shipments = v.shipments ?? []\n if (!v.shipping_service && shipments.length === 0) return false\n return !status || shipments.some((s) => s.status === status)\n },\n null,\n ),\n cache: 'private',\n }\n })\n const findOrder = (headers: Headers, id: string) => {\n const c = requireCustomer(headers)\n return requireNode(state.orders.find((o) => o.id === id && o.customer_id === c.id), `Order ${id}`, 'id')\n }\n route('GET', '/customer/orders/:id', 'orders:read', ({ headers, params }) => ({ body: orderView(findOrder(headers, params[0]!), true), cache: 'private' }))\n route('POST', '/customer/orders/:id/returns', 'customer:write', ({ headers, params, body }) => {\n const order = findOrder(headers, params[0]!)\n if (!Array.isArray(body.lines) || body.lines.length === 0) throw new HttpError(400, 'validation', 'lines are required', 'lines')\n return { status: 201, body: { id: nextId('ret'), order_id: order.id, status: 'requested' }, cache: 'private' }\n })\n route('POST', '/customer/orders/:id/invoice', 'customer:write', ({ headers, params, body }) => {\n const order = findOrder(headers, params[0]!)\n const existing = state.invoices.get(order.id)\n if (existing && existing.stage !== 'awaiting_payment') {\n return { status: existing.stage === 'issued' ? 200 : 202, body: { status: existing.stage === 'issued' ? 'issued' : 'requested', url: null, stage: existing.stage, invoice: orderInvoice(order) }, cache: 'private' }\n }\n const request = parseInvoice({ ...body, requested: true }, 'invoice') as InvoiceRequest\n if (order.status === 'pending_payment') throw new HttpError(409, 'awaiting_payment', 'The order is not paid yet')\n state.invoices.set(order.id, { stage: 'queued', request })\n return { status: 202, body: { status: 'requested', url: null, stage: 'queued', invoice: orderInvoice(order) }, cache: 'private' }\n })\n route('GET', '/customer/pending-payments', 'orders:read', ({ headers, search }) => {\n const c = requireCustomer(headers)\n const nodes = c.id === 'cus_1' ? state.pendingPayments : []\n return { body: paginate(nodes, search, 20), cache: 'private' }\n })\n route('GET', '/customer/orders/:id/invoices/:invoice_id/:kind', 'orders:read', ({ headers, params }) => {\n const order = findOrder(headers, params[0]!)\n const doc = order.invoices?.find((d: InvoiceDoc) => d.id === params[1])\n if (!doc || (params[2] !== 'pdf' && params[2] !== 'xml')) throw new HttpError(404, 'not_found', 'Invoice file not found', 'invoice_id')\n const pdf = params[2] === 'pdf'\n const text = pdf ? `%PDF-1.4\\n% mock invoice ${doc.id}\\n%%EOF\\n` : `<?xml version=\"1.0\"?><cfdi:Comprobante mock=\"true\" id=\"${doc.id}\"/>`\n const file: InvoiceFile = {\n filename: `${doc.kind === 'credit_note' ? 'nota-de-credito' : 'factura'}-${doc.id}.${params[2]}`,\n content_type: pdf ? 'application/pdf' : 'application/xml',\n content_base64: btoa(text),\n }\n return { body: file, headers: { 'Cache-Control': 'no-store' } }\n })\n // Saved fiscal profiles (contract 1.9): up to MAX_FISCAL_PROFILES per buyer, one default, physical delete.\n const MAX_FISCAL_PROFILES = 10\n const profilesOf = (c: Customer) => state.fiscalProfiles.get(c.id) ?? []\n /** What the API serves: the evidence keeps no file hash. */\n const publicProfile = (p: FiscalProfile): FiscalProfile => {\n if (!p.document) return p\n const { sha256: _sha, ...document } = p.document\n return { ...p, document }\n }\n const personTypeOf = (taxId: string): string | null => {\n for (const [type, pattern] of Object.entries(region?.fiscal_id?.person_patterns ?? {})) if (new RegExp(pattern).test(taxId)) return type\n return null\n }\n /** `Customer.fiscal` mirrors the default profile, as the real server does. */\n const mirrorDefaultProfile = (c: Customer) => {\n const d = profilesOf(c).find((p) => p.is_default)\n c.fiscal = d\n ? { country_code: d.country_code, tax_id: d.tax_id, legal_name: d.legal_name, tax_regime: d.tax_regime, postal_code: d.postal_code, invoice_use: d.invoice_use ?? null, document: d.document ?? null, verification: d.verification ?? null }\n : null\n }\n const profileFields = (body: Record<string, unknown>, base?: FiscalProfile): FiscalIdentity => {\n const merged: Record<string, unknown> = {\n ...(base ? { tax_id: base.tax_id, legal_name: base.legal_name, tax_regime: base.tax_regime, postal_code: base.postal_code, country_code: base.country_code, ...(base.invoice_use ? { use: base.invoice_use } : {}) } : {}),\n ...body,\n requested: true,\n }\n delete merged.label\n delete merged.is_default\n delete merged.verification\n const fiscal = parseInvoice(merged, 'fiscal') as InvoiceRequest\n return {\n country_code: String(fiscal.country_code ?? region?.country_code ?? ''),\n tax_id: String(fiscal.tax_id ?? fiscal.rfc).toUpperCase(),\n legal_name: String(fiscal.legal_name ?? fiscal.razon_social),\n tax_regime: String(fiscal.tax_regime ?? fiscal.regimen),\n postal_code: String(fiscal.postal_code ?? fiscal.cp),\n invoice_use: String(fiscal.use ?? fiscal.uso_cfdi ?? fiscal.invoice_use ?? '') || null,\n document: fiscal.document ?? base?.document ?? null,\n }\n }\n const ownProfile = (c: Customer, id: string | undefined) => {\n const p = profilesOf(c).find((x) => x.id === id)\n if (!p) throw new HttpError(404, 'not_found', 'Fiscal profile not found', 'id')\n return p\n }\n const makeDefault = (c: Customer, id: string) => state.fiscalProfiles.set(c.id, profilesOf(c).map((p) => ({ ...p, is_default: p.id === id })))\n route('GET', '/customer/fiscal-profiles', 'customer:read', ({ headers }) => {\n const c = requireCustomer(headers)\n const nodes = [...profilesOf(c)].sort((a, b) => Number(b.is_default) - Number(a.is_default) || (b.last_used_at ?? '').localeCompare(a.last_used_at ?? ''))\n return { body: { nodes: nodes.map(publicProfile) }, cache: 'private' }\n })\n route('POST', '/customer/fiscal-profiles', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const list = profilesOf(c)\n const fid = profileFields(body)\n if (list.length >= MAX_FISCAL_PROFILES) throw new HttpError(409, 'conflict', 'Fiscal profile limit reached; delete one first')\n if (list.some((p) => p.country_code === fid.country_code && p.tax_id === fid.tax_id)) throw new HttpError(409, 'conflict', 'A profile with this tax id already exists', 'tax_id')\n const at = now()\n const label = typeof body.label === 'string' && body.label.trim() ? body.label.trim().slice(0, 40) : fid.legal_name.slice(0, 40)\n const profile: FiscalProfile = { ...fid, id: nextId('fisc'), label, person_type: personTypeOf(fid.tax_id), is_default: false, last_used_at: null, created_at: at, updated_at: at, verification: { status: 'unverified', checked_at: null } }\n state.fiscalProfiles.set(c.id, [...list, profile])\n if (list.length === 0 || body.is_default === true) makeDefault(c, profile.id)\n mirrorDefaultProfile(c)\n return { status: 201, body: publicProfile(profilesOf(c).find((p) => p.id === profile.id)!), cache: 'private' }\n })\n route('PATCH', '/customer/fiscal-profiles/:id', 'customer:write', ({ headers, params, body }) => {\n const c = requireCustomer(headers)\n const cur = ownProfile(c, params[0])\n if ('verification' in body) throw new HttpError(400, 'validation', 'verification is set by the server', 'verification')\n if (body.is_default === false && cur.is_default) throw new HttpError(400, 'validation', 'Make another profile the default instead', 'is_default')\n const fid = profileFields(body as FiscalProfileInput as Record<string, unknown>, cur)\n if (profilesOf(c).some((p) => p.id !== cur.id && p.country_code === fid.country_code && p.tax_id === fid.tax_id)) throw new HttpError(409, 'conflict', 'A profile with this tax id already exists', 'tax_id')\n const identityChanged = fid.tax_id !== cur.tax_id || fid.country_code !== cur.country_code\n const updated: FiscalProfile = {\n ...cur,\n ...fid,\n document: 'document' in body ? fid.document : identityChanged ? null : cur.document,\n label: typeof body.label === 'string' && body.label.trim() ? body.label.trim().slice(0, 40) : cur.label,\n person_type: personTypeOf(fid.tax_id),\n verification: identityChanged ? { status: 'unverified', checked_at: null } : cur.verification,\n updated_at: now(),\n }\n state.fiscalProfiles.set(c.id, profilesOf(c).map((p) => (p.id === cur.id ? updated : p)))\n if (body.is_default === true) makeDefault(c, cur.id)\n mirrorDefaultProfile(c)\n return { body: publicProfile(profilesOf(c).find((p) => p.id === cur.id)!), cache: 'private' }\n })\n route('DELETE', '/customer/fiscal-profiles/:id', 'customer:write', ({ headers, params }) => {\n const c = requireCustomer(headers)\n const cur = ownProfile(c, params[0])\n const rest = profilesOf(c).filter((p) => p.id !== cur.id)\n state.fiscalProfiles.set(c.id, rest)\n if (cur.is_default && rest[0]) makeDefault(c, rest[0].id)\n mirrorDefaultProfile(c)\n return { status: 204 }\n })\n // Buyer items, «My items» (contract 1.9): kinds are data the store declares; the server validates against them,\n // builds `label` / `fit_key` and keeps private fields apart (returned only masked). Physical delete.\n const MAX_SUBJECTS = 50\n const subjectsOf = (c: Customer) => state.subjects.get(c.id) ?? []\n const kinds = () => options.subjectKinds ?? []\n const publicSubject = (s: Subject & { private: Record<string, string> }): Subject => {\n const { private: priv, ...rest } = s\n return { ...rest, attributes: { ...s.attributes, ...Object.fromEntries(Object.keys(priv).map((k) => [k, PRIVATE_MASK + (priv[k]!.length > 3 ? priv[k]!.slice(-2) : '')])) } }\n }\n const ownSubject = (c: Customer, id: string | undefined) => {\n const s = subjectsOf(c).find((x) => x.id === id)\n if (!s) throw new HttpError(404, 'not_found', 'Item not found', 'id')\n return s\n }\n const setDefaultSubject = (c: Customer, id: string) => {\n const kind = ownSubject(c, id).kind\n state.subjects.set(c.id, subjectsOf(c).map((s) => (s.kind !== kind ? s : s.id === id ? { ...s, is_default: true, last_used_at: now() } : { ...s, is_default: false })))\n }\n const resolveOrThrow = (kind: SubjectKind, values: SubjectValues) => {\n const r = resolveSubject(kind, values)\n if (!r.ok) {\n const [field, code] = Object.entries(r.problems)[0]!\n throw new HttpError(422, 'validation', `${field}: ${code}`, field === '_' ? 'attributes' : `attributes.${field}`)\n }\n return r.subject\n }\n const cleanNickname = (v: unknown): string | null => {\n if (v === undefined || v === null || v === '') return null\n if (typeof v !== 'string' || [...v.trim()].length > 40) throw new HttpError(422, 'validation', 'nickname is too long (max 40)', 'nickname')\n return v.trim().split(/\\s+/).join(' ')\n }\n route('GET', '/subject-kinds', 'content:read', () => ({ body: { nodes: kinds() }, cache: 'public' }))\n route('GET', '/customer/subjects', 'customer:read', ({ headers, search }) => {\n const c = requireCustomer(headers)\n const kind = search.get('kind')\n const nodes = subjectsOf(c)\n .filter((s) => !kind || s.kind === kind)\n .sort((a, b) => a.kind.localeCompare(b.kind) || Number(b.is_default) - Number(a.is_default) || (b.last_used_at ?? '').localeCompare(a.last_used_at ?? ''))\n return { body: { nodes: nodes.map(publicSubject) }, cache: 'private' }\n })\n route('POST', '/customer/subjects', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const kind = kinds().find((k) => k.key === body.kind)\n if (!kind) throw new HttpError(422, 'validation', 'This store has no such kind', 'kind')\n const attrs = body.attributes\n if (!attrs || typeof attrs !== 'object' || Array.isArray(attrs)) throw new HttpError(422, 'validation', 'attributes must be an object', 'attributes')\n const r = resolveOrThrow(kind, attrs as SubjectValues)\n const list = subjectsOf(c)\n if (list.length >= MAX_SUBJECTS || list.filter((s) => s.kind === kind.key).length >= kind.max_per_account) throw new HttpError(409, 'conflict', 'Limit reached; delete one first', 'kind')\n if (r.fit_key && list.some((s) => s.kind === kind.key && s.fit_key === r.fit_key)) throw new HttpError(409, 'conflict', 'You already saved this item', 'attributes')\n const subject = { id: nextId('subj'), kind: kind.key, label: r.label, nickname: cleanNickname(body.nickname), fit_key: r.fit_key, attributes: r.attributes, private: r.private, is_default: false, last_used_at: null, created_at: now() }\n state.subjects.set(c.id, [...list, subject])\n if (!list.some((s) => s.kind === kind.key) || body.is_default === true) setDefaultSubject(c, subject.id)\n return { status: 201, body: publicSubject(ownSubject(c, subject.id)), cache: 'private' }\n })\n route('PATCH', '/customer/subjects/:id', 'customer:write', ({ headers, params, body }) => {\n const c = requireCustomer(headers)\n const cur = ownSubject(c, params[0])\n if (body.is_default === false && cur.is_default) throw new HttpError(422, 'validation', 'Make another item the default instead', 'is_default')\n let next = { ...cur }\n if ('nickname' in body) next.nickname = cleanNickname(body.nickname)\n if ('attributes' in body) {\n const kind = kinds().find((k) => k.key === cur.kind)\n if (!kind) throw new HttpError(422, 'validation', 'This store no longer offers this kind', 'kind')\n const sent = (body.attributes ?? {}) as Record<string, unknown>\n const merged: Record<string, unknown> = { ...cur.attributes, ...cur.private }\n for (const [k, v] of Object.entries(sent)) {\n if (k in cur.private && isMasked(v)) continue // the mask the client was shown: keep the stored value\n if (v === null) delete merged[k]\n else merged[k] = v\n }\n const r = resolveOrThrow(kind, merged as SubjectValues)\n if (r.fit_key && subjectsOf(c).some((s) => s.id !== cur.id && s.kind === cur.kind && s.fit_key === r.fit_key)) throw new HttpError(409, 'conflict', 'You already saved this item', 'attributes')\n next = { ...next, label: r.label, fit_key: r.fit_key, attributes: r.attributes, private: r.private }\n }\n state.subjects.set(c.id, subjectsOf(c).map((s) => (s.id === cur.id ? next : s)))\n if (body.is_default === true && !cur.is_default) setDefaultSubject(c, cur.id)\n return { body: publicSubject(ownSubject(c, cur.id)), cache: 'private' }\n })\n route('DELETE', '/customer/subjects/:id', 'customer:write', ({ headers, params }) => {\n const c = requireCustomer(headers)\n const cur = ownSubject(c, params[0])\n state.subjects.set(c.id, subjectsOf(c).filter((s) => s.id !== cur.id))\n const heir = subjectsOf(c).filter((s) => s.kind === cur.kind).sort((a, b) => (b.last_used_at ?? '').localeCompare(a.last_used_at ?? ''))[0]\n if (cur.is_default && heir) setDefaultSubject(c, heir.id)\n return { status: 204 }\n })\n route('GET', '/customer/addresses', 'customer:read', ({ headers }) => {\n const c = requireCustomer(headers)\n return { body: { nodes: state.addresses.get(c.id) ?? [] }, cache: 'private' }\n })\n route('POST', '/customer/addresses', 'customer:write', ({ headers, body }) => {\n const c = requireCustomer(headers)\n const address = { ...(validateAddress(body) as Address), id: nextId('addr') }\n state.addresses.set(c.id, [...(state.addresses.get(c.id) ?? []), address])\n if (!c.default_address_id) c.default_address_id = address.id\n return { status: 201, body: address, cache: 'private' }\n })\n route('PATCH', '/customer/addresses/:id', 'customer:write', ({ headers, params, body }) => {\n const c = requireCustomer(headers)\n const list = state.addresses.get(c.id) ?? []\n const idx = list.findIndex((a) => a.id === params[0])\n if (idx < 0) throw new HttpError(404, 'not_found', 'Address not found', 'id')\n const updated = { ...list[idx]!, ...validateAddress(body, true), id: list[idx]!.id }\n list[idx] = updated\n return { body: updated, cache: 'private' }\n })\n route('DELETE', '/customer/addresses/:id', 'customer:write', ({ headers, params }) => {\n const c = requireCustomer(headers)\n const list = state.addresses.get(c.id) ?? []\n if (!list.some((a) => a.id === params[0])) throw new HttpError(404, 'not_found', 'Address not found', 'id')\n state.addresses.set(c.id, list.filter((a) => a.id !== params[0]))\n if (c.default_address_id === params[0]) c.default_address_id = null\n return { status: 204 }\n })\n\n // Content\n const previewCache = (search: URLSearchParams): 'public' | 'private' => (search.has('preview') ? 'private' : 'public')\n route('GET', '/content/theme', 'content:read', () => ({ body: state.theme, cache: 'public' }))\n route('GET', '/content/pages/:handle', 'content:read', ({ params, search }) => {\n const page = requireNode(state.pages.find((p) => p.handle === params[0]), `Page ${params[0]}`)\n const body = search.has('preview') ? { ...page, title: `${page.title} (borrador)` } : page\n return { body, cache: previewCache(search) }\n })\n route('GET', '/content/menus/:handle', 'content:read', ({ params }) => ({\n body: requireNode(state.menus.find((m) => m.handle === params[0]), `Menu ${params[0]}`),\n cache: 'public',\n }))\n route('GET', '/content/articles', 'content:read', ({ search }) => {\n let items = state.articles.slice().sort((a, b) => b.published_at.localeCompare(a.published_at))\n const tag = search.get('tag')\n if (tag) items = items.filter((a) => a.tags.includes(tag))\n const q = search.get('q')?.toLowerCase()\n if (q) items = items.filter((a) => `${a.title} ${a.excerpt ?? ''}`.toLowerCase().includes(q))\n return { body: paginate(items, search, 10, 50), cache: 'public' }\n })\n route('GET', '/content/articles/:handle', 'content:read', ({ params, search }) => ({\n body: requireNode(state.articles.find((a) => a.handle === params[0]), `Article ${params[0]}`),\n cache: previewCache(search),\n }))\n\n // -------------------------------------------------------------------------\n // fetch\n // -------------------------------------------------------------------------\n\n function scopesFor(token: string | null): Set<string> | null {\n if (!token) return null\n let all: string[]\n if (token.startsWith('pk_')) all = ['catalog:read', 'content:read', 'cart:write']\n else if (token.startsWith('sk_')) all = ['catalog:read', 'content:read', 'cart:write', 'checkout:write', 'customer:read', 'customer:write', 'orders:read']\n else return null\n return new Set(all.filter((sc) => !missingScopes.includes(sc)))\n }\n\n function json(status: number, body: unknown, headers: Record<string, string> = {}): Response {\n return new Response(status === 204 || body === undefined ? null : JSON.stringify(body), {\n status,\n headers: { 'Content-Type': 'application/json; charset=utf-8', ...headers },\n })\n }\n\n function errorResponse(err: HttpError): Response {\n return json(\n err.status,\n { error: { code: err.code, message: err.message, ...(err.field ? { field: err.field } : {}), ...(err.details !== undefined ? { details: err.details } : {}), ...(err.requiredScopes ? { required_scopes: err.requiredScopes } : {}) } },\n { 'Cache-Control': PRIVATE_CACHE },\n )\n }\n\n async function handle(request: Request): Promise<Response> {\n const url = new URL(request.url)\n if (/\\/_token\\/?$/.test(url.pathname)) {\n const tok = request.headers.get('authorization')?.match(/^Bearer\\s+(.+)$/i)?.[1] ?? null\n const granted = scopesFor(tok)\n if (!tok || !granted) return errorResponse(new HttpError(401, 'unauthorized', 'Missing or invalid storefront token'))\n return json(200, { success: true, data: { kind: tok.startsWith('pk_') ? 'publishable' : 'secret', environment: 'sandbox', scopes: [...granted], missing_scopes: missingScopes, connection_id: 'conn_mock', expires_at: null } }, { 'Cache-Control': PRIVATE_CACHE })\n }\n const idx = url.pathname.indexOf('/storefront/')\n if (idx < 0) return errorResponse(new HttpError(404, 'not_found', `No route for ${url.pathname}`))\n const path = url.pathname.slice(idx + '/storefront'.length).replace(/\\/+$/, '') || '/'\n const method = request.method.toUpperCase()\n\n const matching = routes.filter((r) => r.pattern.test(path))\n if (matching.length === 0) return errorResponse(new HttpError(404, 'not_found', `No route for ${method} ${path}`))\n const r = matching.find((x) => x.method === method)\n if (!r) return json(405, { error: { code: 'method_not_allowed', message: `${method} not allowed on ${path}` } }, { Allow: matching.map((x) => x.method).join(', ') })\n\n const auth = request.headers.get('authorization')\n const token = auth?.match(/^Bearer\\s+(.+)$/i)?.[1] ?? null\n const scopes = scopesFor(token)\n if (!scopes) return errorResponse(new HttpError(401, 'unauthorized', 'Missing or invalid storefront token'))\n if ((enforceScopes || missingScopes.length > 0) && !scopes.has(r.scope)) {\n return errorResponse(new HttpError(403, 'insufficient_scope', `Token lacks scope ${r.scope}`, undefined, undefined, [r.scope]))\n }\n\n let body: Record<string, unknown> = {}\n if (method !== 'GET') {\n const text = await request.text()\n if (text) {\n try {\n const parsed: unknown = JSON.parse(text)\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) throw new Error('not an object')\n body = parsed as Record<string, unknown>\n } catch {\n return errorResponse(new HttpError(400, 'validation', 'Body must be a JSON object'))\n }\n }\n }\n\n const params = (r.pattern.exec(path) ?? []).slice(1).map((p) => decodeURIComponent(p))\n try {\n const result = await r.handler({ method, params, search: url.searchParams, headers: request.headers, body, scopes })\n const status = result.status ?? 200\n const headers: Record<string, string> = { ...result.headers }\n if (result.cache === 'public') headers['Cache-Control'] = PUBLIC_CACHE\n if (result.cache === 'private') headers['Cache-Control'] = PRIVATE_CACHE\n if (method === 'GET' && result.cache === 'public' && status === 200) {\n const etag = `W/\"${fnv1a(JSON.stringify(result.body))}\"`\n headers.ETag = etag\n if (request.headers.get('if-none-match') === etag) return new Response(null, { status: 304, headers })\n }\n return json(status, result.body, headers)\n } catch (err) {\n if (err instanceof HttpError) return errorResponse(err)\n return json(500, { error: { code: 'server_error', message: err instanceof Error ? err.message : 'Internal error' } })\n }\n }\n\n const mockFetch = async (input: string | URL | Request, init?: RequestInit): Promise<Response> => {\n if (options.latencyMs) await new Promise((r) => setTimeout(r, options.latencyMs))\n const request = input instanceof Request && !init ? input : new Request(input instanceof Request ? input.url : String(input), init)\n if (request.signal?.aborted) throw request.signal.reason ?? new DOMException('Aborted', 'AbortError')\n return handle(request)\n }\n\n return {\n /** Drop-in `fetch` serving `/storefront/*` from memory. */\n fetch: mockFetch,\n /** Live in-memory state (mutable; useful in tests). */\n get state(): Readonly<MockState> {\n return state\n },\n /** Restores the seed data and clears carts, sessions and orders. */\n reset() {\n state = seed()\n syncAvailability(state.products)\n },\n /** OTP code accepted by `/customer/session`. */\n otpCode,\n }\n}\n\nexport type MockStorefront = ReturnType<typeof createMockStorefront>\n"]}
|