import { useEffect, useState, useMemo } from "react"; import { UserProfile } from "../types"; export function useAuth() { const [accessToken, setAccessToken] = useState(() => localStorage.getItem("accessToken")); const parseJwtPayload = (token: string) => { try { const payloadPart = token.split(".")[1]; if (!payloadPart) return null; const normalized = payloadPart.replace(/-/g, "+").replace(/_/g, "/"); const padded = normalized + "=".repeat((4 - (normalized.length % 4)) % 4); return JSON.parse(atob(padded)); } catch (e) { return null; } }; useEffect(() => { const handler = () => setAccessToken(localStorage.getItem("accessToken")); window.addEventListener("storage", handler); return () => window.removeEventListener("storage", handler); }, []); const profile = useMemo(() => { const data = sessionStorage.getItem("userProfile"); if (data) { return JSON.parse(data); } if (!accessToken) { return null; } const payload = parseJwtPayload(accessToken); if (payload && (payload.pwdResetRequired === 0 || payload.pwdResetRequired === 1)) { return { pwdResetRequired: Number(payload.pwdResetRequired) } as UserProfile; } return null; }, [accessToken]); const isAuthed = !!accessToken; const logout = () => { localStorage.removeItem("accessToken"); localStorage.removeItem("refreshToken"); sessionStorage.removeItem("userProfile"); setAccessToken(null); }; return { accessToken, isAuthed, profile, logout }; }