@asteby/storefront-react 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +7 -2
  2. package/dist/account-server.cjs +533 -83
  3. package/dist/account-server.cjs.map +1 -1
  4. package/dist/account-server.d.cts +13 -2
  5. package/dist/account-server.d.ts +13 -2
  6. package/dist/account-server.js +23 -6
  7. package/dist/account-server.js.map +1 -1
  8. package/dist/account.cjs +572 -96
  9. package/dist/account.cjs.map +1 -1
  10. package/dist/account.d.cts +82 -45
  11. package/dist/account.d.ts +82 -45
  12. package/dist/account.js +53 -14
  13. package/dist/account.js.map +1 -1
  14. package/dist/checkout.cjs +114 -38
  15. package/dist/checkout.cjs.map +1 -1
  16. package/dist/checkout.d.cts +24 -1
  17. package/dist/checkout.d.ts +24 -1
  18. package/dist/checkout.js +114 -38
  19. package/dist/checkout.js.map +1 -1
  20. package/dist/chunk-BXKV2KWZ.js +291 -0
  21. package/dist/chunk-BXKV2KWZ.js.map +1 -0
  22. package/dist/chunk-LIUEQENV.js +156 -0
  23. package/dist/chunk-LIUEQENV.js.map +1 -0
  24. package/dist/fiscal-server.cjs +27 -2
  25. package/dist/fiscal-server.cjs.map +1 -1
  26. package/dist/fiscal-server.d.cts +10 -1
  27. package/dist/fiscal-server.d.ts +10 -1
  28. package/dist/fiscal-server.js +26 -3
  29. package/dist/fiscal-server.js.map +1 -1
  30. package/dist/voucher-document-FWH4DQ5N.js +72 -0
  31. package/dist/voucher-document-FWH4DQ5N.js.map +1 -0
  32. package/dist/voucher-pdf-LQC333AB.js +213 -0
  33. package/dist/voucher-pdf-LQC333AB.js.map +1 -0
  34. package/package.json +1 -1
  35. package/dist/chunk-TXEYBDFG.js +0 -182
  36. package/dist/chunk-TXEYBDFG.js.map +0 -1
  37. package/dist/voucher-document-SFWJCLTN.js +0 -124
  38. package/dist/voucher-document-SFWJCLTN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/account/voucher.ts","../src/account/voucher-document.ts","../src/account/server.ts","../src/account/settings-server.ts"],"names":["isStorefrontError","text","repairPath","fail","storefront","invoiceFileBytes","safeInvoiceFilename","renderVoucherDocument"],"mappings":"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AAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAA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","file":"account-server.cjs","sourcesContent":["/**\n * Pure pieces of the cash voucher (OXXO, SPEI, deposit): the normalized `VoucherView` of a `PendingPayment` and the\n * Code 128 barcode (the one cashiers' readers scan). No React, no DOM: the same code draws the barcode in the page\n * (`<Barcode>`) and in the printable document (`voucher-document.ts`, loaded only when the buyer prints).\n */\nimport type { Money, PendingPayment } from '@asteby/storefront'\n\nexport type VoucherView = {\n /** `oxxo`, `spei`, ... as the gateway publishes it. */\n method: string | null\n reference: string | null\n barcode: string | null\n clabe: string | null\n expires_at: string | null\n amount: Money | null\n instructions: string | null\n}\n\nconst MAX = 256\n\nfunction text(v: unknown): string | null {\n if (typeof v === 'number' && Number.isFinite(v)) return String(v)\n if (typeof v !== 'string') return null\n const s = v.trim().slice(0, MAX)\n return s || null\n}\n\nfunction moneyOf(v: unknown): Money | null {\n if (!v || typeof v !== 'object') return null\n const m = v as Record<string, unknown>\n const amount = text(m.amount)\n const cur = text(m.currency_code)\n return amount && cur && Number.isFinite(Number(amount)) ? { amount, currency_code: cur.toUpperCase() } : null\n}\n\n/** The voucher of a pending payment; `null` when it has neither reference, barcode nor CLABE (nothing to pay with). */\nexport function voucherOf(p: Pick<PendingPayment, 'payment' | 'total' | 'expires_at'> | null | undefined): VoucherView | null {\n const pay = p?.payment\n if (!pay || typeof pay !== 'object') return null\n const v: VoucherView = {\n method: text(pay.method ?? pay.provider),\n reference: text(pay.reference),\n barcode: text(pay.barcode),\n clabe: text(pay.clabe),\n expires_at: text(pay.expires_at) ?? text(p?.expires_at),\n amount: moneyOf(pay.amount) ?? moneyOf(p?.total),\n instructions: text(pay.instructions),\n }\n return v.reference || v.barcode || v.clabe ? v : null\n}\n\n/** The value the barcode encodes: the gateway's `barcode`, else the reference of an OXXO voucher. */\nexport function barcodeValue(v: Pick<VoucherView, 'barcode' | 'method' | 'reference'>): string | null {\n return v.barcode ?? (v.method?.toLowerCase() === 'oxxo' ? v.reference : null)\n}\n\n// 11-module patterns of symbols 0..105 and the 13-module stop (ISO/IEC 15417).\nconst BARS = [\n '11011001100', '11001101100', '11001100110', '10010011000', '10010001100', '10001001100', '10011001000', '10011000100', '10001100100', '11001001000',\n '11001000100', '11000100100', '10110011100', '10011011100', '10011001110', '10111001100', '10011101100', '10011100110', '11001110010', '11001011100',\n '11001001110', '11011100100', '11001110100', '11101101110', '11101001100', '11100101100', '11100100110', '11101100100', '11100110100', '11100110010',\n '11011011000', '11011000110', '11000110110', '10100011000', '10001011000', '10001000110', '10110001000', '10001101000', '10001100010', '11010001000',\n '11000101000', '11000100010', '10110111000', '10110001110', '10001101110', '10111011000', '10111000110', '10001110110', '11101110110', '11010001110',\n '11000101110', '11011101000', '11011100010', '11011101110', '11101011000', '11101000110', '11100010110', '11101101000', '11101100010', '11100011010',\n '11101111010', '11001000010', '11110001010', '10100110000', '10100001100', '10010110000', '10010000110', '10000101100', '10000100110', '10110010000',\n '10110000100', '10011010000', '10011000010', '10000110100', '10000110010', '11000010010', '11001010000', '11110111010', '11000010100', '10001111010',\n '10100111100', '10010111100', '10010011110', '10111100100', '10011110100', '10011110010', '11110100100', '11110010100', '11110010010', '11011011110',\n '11011110110', '11110110110', '10101111000', '10100011110', '10001011110', '10111101000', '10111100010', '11110101000', '11110100010', '10111011110',\n '10111101110', '11101011110', '11110101110', '11010000100', '11010010000', '11010011100',\n]\nconst STOP = '1100011101011'\n\n/**\n * Modules (`1` bar, `0` space) of the Code 128 of `value`: set C (digit pairs) when it is all digits of even length,\n * set B (printable ASCII) otherwise. `null` when it cannot be encoded.\n */\nexport function code128Modules(value: string): string | null {\n if (!value || value.length > 80) return null\n let codes: number[]\n if (/^\\d+$/.test(value) && value.length % 2 === 0) {\n codes = [105]\n for (let i = 0; i < value.length; i += 2) codes.push(Number(value.slice(i, i + 2)))\n } else {\n codes = [104]\n for (const ch of value) {\n const c = ch.charCodeAt(0)\n if (c < 32 || c > 126) return null\n codes.push(c - 32)\n }\n }\n let sum = codes[0]!\n for (let i = 1; i < codes.length; i++) sum += codes[i]! * i\n codes.push(sum % 103)\n return codes.map((c) => BARS[c]).join('') + STOP\n}\n\nexport type BarcodeGeometry = { width: number; height: number; rects: { x: number; w: number }[] }\n\n/** Bars of the barcode as rectangles (quiet zone of 10 modules each side included in `width`). `null` if not encodable. */\nexport function barcodeGeometry(value: string, opts: { module?: number; height?: number } = {}): BarcodeGeometry | null {\n const bits = code128Modules(value)\n if (!bits) return null\n const mod = opts.module ?? 2\n const quiet = 10\n const rects: { x: number; w: number }[] = []\n for (let i = 0; i < bits.length; ) {\n if (bits[i] === '0') {\n i++\n continue\n }\n let j = i\n while (j < bits.length && bits[j] === '1') j++\n rects.push({ x: (quiet + i) * mod, w: (j - i) * mod })\n i = j\n }\n return { width: (bits.length + quiet * 2) * mod, height: opts.height ?? 70, rects }\n}\n","/**\n * Printable voucher (A4 HTML) that does not depend on any payment gateway: built only from the voucher data OPS keeps.\n * Loaded on demand (the buyer taps print/download) or by `pendingVoucherResponse` on the server; plain text, no React.\n * Everything external passes through `esc` before it enters the HTML.\n */\nimport type { Money } from '@asteby/storefront'\nimport { barcodeGeometry, barcodeValue, type VoucherView } from './voucher.js'\n\nexport function esc(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' })[c] as string)\n}\n\ntype DocText = {\n title: string\n total: string\n reference: string\n clabe: string\n expires: string\n expiresNote: string\n order: string\n barcode: string\n print: string\n footer: string\n stepsCash: string[]\n stepsSpei: string[]\n methods: Record<string, string>\n cash: string\n}\n\nconst ES: DocText = {\n title: 'Ficha de pago',\n total: 'Total a pagar',\n reference: 'Referencia',\n clabe: 'CLABE',\n expires: 'Vence',\n expiresNote: 'Pasada esa fecha la ficha deja de ser válida.',\n order: 'Pedido',\n barcode: 'Código de barras',\n print: 'Imprimir ficha',\n footer: 'Tu pedido se genera cuando se confirma el pago. Esta ficha es de un solo uso; no la compartas.',\n stepsCash: [\n 'Acude a la tienda OXXO (o el comercio indicado) y di que vas a hacer un pago de servicio en efectivo.',\n 'Muestra el código de barras o dicta la referencia y paga el monto exacto.',\n 'Conserva tu comprobante: confirmaremos tu pago automáticamente.',\n ],\n stepsSpei: ['Entra a la banca en línea o app de tu banco.', 'Haz una transferencia SPEI a la CLABE indicada por el monto exacto.', 'Conserva tu comprobante: confirmaremos tu pago automáticamente.'],\n methods: { oxxo: 'OXXO', spei: 'Transferencia SPEI', bank_transfer: 'Transferencia bancaria', bank_deposit: 'Depósito bancario', cash: 'Pago en efectivo' },\n cash: 'Pago en efectivo',\n}\n\nconst EN: DocText = {\n title: 'Payment voucher',\n total: 'Amount to pay',\n reference: 'Reference',\n clabe: 'CLABE',\n expires: 'Expires',\n expiresNote: 'After that date the voucher is no longer valid.',\n order: 'Order',\n barcode: 'Barcode',\n print: 'Print voucher',\n footer: 'Your order is created when the payment is confirmed. This voucher is single-use; do not share it.',\n stepsCash: [\n 'Go to an OXXO store (or the store indicated) and say you want to make a cash service payment.',\n 'Show the barcode or read out the reference and pay the exact amount.',\n 'Keep your receipt: we will confirm your payment automatically.',\n ],\n stepsSpei: ['Open your bank online or app.', 'Make a SPEI transfer to the CLABE below for the exact amount.', 'Keep your receipt: we will confirm your payment automatically.'],\n methods: { oxxo: 'OXXO', spei: 'SPEI transfer', bank_transfer: 'Bank transfer', bank_deposit: 'Bank deposit', cash: 'Cash payment' },\n cash: 'Cash payment',\n}\n\nexport type VoucherDocumentOptions = {\n shopName?: string\n /** Order number, if there is one yet. */\n number?: string | null\n locale?: string\n /** IANA zone the expiry is printed in (default: the runtime's). */\n timeZone?: string\n /** Print button on screen (hidden when printing). */\n printButton?: boolean\n /** Opens the print dialog on load. */\n autoPrint?: boolean\n /** `<script>` nonce when the one serving the voucher sends a CSP with `script-src 'nonce-…'`. */\n nonce?: string\n}\n\nconst CSS = `\n@page { size: A4; margin: 18mm; }\n* { box-sizing: border-box; }\nbody { margin: 0; font: 14px/1.5 system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif; color: #111; background: #fff; }\nmain { max-width: 174mm; margin: 0 auto; padding: 24px 16px; }\nh1 { font-size: 22px; margin: 0; }\n.muted { color: #555; }\n.head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; border-bottom: 3px solid #111; padding-bottom: 12px; }\n.amount { font-size: 28px; font-weight: 700; text-align: right; }\n.box { border: 1px solid #111; padding: 14px 16px; margin-top: 18px; }\n.label { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: #555; }\n.value { font: 700 22px/1.3 ui-monospace, \"SF Mono\", Menlo, Consolas, monospace; word-break: break-all; letter-spacing: .04em; }\n.bar { margin-top: 18px; text-align: center; }\n.bar svg { max-width: 100%; height: auto; }\n.steps { margin: 18px 0 0; padding-left: 20px; }\n.note { margin-top: 18px; font-size: 12px; }\n.pre { white-space: pre-line; }\n.actions { margin-top: 24px; display: flex; gap: 12px; }\n.actions button { font: inherit; padding: 10px 18px; border: 1px solid #111; background: #111; color: #fff; cursor: pointer; }\n@media print { .actions { display: none; } main { padding: 0; } }\n`\n\nfunction formatMoney(m: Money | null, locale: string): string {\n if (!m) return ''\n try {\n return new Intl.NumberFormat(locale, { style: 'currency', currency: m.currency_code }).format(Number(m.amount))\n } catch {\n return `${m.amount} ${m.currency_code}`\n }\n}\n\nfunction formatDate(iso: string | null, locale: string, timeZone?: string): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n try {\n return d.toLocaleString(locale, { dateStyle: 'long', timeStyle: 'short', ...(timeZone ? { timeZone } : {}) })\n } catch {\n return d.toISOString()\n }\n}\n\nfunction barcodeSvg(value: string, label: string): string | null {\n const g = barcodeGeometry(value)\n if (!g) return null\n const rects = g.rects.map((r) => `<rect x=\"${r.x}\" y=\"0\" width=\"${r.w}\" height=\"${g.height}\"/>`).join('')\n return `<svg viewBox=\"0 0 ${g.width} ${g.height}\" width=\"${g.width}\" height=\"${g.height}\" role=\"img\" aria-label=\"${esc(label)} ${esc(value)}\" shape-rendering=\"crispEdges\" fill=\"#000\">${rects}</svg>`\n}\n\n/** Complete HTML document of the voucher. Missing data is simply not drawn. */\nexport function renderVoucherDocument(v: VoucherView, opts: VoucherDocumentOptions = {}): string {\n const locale = opts.locale ?? 'es-MX'\n const t = locale.toLowerCase().startsWith('en') ? EN : ES\n const shop = opts.shopName || ''\n // Own keys only: a gateway method named `constructor` or `__proto__` must print as itself, not as Object internals.\n const method = v.method ? (Object.prototype.hasOwnProperty.call(t.methods, v.method.toLowerCase()) ? t.methods[v.method.toLowerCase()]! : v.method) : t.cash\n const isSpei = !!v.clabe && !v.reference\n const code = barcodeValue(v)\n const svg = code ? barcodeSvg(code, t.barcode) : null\n const expires = formatDate(v.expires_at, locale, opts.timeZone)\n const field = (label: string, value: string | null) => (value ? `<div class=\"box\"><div class=\"label\">${esc(label)}</div><div class=\"value\">${esc(value)}</div></div>` : '')\n const steps = isSpei ? t.stepsSpei : t.stepsCash\n const subtitle = [shop, method, opts.number ? `${t.order} ${opts.number}` : ''].filter(Boolean).map(esc).join(' · ')\n return `<!doctype html>\n<html lang=\"${esc(locale)}\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<meta name=\"robots\" content=\"noindex\"><title>${esc(t.title)}${shop ? ` - ${esc(shop)}` : ''}</title><style>${CSS}</style></head>\n<body><main>\n<div class=\"head\"><div><h1>${esc(t.title)}</h1><div class=\"muted\">${subtitle}</div></div>\n${v.amount ? `<div><div class=\"label\" style=\"text-align:right\">${esc(t.total)}</div><div class=\"amount\">${esc(formatMoney(v.amount, locale))}</div></div>` : ''}</div>\n${field(t.reference, v.reference)}${field(t.clabe, v.clabe)}\n${svg ? `<div class=\"bar\">${svg}<div class=\"muted\" style=\"font-family:ui-monospace,monospace\">${esc(code as string)}</div></div>` : ''}\n${expires ? `<p><strong>${esc(t.expires)}:</strong> ${esc(expires)}. ${esc(t.expiresNote)}</p>` : ''}\n<ol class=\"steps\">${steps.map((s) => `<li>${esc(s)}</li>`).join('')}</ol>\n${v.instructions ? `<p class=\"note pre muted\">${esc(v.instructions)}</p>` : ''}\n<p class=\"note muted\">${esc(t.footer)}</p>\n${opts.printButton ? `<div class=\"actions\"><button type=\"button\" id=\"print\">${esc(t.print)}</button></div>` : ''}\n</main>\n${opts.printButton || opts.autoPrint ? `<script${opts.nonce ? ` nonce=\"${esc(opts.nonce)}\"` : ''}>(function(){var b=document.getElementById(\"print\");if(b)b.addEventListener(\"click\",function(){window.print()});${opts.autoPrint ? 'window.addEventListener(\"load\",function(){setTimeout(function(){window.print()},300)});' : ''}})();</script>` : ''}\n</body></html>`\n}\n","/**\n * Server side of the account screen (`@asteby/storefront-react/account/server`): `loadAuthCapabilities` for the loader\n * and `createAuthAction` for the action. No React, no router: Web `Request`/`Response` only, so any framework mounts it.\n *\n * The browser never talks to OPS. The action signs the buyer in with the store's `sk_` client and keeps the session\n * token in the store's own cookie, which is passed in (`customerCookie`), so name, flags and signing stay the store's.\n */\nimport { invoiceFileBytes, isStorefrontError, repairPath, safeInvoiceFilename, type CustomerCapabilities, type CustomerSession, type StorefrontClient } from '@asteby/storefront'\nimport { voucherOf } from './voucher.js'\nimport type { AuthActionData, AuthErrorCode, AuthIntent } from './types.js'\n\nexport type { AuthActionData, AuthErrorCode, AuthIntent, AuthStep } from './types.js'\n\n/** What is assumed when the store cannot be asked: password sign-in works, nothing else is offered. */\nexport const SAFE_AUTH_CAPABILITIES: Readonly<CustomerCapabilities> = Object.freeze({\n password: true,\n email_verification: false,\n otp_channels: Object.freeze([]) as unknown as CustomerCapabilities['otp_channels'],\n})\n\nconst FAILURE_TTL_MS = 5_000\nconst LOG_EVERY_MS = 60_000\nlet lastLogAt = -Infinity\n\n/** Server log (never the buyer's data): says what is missing and where it is repaired. At most once a minute. */\nfunction logMisconfigured(scopes: readonly string[]): void {\n const t = Date.now()\n if (t - lastLogAt < LOG_EVERY_MS) return\n lastLogAt = t\n console.error(\n `[@asteby/storefront-react] La credencial de la tienda no tiene permisos${scopes.length ? ` (${scopes.join(', ')})` : ''}; ` +\n `las cuentas de comprador no funcionan hasta repararlo en ${repairPath()}.`,\n )\n}\nconst cache = new WeakMap<object, { at: number; ok: boolean; value: CustomerCapabilities }>()\n\nexport type LoadAuthCapabilitiesOptions = {\n /** How long a good answer is reused per client (default 60 s). `0` disables the cache. */\n ttlMs?: number\n signal?: AbortSignal\n /** Clock, for tests. */\n now?: () => number\n}\n\n/**\n * Asks the store which ways of signing in it offers, with a short cache per client. It NEVER throws: when OPS does not\n * answer (older server, outage, token without scope) it returns `SAFE_AUTH_CAPABILITIES` and retries after a few\n * seconds, so the account screen always renders. Use it as the loader: `loader = () => loadAuthCapabilities(storefront)`.\n */\nexport async function loadAuthCapabilities(sf: StorefrontClient, options: LoadAuthCapabilitiesOptions = {}): Promise<CustomerCapabilities> {\n const now = options.now ?? Date.now\n const ttl = options.ttlMs ?? 60_000\n const hit = cache.get(sf)\n if (hit && now() - hit.at < (hit.ok ? ttl : FAILURE_TTL_MS)) return hit.value\n try {\n const got = await sf.customer.capabilities(options.signal ? { signal: options.signal } : undefined)\n const missing = Array.isArray(got?.missing_scopes) ? got.missing_scopes.filter((x): x is string => typeof x === 'string') : []\n const value: CustomerCapabilities = {\n // `password: false` (including for a missing scope) is respected: the form never offers what the token cannot do.\n password: got?.password !== false,\n email_verification: got?.email_verification === true,\n otp_channels: Array.isArray(got?.otp_channels) ? got.otp_channels : [],\n ...(typeof got?.unavailable_reason === 'string' ? { unavailable_reason: got.unavailable_reason } : {}),\n ...(missing.length ? { missing_scopes: missing } : {}),\n }\n if (value.unavailable_reason === 'missing_scope') logMisconfigured(missing)\n cache.set(sf, { at: now(), ok: true, value })\n return value\n } catch (err) {\n if (isStorefrontError(err) && err.code === 'insufficient_scope') {\n // The token cannot even read capabilities: do not offer password sign-in it could not complete.\n const value: CustomerCapabilities = {\n password: false,\n email_verification: false,\n otp_channels: [],\n unavailable_reason: 'missing_scope',\n missing_scopes: err.requiredScopes,\n }\n logMisconfigured(err.requiredScopes)\n cache.set(sf, { at: now(), ok: false, value })\n return value\n }\n cache.set(sf, { at: now(), ok: false, value: SAFE_AUTH_CAPABILITIES })\n return SAFE_AUTH_CAPABILITIES\n }\n}\n\n/** The part of a cookie the action needs. React Router's `createCookie(...)` and Remix's fit as they are. */\nexport type AuthCookie = {\n serialize(value: string, options?: { expires?: Date; maxAge?: number }): string | Promise<string>\n}\n\n/** Allows only a path inside the site (`/account`, `/orders?x=1`); anything else is `fallback`. Blocks `//host` and `/\\host`. */\nexport function safeNextPath(raw: string | null | undefined, fallback = '/account'): string {\n if (typeof raw !== 'string') return fallback\n const v = raw.trim()\n if (!v.startsWith('/') || v.startsWith('//') || v.startsWith('/\\\\') || /[\\u0000-\\u001f\\\\]/.test(v)) return fallback\n return v\n}\n\nexport type CreateAuthActionOptions = {\n storefront: StorefrontClient\n /** The store's cookie for the buyer session token (`createCookie('sf_customer', ...)`). */\n customerCookie: AuthCookie\n /** Validates the `next` field before redirecting (default `safeNextPath`). Return a same-site path. */\n safeNext?: (raw: string | null) => string\n /** Where to go after signing in when there is no `next` (default `/account`). Only used by the default `safeNext`. */\n defaultNext?: string\n /** Shopper IP for the per-shopper rate limit (see `clientIp` of the client). */\n clientIp?: (request: Request) => string | null | undefined\n /** Capabilities source, for tests or a shared cache (default `loadAuthCapabilities`). */\n capabilities?: (sf: StorefrontClient) => Promise<CustomerCapabilities>\n}\n\nexport type AuthActionArgs = { request: Request }\n\nconst fail = (code: AuthErrorCode, extra: Partial<AuthActionData> = {}, field?: string): AuthActionData => ({\n ok: false,\n ...extra,\n error: { code, ...(field ? { field } : {}) },\n})\n\n/** Maps what the SDK threw to the error the form shows. `ctx` tells what a 401 means on this step. */\nfunction toFailure(err: unknown, ctx: 'credentials' | 'code' | 'other', extra: Partial<AuthActionData>): AuthActionData {\n if (!isStorefrontError(err)) return fail('unavailable', extra)\n if (err.code === 'insufficient_scope') {\n logMisconfigured(err.requiredScopes)\n return fail('store_misconfigured', extra)\n }\n switch (err.status) {\n case 401:\n return fail(ctx === 'credentials' ? 'invalid_credentials' : ctx === 'code' ? 'invalid_code' : 'unavailable', extra, ctx === 'code' ? 'code' : undefined)\n case 409:\n return fail('email_taken', extra, 'email')\n case 429:\n return fail('rate_limited', extra)\n case 400:\n case 422:\n return fail('validation', extra, err.field)\n case 403:\n case 404:\n return fail('unsupported', extra)\n default:\n return fail('unavailable', extra)\n }\n}\n\n/**\n * The account action: one `POST` form with an `intent` field.\n *\n * | intent | fields | result |\n * | ------------- | ---------------------------------------- | -------------------------------------------------------- |\n * | `login` | email, password | signs in -> redirect |\n * | `register` | email, password, first_name?, last_name? | `step: 'verify'` or, without verification, redirect |\n * | `verify` | email, code | account ready -> redirect |\n * | `otp-request` | email | `step: 'otp'` (code sent) |\n * | `otp-login` | email, code | signs in -> redirect |\n * | `forgot` | email | `step: 'reset'` (always, so it never says who has an account) |\n * | `reset` | email, code, password | new password and signed in -> redirect |\n *\n * Success is a `303` to `next` (validated by `safeNext`) with `Set-Cookie` holding the session token; anything else is\n * an `AuthActionData` to render with `<AccountAuth data={...}>`. Passwords and codes are never echoed back.\n */\nexport function createAuthAction(options: CreateAuthActionOptions) {\n const { storefront: sf, customerCookie } = options\n const safeNext = options.safeNext ?? ((raw: string | null) => safeNextPath(raw, options.defaultNext ?? '/account'))\n const loadCaps = options.capabilities ?? ((client: StorefrontClient) => loadAuthCapabilities(client))\n\n async function signedIn(session: CustomerSession, next: string): Promise<Response> {\n const expires = new Date(session.expires_at)\n const cookie = await customerCookie.serialize(session.token, Number.isNaN(expires.getTime()) ? undefined : { expires })\n return new Response(null, { status: 303, headers: { Location: next, 'Set-Cookie': cookie } })\n }\n\n return async function authAction({ request }: AuthActionArgs): Promise<Response | AuthActionData> {\n const form = await request.formData().catch(() => null)\n if (!form) return fail('validation')\n const text = (name: string) => {\n const v = form.get(name)\n return typeof v === 'string' ? v : ''\n }\n const intent = text('intent') as AuthIntent\n const email = text('email').trim()\n const password = text('password')\n const code = text('code').replace(/\\s+/g, '')\n const next = safeNext(text('next') || null)\n const ip = options.clientIp?.(request)\n const w = ip ? { clientIp: ip } : undefined\n const carry: Partial<AuthActionData> = { email }\n if (!email) return fail('validation', carry, 'email')\n\n const caps = await loadCaps(sf)\n const passwordOn = caps.password\n // Off because the store's token lacks a scope (not a merchant choice): say so instead of \"not available\".\n const misconfigured = caps.unavailable_reason === 'missing_scope'\n const off = (): AuthActionData => fail(misconfigured ? 'store_misconfigured' : 'unsupported', carry)\n const otpOn = caps.otp_channels.includes('email')\n\n try {\n switch (intent) {\n case 'login': {\n if (!passwordOn) return off()\n if (!password) return fail('validation', carry, 'password')\n return await signedIn(await sf.customer.loginWithPassword({ email, password }, w), next)\n }\n case 'register': {\n if (!passwordOn) return off()\n if (!password) return fail('validation', carry, 'password')\n const res = await sf.customer.register(\n { email, password, ...(text('first_name').trim() ? { first_name: text('first_name').trim() } : {}), ...(text('last_name').trim() ? { last_name: text('last_name').trim() } : {}) },\n w,\n )\n return res.status === 'created' ? await signedIn(res.session, next) : { ok: true, step: 'verify', email }\n }\n case 'verify': {\n if (!code) return fail('validation', carry, 'code')\n return await signedIn(await sf.customer.verifyRegistration({ email, code }, w), next)\n }\n case 'otp-request': {\n if (!otpOn) return off()\n await sf.customer.requestOtp({ email }, w)\n return { ok: true, step: 'otp', email }\n }\n case 'otp-login': {\n if (!otpOn) return off()\n if (!code) return fail('validation', carry, 'code')\n return await signedIn(await sf.customer.createSession({ email, code }, w), next)\n }\n case 'forgot': {\n if (!passwordOn || !otpOn) return off()\n try {\n await sf.customer.requestOtp({ email }, w)\n } catch (err) {\n // Only throttling and a bad email are told; anything else looks the same as success (no account enumeration).\n if (isStorefrontError(err) && (err.status === 429 || err.status === 400)) throw err\n }\n return { ok: true, step: 'reset', email }\n }\n case 'reset': {\n if (!passwordOn) return off()\n if (!code) return fail('validation', carry, 'code')\n if (!password) return fail('validation', carry, 'password')\n await sf.customer.resetPassword({ email, code, password }, w)\n return await signedIn(await sf.customer.loginWithPassword({ email, password }, w), next)\n }\n default:\n return fail('validation', carry)\n }\n } catch (err) {\n const step = intent === 'verify' ? 'verify' : intent === 'otp-login' ? 'otp' : intent === 'reset' || intent === 'forgot' ? 'reset' : undefined\n const ctx = intent === 'login' ? 'credentials' : step ? 'code' : 'other'\n return toFailure(err, ctx, step && intent !== 'forgot' ? { ...carry, step } : carry)\n }\n }\n}\n\nexport type AuthAction = ReturnType<typeof createAuthAction>\n\n// ---------------------------------------------------------------------------\n// Resource routes of the order screens: the invoice file and the printable voucher\n// ---------------------------------------------------------------------------\n\n/** Headers every answer of a buyer route carries, error or not: never cached, never sniffed, never rendered as a page. */\nconst LOCKED_HEADERS = {\n 'Cache-Control': 'private, no-store',\n 'X-Content-Type-Options': 'nosniff',\n 'Referrer-Policy': 'no-referrer',\n 'X-Robots-Tag': 'noindex',\n} as const\nconst TEXT_HEADERS = { ...LOCKED_HEADERS, 'Content-Type': 'text/plain; charset=utf-8', 'Content-Security-Policy': \"default-src 'none'; sandbox\" } as const\nconst textResponse = (status: number, body: string, extra: Record<string, string> = {}) => new Response(body, { status, headers: { ...TEXT_HEADERS, ...extra } })\n\n/** Largest invoice file served (a CFDI PDF is well under 1 MB): anything bigger is refused before it is decoded. */\nexport const MAX_INVOICE_FILE_BYTES = 10 * 1024 * 1024\n\n/** Statuses a buyer-facing route answers with; anything unexpected is a plain 502 (never the upstream message). */\nfunction failureResponse(err: unknown): Response {\n if (isStorefrontError(err)) {\n if (err.status === 401) return textResponse(401, 'Sesion vencida')\n if (err.status === 404) return textResponse(404, 'No encontrado')\n if (err.status === 429) {\n const wait = typeof err.retryAfter === 'number' && Number.isFinite(err.retryAfter) && err.retryAfter > 0 ? Math.min(3600, Math.ceil(err.retryAfter)) : null\n return textResponse(429, 'Demasiados intentos', wait ? { 'Retry-After': String(wait) } : {})\n }\n }\n return textResponse(502, 'No pudimos obtener el archivo')\n}\n\nconst FILE_TYPES: Record<string, string> = { pdf: 'application/pdf', xml: 'application/xml' }\n\nexport type InvoiceFileResponseOptions = {\n /** Client WITH the buyer's session (`storefront.withCustomerToken(token)`). */\n storefront: StorefrontClient\n orderId: string\n invoiceId: string\n /** From the URL (`pdf` | `xml`); anything else is a 404. */\n kind: string | undefined\n signal?: AbortSignal\n /** Largest file served, in bytes (default `MAX_INVOICE_FILE_BYTES`, 10 MB); a bigger one is a generic 502. */\n maxBytes?: number\n}\n\n/**\n * Serves one file of an invoice or credit note to the signed-in buyer: the route handler of the store\n * (`account.order.$id.invoice.$doc.$kind.ts`) is `return invoiceFileResponse({ storefront, orderId, invoiceId, kind })`.\n * The buyer's token and any PAC URL stay on the server; the browser gets bytes with `Content-Disposition: attachment`,\n * `Cache-Control: private, no-store`, `nosniff` and a sandboxing CSP. The content type is taken from `kind`, never\n * from what the API says, so a file cannot make the browser render HTML under your origin. 401/404/429 pass through;\n * anything else is a generic 502 with no upstream detail.\n */\nexport async function invoiceFileResponse({ storefront, orderId, invoiceId, kind, signal, maxBytes = MAX_INVOICE_FILE_BYTES }: InvoiceFileResponseOptions): Promise<Response> {\n if (kind !== 'pdf' && kind !== 'xml') return textResponse(404, 'No encontrado')\n if (!orderId || !invoiceId) return textResponse(404, 'No encontrado')\n try {\n const file = await storefront.customer.invoiceFile(orderId, invoiceId, kind, signal ? { signal } : undefined)\n if (!file) return textResponse(404, 'No encontrado')\n // Checked on the encoded text (4 chars per 3 bytes, whitespace aside) so a huge answer is never decoded.\n if (file.content_base64.length > Math.ceil(maxBytes / 3) * 4 * 1.1 + 64) return textResponse(502, 'No pudimos obtener el archivo')\n const bytes = invoiceFileBytes(file)\n if (bytes.byteLength > maxBytes) return textResponse(502, 'No pudimos obtener el archivo')\n const name = safeInvoiceFilename(file.filename, kind === 'pdf' ? 'factura.pdf' : 'factura.xml')\n const filename = name.toLowerCase().endsWith(`.${kind}`) ? name : `${name}.${kind}`\n return new Response(bytes as BodyInit, {\n status: 200,\n headers: {\n 'Content-Type': FILE_TYPES[kind]!,\n 'Content-Length': String(bytes.byteLength),\n 'Content-Disposition': `attachment; filename=\"${filename}\"`,\n ...LOCKED_HEADERS,\n 'Content-Security-Policy': \"default-src 'none'; sandbox\",\n },\n })\n } catch (err) {\n return failureResponse(err)\n }\n}\n\nexport type PendingVoucherResponseOptions = {\n /** Client WITH the buyer's session. */\n storefront: StorefrontClient\n /** Checkout id (`PendingPayment.id`). */\n id: string\n /** `?descargar=1`: deliver it as a file instead of showing it. */\n download?: boolean\n shopName?: string\n locale?: string\n timeZone?: string\n signal?: AbortSignal\n}\n\n/**\n * The printable A4 voucher of a pending payment of the signed-in buyer. Served only when `id` is in HIS list (the list\n * is scoped by buyer in OPS): any other id is a 404. The document is self-contained, so its CSP allows nothing\n * external, only its own print script (with a per-response nonce) and inline styles.\n */\nexport async function pendingVoucherResponse({ storefront, id, download = false, shopName, locale, timeZone, signal }: PendingVoucherResponseOptions): Promise<Response> {\n try {\n const page = await storefront.customer.pendingPayments({ first: 100 }, signal ? { signal } : undefined)\n const item = page.nodes.find((p) => p.id === id)\n const voucher = item ? voucherOf(item) : null\n if (!item || !voucher) return textResponse(404, 'Ficha no encontrada')\n const nonce = btoa(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(16))))\n const { renderVoucherDocument } = await import('./voucher-document.js')\n const html = renderVoucherDocument(voucher, { ...(shopName ? { shopName } : {}), ...(locale ? { locale } : {}), ...(timeZone ? { timeZone } : {}), printButton: !download, nonce })\n const safeId = id.replace(/[^A-Za-z0-9-]/g, '').slice(0, 8) || 'ficha'\n return new Response(html, {\n status: 200,\n headers: {\n 'Content-Type': 'text/html; charset=utf-8',\n ...LOCKED_HEADERS,\n // The download carries no script, so its policy allows none.\n 'Content-Security-Policy': `default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src ${download ? \"'none'\" : `'nonce-${nonce}'`}; base-uri 'none'; form-action 'none'; frame-ancestors 'self'`,\n ...(download ? { 'Content-Disposition': `attachment; filename=\"ficha-de-pago-${safeId}.html\"` } : {}),\n },\n })\n } catch (err) {\n return failureResponse(err)\n }\n}\n\n// Account settings (sessions, preferences, export, deletion): see ./settings-server.ts\nexport { createAccountSettingsAction, loadAccountSessions, loadAccountSettings, toSettingsFailure } from './settings-server.js'\nexport type { AccountSettingsAction, AccountSettingsData, AccountSettingsActionArgs, CreateAccountSettingsActionOptions, SettingsCookie } from './settings-server.js'\nexport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n","/**\n * Server side of the account settings (`@asteby/storefront-react/account/server`): `loadAccountSessions` for the loader\n * and `createAccountSettingsAction` for the action. No React, no router: Web `Request`/`Response` only.\n *\n * The browser never talks to OPS and never sees the buyer's token: the action reads it from the store's own cookie\n * (passed in), builds a client with it (`withCustomerToken`) and calls the contract. Answers carry codes\n * (`SettingsErrorCode`), never a server message, a value of the buyer or a credential; nothing is logged here.\n */\nimport { isStorefrontError, type Customer, type CustomerCapabilities, type CustomerSessionInfo, type StorefrontClient, type StorefrontError } from '@asteby/storefront'\nimport type { AuthCookie } from './server.js'\nimport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n\nexport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n\n/** The store's cookie for the buyer session token. React Router's `createCookie(...)` and Remix's fit as they are. */\nexport type SettingsCookie = AuthCookie & {\n parse(header: string | null): unknown | Promise<unknown>\n}\n\n/**\n * The buyer's sessions for the loader. NEVER throws: a store whose server is older than contract 1.9, an outage or an\n * expired session is `null`, and `<SessionsList sessions={null}>` degrades while the rest of the page renders.\n */\nexport async function loadAccountSessions(customer: StorefrontClient, options: { signal?: AbortSignal } = {}): Promise<CustomerSessionInfo[] | null> {\n try {\n return await customer.customer.sessions.list(options.signal ? { signal: options.signal } : undefined)\n } catch {\n return null\n }\n}\n\n/** Everything the settings page reads, each part on its own: a part that cannot be read is `null` and its section degrades. */\nexport type AccountSettingsData = {\n customer: Customer | null\n capabilities: CustomerCapabilities | null\n sessions: CustomerSessionInfo[] | null\n}\n\n/**\n * The loader of the whole settings page. NEVER throws and never fails as a whole: the three reads run together and a\n * failed one (older server, outage, expired session) is `null` for that part only. `customer` is `null` also when the\n * buyer's session is dead: the page should then send them to sign in.\n */\nexport async function loadAccountSettings(customer: StorefrontClient, options: { signal?: AbortSignal } = {}): Promise<AccountSettingsData> {\n const o = options.signal ? { signal: options.signal } : undefined\n const [profile, capabilities, sessions] = await Promise.all([\n customer.customer.get(o).catch(() => null),\n customer.customer.capabilities(o).catch(() => null),\n loadAccountSessions(customer, options),\n ])\n return { customer: profile, capabilities, sessions }\n}\n\nexport type CreateAccountSettingsActionOptions = {\n /** The store's own client (`sk_` token, no buyer). */\n storefront: StorefrontClient\n /** The store's cookie holding the buyer session token. */\n customerCookie: SettingsCookie\n /** Shopper IP for the per-shopper rate limit (see `clientIp` of the client). */\n clientIp?: (request: Request) => string | null | undefined\n}\n\nexport type AccountSettingsActionArgs = { request: Request }\n\nexport const fail = (intent: SettingsIntent | undefined, code: SettingsErrorCode, extra: { field?: string; retryAfter?: number } = {}): AccountSettingsActionData => ({\n ok: false,\n ...(intent ? { intent } : {}),\n error: { code, ...(extra.field ? { field: extra.field } : {}), ...(extra.retryAfter ? { retryAfter: extra.retryAfter } : {}) },\n})\n\n/** Maps what the SDK threw to the code the form shows. `ctx: 'credential'` is a call that checks the buyer's password or code. */\nexport function toSettingsFailure(err: unknown, intent: SettingsIntent | undefined, ctx: 'credential' | 'other' = 'other'): AccountSettingsActionData {\n if (!isStorefrontError(err)) return fail(intent, 'unavailable')\n const e: StorefrontError = err\n if (e.code === 'insufficient_scope') return fail(intent, 'unsupported')\n switch (e.status) {\n case 401:\n return fail(intent, 'session_expired')\n case 403:\n return fail(intent, e.code === 'reauth_required' ? 'reauth_required' : 'unsupported')\n case 404:\n return fail(intent, 'unsupported')\n case 409:\n return fail(intent, e.field === 'orders' ? 'blocked_orders' : e.field === 'pending_payments' ? 'blocked_pending_payments' : 'validation', e.field ? { field: e.field } : {})\n case 429: {\n const wait = typeof e.retryAfter === 'number' && Number.isFinite(e.retryAfter) && e.retryAfter > 0 ? Math.min(3600, Math.ceil(e.retryAfter)) : undefined\n return fail(intent, 'rate_limited', wait ? { retryAfter: wait } : {})\n }\n case 400:\n case 422:\n return ctx === 'credential' ? fail(intent, 'invalid_credential') : fail(intent, 'validation', e.field ? { field: e.field } : {})\n default:\n return fail(intent, 'unavailable')\n }\n}\n\n/**\n * The settings action: one `POST` form with an `intent` field.\n *\n * | intent | fields | result |\n * | ----------------------- | ------------ | ---------------------------------------- |\n * | `session-revoke` | session_id | closes that session (idempotent) |\n * | `session-revoke-others` | - | closes every session but this one |\n * | `locale` | locale | saves the language (`''` = the store's) |\n * | `notifications` | pref, pref_shown | saves the checked / unchecked boxes |\n *\n * It answers `AccountSettingsActionData` to render with the section that sent it. A buyer without a session is\n * `session_expired` (the store redirects to sign-in).\n */\nexport function createAccountSettingsAction(options: CreateAccountSettingsActionOptions) {\n const { storefront: sf, customerCookie } = options\n\n return async function settingsAction({ request }: AccountSettingsActionArgs): Promise<Response | AccountSettingsActionData> {\n // Every intent changes the account (or spends a sign-in code), and the buyer's cookie rides along: a form that\n // another site submits is refused before anything is read. `Sec-Fetch-Site` is set by the browser and cannot be\n // forged by a page; an older browser that omits it falls back to the cookie's SameSite.\n if (request.headers.get('Sec-Fetch-Site')?.toLowerCase() === 'cross-site') return fail(undefined, 'validation')\n const form = await request.formData().catch(() => null)\n if (!form) return fail(undefined, 'validation')\n const text = (name: string) => {\n const v = form.get(name)\n return typeof v === 'string' ? v : ''\n }\n const intent = text('intent') as SettingsIntent\n const raw = await customerCookie.parse(request.headers.get('Cookie'))\n const token = typeof raw === 'string' && raw ? raw : null\n if (!token) return fail(intent, 'session_expired')\n const ip = options.clientIp?.(request)\n const w = ip ? { clientIp: ip } : undefined\n const customer = sf.withCustomerToken(token)\n\n try {\n switch (intent) {\n case 'session-revoke': {\n const id = text('session_id').trim()\n if (!id || id.length > 64) return fail(intent, 'validation', { field: 'session_id' })\n // `others` is its own intent: never let the field spell it, so one button cannot do the other's work.\n if (id.toLowerCase() === 'others') return fail(intent, 'validation', { field: 'session_id' })\n await customer.customer.sessions.revoke(id, w)\n return { ok: true, intent }\n }\n case 'session-revoke-others': {\n await customer.customer.sessions.revokeOthers(w)\n return { ok: true, intent }\n }\n case 'locale': {\n const locale = text('locale').trim()\n if (locale.length > 35) return fail(intent, 'validation', { field: 'locale' })\n await customer.customer.update({ locale: locale || null }, w)\n return { ok: true, intent, saved: true }\n }\n case 'notifications': {\n const shown = form.getAll('pref_shown').filter((v): v is string => typeof v === 'string')\n const checked = new Set(form.getAll('pref').filter((v): v is string => typeof v === 'string'))\n if (shown.length === 0 || shown.length > 30) return fail(intent, 'validation', { field: 'preferences' })\n const notifications: Record<string, Record<string, boolean>> = {}\n for (const pair of shown) {\n const m = /^([a-z][a-z0-9_]{0,31}):([a-z][a-z0-9_]{0,31})$/.exec(pair)\n if (!m) return fail(intent, 'validation', { field: 'preferences' })\n ;(notifications[m[1]!] ??= {})[m[2]!] = checked.has(pair)\n }\n await customer.customer.update({ preferences: { notifications } }, w)\n return { ok: true, intent, saved: true }\n }\n default:\n return fail(undefined, 'validation')\n }\n } catch (err) {\n // A session that is already gone (404) is what the buyer wanted; a stranger's looks the same, by design.\n if (intent === 'session-revoke' && isStorefrontError(err) && err.status === 404) return { ok: true, intent }\n return toSettingsFailure(err, intent)\n }\n }\n}\n\nexport type AccountSettingsAction = ReturnType<typeof createAccountSettingsAction>\n"]}
1
+ {"version":3,"sources":["../src/account/voucher.ts","../src/account/voucher-text.ts","../src/account/voucher-pdf.ts","../src/account/voucher-document.ts","../src/account/server.ts","../src/account/settings-server.ts"],"names":["value","n","text","isStorefrontError","repairPath","fail","storefront","invoiceFileBytes","safeInvoiceFilename","renderVoucherPdf","renderVoucherDocument"],"mappings":"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,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;A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","file":"account-server.cjs","sourcesContent":["/**\n * Pure pieces of the cash voucher (OXXO, SPEI, deposit): the normalized `VoucherView` of a `PendingPayment` and the\n * Code 128 barcode (the one cashiers' readers scan). No React, no DOM: the same code draws the barcode in the page\n * (`<Barcode>`) and in the printable document (`voucher-document.ts`, loaded only when the buyer prints).\n */\nimport type { Money, PendingPayment } from '@asteby/storefront'\n\nexport type VoucherView = {\n /** `oxxo`, `spei`, ... as the gateway publishes it. */\n method: string | null\n reference: string | null\n /** Value the barcode encodes, exactly as the server sent it. `null` when the server sent none or it cannot be drawn. */\n barcode: string | null\n /** Symbology of `barcode`; `null` when there is no barcode or its format is not one we can draw. */\n barcode_format: BarcodeFormat | null\n /**\n * Code the server sent but that is NOT drawn (`barcode_data` is null or names a symbology we cannot draw): shown as\n * plain text. `null` when there is nothing to show (also when it is the same as `reference`).\n */\n barcode_text: string | null\n clabe: string | null\n /** SPEI / transfer: who receives the money and in which bank. */\n beneficiary: string | null\n bank: string | null\n /** What kind of document to print: cash at a store, bank transfer, or unknown (generic, no brand named). */\n kind: VoucherKind\n /** Server-chosen key of the instructions (`oxxo`, `spei`...); unknown keys fall back to the kind. */\n instructions_key: string | null\n /** `https` link to the provider's own receipt: `ticket_url`, else the older `voucher_url`. */\n ticket_url: string | null\n expires_at: string | null\n amount: Money | null\n instructions: string | null\n}\n\nconst MAX = 256\n\nexport type BarcodeFormat = 'code128' | 'code39' | 'itf' | 'ean13'\nexport type VoucherKind = 'cash' | 'transfer' | 'generic'\n\nconst CASH_METHODS = new Set(['oxxo', 'cash', 'store', 'convenience_store', 'efectivo', 'bank_deposit', 'deposit', 'paynet', 'paycash', 'bancomer', '7eleven', 'seven_eleven', 'farmacias_guadalajara', 'circle_k'])\nconst TRANSFER_METHODS = new Set(['spei', 'bank_transfer', 'transfer', 'wire', 'clabe'])\n\nfunction formatOf(v: unknown): BarcodeFormat | null {\n const f = typeof v === 'string' ? v.toLowerCase().replace(/[^a-z0-9]/g, '') : ''\n if (f === 'code128' || f === 'c128' || f === 'code128b' || f === 'code128c') return 'code128'\n if (f === 'code39' || f === 'c39') return 'code39'\n if (f === 'itf' || f === 'itf14' || f === 'i25' || f === 'interleaved2of5') return 'itf'\n if (f === 'ean13') return 'ean13'\n return null\n}\n\n/**\n * The barcode the server declared. `barcode_data` (contract 1.10) is authoritative when the key is present, object or\n * `null`: `value` is what to draw, `text` what to show when it cannot be drawn. Without the key (older servers) the\n * plain `barcode` string is Code 128.\n */\nfunction barcodeOf(ext: Record<string, unknown>, raw: unknown): { draw: { value: string; format: BarcodeFormat } | null; text: string | null } {\n if ('barcode_data' in ext) {\n const d = ext.barcode_data\n if (d && typeof d === 'object') {\n const o = d as Record<string, unknown>\n const value = text(o.value)\n const format = formatOf(o.format)\n if (value && format && barcodeModules(value, format)) return { draw: { value, format }, text: null }\n return { draw: null, text: value ?? text(raw) }\n }\n return { draw: null, text: text(raw) }\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n const value = text(o.value)\n const format = formatOf(o.format ?? 'code128')\n return { draw: value && format ? { value, format } : null, text: null }\n }\n const value = text(raw)\n return { draw: value ? { value, format: 'code128' } : null, text: null }\n}\n\n/** `payment.voucher.instructions.oxxo` -> `oxxo`; `other` -> `generic`. */\nfunction instructionsKeyOf(raw: string | null): string | null {\n const k = raw?.replace(/^payment\\.voucher\\.instructions\\./, '').toLowerCase() ?? ''\n return !k ? null : k === 'other' ? 'generic' : k\n}\n\nfunction httpsUrl(v: unknown): string | null {\n const s = typeof v === 'string' ? v.trim() : ''\n return /^https:\\/\\//i.test(s) && s.length <= 2048 ? s : null\n}\n\nfunction kindOf(kind: string | null, method: string | null, key: string | null): VoucherKind {\n for (const c of [kind, method, key]) {\n const k = c?.toLowerCase()\n if (!k || k === 'other' || k === 'generic') continue\n if (k === 'oxxo' || k === 'cash' || CASH_METHODS.has(k)) return 'cash'\n if (k === 'spei' || k === 'transfer' || TRANSFER_METHODS.has(k)) return 'transfer'\n }\n return 'generic'\n}\n\nconst digits = (s: string | null) => (s ? s.replace(/\\D/g, '') : '')\n\nfunction text(v: unknown): string | null {\n if (typeof v === 'number' && Number.isFinite(v)) return String(v)\n if (typeof v !== 'string') return null\n const s = v.trim().slice(0, MAX)\n return s || null\n}\n\nfunction moneyOf(v: unknown): Money | null {\n if (!v || typeof v !== 'object') return null\n const m = v as Record<string, unknown>\n const amount = text(m.amount)\n const cur = text(m.currency_code)\n return amount && cur && Number.isFinite(Number(amount)) ? { amount, currency_code: cur.toUpperCase() } : null\n}\n\n/** The voucher of a pending payment; `null` when it has neither reference, barcode nor CLABE (nothing to pay with). */\nexport function voucherOf(p: Pick<PendingPayment, 'payment' | 'total' | 'expires_at'> | null | undefined): VoucherView | null {\n const pay = p?.payment\n if (!pay || typeof pay !== 'object') return null\n // Fields the contract adds later are read defensively: an older SDK type does not declare them yet.\n const ext = pay as Record<string, unknown>\n const method = text(pay.method ?? pay.provider)\n const key = instructionsKeyOf(text(ext.instructions_key))\n const bc = barcodeOf(ext, pay.barcode)\n const clabe = text(pay.clabe)\n let reference = text(pay.reference)\n // Some gateways publish the CLABE as the \"reference\" too: printing both reads as two different numbers.\n if (clabe && reference && digits(reference) === digits(clabe)) reference = null\n const v: VoucherView = {\n method,\n reference,\n barcode: bc.draw?.value ?? null,\n barcode_format: bc.draw?.format ?? null,\n barcode_text: bc.text && bc.text !== reference ? bc.text : null,\n clabe,\n beneficiary: text(ext.beneficiary),\n bank: text(ext.bank),\n kind: kindOf(text(ext.kind), method, key),\n instructions_key: key,\n ticket_url: httpsUrl(ext.ticket_url) ?? httpsUrl(ext.voucher_url),\n expires_at: text(pay.expires_at) ?? text(p?.expires_at),\n amount: moneyOf(pay.amount) ?? moneyOf(p?.total),\n instructions: text(pay.instructions),\n }\n return v.reference || v.barcode || v.barcode_text || v.clabe ? v : null\n}\n\n/**\n * The value the barcode encodes: only what the server sent. A reference is NOT a barcode (an OXXO reference and its\n * scannable code differ), so without `barcode` nothing is drawn and the reference is shown as text.\n */\nexport function barcodeValue(v: Pick<VoucherView, 'barcode'>): string | null {\n return v.barcode\n}\n\n// 11-module patterns of symbols 0..105 and the 13-module stop (ISO/IEC 15417).\nconst BARS = [\n '11011001100', '11001101100', '11001100110', '10010011000', '10010001100', '10001001100', '10011001000', '10011000100', '10001100100', '11001001000',\n '11001000100', '11000100100', '10110011100', '10011011100', '10011001110', '10111001100', '10011101100', '10011100110', '11001110010', '11001011100',\n '11001001110', '11011100100', '11001110100', '11101101110', '11101001100', '11100101100', '11100100110', '11101100100', '11100110100', '11100110010',\n '11011011000', '11011000110', '11000110110', '10100011000', '10001011000', '10001000110', '10110001000', '10001101000', '10001100010', '11010001000',\n '11000101000', '11000100010', '10110111000', '10110001110', '10001101110', '10111011000', '10111000110', '10001110110', '11101110110', '11010001110',\n '11000101110', '11011101000', '11011100010', '11011101110', '11101011000', '11101000110', '11100010110', '11101101000', '11101100010', '11100011010',\n '11101111010', '11001000010', '11110001010', '10100110000', '10100001100', '10010110000', '10010000110', '10000101100', '10000100110', '10110010000',\n '10110000100', '10011010000', '10011000010', '10000110100', '10000110010', '11000010010', '11001010000', '11110111010', '11000010100', '10001111010',\n '10100111100', '10010111100', '10010011110', '10111100100', '10011110100', '10011110010', '11110100100', '11110010100', '11110010010', '11011011110',\n '11011110110', '11110110110', '10101111000', '10100011110', '10001011110', '10111101000', '10111100010', '11110101000', '11110100010', '10111011110',\n '10111101110', '11101011110', '11110101110', '11010000100', '11010010000', '11010011100',\n]\nconst STOP = '1100011101011'\n\n/**\n * Modules (`1` bar, `0` space) of the Code 128 of `value`: set C (digit pairs) when it is all digits of even length,\n * set B (printable ASCII) otherwise. `null` when it cannot be encoded.\n */\nexport function code128Modules(value: string): string | null {\n if (!value || value.length > 80) return null\n let codes: number[]\n if (/^\\d+$/.test(value) && value.length % 2 === 0) {\n codes = [105]\n for (let i = 0; i < value.length; i += 2) codes.push(Number(value.slice(i, i + 2)))\n } else {\n codes = [104]\n for (const ch of value) {\n const c = ch.charCodeAt(0)\n if (c < 32 || c > 126) return null\n codes.push(c - 32)\n }\n }\n let sum = codes[0]!\n for (let i = 1; i < codes.length; i++) sum += codes[i]! * i\n codes.push(sum % 103)\n return codes.map((c) => BARS[c]).join('') + STOP\n}\n\n// Code 39: 9 elements per character (bar, space, bar...), 3 of them wide (3 modules, the rest 1). Per character, in\n// order of `C39_CHARS`, the indices (0..8) of its wide elements. One narrow gap separates characters.\nconst C39_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. */+%$'\nconst C39_WIDE = '346038238023348034234368036236058258025458045245568056256456078278027478047247678067267467018128012148014124168016126146137157357135'\n/** Code 39 patterns as `n`/`w` strings per character (exported for the tests). */\nexport const CODE39_PATTERNS: Record<string, string> = Object.fromEntries(\n [...C39_CHARS].map((ch, i) => [ch, [...Array(9).keys()].map((e) => (C39_WIDE.slice(i * 3, i * 3 + 3).includes(String(e)) ? 'w' : 'n')).join('')]),\n)\n\n/** Modules of the Code 39 of `value` (`*` start/stop added). `null` for lower case, `*` or anything outside its set. */\nexport function code39Modules(value: string): string | null {\n if (!value || value.length > 40) return null\n let out = ''\n for (const ch of `*${value}*`) {\n const p = Object.prototype.hasOwnProperty.call(CODE39_PATTERNS, ch) ? CODE39_PATTERNS[ch] : undefined\n if (!p || (ch === '*' && value.includes('*'))) return null\n for (let i = 0; i < 9; i++) out += (i % 2 === 0 ? '1' : '0').repeat(p[i] === 'w' ? 3 : 1)\n out += '0'\n }\n return out.slice(0, -1)\n}\n\n// Interleaved 2 of 5: digits in pairs, the first of each pair in the bars, the second in the spaces. Per digit the\n// 5 elements as `n`/`w` (wide = 3 modules). Start: bar-space-bar-space narrow; stop: wide bar, narrow space, narrow bar.\nconst ITF_DIGITS = ['nnwwn', 'wnnnw', 'nwnnw', 'wwnnn', 'nnwnw', 'wnwnn', 'nwwnn', 'nnnww', 'wnnwn', 'nwnwn']\n\n/** Modules of the ITF (Interleaved 2 of 5) of `value`: digits only, even count. `null` otherwise. */\nexport function itfModules(value: string): string | null {\n if (!value || value.length > 80 || value.length % 2 !== 0 || !/^\\d+$/.test(value)) return null\n let out = '1010'\n for (let i = 0; i < value.length; i += 2) {\n const bars = ITF_DIGITS[Number(value[i])]!\n const spaces = ITF_DIGITS[Number(value[i + 1])]!\n for (let e = 0; e < 5; e++) out += '1'.repeat(bars[e] === 'w' ? 3 : 1) + '0'.repeat(spaces[e] === 'w' ? 3 : 1)\n }\n return out + '11101'\n}\n\nconst EAN_L = ['0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011']\nconst EAN_R = EAN_L.map((c) => [...c].map((b) => (b === '1' ? '0' : '1')).join(''))\nconst EAN_G = EAN_R.map((c) => [...c].reverse().join(''))\nconst EAN_PARITY = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL']\n\n/** Modules (95) of the EAN-13 of `value`: exactly 13 digits whose last one is the correct check digit. `null` otherwise. */\nexport function ean13Modules(value: string): string | null {\n if (!/^\\d{13}$/.test(value)) return null\n const d = [...value].map(Number)\n const sum = d.slice(0, 12).reduce((a, n, i) => a + n * (i % 2 === 0 ? 1 : 3), 0)\n if ((10 - (sum % 10)) % 10 !== d[12]) return null\n const parity = EAN_PARITY[d[0]!]!\n let out = '101'\n for (let i = 0; i < 6; i++) out += (parity[i] === 'L' ? EAN_L : EAN_G)[d[i + 1]!]\n out += '01010'\n for (let i = 7; i < 13; i++) out += EAN_R[d[i]!]\n return out + '101'\n}\n\n/** Modules of `value` in the given symbology. */\nexport function barcodeModules(value: string, format: BarcodeFormat = 'code128'): string | null {\n return format === 'code39' ? code39Modules(value) : format === 'itf' ? itfModules(value) : format === 'ean13' ? ean13Modules(value) : code128Modules(value)\n}\n\nexport type BarcodeGeometry = { width: number; height: number; rects: { x: number; w: number }[] }\n\n/** Bars of the barcode as rectangles (quiet zone of 10 modules each side included in `width`). `null` if not encodable. */\nexport function barcodeGeometry(value: string, opts: { module?: number; height?: number; format?: BarcodeFormat } = {}): BarcodeGeometry | null {\n const bits = barcodeModules(value, opts.format)\n if (!bits) return null\n const mod = opts.module ?? 2\n const quiet = 10\n const rects: { x: number; w: number }[] = []\n for (let i = 0; i < bits.length; ) {\n if (bits[i] === '0') {\n i++\n continue\n }\n let j = i\n while (j < bits.length && bits[j] === '1') j++\n rects.push({ x: (quiet + i) * mod, w: (j - i) * mod })\n i = j\n }\n return { width: (bits.length + quiet * 2) * mod, height: opts.height ?? 70, rects }\n}\n","/**\n * Texts and layout decisions of the printable voucher, shared by the HTML document and the PDF so both say the same\n * thing: which fields a method prints and which instructions it gets. Plain data, no React, no DOM. Loaded only with\n * one of the two generators (never in the first load of the order screens).\n *\n * A voucher is per METHOD: cash at a store (barcode + reference + store steps), bank transfer (beneficiary, bank,\n * CLABE, reference + transfer steps), or generic (no brand named). The server picks the instructions with\n * `instructions_key` (or the method); an unknown key falls back to the kind, never to another method's steps.\n */\nimport type { Money } from '@asteby/storefront'\nimport type { VoucherView } from './voucher.js'\n\nexport type DocText = {\n title: string\n total: string\n reference: string\n clabe: string\n beneficiary: string\n bank: string\n expires: string\n expiresNote: string\n order: string\n barcode: string\n code: string\n print: string\n downloadPdf: string\n noScript: string\n stepsTitle: string\n footer: string\n methods: Record<string, string>\n cash: string\n steps: Record<string, (v: VoucherView) => string[]>\n}\n\nconst KEEP_ES = 'Conserva tu comprobante: confirmaremos tu pago automáticamente.'\nconst KEEP_EN = 'Keep your receipt: we will confirm your payment automatically.'\n\nconst ES: DocText = {\n title: 'Ficha de pago',\n total: 'Total a pagar',\n reference: 'Referencia',\n clabe: 'CLABE',\n beneficiary: 'Beneficiario',\n bank: 'Banco',\n expires: 'Vence',\n expiresNote: 'Pasada esa fecha la ficha deja de ser válida.',\n order: 'Pedido',\n barcode: 'Código de barras',\n code: 'Código',\n print: 'Imprimir',\n downloadPdf: 'Descargar PDF',\n noScript: 'Para imprimir usa la opción Imprimir de tu navegador (Ctrl+P) o descarga el PDF.',\n stepsTitle: 'Cómo pagar',\n footer: 'Tu pedido se genera cuando se confirma el pago. Esta ficha es de un solo uso; no la compartas.',\n methods: { oxxo: 'OXXO', spei: 'Transferencia SPEI', bank_transfer: 'Transferencia bancaria', bank_deposit: 'Depósito bancario', cash: 'Pago en efectivo' },\n cash: 'Pago en efectivo',\n steps: {\n oxxo: (v) => [\n 'Acude a cualquier tienda OXXO y di que vas a hacer un pago de servicio en efectivo.',\n v.barcode ? 'Muestra el código de barras en caja o dicta la referencia, y paga el monto exacto.' : 'Dicta la referencia en caja y paga el monto exacto.',\n KEEP_ES,\n ],\n cash: (v) => [\n 'Acude a la tienda o comercio indicado y di que vas a hacer un pago en efectivo.',\n v.barcode ? 'Muestra el código de barras o dicta la referencia, y paga el monto exacto.' : 'Dicta la referencia y paga el monto exacto.',\n KEEP_ES,\n ],\n spei: (v) => [\n 'Entra a la banca en línea o a la app de tu banco.',\n 'Haz una transferencia SPEI a la CLABE indicada, por el monto exacto.',\n ...(v.reference ? ['Escribe la referencia de esta ficha en el concepto o referencia de la transferencia.'] : []),\n KEEP_ES,\n ],\n bank_transfer: (v) => [\n 'Entra a la banca en línea o a la app de tu banco.',\n 'Haz una transferencia a la cuenta o CLABE indicada, por el monto exacto.',\n ...(v.reference ? ['Escribe la referencia de esta ficha en el concepto de la transferencia.'] : []),\n KEEP_ES,\n ],\n bank_deposit: (v) => [\n 'Acude a una sucursal del banco indicado o a su cajero con depósitos.',\n `Deposita el monto exacto a la cuenta${v.reference ? ' con la referencia de esta ficha' : ' indicada'}.`,\n KEEP_ES,\n ],\n transfer: (v) => [\n 'Entra a la banca en línea o a la app de tu banco.',\n 'Haz una transferencia a la CLABE indicada, por el monto exacto.',\n ...(v.reference ? ['Escribe la referencia de esta ficha en el concepto de la transferencia.'] : []),\n KEEP_ES,\n ],\n generic: () => ['Realiza el pago con los datos de esta ficha, por el monto exacto y antes de que venza.', KEEP_ES],\n },\n}\n\nconst EN: DocText = {\n title: 'Payment voucher',\n total: 'Amount to pay',\n reference: 'Reference',\n clabe: 'CLABE',\n beneficiary: 'Beneficiary',\n bank: 'Bank',\n expires: 'Expires',\n expiresNote: 'After that date the voucher is no longer valid.',\n order: 'Order',\n barcode: 'Barcode',\n code: 'Code',\n print: 'Print',\n downloadPdf: 'Download PDF',\n noScript: 'To print, use your browser\\'s Print option (Ctrl+P) or download the PDF.',\n stepsTitle: 'How to pay',\n footer: 'Your order is created when the payment is confirmed. This voucher is single-use; do not share it.',\n methods: { oxxo: 'OXXO', spei: 'SPEI transfer', bank_transfer: 'Bank transfer', bank_deposit: 'Bank deposit', cash: 'Cash payment' },\n cash: 'Cash payment',\n steps: {\n oxxo: (v) => [\n 'Go to any OXXO store and say you want to make a cash service payment.',\n v.barcode ? 'Show the barcode at the register or read out the reference, and pay the exact amount.' : 'Read out the reference at the register and pay the exact amount.',\n KEEP_EN,\n ],\n cash: (v) => [\n 'Go to the store indicated and say you want to make a cash payment.',\n v.barcode ? 'Show the barcode or read out the reference, and pay the exact amount.' : 'Read out the reference and pay the exact amount.',\n KEEP_EN,\n ],\n spei: (v) => [\n 'Open your online banking or your bank app.',\n 'Make a SPEI transfer to the CLABE below for the exact amount.',\n ...(v.reference ? ['Enter the reference of this voucher as the transfer concept or reference.'] : []),\n KEEP_EN,\n ],\n bank_transfer: (v) => [\n 'Open your online banking or your bank app.',\n 'Make a transfer to the account or CLABE below for the exact amount.',\n ...(v.reference ? ['Enter the reference of this voucher as the transfer concept.'] : []),\n KEEP_EN,\n ],\n bank_deposit: (v) => [\n 'Go to a branch of the bank indicated or to one of its deposit ATMs.',\n `Deposit the exact amount to the account${v.reference ? ' with the reference of this voucher' : ' indicated'}.`,\n KEEP_EN,\n ],\n transfer: (v) => [\n 'Open your online banking or your bank app.',\n 'Make a transfer to the CLABE below for the exact amount.',\n ...(v.reference ? ['Enter the reference of this voucher as the transfer concept.'] : []),\n KEEP_EN,\n ],\n generic: () => ['Make the payment with the details of this voucher, for the exact amount and before it expires.', KEEP_EN],\n },\n}\n\nexport const isEnglish = (locale: string) => locale.toLowerCase().startsWith('en')\nexport function docText(locale: string): DocText {\n return isEnglish(locale) ? EN : ES\n}\n\nconst own = <T>(o: Record<string, T>, k: string | null | undefined): T | undefined => {\n const key = k?.toLowerCase()\n return key && Object.prototype.hasOwnProperty.call(o, key) ? o[key] : undefined\n}\n\n/** Method as the buyer reads it. Own keys only: a method named `constructor` or `__proto__` prints as itself. */\nexport function methodName(v: VoucherView, t: DocText): string {\n return (v.method ? own(t.methods, v.method) ?? v.method : t.cash)\n}\n\n/** Numbered instructions of this voucher: the server's `instructions_key`, else the method, else the kind. */\nexport function voucherSteps(v: VoucherView, t: DocText): string[] {\n const fn = own(t.steps, v.instructions_key) ?? own(t.steps, v.method) ?? (v.kind === 'cash' ? t.steps.cash : v.kind === 'transfer' ? t.steps.transfer : t.steps.generic)\n return fn!(v)\n}\n\nexport type VoucherField = { key: 'beneficiary' | 'bank' | 'clabe' | 'reference' | 'code'; label: string; value: string }\n\n/** Fields to print, in the order the method needs them: transfers lead with who/where/CLABE, cash with the reference. */\nexport function voucherFields(v: VoucherView, t: DocText): VoucherField[] {\n const f = (key: VoucherField['key'], label: string, value: string | null): VoucherField[] => (value ? [{ key, label, value }] : [])\n return v.kind === 'transfer'\n ? [...f('beneficiary', t.beneficiary, v.beneficiary), ...f('bank', t.bank, v.bank), ...f('clabe', t.clabe, v.clabe), ...f('reference', t.reference, v.reference), ...f('code', t.code, v.barcode_text)]\n : [...f('reference', t.reference, v.reference), ...f('clabe', t.clabe, v.clabe), ...f('beneficiary', t.beneficiary, v.beneficiary), ...f('bank', t.bank, v.bank), ...f('code', t.code, v.barcode_text)]\n}\n\nexport function formatMoney(m: Money | null, locale: string): string {\n if (!m) return ''\n try {\n return new Intl.NumberFormat(locale, { style: 'currency', currency: m.currency_code }).format(Number(m.amount))\n } catch {\n return `${m.amount} ${m.currency_code}`\n }\n}\n\nexport function formatDate(iso: string | null, locale: string, timeZone?: string): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n try {\n return d.toLocaleString(locale, { dateStyle: 'long', timeStyle: 'short', ...(timeZone ? { timeZone } : {}) })\n } catch {\n return d.toISOString()\n }\n}\n","/**\n * The voucher as a real PDF 1.4, written by hand: no browser, no native module, no dependency, so the same code runs in\n * the store's Node/SSR route and in the buyer's browser. Standard Helvetica / Courier fonts (not embedded: every reader\n * has them), text in WinAnsi, the barcode as filled rectangles. Every external string reaches the file only through\n * `pdfString`, which writes it as ASCII octal escapes, so nothing a gateway sends can close a string or add an object.\n * Loaded on demand (the server route or the buyer's tap), never in the first load of the order screens.\n */\nimport { barcodeGeometry, type VoucherView } from './voucher.js'\nimport { docText, formatDate, formatMoney, methodName, voucherFields, voucherSteps } from './voucher-text.js'\n\nexport type VoucherPdfOptions = {\n shopName?: string\n number?: string | null\n locale?: string\n timeZone?: string\n /** `a4` (default) or `letter` (Mexico prints on both). */\n paper?: 'a4' | 'letter'\n}\n\n/** Hard ceiling of the file: a voucher is a few KB; anything near this is a bug, not a voucher. */\nexport const MAX_VOUCHER_PDF_BYTES = 256 * 1024\nconst MAX_PAGES = 3\n\n// Advance widths (1/1000 em) of ASCII 32..126 for the standard Helvetica and Helvetica-Bold (Adobe AFM).\nconst HELV = [278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584]\nconst HELV_B = [278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584]\n\ntype Font = 'F1' | 'F2' | 'F3' | 'F4'\nconst FONT_NAMES: Record<Font, string> = { F1: 'Helvetica', F2: 'Helvetica-Bold', F3: 'Courier-Bold', F4: 'Courier' }\n\n// The few characters outside Latin-1 that WinAnsi (cp1252) has at 0x80..0x9F.\nconst CP1252: Record<number, number> = { 0x20ac: 0x80, 0x2018: 0x91, 0x2019: 0x92, 0x201c: 0x93, 0x201d: 0x94, 0x2022: 0x95, 0x2013: 0x96, 0x2014: 0x97 }\n\n/** One WinAnsi byte per character; anything it cannot show becomes `?` (and control characters a space). */\nfunction toBytes(s: string): number[] {\n const out: number[] = []\n for (const ch of s) {\n const c = ch.codePointAt(0)!\n if (c < 32 || c === 127) out.push(32)\n else if (c < 127 || (c >= 160 && c <= 255)) out.push(c)\n else out.push(CP1252[c] ?? 63)\n }\n return out\n}\n\n/** PDF literal string: printable ASCII as is (minus the three that delimit), the rest as `\\ddd`. */\nexport function pdfString(s: string): string {\n let o = '('\n for (const b of toBytes(s)) o += b >= 32 && b < 127 && b !== 40 && b !== 41 && b !== 92 ? String.fromCharCode(b) : `\\\\${b.toString(8).padStart(3, '0')}`\n return o + ')'\n}\n\nfunction charWidth(font: Font, ch: string): number {\n if (font === 'F3' || font === 'F4') return 600\n const c = ch.codePointAt(0)!\n const table = font === 'F2' ? HELV_B : HELV\n if (c >= 32 && c < 127) return table[c - 32]!\n const base = ch.normalize('NFD')[0]!.codePointAt(0)!\n return base >= 32 && base < 127 ? table[base - 32]! : 556\n}\nconst textWidth = (font: Font, size: number, s: string) => ([...s].reduce((w, ch) => w + charWidth(font, ch), 0) * size) / 1000\n\n/** Greedy word wrap to `max` points; a word wider than the line is cut. Explicit newlines are honored. */\nfunction wrap(font: Font, size: number, text: string, max: number): string[] {\n const lines: string[] = []\n for (const para of text.split(/\\r?\\n/)) {\n let line = ''\n for (const word of para.split(/\\s+/).filter(Boolean)) {\n let w = word\n while (textWidth(font, size, w) > max) {\n let n = 1\n while (n < w.length && textWidth(font, size, w.slice(0, n + 1)) <= max) n++\n if (line) (lines.push(line), (line = ''))\n lines.push(w.slice(0, n))\n w = w.slice(n)\n }\n const next = line ? `${line} ${w}` : w\n if (line && textWidth(font, size, next) > max) (lines.push(line), (line = w))\n else line = next\n }\n lines.push(line)\n }\n return lines\n}\n\nconst n = (x: number) => String(Math.round(x * 100) / 100)\n\n/** The voucher as the bytes of a PDF. Throws only if the result would exceed `MAX_VOUCHER_PDF_BYTES`. */\nexport function renderVoucherPdf(v: VoucherView, opts: VoucherPdfOptions = {}): Uint8Array {\n const locale = opts.locale ?? 'es-MX'\n const t = docText(locale)\n const [W, H] = opts.paper === 'letter' ? [612, 792] : [595.28, 841.89]\n const M = 54\n const right = W - M\n const inner = right - M\n\n const pages: string[] = []\n let ops = ''\n let y = H - M\n const newPage = () => {\n if (pages.length >= MAX_PAGES) return false\n if (ops) pages.push(ops)\n ops = ''\n y = H - M\n return true\n }\n const text = (font: Font, size: number, x: number, s: string, gray = 0) => {\n ops += `BT ${n(gray)} g /${font} ${size} Tf ${n(x)} ${n(y)} Td ${pdfString(s)} Tj ET\\n`\n }\n const ensure = (h: number) => {\n if (y - h < M) newPage()\n }\n const paragraph = (font: Font, size: number, s: string, opt: { x?: number; width?: number; gray?: number; lead?: number } = {}) => {\n const lead = opt.lead ?? size * 1.4\n for (const line of wrap(font, size, s, opt.width ?? inner)) {\n ensure(lead)\n y -= lead\n if (line) text(font, size, opt.x ?? M, line, opt.gray ?? 0)\n }\n }\n\n // Header: title and subtitle on the left, amount on the right.\n const amount = formatMoney(v.amount, locale)\n const top = y\n y -= 20\n text('F2', 20, M, t.title)\n const subtitle = [opts.shopName, methodName(v, t), opts.number ? `${t.order} ${opts.number}` : ''].filter(Boolean).join(' · ')\n if (subtitle) {\n y -= 15\n paragraph('F1', 10, subtitle, { width: amount ? inner * 0.6 : inner, gray: 0.33, lead: 12 })\n }\n const afterTitle = y\n if (amount) {\n y = top - 10\n const label = t.total.toUpperCase()\n text('F1', 8, right - textWidth('F1', 8, label), label, 0.33)\n y -= 22\n text('F2', 22, right - textWidth('F2', 22, amount), amount)\n }\n y = Math.min(afterTitle, y) - 10\n ops += `0 g 2 w ${n(M)} ${n(y)} m ${n(right)} ${n(y)} l S\\n`\n y -= 8\n\n // Fields of the method, each in a box.\n for (const f of voucherFields(v, t)) {\n const size = f.value.length > 36 ? 12 : 16\n const lines = wrap('F3', size, f.value, inner - 24)\n const h = 14 + 12 + lines.length * size * 1.3 + 8\n ensure(h + 12)\n y -= 12\n ops += `0 G 0.8 w ${n(M)} ${n(y - h)} ${n(inner)} ${n(h)} re S\\n`\n const boxTop = y\n y -= 16\n text('F1', 8, M + 12, f.label.toUpperCase(), 0.33)\n y -= 4\n for (const line of lines) {\n y -= size * 1.3\n text('F3', size, M + 12, line)\n }\n y = boxTop - h\n }\n\n // Barcode: filled rectangles, the quiet zone included in the width.\n const g = v.barcode ? barcodeGeometry(v.barcode, { ...(v.barcode_format ? { format: v.barcode_format } : {}), height: 60 }) : null\n if (g && v.barcode) {\n const scale = Math.min(1, inner / g.width) * 0.75 // module = 1.5pt at most\n const bw = g.width * scale\n const bh = 60\n ensure(bh + 40)\n y -= 18\n ops += `0 g\\n`\n const x0 = M + (inner - bw) / 2\n for (const r of g.rects) ops += `${n(x0 + r.x * scale)} ${n(y - bh)} ${n(r.w * scale)} ${n(bh)} re f\\n`\n y -= bh + 12\n const cw = textWidth('F4', 10, v.barcode)\n text('F4', 10, M + (inner - Math.min(cw, inner)) / 2, v.barcode.slice(0, Math.floor(inner / 6)))\n y -= 4\n }\n\n const expires = formatDate(v.expires_at, locale, opts.timeZone)\n if (expires) {\n y -= 8\n paragraph('F2', 10, `${t.expires}: ${expires.replace(/\\.$/, '')}.`)\n paragraph('F1', 10, t.expiresNote)\n }\n\n y -= 10\n ensure(40)\n paragraph('F2', 12, t.stepsTitle, { lead: 16 })\n voucherSteps(v, t).forEach((s, i) => {\n const lines = wrap('F1', 10, s, inner - 18)\n ensure(lines.length * 14 + 2)\n y -= 2\n lines.forEach((line, j) => {\n y -= 14\n if (j === 0) text('F1', 10, M, `${i + 1}.`)\n text('F1', 10, M + 18, line)\n })\n })\n if (v.instructions) {\n y -= 6\n paragraph('F1', 9, v.instructions, { gray: 0.33, lead: 12 })\n }\n y -= 8\n paragraph('F1', 8, t.footer, { gray: 0.33, lead: 11 })\n pages.push(ops)\n\n // Objects: 1 catalog, 2 pages, 3..6 fonts, 7 info, then (page, content) pairs.\n const objs: string[] = []\n const kids = pages.map((_, i) => `${8 + i * 2} 0 R`).join(' ')\n objs[1] = '<< /Type /Catalog /Pages 2 0 R >>'\n objs[2] = `<< /Type /Pages /Kids [${kids}] /Count ${pages.length} >>`\n ;(['F1', 'F2', 'F3', 'F4'] as Font[]).forEach((f, i) => (objs[3 + i] = `<< /Type /Font /Subtype /Type1 /BaseFont /${FONT_NAMES[f]} /Encoding /WinAnsiEncoding >>`))\n objs[7] = `<< /Title ${pdfString(`${t.title}${opts.shopName ? ` - ${opts.shopName}` : ''}`)} /Producer ${pdfString('@asteby/storefront-react')} >>`\n pages.forEach((content, i) => {\n objs[8 + i * 2] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${n(W)} ${n(H)}] /Resources << /Font << /F1 3 0 R /F2 4 0 R /F3 5 0 R /F4 6 0 R >> >> /Contents ${9 + i * 2} 0 R >>`\n objs[9 + i * 2] = `<< /Length ${content.length} >>\\nstream\\n${content}endstream`\n })\n\n let out = '%PDF-1.4\\n%\\xE2\\xE3\\xCF\\xD3\\n'\n const offsets: number[] = []\n for (let i = 1; i < objs.length; i++) {\n offsets[i] = out.length\n out += `${i} 0 obj\\n${objs[i]}\\nendobj\\n`\n }\n const xref = out.length\n out += `xref\\n0 ${objs.length}\\n0000000000 65535 f \\n`\n for (let i = 1; i < objs.length; i++) out += `${String(offsets[i]).padStart(10, '0')} 00000 n \\n`\n out += `trailer\\n<< /Size ${objs.length} /Root 1 0 R /Info 7 0 R >>\\nstartxref\\n${xref}\\n%%EOF\\n`\n\n if (out.length > MAX_VOUCHER_PDF_BYTES) throw new RangeError('voucher PDF too large')\n const bytes = new Uint8Array(out.length)\n for (let i = 0; i < out.length; i++) bytes[i] = out.charCodeAt(i) & 0xff\n return bytes\n}\n","/**\n * Printable voucher (A4 HTML) that does not depend on any payment gateway: built only from the voucher data OPS keeps.\n * Loaded on demand (the buyer taps print/download) or by `pendingVoucherResponse` on the server; plain text, no React.\n * Everything external passes through `esc` before it enters the HTML.\n */\nimport { barcodeGeometry, type VoucherView } from './voucher.js'\nimport { docText, formatDate, formatMoney, methodName, voucherFields, voucherSteps } from './voucher-text.js'\n\nexport function esc(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' })[c] as string)\n}\n\nexport type VoucherDocumentOptions = {\n shopName?: string\n /** Order number, if there is one yet. */\n number?: string | null\n locale?: string\n /** IANA zone the expiry is printed in (default: the runtime's). */\n timeZone?: string\n /** Print button on screen (hidden when printing). Needs JS; without it the page says to use the browser's print. */\n printButton?: boolean\n /** Link of the real PDF of this voucher (a plain `<a download>`, so it works without JS). */\n pdfHref?: string\n /** Opens the print dialog on load. */\n autoPrint?: boolean\n /** `<script>` nonce when the one serving the voucher sends a CSP with `script-src 'nonce-…'`. */\n nonce?: string\n}\n\nconst CSS = `\n@page { size: A4; margin: 18mm; }\n* { box-sizing: border-box; }\nbody { margin: 0; font: 14px/1.5 system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif; color: #111; background: #fff; }\nmain { max-width: 174mm; margin: 0 auto; padding: 24px 16px; }\nh1 { font-size: 22px; margin: 0; }\n.muted { color: #555; }\n.head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; border-bottom: 3px solid #111; padding-bottom: 12px; }\n.amount { margin: 0; font-size: 28px; font-weight: 700; text-align: right; }\n.box { border: 1px solid #111; padding: 14px 16px; margin-top: 18px; }\n.label { margin: 0; font-weight: 400; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: #555; }\n.value { margin: 0; font: 700 22px/1.3 ui-monospace, \"SF Mono\", Menlo, Consolas, monospace; word-break: break-all; letter-spacing: .04em; }\n.bar { text-align: center; }\n.bar svg { max-width: 100%; height: auto; }\n.note { margin-top: 18px; font-size: 12px; }\n.pre { white-space: pre-line; }\n.steps-title { font-size: 16px; margin: 18px 0 0; }\n.steps { margin: 6px 0 0; padding-left: 20px; }\n.bar { margin: 18px 0 0; }\n.actions { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n.btn { display: inline-block; font: inherit; padding: 10px 18px; border: 2px solid #111; background: #111; color: #fff; cursor: pointer; text-decoration: none; }\n.btn.alt { background: #fff; color: #111; }\n.btn:focus-visible { outline: 3px solid #1a56db; outline-offset: 2px; }\n@media print { .actions { display: none; } main { padding: 0; } }\n`\n\nfunction barcodeSvg(value: string, format: VoucherView['barcode_format'], label: string): string | null {\n const g = barcodeGeometry(value, { ...(format ? { format } : {}) })\n if (!g) return null\n const rects = g.rects.map((r) => `<rect x=\"${r.x}\" y=\"0\" width=\"${r.w}\" height=\"${g.height}\"/>`).join('')\n return `<svg viewBox=\"0 0 ${g.width} ${g.height}\" width=\"${g.width}\" height=\"${g.height}\" role=\"img\" aria-label=\"${esc(label)} ${esc(value)}\" shape-rendering=\"crispEdges\" fill=\"#000\">${rects}</svg>`\n}\n\n/** Complete HTML document of the voucher. Missing data is simply not drawn. */\nexport function renderVoucherDocument(v: VoucherView, opts: VoucherDocumentOptions = {}): string {\n const locale = opts.locale ?? 'es-MX'\n const t = docText(locale)\n const shop = opts.shopName || ''\n const method = methodName(v, t)\n const code = v.barcode\n const svg = code ? barcodeSvg(code, v.barcode_format, t.barcode) : null\n const expires = formatDate(v.expires_at, locale, opts.timeZone)\n const fields = voucherFields(v, t)\n const steps = voucherSteps(v, t)\n const subtitle = [shop, method, opts.number ? `${t.order} ${opts.number}` : ''].filter(Boolean).map(esc).join(' · ')\n const actions = opts.printButton || opts.pdfHref\n return `<!doctype html>\n<html lang=\"${esc(locale)}\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<meta name=\"robots\" content=\"noindex\"><title>${esc(t.title)}${shop ? ` - ${esc(shop)}` : ''}</title><style>${CSS}</style></head>\n<body><main aria-labelledby=\"t\">\n<header class=\"head\"><div><h1 id=\"t\">${esc(t.title)}</h1><p class=\"muted\" data-voucher-method=\"${esc(v.method ?? '')}\">${subtitle}</p></div>\n${v.amount ? `<div><p class=\"label\" style=\"text-align:right\">${esc(t.total)}</p><p class=\"amount\">${esc(formatMoney(v.amount, locale))}</p></div>` : ''}</header>\n${fields.map((f) => `<section class=\"box\" data-field=\"${f.key}\"><h2 class=\"label\">${esc(f.label)}</h2><p class=\"value\">${esc(f.value)}</p></section>`).join('')}\n${svg ? `<figure class=\"bar\">${svg}<figcaption class=\"muted\" style=\"font-family:ui-monospace,monospace\">${esc(code as string)}</figcaption></figure>` : ''}\n${expires ? `<p><strong>${esc(t.expires)}:</strong> ${esc(expires.replace(/\\.$/, ''))}. ${esc(t.expiresNote)}</p>` : ''}\n<h2 class=\"steps-title\">${esc(t.stepsTitle)}</h2>\n<ol class=\"steps\">${steps.map((s) => `<li>${esc(s)}</li>`).join('')}</ol>\n${v.instructions ? `<p class=\"note pre muted\">${esc(v.instructions)}</p>` : ''}\n<p class=\"note muted\">${esc(t.footer)}</p>\n${\n actions\n ? `<div class=\"actions\" role=\"group\" aria-label=\"${esc(t.title)}\">${opts.pdfHref ? `<a class=\"btn\" href=\"${esc(opts.pdfHref)}\" download=\"ficha-de-pago.pdf\" data-voucher-pdf>${esc(t.downloadPdf)}</a>` : ''}${opts.printButton ? `<button type=\"button\" class=\"btn alt\" id=\"print\" hidden>${esc(t.print)}</button><noscript><p class=\"note muted\">${esc(t.noScript)}</p></noscript>` : ''}</div>`\n : ''\n}\n</main>\n${opts.printButton || opts.autoPrint ? `<script${opts.nonce ? ` nonce=\"${esc(opts.nonce)}\"` : ''}>(function(){var b=document.getElementById(\"print\");if(b){b.hidden=false;b.addEventListener(\"click\",function(){window.print()})}${opts.autoPrint ? 'window.addEventListener(\"load\",function(){setTimeout(function(){window.print()},300)});' : ''}})();</script>` : ''}\n</body></html>`\n}\n","/**\n * Server side of the account screen (`@asteby/storefront-react/account/server`): `loadAuthCapabilities` for the loader\n * and `createAuthAction` for the action. No React, no router: Web `Request`/`Response` only, so any framework mounts it.\n *\n * The browser never talks to OPS. The action signs the buyer in with the store's `sk_` client and keeps the session\n * token in the store's own cookie, which is passed in (`customerCookie`), so name, flags and signing stay the store's.\n */\nimport { invoiceFileBytes, isStorefrontError, repairPath, safeInvoiceFilename, type CustomerCapabilities, type CustomerSession, type StorefrontClient } from '@asteby/storefront'\nimport { voucherOf } from './voucher.js'\nimport type { AuthActionData, AuthErrorCode, AuthIntent } from './types.js'\n\nexport type { AuthActionData, AuthErrorCode, AuthIntent, AuthStep } from './types.js'\n\n/** What is assumed when the store cannot be asked: password sign-in works, nothing else is offered. */\nexport const SAFE_AUTH_CAPABILITIES: Readonly<CustomerCapabilities> = Object.freeze({\n password: true,\n email_verification: false,\n otp_channels: Object.freeze([]) as unknown as CustomerCapabilities['otp_channels'],\n})\n\nconst FAILURE_TTL_MS = 5_000\nconst LOG_EVERY_MS = 60_000\nlet lastLogAt = -Infinity\n\n/** Server log (never the buyer's data): says what is missing and where it is repaired. At most once a minute. */\nfunction logMisconfigured(scopes: readonly string[]): void {\n const t = Date.now()\n if (t - lastLogAt < LOG_EVERY_MS) return\n lastLogAt = t\n console.error(\n `[@asteby/storefront-react] La credencial de la tienda no tiene permisos${scopes.length ? ` (${scopes.join(', ')})` : ''}; ` +\n `las cuentas de comprador no funcionan hasta repararlo en ${repairPath()}.`,\n )\n}\nconst cache = new WeakMap<object, { at: number; ok: boolean; value: CustomerCapabilities }>()\n\nexport type LoadAuthCapabilitiesOptions = {\n /** How long a good answer is reused per client (default 60 s). `0` disables the cache. */\n ttlMs?: number\n signal?: AbortSignal\n /** Clock, for tests. */\n now?: () => number\n}\n\n/**\n * Asks the store which ways of signing in it offers, with a short cache per client. It NEVER throws: when OPS does not\n * answer (older server, outage, token without scope) it returns `SAFE_AUTH_CAPABILITIES` and retries after a few\n * seconds, so the account screen always renders. Use it as the loader: `loader = () => loadAuthCapabilities(storefront)`.\n */\nexport async function loadAuthCapabilities(sf: StorefrontClient, options: LoadAuthCapabilitiesOptions = {}): Promise<CustomerCapabilities> {\n const now = options.now ?? Date.now\n const ttl = options.ttlMs ?? 60_000\n const hit = cache.get(sf)\n if (hit && now() - hit.at < (hit.ok ? ttl : FAILURE_TTL_MS)) return hit.value\n try {\n const got = await sf.customer.capabilities(options.signal ? { signal: options.signal } : undefined)\n const missing = Array.isArray(got?.missing_scopes) ? got.missing_scopes.filter((x): x is string => typeof x === 'string') : []\n const value: CustomerCapabilities = {\n // `password: false` (including for a missing scope) is respected: the form never offers what the token cannot do.\n password: got?.password !== false,\n email_verification: got?.email_verification === true,\n otp_channels: Array.isArray(got?.otp_channels) ? got.otp_channels : [],\n ...(typeof got?.unavailable_reason === 'string' ? { unavailable_reason: got.unavailable_reason } : {}),\n ...(missing.length ? { missing_scopes: missing } : {}),\n }\n if (value.unavailable_reason === 'missing_scope') logMisconfigured(missing)\n cache.set(sf, { at: now(), ok: true, value })\n return value\n } catch (err) {\n if (isStorefrontError(err) && err.code === 'insufficient_scope') {\n // The token cannot even read capabilities: do not offer password sign-in it could not complete.\n const value: CustomerCapabilities = {\n password: false,\n email_verification: false,\n otp_channels: [],\n unavailable_reason: 'missing_scope',\n missing_scopes: err.requiredScopes,\n }\n logMisconfigured(err.requiredScopes)\n cache.set(sf, { at: now(), ok: false, value })\n return value\n }\n cache.set(sf, { at: now(), ok: false, value: SAFE_AUTH_CAPABILITIES })\n return SAFE_AUTH_CAPABILITIES\n }\n}\n\n/** The part of a cookie the action needs. React Router's `createCookie(...)` and Remix's fit as they are. */\nexport type AuthCookie = {\n serialize(value: string, options?: { expires?: Date; maxAge?: number }): string | Promise<string>\n}\n\n/** Allows only a path inside the site (`/account`, `/orders?x=1`); anything else is `fallback`. Blocks `//host` and `/\\host`. */\nexport function safeNextPath(raw: string | null | undefined, fallback = '/account'): string {\n if (typeof raw !== 'string') return fallback\n const v = raw.trim()\n if (!v.startsWith('/') || v.startsWith('//') || v.startsWith('/\\\\') || /[\\u0000-\\u001f\\\\]/.test(v)) return fallback\n return v\n}\n\nexport type CreateAuthActionOptions = {\n storefront: StorefrontClient\n /** The store's cookie for the buyer session token (`createCookie('sf_customer', ...)`). */\n customerCookie: AuthCookie\n /** Validates the `next` field before redirecting (default `safeNextPath`). Return a same-site path. */\n safeNext?: (raw: string | null) => string\n /** Where to go after signing in when there is no `next` (default `/account`). Only used by the default `safeNext`. */\n defaultNext?: string\n /** Shopper IP for the per-shopper rate limit (see `clientIp` of the client). */\n clientIp?: (request: Request) => string | null | undefined\n /** Capabilities source, for tests or a shared cache (default `loadAuthCapabilities`). */\n capabilities?: (sf: StorefrontClient) => Promise<CustomerCapabilities>\n}\n\nexport type AuthActionArgs = { request: Request }\n\nconst fail = (code: AuthErrorCode, extra: Partial<AuthActionData> = {}, field?: string): AuthActionData => ({\n ok: false,\n ...extra,\n error: { code, ...(field ? { field } : {}) },\n})\n\n/** Maps what the SDK threw to the error the form shows. `ctx` tells what a 401 means on this step. */\nfunction toFailure(err: unknown, ctx: 'credentials' | 'code' | 'other', extra: Partial<AuthActionData>): AuthActionData {\n if (!isStorefrontError(err)) return fail('unavailable', extra)\n if (err.code === 'insufficient_scope') {\n logMisconfigured(err.requiredScopes)\n return fail('store_misconfigured', extra)\n }\n switch (err.status) {\n case 401:\n return fail(ctx === 'credentials' ? 'invalid_credentials' : ctx === 'code' ? 'invalid_code' : 'unavailable', extra, ctx === 'code' ? 'code' : undefined)\n case 409:\n return fail('email_taken', extra, 'email')\n case 429:\n return fail('rate_limited', extra)\n case 400:\n case 422:\n return fail('validation', extra, err.field)\n case 403:\n case 404:\n return fail('unsupported', extra)\n default:\n return fail('unavailable', extra)\n }\n}\n\n/**\n * The account action: one `POST` form with an `intent` field.\n *\n * | intent | fields | result |\n * | ------------- | ---------------------------------------- | -------------------------------------------------------- |\n * | `login` | email, password | signs in -> redirect |\n * | `register` | email, password, first_name?, last_name? | `step: 'verify'` or, without verification, redirect |\n * | `verify` | email, code | account ready -> redirect |\n * | `otp-request` | email | `step: 'otp'` (code sent) |\n * | `otp-login` | email, code | signs in -> redirect |\n * | `forgot` | email | `step: 'reset'` (always, so it never says who has an account) |\n * | `reset` | email, code, password | new password and signed in -> redirect |\n *\n * Success is a `303` to `next` (validated by `safeNext`) with `Set-Cookie` holding the session token; anything else is\n * an `AuthActionData` to render with `<AccountAuth data={...}>`. Passwords and codes are never echoed back.\n */\nexport function createAuthAction(options: CreateAuthActionOptions) {\n const { storefront: sf, customerCookie } = options\n const safeNext = options.safeNext ?? ((raw: string | null) => safeNextPath(raw, options.defaultNext ?? '/account'))\n const loadCaps = options.capabilities ?? ((client: StorefrontClient) => loadAuthCapabilities(client))\n\n async function signedIn(session: CustomerSession, next: string): Promise<Response> {\n const expires = new Date(session.expires_at)\n const cookie = await customerCookie.serialize(session.token, Number.isNaN(expires.getTime()) ? undefined : { expires })\n return new Response(null, { status: 303, headers: { Location: next, 'Set-Cookie': cookie } })\n }\n\n return async function authAction({ request }: AuthActionArgs): Promise<Response | AuthActionData> {\n const form = await request.formData().catch(() => null)\n if (!form) return fail('validation')\n const text = (name: string) => {\n const v = form.get(name)\n return typeof v === 'string' ? v : ''\n }\n const intent = text('intent') as AuthIntent\n const email = text('email').trim()\n const password = text('password')\n const code = text('code').replace(/\\s+/g, '')\n const next = safeNext(text('next') || null)\n const ip = options.clientIp?.(request)\n const w = ip ? { clientIp: ip } : undefined\n const carry: Partial<AuthActionData> = { email }\n if (!email) return fail('validation', carry, 'email')\n\n const caps = await loadCaps(sf)\n const passwordOn = caps.password\n // Off because the store's token lacks a scope (not a merchant choice): say so instead of \"not available\".\n const misconfigured = caps.unavailable_reason === 'missing_scope'\n const off = (): AuthActionData => fail(misconfigured ? 'store_misconfigured' : 'unsupported', carry)\n const otpOn = caps.otp_channels.includes('email')\n\n try {\n switch (intent) {\n case 'login': {\n if (!passwordOn) return off()\n if (!password) return fail('validation', carry, 'password')\n return await signedIn(await sf.customer.loginWithPassword({ email, password }, w), next)\n }\n case 'register': {\n if (!passwordOn) return off()\n if (!password) return fail('validation', carry, 'password')\n const res = await sf.customer.register(\n { email, password, ...(text('first_name').trim() ? { first_name: text('first_name').trim() } : {}), ...(text('last_name').trim() ? { last_name: text('last_name').trim() } : {}) },\n w,\n )\n return res.status === 'created' ? await signedIn(res.session, next) : { ok: true, step: 'verify', email }\n }\n case 'verify': {\n if (!code) return fail('validation', carry, 'code')\n return await signedIn(await sf.customer.verifyRegistration({ email, code }, w), next)\n }\n case 'otp-request': {\n if (!otpOn) return off()\n await sf.customer.requestOtp({ email }, w)\n return { ok: true, step: 'otp', email }\n }\n case 'otp-login': {\n if (!otpOn) return off()\n if (!code) return fail('validation', carry, 'code')\n return await signedIn(await sf.customer.createSession({ email, code }, w), next)\n }\n case 'forgot': {\n if (!passwordOn || !otpOn) return off()\n try {\n await sf.customer.requestOtp({ email }, w)\n } catch (err) {\n // Only throttling and a bad email are told; anything else looks the same as success (no account enumeration).\n if (isStorefrontError(err) && (err.status === 429 || err.status === 400)) throw err\n }\n return { ok: true, step: 'reset', email }\n }\n case 'reset': {\n if (!passwordOn) return off()\n if (!code) return fail('validation', carry, 'code')\n if (!password) return fail('validation', carry, 'password')\n await sf.customer.resetPassword({ email, code, password }, w)\n return await signedIn(await sf.customer.loginWithPassword({ email, password }, w), next)\n }\n default:\n return fail('validation', carry)\n }\n } catch (err) {\n const step = intent === 'verify' ? 'verify' : intent === 'otp-login' ? 'otp' : intent === 'reset' || intent === 'forgot' ? 'reset' : undefined\n const ctx = intent === 'login' ? 'credentials' : step ? 'code' : 'other'\n return toFailure(err, ctx, step && intent !== 'forgot' ? { ...carry, step } : carry)\n }\n }\n}\n\nexport type AuthAction = ReturnType<typeof createAuthAction>\n\n// ---------------------------------------------------------------------------\n// Resource routes of the order screens: the invoice file and the printable voucher\n// ---------------------------------------------------------------------------\n\n/** Headers every answer of a buyer route carries, error or not: never cached, never sniffed, never rendered as a page. */\nconst LOCKED_HEADERS = {\n 'Cache-Control': 'private, no-store',\n 'X-Content-Type-Options': 'nosniff',\n 'Referrer-Policy': 'no-referrer',\n 'X-Robots-Tag': 'noindex',\n} as const\nconst TEXT_HEADERS = { ...LOCKED_HEADERS, 'Content-Type': 'text/plain; charset=utf-8', 'Content-Security-Policy': \"default-src 'none'; sandbox\" } as const\nconst textResponse = (status: number, body: string, extra: Record<string, string> = {}) => new Response(body, { status, headers: { ...TEXT_HEADERS, ...extra } })\n\n/** Largest invoice file served (a CFDI PDF is well under 1 MB): anything bigger is refused before it is decoded. */\nexport const MAX_INVOICE_FILE_BYTES = 10 * 1024 * 1024\n\n/** Statuses a buyer-facing route answers with; anything unexpected is a plain 502 (never the upstream message). */\nfunction failureResponse(err: unknown): Response {\n if (isStorefrontError(err)) {\n if (err.status === 401) return textResponse(401, 'Sesion vencida')\n if (err.status === 404) return textResponse(404, 'No encontrado')\n if (err.status === 429) {\n const wait = typeof err.retryAfter === 'number' && Number.isFinite(err.retryAfter) && err.retryAfter > 0 ? Math.min(3600, Math.ceil(err.retryAfter)) : null\n return textResponse(429, 'Demasiados intentos', wait ? { 'Retry-After': String(wait) } : {})\n }\n }\n return textResponse(502, 'No pudimos obtener el archivo')\n}\n\nconst FILE_TYPES: Record<string, string> = { pdf: 'application/pdf', xml: 'application/xml' }\n\nexport type InvoiceFileResponseOptions = {\n /** Client WITH the buyer's session (`storefront.withCustomerToken(token)`). */\n storefront: StorefrontClient\n orderId: string\n invoiceId: string\n /** From the URL (`pdf` | `xml`); anything else is a 404. */\n kind: string | undefined\n signal?: AbortSignal\n /** Largest file served, in bytes (default `MAX_INVOICE_FILE_BYTES`, 10 MB); a bigger one is a generic 502. */\n maxBytes?: number\n}\n\n/**\n * Serves one file of an invoice or credit note to the signed-in buyer: the route handler of the store\n * (`account.order.$id.invoice.$doc.$kind.ts`) is `return invoiceFileResponse({ storefront, orderId, invoiceId, kind })`.\n * The buyer's token and any PAC URL stay on the server; the browser gets bytes with `Content-Disposition: attachment`,\n * `Cache-Control: private, no-store`, `nosniff` and a sandboxing CSP. The content type is taken from `kind`, never\n * from what the API says, so a file cannot make the browser render HTML under your origin. 401/404/429 pass through;\n * anything else is a generic 502 with no upstream detail.\n */\nexport async function invoiceFileResponse({ storefront, orderId, invoiceId, kind, signal, maxBytes = MAX_INVOICE_FILE_BYTES }: InvoiceFileResponseOptions): Promise<Response> {\n if (kind !== 'pdf' && kind !== 'xml') return textResponse(404, 'No encontrado')\n if (!orderId || !invoiceId) return textResponse(404, 'No encontrado')\n try {\n const file = await storefront.customer.invoiceFile(orderId, invoiceId, kind, signal ? { signal } : undefined)\n if (!file) return textResponse(404, 'No encontrado')\n // Checked on the encoded text (4 chars per 3 bytes, whitespace aside) so a huge answer is never decoded.\n if (file.content_base64.length > Math.ceil(maxBytes / 3) * 4 * 1.1 + 64) return textResponse(502, 'No pudimos obtener el archivo')\n const bytes = invoiceFileBytes(file)\n if (bytes.byteLength > maxBytes) return textResponse(502, 'No pudimos obtener el archivo')\n const name = safeInvoiceFilename(file.filename, kind === 'pdf' ? 'factura.pdf' : 'factura.xml')\n const filename = name.toLowerCase().endsWith(`.${kind}`) ? name : `${name}.${kind}`\n return new Response(bytes as BodyInit, {\n status: 200,\n headers: {\n 'Content-Type': FILE_TYPES[kind]!,\n 'Content-Length': String(bytes.byteLength),\n 'Content-Disposition': `attachment; filename=\"${filename}\"`,\n ...LOCKED_HEADERS,\n 'Content-Security-Policy': \"default-src 'none'; sandbox\",\n },\n })\n } catch (err) {\n return failureResponse(err)\n }\n}\n\nexport type PendingVoucherResponseOptions = {\n /** Client WITH the buyer's session. */\n storefront: StorefrontClient\n /** Checkout id (`PendingPayment.id`). */\n id: string\n /** `?descargar=1`: deliver it as a file instead of showing it. */\n download?: boolean\n /**\n * `html` (default): the printable page. `pdf`: a real `application/pdf` (`ficha-de-pago.pdf`, always an attachment),\n * generated here without a browser. Same ownership check for both.\n */\n format?: 'html' | 'pdf'\n /** Paper of the PDF (default A4). */\n paper?: 'a4' | 'letter'\n /** Where the page's \"Descargar PDF\" link points (default `?formato=pdf` on the same route). */\n pdfHref?: string\n shopName?: string\n locale?: string\n timeZone?: string\n signal?: AbortSignal\n}\n\n/**\n * The printable A4 voucher of a pending payment of the signed-in buyer. Served only when `id` is in HIS list (the list\n * is scoped by buyer in OPS): any other id is a 404. The document is self-contained, so its CSP allows nothing\n * external, only its own print script (with a per-response nonce) and inline styles.\n */\nexport async function pendingVoucherResponse({ storefront, id, download = false, format = 'html', paper, pdfHref = '?formato=pdf', shopName, locale, timeZone, signal }: PendingVoucherResponseOptions): Promise<Response> {\n try {\n const page = await storefront.customer.pendingPayments({ first: 100 }, signal ? { signal } : undefined)\n const item = page.nodes.find((p) => p.id === id)\n const voucher = item ? voucherOf(item) : null\n if (!item || !voucher) return textResponse(404, 'Ficha no encontrada')\n const safeId = id.replace(/[^A-Za-z0-9-]/g, '').slice(0, 8) || 'ficha'\n if (format === 'pdf') {\n const { renderVoucherPdf } = await import('./voucher-pdf.js')\n const bytes = renderVoucherPdf(voucher, { ...(shopName ? { shopName } : {}), ...(locale ? { locale } : {}), ...(timeZone ? { timeZone } : {}), ...(paper ? { paper } : {}) })\n return new Response(bytes as BodyInit, {\n status: 200,\n headers: {\n 'Content-Type': 'application/pdf',\n 'Content-Length': String(bytes.byteLength),\n 'Content-Disposition': 'attachment; filename=\"ficha-de-pago.pdf\"',\n ...LOCKED_HEADERS,\n 'Content-Security-Policy': \"default-src 'none'; sandbox\",\n },\n })\n }\n const nonce = btoa(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(16))))\n const { renderVoucherDocument } = await import('./voucher-document.js')\n const html = renderVoucherDocument(voucher, { ...(shopName ? { shopName } : {}), ...(locale ? { locale } : {}), ...(timeZone ? { timeZone } : {}), printButton: !download, ...(download ? {} : { pdfHref }), nonce })\n return new Response(html, {\n status: 200,\n headers: {\n 'Content-Type': 'text/html; charset=utf-8',\n ...LOCKED_HEADERS,\n // The download carries no script, so its policy allows none.\n 'Content-Security-Policy': `default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src ${download ? \"'none'\" : `'nonce-${nonce}'`}; base-uri 'none'; form-action 'none'; frame-ancestors 'self'`,\n ...(download ? { 'Content-Disposition': `attachment; filename=\"ficha-de-pago-${safeId}.html\"` } : {}),\n },\n })\n } catch (err) {\n return failureResponse(err)\n }\n}\n\n/** The PDF of a pending payment's voucher: `pendingVoucherResponse` with `format: 'pdf'`. */\nexport function pendingVoucherPdfResponse(options: Omit<PendingVoucherResponseOptions, 'format' | 'download' | 'pdfHref'>): Promise<Response> {\n return pendingVoucherResponse({ ...options, format: 'pdf' })\n}\n\n// Account settings (sessions, preferences, export, deletion): see ./settings-server.ts\nexport { createAccountSettingsAction, loadAccountSessions, loadAccountSettings, toSettingsFailure } from './settings-server.js'\nexport type { AccountSettingsAction, AccountSettingsData, AccountSettingsActionArgs, CreateAccountSettingsActionOptions, SettingsCookie } from './settings-server.js'\nexport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n","/**\n * Server side of the account settings (`@asteby/storefront-react/account/server`): `loadAccountSessions` for the loader\n * and `createAccountSettingsAction` for the action. No React, no router: Web `Request`/`Response` only.\n *\n * The browser never talks to OPS and never sees the buyer's token: the action reads it from the store's own cookie\n * (passed in), builds a client with it (`withCustomerToken`) and calls the contract. Answers carry codes\n * (`SettingsErrorCode`), never a server message, a value of the buyer or a credential; nothing is logged here.\n */\nimport { isStorefrontError, type Customer, type CustomerCapabilities, type CustomerSessionInfo, type StorefrontClient, type StorefrontError } from '@asteby/storefront'\nimport type { AuthCookie } from './server.js'\nimport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n\nexport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n\n/** The store's cookie for the buyer session token. React Router's `createCookie(...)` and Remix's fit as they are. */\nexport type SettingsCookie = AuthCookie & {\n parse(header: string | null): unknown | Promise<unknown>\n}\n\n/**\n * The buyer's sessions for the loader. NEVER throws: a store whose server is older than contract 1.9, an outage or an\n * expired session is `null`, and `<SessionsList sessions={null}>` degrades while the rest of the page renders.\n */\nexport async function loadAccountSessions(customer: StorefrontClient, options: { signal?: AbortSignal } = {}): Promise<CustomerSessionInfo[] | null> {\n try {\n return await customer.customer.sessions.list(options.signal ? { signal: options.signal } : undefined)\n } catch {\n return null\n }\n}\n\n/** Everything the settings page reads, each part on its own: a part that cannot be read is `null` and its section degrades. */\nexport type AccountSettingsData = {\n customer: Customer | null\n capabilities: CustomerCapabilities | null\n sessions: CustomerSessionInfo[] | null\n}\n\n/**\n * The loader of the whole settings page. NEVER throws and never fails as a whole: the three reads run together and a\n * failed one (older server, outage, expired session) is `null` for that part only. `customer` is `null` also when the\n * buyer's session is dead: the page should then send them to sign in.\n */\nexport async function loadAccountSettings(customer: StorefrontClient, options: { signal?: AbortSignal } = {}): Promise<AccountSettingsData> {\n const o = options.signal ? { signal: options.signal } : undefined\n const [profile, capabilities, sessions] = await Promise.all([\n customer.customer.get(o).catch(() => null),\n customer.customer.capabilities(o).catch(() => null),\n loadAccountSessions(customer, options),\n ])\n return { customer: profile, capabilities, sessions }\n}\n\nexport type CreateAccountSettingsActionOptions = {\n /** The store's own client (`sk_` token, no buyer). */\n storefront: StorefrontClient\n /** The store's cookie holding the buyer session token. */\n customerCookie: SettingsCookie\n /** Shopper IP for the per-shopper rate limit (see `clientIp` of the client). */\n clientIp?: (request: Request) => string | null | undefined\n}\n\nexport type AccountSettingsActionArgs = { request: Request }\n\nexport const fail = (intent: SettingsIntent | undefined, code: SettingsErrorCode, extra: { field?: string; retryAfter?: number } = {}): AccountSettingsActionData => ({\n ok: false,\n ...(intent ? { intent } : {}),\n error: { code, ...(extra.field ? { field: extra.field } : {}), ...(extra.retryAfter ? { retryAfter: extra.retryAfter } : {}) },\n})\n\n/** Maps what the SDK threw to the code the form shows. `ctx: 'credential'` is a call that checks the buyer's password or code. */\nexport function toSettingsFailure(err: unknown, intent: SettingsIntent | undefined, ctx: 'credential' | 'other' = 'other'): AccountSettingsActionData {\n if (!isStorefrontError(err)) return fail(intent, 'unavailable')\n const e: StorefrontError = err\n if (e.code === 'insufficient_scope') return fail(intent, 'unsupported')\n switch (e.status) {\n case 401:\n return fail(intent, 'session_expired')\n case 403:\n return fail(intent, e.code === 'reauth_required' ? 'reauth_required' : 'unsupported')\n case 404:\n return fail(intent, 'unsupported')\n case 409:\n return fail(intent, e.field === 'orders' ? 'blocked_orders' : e.field === 'pending_payments' ? 'blocked_pending_payments' : 'validation', e.field ? { field: e.field } : {})\n case 429: {\n const wait = typeof e.retryAfter === 'number' && Number.isFinite(e.retryAfter) && e.retryAfter > 0 ? Math.min(3600, Math.ceil(e.retryAfter)) : undefined\n return fail(intent, 'rate_limited', wait ? { retryAfter: wait } : {})\n }\n case 400:\n case 422:\n return ctx === 'credential' ? fail(intent, 'invalid_credential') : fail(intent, 'validation', e.field ? { field: e.field } : {})\n default:\n return fail(intent, 'unavailable')\n }\n}\n\n/**\n * The settings action: one `POST` form with an `intent` field.\n *\n * | intent | fields | result |\n * | ----------------------- | ------------ | ---------------------------------------- |\n * | `session-revoke` | session_id | closes that session (idempotent) |\n * | `session-revoke-others` | - | closes every session but this one |\n * | `locale` | locale | saves the language (`''` = the store's) |\n * | `notifications` | pref, pref_shown | saves the checked / unchecked boxes |\n *\n * It answers `AccountSettingsActionData` to render with the section that sent it. A buyer without a session is\n * `session_expired` (the store redirects to sign-in).\n */\nexport function createAccountSettingsAction(options: CreateAccountSettingsActionOptions) {\n const { storefront: sf, customerCookie } = options\n\n return async function settingsAction({ request }: AccountSettingsActionArgs): Promise<Response | AccountSettingsActionData> {\n // Every intent changes the account (or spends a sign-in code), and the buyer's cookie rides along: a form that\n // another site submits is refused before anything is read. `Sec-Fetch-Site` is set by the browser and cannot be\n // forged by a page; an older browser that omits it falls back to the cookie's SameSite.\n if (request.headers.get('Sec-Fetch-Site')?.toLowerCase() === 'cross-site') return fail(undefined, 'validation')\n const form = await request.formData().catch(() => null)\n if (!form) return fail(undefined, 'validation')\n const text = (name: string) => {\n const v = form.get(name)\n return typeof v === 'string' ? v : ''\n }\n const intent = text('intent') as SettingsIntent\n const raw = await customerCookie.parse(request.headers.get('Cookie'))\n const token = typeof raw === 'string' && raw ? raw : null\n if (!token) return fail(intent, 'session_expired')\n const ip = options.clientIp?.(request)\n const w = ip ? { clientIp: ip } : undefined\n const customer = sf.withCustomerToken(token)\n\n try {\n switch (intent) {\n case 'session-revoke': {\n const id = text('session_id').trim()\n if (!id || id.length > 64) return fail(intent, 'validation', { field: 'session_id' })\n // `others` is its own intent: never let the field spell it, so one button cannot do the other's work.\n if (id.toLowerCase() === 'others') return fail(intent, 'validation', { field: 'session_id' })\n await customer.customer.sessions.revoke(id, w)\n return { ok: true, intent }\n }\n case 'session-revoke-others': {\n await customer.customer.sessions.revokeOthers(w)\n return { ok: true, intent }\n }\n case 'locale': {\n const locale = text('locale').trim()\n if (locale.length > 35) return fail(intent, 'validation', { field: 'locale' })\n await customer.customer.update({ locale: locale || null }, w)\n return { ok: true, intent, saved: true }\n }\n case 'notifications': {\n const shown = form.getAll('pref_shown').filter((v): v is string => typeof v === 'string')\n const checked = new Set(form.getAll('pref').filter((v): v is string => typeof v === 'string'))\n if (shown.length === 0 || shown.length > 30) return fail(intent, 'validation', { field: 'preferences' })\n const notifications: Record<string, Record<string, boolean>> = {}\n for (const pair of shown) {\n const m = /^([a-z][a-z0-9_]{0,31}):([a-z][a-z0-9_]{0,31})$/.exec(pair)\n if (!m) return fail(intent, 'validation', { field: 'preferences' })\n ;(notifications[m[1]!] ??= {})[m[2]!] = checked.has(pair)\n }\n await customer.customer.update({ preferences: { notifications } }, w)\n return { ok: true, intent, saved: true }\n }\n default:\n return fail(undefined, 'validation')\n }\n } catch (err) {\n // A session that is already gone (404) is what the buyer wanted; a stranger's looks the same, by design.\n if (intent === 'session-revoke' && isStorefrontError(err) && err.status === 404) return { ok: true, intent }\n return toSettingsFailure(err, intent)\n }\n }\n}\n\nexport type AccountSettingsAction = ReturnType<typeof createAccountSettingsAction>\n"]}
@@ -160,6 +160,15 @@ type PendingVoucherResponseOptions = {
160
160
  id: string;
161
161
  /** `?descargar=1`: deliver it as a file instead of showing it. */
162
162
  download?: boolean;
163
+ /**
164
+ * `html` (default): the printable page. `pdf`: a real `application/pdf` (`ficha-de-pago.pdf`, always an attachment),
165
+ * generated here without a browser. Same ownership check for both.
166
+ */
167
+ format?: 'html' | 'pdf';
168
+ /** Paper of the PDF (default A4). */
169
+ paper?: 'a4' | 'letter';
170
+ /** Where the page's "Descargar PDF" link points (default `?formato=pdf` on the same route). */
171
+ pdfHref?: string;
163
172
  shopName?: string;
164
173
  locale?: string;
165
174
  timeZone?: string;
@@ -170,6 +179,8 @@ type PendingVoucherResponseOptions = {
170
179
  * is scoped by buyer in OPS): any other id is a 404. The document is self-contained, so its CSP allows nothing
171
180
  * external, only its own print script (with a per-response nonce) and inline styles.
172
181
  */
173
- declare function pendingVoucherResponse({ storefront, id, download, shopName, locale, timeZone, signal }: PendingVoucherResponseOptions): Promise<Response>;
182
+ declare function pendingVoucherResponse({ storefront, id, download, format, paper, pdfHref, shopName, locale, timeZone, signal }: PendingVoucherResponseOptions): Promise<Response>;
183
+ /** The PDF of a pending payment's voucher: `pendingVoucherResponse` with `format: 'pdf'`. */
184
+ declare function pendingVoucherPdfResponse(options: Omit<PendingVoucherResponseOptions, 'format' | 'download' | 'pdfHref'>): Promise<Response>;
174
185
 
175
- export { type AccountSettingsAction, type AccountSettingsActionArgs, AccountSettingsActionData, type AccountSettingsData, type AuthAction, type AuthActionArgs, AuthActionData, type AuthCookie, type CreateAccountSettingsActionOptions, type CreateAuthActionOptions, type InvoiceFileResponseOptions, type LoadAuthCapabilitiesOptions, MAX_INVOICE_FILE_BYTES, type PendingVoucherResponseOptions, SAFE_AUTH_CAPABILITIES, type SettingsCookie, SettingsIntent, createAccountSettingsAction, createAuthAction, invoiceFileResponse, loadAccountSessions, loadAccountSettings, loadAuthCapabilities, pendingVoucherResponse, safeNextPath, toSettingsFailure };
186
+ export { type AccountSettingsAction, type AccountSettingsActionArgs, AccountSettingsActionData, type AccountSettingsData, type AuthAction, type AuthActionArgs, AuthActionData, type AuthCookie, type CreateAccountSettingsActionOptions, type CreateAuthActionOptions, type InvoiceFileResponseOptions, type LoadAuthCapabilitiesOptions, MAX_INVOICE_FILE_BYTES, type PendingVoucherResponseOptions, SAFE_AUTH_CAPABILITIES, type SettingsCookie, SettingsIntent, createAccountSettingsAction, createAuthAction, invoiceFileResponse, loadAccountSessions, loadAccountSettings, loadAuthCapabilities, pendingVoucherPdfResponse, pendingVoucherResponse, safeNextPath, toSettingsFailure };
@@ -160,6 +160,15 @@ type PendingVoucherResponseOptions = {
160
160
  id: string;
161
161
  /** `?descargar=1`: deliver it as a file instead of showing it. */
162
162
  download?: boolean;
163
+ /**
164
+ * `html` (default): the printable page. `pdf`: a real `application/pdf` (`ficha-de-pago.pdf`, always an attachment),
165
+ * generated here without a browser. Same ownership check for both.
166
+ */
167
+ format?: 'html' | 'pdf';
168
+ /** Paper of the PDF (default A4). */
169
+ paper?: 'a4' | 'letter';
170
+ /** Where the page's "Descargar PDF" link points (default `?formato=pdf` on the same route). */
171
+ pdfHref?: string;
163
172
  shopName?: string;
164
173
  locale?: string;
165
174
  timeZone?: string;
@@ -170,6 +179,8 @@ type PendingVoucherResponseOptions = {
170
179
  * is scoped by buyer in OPS): any other id is a 404. The document is self-contained, so its CSP allows nothing
171
180
  * external, only its own print script (with a per-response nonce) and inline styles.
172
181
  */
173
- declare function pendingVoucherResponse({ storefront, id, download, shopName, locale, timeZone, signal }: PendingVoucherResponseOptions): Promise<Response>;
182
+ declare function pendingVoucherResponse({ storefront, id, download, format, paper, pdfHref, shopName, locale, timeZone, signal }: PendingVoucherResponseOptions): Promise<Response>;
183
+ /** The PDF of a pending payment's voucher: `pendingVoucherResponse` with `format: 'pdf'`. */
184
+ declare function pendingVoucherPdfResponse(options: Omit<PendingVoucherResponseOptions, 'format' | 'download' | 'pdfHref'>): Promise<Response>;
174
185
 
175
- export { type AccountSettingsAction, type AccountSettingsActionArgs, AccountSettingsActionData, type AccountSettingsData, type AuthAction, type AuthActionArgs, AuthActionData, type AuthCookie, type CreateAccountSettingsActionOptions, type CreateAuthActionOptions, type InvoiceFileResponseOptions, type LoadAuthCapabilitiesOptions, MAX_INVOICE_FILE_BYTES, type PendingVoucherResponseOptions, SAFE_AUTH_CAPABILITIES, type SettingsCookie, SettingsIntent, createAccountSettingsAction, createAuthAction, invoiceFileResponse, loadAccountSessions, loadAccountSettings, loadAuthCapabilities, pendingVoucherResponse, safeNextPath, toSettingsFailure };
186
+ export { type AccountSettingsAction, type AccountSettingsActionArgs, AccountSettingsActionData, type AccountSettingsData, type AuthAction, type AuthActionArgs, AuthActionData, type AuthCookie, type CreateAccountSettingsActionOptions, type CreateAuthActionOptions, type InvoiceFileResponseOptions, type LoadAuthCapabilitiesOptions, MAX_INVOICE_FILE_BYTES, type PendingVoucherResponseOptions, SAFE_AUTH_CAPABILITIES, type SettingsCookie, SettingsIntent, createAccountSettingsAction, createAuthAction, invoiceFileResponse, loadAccountSessions, loadAccountSettings, loadAuthCapabilities, pendingVoucherPdfResponse, pendingVoucherResponse, safeNextPath, toSettingsFailure };