"use client"; import { useCallback, useEffect, useState } from "react"; import { buildBackendUrl } from "@/lib/env-config"; type SessionState = | { status: "loading"; authenticated: false; accessExpiresAt: null } | { status: "authenticated"; authenticated: true; accessExpiresAt: number } | { status: "unauthenticated"; authenticated: false; accessExpiresAt: null }; export function useSession() { const [state, setState] = useState({ status: "loading", authenticated: false, accessExpiresAt: null, }); const refresh = useCallback(async () => { try { const response = await fetch(buildBackendUrl("/auth/session"), { credentials: "include", }); if (!response.ok) { setState({ status: "unauthenticated", authenticated: false, accessExpiresAt: null, }); return; } const data = (await response.json()) as { authenticated: boolean; access_expires_at: number; }; setState({ status: "authenticated", authenticated: true, accessExpiresAt: data.access_expires_at, }); } catch { setState({ status: "unauthenticated", authenticated: false, accessExpiresAt: null, }); } }, []); useEffect(() => { void refresh(); }, [refresh]); return { ...state, refresh }; }