import { useEffect, useMemo, useState } from 'react'; import { loadAuthorizedSession } from './auth-client.js'; import { loadingSessionState, SESSION_PHASES } from './session-policy.js'; export function useAuthorizedSession(allowedRoles = [], { redirectOnUnauthorized = true } = {}) { const roleKey = useMemo( () => [...allowedRoles].sort().join('|'), [allowedRoles] ); const normalizedRoles = useMemo( () => roleKey ? roleKey.split('|') : [], [roleKey] ); const [state, setState] = useState(loadingSessionState); useEffect(() => { let active = true; setState(loadingSessionState()); void loadAuthorizedSession(normalizedRoles).then(result => { if (!active) return; setState(result); if (redirectOnUnauthorized && result.phase === SESSION_PHASES.unauthorized) { window.location.replace('/'); } }); return () => { active = false; }; }, [normalizedRoles, redirectOnUnauthorized]); return state; }