Skip to content

[FE-A-04] Session Manager : proactive refresh, BroadcastChannel multi-onglets, offline handling, splash screen #417

Description

@K0lux

section: Feature Auth — Session | prio: P0 | est: 4h | deps: FE-A-01

Pourquoi

À 2M users, des milliers donglets ouverts simultanément. Sans BroadcastChannel, un logout dans un onglet laisse les autres onglets avec des tokens actifs.

Acceptance Criteria

  • Session Manager src/features/auth/lib/session.manager.ts : au démarrage app → refresh silencieux si cookie présent → isInitializing=true pendant ce temps → splash screen Quantify (logo hexagonal animé)
  • Proactive refresh : timer déclenché 2 min avant expiration JWT (sessionExpiresAt - Date.now() < 120_000), refresh en background sans bloquer lUX, toast warning si < 5min et tab active
  • BroadcastChannel src/features/auth/lib/session.broadcast.ts : canal "qfy_auth", logout dans un onglet → message broadcast → tous les autres onglets clearSession() + redirect /login, login dans un onglet → broadcast du nouveau token (sync état)
  • Offline : si app lancée offline et token en mémoire → accès lecture de lapp, actions auth nécessitent le réseau → message "Connexion requise", event window.ononline → retry refresh automatique
  • Guards : ProtectedRoute (redirect /login si !isAuthenticated), GuestRoute (redirect /app si isAuthenticated), PhoneCompletionGuard (redirect /profile/complete-phone si requires_phone_completion), isInitializing → splash screen
  • Service Worker : routes /api/v1/auth/* en network-only (jamais cachées)

Fichiers

src/features/auth/lib/
├── session.manager.ts
├── session.broadcast.ts
└── useSessionInit.ts
src/app/router/guards/
├── ProtectedRoute.tsx
├── GuestRoute.tsx
└── PhoneCompletionGuard.tsx

Scale

BroadcastChannel = synchronisation instantanée entre onglets sans serveur. Proactive refresh = zéro expiration inattendue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    frontendFrontend React/TypeScriptsecuritySécurité, auth, permissions

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions