CreaRack-SL

resolveUserFromCfAccess() — Helper de resolución de usuario (prefs.ts)

resolveUserFromCfAccess() — Helper de resolución de usuario (prefs.ts)

Módulo: src/lib/prefs.ts
Exportada en: MobileApp.tsx, DesktopApp.tsx
Introducida en: commit 8132309 · 2026-04-28

Propósito

Función async que resuelve la identidad del usuario actual consultando el endpoint GET /api/me (CF Pages Function) y sincroniza el resultado con localStorage, emitiendo un evento DOM si el usuario ha cambiado. Es el puente entre Cloudflare Access y el sistema de preferencias del frontend.

Firma

export async function resolveUserFromCfAccess(): Promise<void>

Comportamiento

1. fetch('/api/me')                        → { user, email }
2. Si user === null → no-op               (email fuera del mapa o dev local)
3. Si user === getCurrentUser() → no-op   (ya es el usuario correcto)
4. Si user !== getCurrentUser():
   a. Guarda user en localStorage
   b. dispatchEvent(new CustomEvent('prefs-user-change', { detail: { user } }))

Cuándo se ejecuta

Se llama en el useEffect(() => { … }, []) (mount) de:

ComponenteArchivo
MobileAppsrc/components/MobileApp.tsx
DesktopAppsrc/components/DesktopApp.tsx

Ambos shells de la aplicación lo disparan una única vez en la hidratación inicial. No hay polling — la resolución es puntual al cargar.

Evento emitido

CustomEvent: 'prefs-user-change'
detail: { user: string }

Los consumidores del evento (componentes que necesitan reaccionar al cambio de usuario) escuchan window.addEventListener('prefs-user-change', handler).

Relación con el sistema de preferencias

prefs.ts gestiona las preferencias de usuario (tema, accent, fontSize, etc.) por usuario en localStorage. resolveUserFromCfAccess() garantiza que, al cargar la app en producción, el perfil de preferencias activo corresponde al usuario autenticado en CF Access — no al último usuario que usó ese navegador.

Fallback en dev local

Sin CF Access, /api/me devuelve { user: null }. La función hace no-op y el usuario permanece como está en localStorage. El valor por defecto de getCurrentUser() / loadPrefs() es 'Edu'.

Dependencias internas

  • getCurrentUser() — lee el usuario actual de localStorage.
  • GET /api/me — [[entity—workers—endpoint—api-me]] — endpoint CF Pages Function.

Véase también

  • [[entity—workers—endpoint—api-me]]
  • [[entity—frontend—component—mobile-app]]
  • [[entity—frontend—component—desktop-app]]
  • [[feature—mobile—refresh-2026-mobile-review]]