SDK web
Cliente headless, sin dependencias runtime, ~10 KB gzip. Pensado para que cualquier sitio pueda emitir decisiones sin acoplarse a una UI especifica.
Instalacion
Dos caminos equivalentes: snippet HTML (recomendado para sitios estaticos) o paquete npm (recomendado para SPAs con bundler).
Snippet HTML
<!-- Consenty: widget de consentimiento -->
<script
src="https://cdn.consenty.cl/sdk/consenty-0.0.0.umd.js"
data-site-key="a1b2c3d4-e5f6-4789-a012-3456789abcde"
data-locale="es-CL"
defer
crossorigin="anonymous"
integrity="sha384-PEGAR_EN_SNIPPET_DEL_PANEL"></script>
<!-- /Consenty -->Paquete npm
pnpm add @consenty/web-sdkAPI basica
import { createConsenty } from '@consenty/web-sdk'
const client = createConsenty({
siteKey: 'a1b2c3d4-e5f6-4789-a012-3456789abcde', // UUID v4 publico del canal
locale: 'es-CL',
apiBaseUrl: '' // mismo origen por defecto
})
// 1) Inicializar (descarga config + estado del sujeto)
const snap = await client.ready()
// 2) Consultar estado
if (client.hasConsent('analytics')) {
// cargar script de analytics
}
// 3) Escuchar cambios
const off = client.on('consent:changed', (e) => {
console.log('Cambio:', e.changedPurposes)
})
// 4) Abrir UI (T-06-03 montara la UI que escucha el evento DOM)
client.openPreferences()
// 5) Destruir al desmontar
client.destroy()createConsenty(init)— factory unica.client.ready()— devuelve un snapshot.client.hasConsent(code)— boolean seguro (esenciales siempre granted; resto denied por defecto).client.openPreferences()— emite el evento DOMconsenty:open_preferences.
Eventos disponibles
| Evento | Cuando se emite |
|---|---|
| consent:changed | Tras un recordDecisions exitoso. Payload: { purposes, changedPurposes }. |
| consent:recorded | Cuando la API confirma la decision con un eventId. |
| subject:identified | Despues de generar o recuperar el pseudonimo (primer ready()). |
| technology:loaded | Cuando el technology-loader activa o revierte una tecnologia. |
Storage modes
localStorage (default)
Persistencia entre sesiones. Cae a sessionStorage o a un fallback en memoria si el navegador bloquea storage (modo privado, Safari ITP, cuota).
cookie
Pseudonimo en una cookie propia. Util cuando quieres evitar el almacenamiento web y respetar politicas estrictas del sitio.
Configuracion avanzada
import { createConsenty } from '@consenty/web-sdk'
const client = createConsenty({
siteKey: 'a1b2c3d4-e5f6-4789-a012-3456789abcde',
locale: 'es-CL',
apiBaseUrl: 'https://api.consenty.cl',
storage: 'localStorage', // 'cookie' | 'localStorage'
technologyLoader: 'data_attribute' // 'manual' | 'data_attribute' | 'tag_manager'
}) Combinaciones comunes: storage: 'cookie' para portales que solo admiten cookies, technologyLoader: 'tag_manager' para emitir a window.dataLayer (Google Tag Manager, Tealium, Segment), y technologyLoader: 'data_attribute' para transformar <script type="text/plain"> de manera declarativa.
SRI y seguridad
- El bundle se sirve con
Cache-Control: public, max-age=31536000, immutabley un atributointegritysha384 por build (T-06-05). - El pseudonimo se genera con
crypto.randomUUID(fallbackcrypto.getRandomValues). NuncaMath.random. - El SDK NO expone el
subjectIdinterno del backend; el sitio solo ve elsubjectPseudonymque el propio cliente genera. - Ante cualquier error de red los opcionales quedan
denied(art. 12 Ley 21.719).
