Saltar al contenido principal

Almacenamiento

El SDK usa un StorageProvider intercambiable para persistir los tokens de autenticación. Por defecto, los tokens solo viven en memoria y se pierden al recargar la página.

Comportamiento por defecto

El SDK incluye un noopStorageProvider que no hace nada:

const noopStorageProvider: StorageProvider = {
getItem: async () => null,
setItem: async () => {},
removeItem: async () => {},
};

Esto significa que los tokens no se persisten por defecto. Debes configurar un StorageProvider si quieres que los tokens sobrevivan a recargas de página o reinicios de la aplicación.

Interfaz StorageProvider

type StorageProvider = {
getItem(key: string): Promise<string | null>;
setItem(key: string, value: string): Promise<void>;
removeItem(key: string): Promise<void>;
};

Todos los métodos son async para soportar backends de almacenamiento del lado del servidor (cookies, bases de datos, etc.).

Claves de almacenamiento

El SDK usa dos claves para almacenar los tokens:

ClaveValor
heuristikAuth_accessTokenToken de acceso
heuristikAuth_refreshTokenToken de refresco

Adaptador localStorage

El adaptador más sencillo envuelve localStorage:

import { setStorageProvider } from '@heuristik/hhjssdk';

setStorageProvider({
getItem: async (key) => localStorage.getItem(key),
setItem: async (key, value) => localStorage.setItem(key, value),
removeItem: async (key) => localStorage.removeItem(key),
});
aviso

localStorage almacena los tokens como texto plano accesible para cualquier JavaScript en la página. Es adecuado para desarrollo pero no se recomienda para producción.

Adaptador basado en cookies

Para mayor seguridad, usa un adaptador de cookies HttpOnly que delega en tu servidor:

import { setStorageProvider } from '@heuristik/hhjssdk';

setStorageProvider({
getItem: async (key) => {
// Leer desde una cookie no HttpOnly (o llamar a tu servidor)
const match = document.cookie.match(new RegExp(`${key}=([^;]+)`));
return match ? decodeURIComponent(match[1]) : null;
},
setItem: async (key, value) => {
document.cookie = `${key}=${encodeURIComponent(value)}; path=/; SameSite=Strict`;
},
removeItem: async (key) => {
document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
},
});
Recomendación para producción

En producción, usa cookies HttpOnly gestionadas por tu backend. El StorageProvider en el cliente debería llamar a endpoints del servidor que establezcan, lean y borren cookies HttpOnly. Esto evita que ataques XSS accedan a los tokens.

Orden de configuración

Importante

Llama a setStorageProvider() antes de crear el HeuristikClient. El proveedor se lee cuando client.init() llama a loadAuthTokens().

import { HeuristikClient, setStorageProvider } from '@heuristik/hhjssdk';

// 1. Configurar el almacenamiento PRIMERO
setStorageProvider({ /* ... */ });

// 2. Luego crear el cliente
const client = new HeuristikClient({ /* ... */ });

// 3. Init cargará los tokens desde tu proveedor
await client.init();

Manejo de errores

Las operaciones de almacenamiento están envueltas en try/catch internamente. Si el proveedor lanza un error, el SDK lo envuelve en un SDKError con el mensaje apropiado:

OperaciónClave de mensaje de error
Guardar tokensSTORAGE_SAVE_TOKENS_FAILED
Cargar tokensSTORAGE_LOAD_TOKENS_FAILED
Borrar tokensSTORAGE_CLEAR_TOKENS_FAILED