Qué es Secure Elements
Secure Elements es un SDK de JavaScript,@fluz/secure-elements, que monta un frame aislado, alojado por Fluz, directamente dentro de un elemento contenedor en tu página. El frame renderiza los datos de la tarjeta; tu página y tus servidores solo mantienen un token opaco de corta duración que autoriza una acción específica.
Esta es una tercera forma de mostrarle a un usuario los detalles de su propia tarjeta, junto a las dos que ya tienes:
Si ya usas el Embedded Widget para todo, no necesitas
esto. Secure Elements es para integraciones headless o impulsadas por API que
aún necesitan mostrarle al usuario su PAN, fecha de expiración y CVV sin abrir
el modal completo del widget ni buscar
PCI_COMPLIANCE.Cómo funciona
Tu backend emite un client token
Intercambia tu token de acceso OAuth de Fluz
existente por un client token de corta duración, con alcance a un único reveal.
Tu frontend monta el frame
Entrega el client token a
@fluz/secure-elements, que monta el frame alojado
por Fluz en un contenedor que tú provees — inline en tu página, no un modal.El SDK reporta vía callbacks
Tu página nunca lee los datos crudos de la tarjeta. Solo ve eventos de éxito,
error o montaje.
Requisitos previos
- Tu aplicación está registrada con Fluz y tiene el scope
CREATE_VIRTUALCARDhabilitado en tu token de acceso. - Tienes un id de tarjeta virtual
ACTIVE, propiedad de la cuenta que estás revelando, para pasar al emitir un client token.
Entornos
Actualmente, Reveal devuelve resultados simulados en staging mientras se
finaliza la integración del procesador de Fluz. Usa staging para validar tu
integración de extremo a extremo — la disponibilidad en producción se
confirmará por separado.
frameHostOrigin es opcional en createCardViewer — omítelo y usará producción por defecto (https://secure.fluz.app). Pásalo explícitamente para apuntar a staging. Solo se aceptan estos dos orígenes exactos; cualquier otro lanza un FluzElementsError (error.code === "INVALID_FRAME_HOST_ORIGIN") tan pronto como llames a createCardViewer, antes de montar cualquier frame.
Carga del SDK
@fluz/secure-elements no está publicado en npm — cárgalo como un build global de navegador (IIFE) desde el CDN de Fluz con una etiqueta <script>. Expone un global FluzSecureElements:
FluzSecureElements, como arriba.
Cada versión se publica en una ruta inmutable, fijada por versión (.../v0.1.0/index.global.js) y en una .../latest/index.global.js flotante que siempre apunta a la versión más reciente. Fija una versión específica para cualquier cosa más allá de un prototipo — latest puede cambiar sin previo aviso.
Solo el host del CDN de staging está activo por ahora (
secure-cdn-staging.fluz.app).
El hosting de producción se confirmará junto con la disponibilidad del API en producción.Emitir un client token
Tu backend llama a esto usando el token de acceso OAuth de Fluz que ya obtienes mediante el flujo de grant de OAuth estándar. Nunca envíes ese token de acceso al navegador — solo el parclientToken / loadToken que devuelve este endpoint debe llegar a tu frontend.
201. Ambos tokens son de un solo propósito y de corta duración — emite un par nuevo para cada reveal. clientToken es lo que autoriza el reveal en sí (expiresIn segundos, 300 por defecto); loadToken tiene un alcance aún más limitado (60 segundos) ya que viaja en una URL — ver la nota en Card Reveal — y se rechaza en cualquier lugar excepto al cargar el frame. Pasa ambos directamente a createCardViewer, y nunca pongas clientToken en una URL por tu cuenta — el SDK ya se encarga de mantenerlo fuera.
Respuestas de error
Respuestas de error
Estilizar campos
createCardViewer acepta un objeto opcional style, aplicado a cada campo que monta:
style se valida antes de enviar algo al frame. Si un valor no coincide con lo documentado abajo, await viewer.mount(...) rechaza con un FluzElementsError (error.code === "INVALID_STYLE") — envuelve tu llamada a mount() en un try/catch si aceptas entradas de estilo configurables.
fontFamily debe coincidir de forma exacta y con mayúsculas/minúsculas sensibles con una de dos listas permitidas:
- Fuentes del sistema — stacks comunes del SO/web-safe (
system-ui,-apple-system,Helvetica Neue,Arial,Georgia,Menlo, y las palabras clave genéricasmonospace/serif/sans-serif, entre otras). Renderizan de inmediato, sin solicitud de red. - Google Fonts — cualquier familia del catálogo de Google Fonts (
"Roboto","Inter","IBM Plex Mono", etc.), pasada exactamente como la lista Google. El SDK carga la fuente por ti — no necesitas una etiqueta<link>ni una regla@font-face.
Una Google Font se obtiene después de montar el campo, no se empaqueta de
antemano, por lo que hay una breve ventana con caché fría en la que el campo
se renderiza con la fuente de reserva del navegador antes de cambiar a la que
elegiste. Una fuente del sistema no tiene tal demora.
Content Security Policy
Si tu página define una CSP, permite el host del frame al que apuntas:Modelo de seguridad
- Tu token de acceso OAuth nunca sale de tus servidores.
- El client token que tu frontend mantiene es opaco y de un solo propósito — no lleva datos de tarjeta y no puede reutilizarse para una tarjeta o acción diferente.
- Los datos de la tarjeta solo son legibles dentro del frame alojado por Fluz, aislado del JavaScript de tu página. Cada campo configurado se monta como su propio iframe en sandbox (
allow-scripts allow-same-origin allow-forms), conreferrerPolicy="no-referrer"— el SDK nunca coloca datos de tarjeta en el DOM fuera de ellos. - El frame solo se renderiza dentro de orígenes que hayas preregistrado con Fluz.
Próximos pasos
Card Reveal
Crea el visor de la tarjeta, móntalo y controla qué campos se revelan.
Demostración en vivo
Ve el visor de la tarjeta ejecutándose contra staging, incluyendo reveal,
reveal-CVV-only y mask.
Integraciones de ejemplo
Ejemplos ejecutables en HTML simple y React, ambos llamando a la
infraestructura real de staging.
Aplicaciones OAuth
Cómo obtener el token de acceso que intercambiarás por un client token.