Browser/Cookies - Visión General
Paquete: @tiendana/utils
Conjunto completo de funciones para trabajar con cookies del navegador, proporcionando una API simple y type-safe para lectura, escritura, y eliminación de cookies.
Funciones Disponibles
Lectura de Cookies
getAllCookies
Obtiene todas las cookies del navegador como un objeto JavaScript.
const cookies = getAllCookies();
// { token: 'abc123', theme: 'dark', user: { id: 1, name: 'Juan' } }
getCookie
Obtiene el valor de una cookie específica por nombre.
const token = getCookie('token');
// 'abc123'
Escritura de Cookies
setCookie
Establece una cookie con opciones de configuración (expiración, path, domain, secure, sameSite).
setCookie('token', 'abc123', {
expires: new Date('2025-12-31'),
path: '/',
secure: true,
sameSite: 'Strict'
});
Eliminación de Cookies
deleteCookie
Elimina una cookie específica por nombre.
deleteCookie('token');
deleteAllCookies
Elimina todas las cookies del navegador.
deleteAllCookies();
copyTextToClipboard
Copia texto al portapapeles con notificación automática.
await copyTextToClipboard('Texto a copiar');
// Muestra snackbar: "Copiado al portapapeles"
downloadFile
Descarga un archivo desde una URL programáticamente.
downloadFile('https://example.com/file.pdf', 'documento.pdf');
Casos de Uso Comunes
Autenticación
import { setCookie, getCookie, deleteCookie } from '@tiendana/utils';
// Login
function login(token: string) {
setCookie('auth_token', token, {
expires: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000), // 7 días
path: '/',
secure: true,
sameSite: 'Strict'
});
}
// Verificar sesión
function isAuthenticated(): boolean {
return getCookie('auth_token') !== null;
}
// Logout
function logout() {
deleteCookie('auth_token', { path: '/' });
}
Preferencias de Usuario
// Guardar tema
function saveTheme(theme: 'light' | 'dark') {
setCookie('theme', theme, {
expires: new Date('2030-01-01'), // Cookie de larga duración
path: '/'
});
}
// Cargar tema
function loadTheme(): string {
return getCookie('theme') || 'light';
}
Tracking de Consentimiento
interface ConsentPreferences {
analytics: boolean;
marketing: boolean;
functional: boolean;
}
function saveConsent(preferences: ConsentPreferences) {
setCookie('cookie_consent', preferences, {
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000), // 1 año
path: '/',
sameSite: 'Lax'
});
}
function getConsent(): ConsentPreferences | null {
return getCookie('cookie_consent');
}
Características Principales
✅ Auto-parsing: Convierte automáticamente valores JSON, booleanos y strings
✅ Type-safe: Interfaces TypeScript para opciones de cookies
✅ Validación de tamaño: Advierte cuando una cookie excede 4096 bytes
✅ Encode/Decode: Maneja automáticamente codificación de caracteres especiales
✅ Flexible expiration: Acepta Date o timestamp Unix
✅ SameSite support: Soporta Lax, Strict, None para CSRF protection
✅ Path y domain: Control completo sobre scope de cookies
Limitaciones de Cookies
Tamaño Máximo
Las cookies tienen un límite de 4096 bytes según RFC 2109, 2965 y 6265. setCookie te advertirá cuando excedas este límite:
setCookie('large_data', veryLargeObject);
// ⚠️ Cookie size warning: The cookie "large_data" exceeds the recommended size...
Cantidad Máxima
Los navegadores limitan la cantidad de cookies por dominio (típicamente 50-180).
Cookies por Dominio
Las cookies solo son accesibles desde el dominio (y subdominios si se especifica) donde fueron creadas.
Seguridad
Secure Flag
Usa secure: true para cookies que solo deben transmitirse por HTTPS:
setCookie('session', token, {
secure: true, // Solo HTTPS
sameSite: 'Strict'
});
SameSite Attribute
Protege contra CSRF:
Strict: Cookie solo se envía en requests del mismo sitioLax: Cookie se envía en navegación top-level cross-site (default en navegadores modernos)None: Cookie se envía en todos los requests (requieresecure: true)
setCookie('csrf_token', token, {
sameSite: 'Strict',
secure: true
});
Ver También
- Validation - Para validar valores antes de guardar en cookies
- Objects - Para trabajar con cookies que contienen objetos