track y algunas piezas sueltas. Los
tipos vienen del contrato OpenAPI y nunca se escriben a mano: si el contrato
cambia, el paquete cambia con él.
createStorefront(options): Storefront
La instancia:
Las opciones
Sólo las dos primeras son obligatorias.string
requerido
La clave
spk_… que copiás del admin. Por qué puede ser pública: Claves y seguridad.string
requerido
La conexión de tu tienda (
cn_…). Se valida contra la tienda de la clave.string
predeterminado:"https://api.crossup.ai/salespilot"
El endpoint de la API. En producción,
https://salespilot.crossup.ai.typeof fetch
Un
fetch propio, para tests o para un runtime sin fetch global.boolean
predeterminado:"true"
true lo guarda en localStorage y cookie, espejados. false lo deja en memoria: sigue viajando, pero cada carga es un visitante nuevo. Usalo sin consentimiento.VisitorStorage
Un storage propio. Gana sobre
persistVisitor.string
Dominio de la cookie (
.mitienda.com): el mismo visitante en todos los subdominios.(() => Visitor | undefined) | false
Un visitante propio, para quien ya lo resolvió (un servidor).
false no manda visitante en ningún pedido.(error: unknown) => void
Se llama cuando el visitante no se pudo resolver y el pedido salió sin él. Nunca se llama con un error de la API.
(() => ClientContext | undefined) | false
El contexto del navegador (página, referrer, UTM, idioma, pantalla). Por defecto se lee en cada pedido;
false no lo manda; una función lo reemplaza. Nunca corta el pedido.(error: unknown) => void
Cada señal que no se pudo armar, que el servidor rechazó, que se descartó por un
4xx o que se cayó de la cola llena. Nunca se llama por un reintento.(result, signal) => void
Cada respuesta del servidor a una señal:
accepted, duplicate o rejected.SignalOptions
Cómo se agrupan y reintentan las señales:
flushIntervalMs (2000), maxQueueSize (200), maxBackoffMs (60000), storage. Ver Reportar señales.