Consenty
V-28 SDK

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

index.html
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

terminal
bash
pnpm add @consenty/web-sdk

API basica

src/consenty.ts
ts
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 DOM consenty:open_preferences.

Eventos disponibles

EventoCuando 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

src/consenty.ts
ts
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, immutable y un atributo integrity sha384 por build (T-06-05).
  • El pseudonimo se genera con crypto.randomUUID (fallback crypto.getRandomValues). Nunca Math.random.
  • El SDK NO expone el subjectId interno del backend; el sitio solo ve el subjectPseudonym que el propio cliente genera.
  • Ante cualquier error de red los opcionales quedan denied (art. 12 Ley 21.719).
Compatibilidad
Chrome 92+ / Firefox 95+ / Safari 15.4+ (crypto.randomUUID). En navegadores mas antiguos cae a crypto.getRandomValues; si tampoco esta disponible, createConsenty lanza un error explicito.