import { useCallback, useEffect, useState } from 'react' export type AuthUser = { user?: string email?: string name?: string preferred_username?: string auth_enabled?: boolean } type AuthState = | { status: 'loading'; user: null } | { status: 'anon'; user: null } | { status: 'authed'; user: AuthUser } export function useAuth(): AuthState & { refresh: () => Promise } { const [state, setState] = useState({ status: 'loading', user: null }) const refresh = useCallback(async () => { try { const r = await fetch('/api/auth/me', { credentials: 'same-origin' }) if (r.status === 401) { setState({ status: 'anon', user: null }) return } if (!r.ok) { setState({ status: 'anon', user: null }) return } const me = (await r.json()) as AuthUser setState({ status: 'authed', user: me }) } catch { setState({ status: 'anon', user: null }) } }, []) useEffect(() => { void refresh() }, [refresh]) return { ...state, refresh } }