import { createContext, useCallback, useContext, useEffect, useState, type ReactNode, } from "react"; import { api, type Me } from "./api"; interface Auth { me: Me | null; loading: boolean; refresh: () => Promise; logout: () => Promise; } const AuthContext = createContext({ me: null, loading: true, refresh: async () => {}, logout: async () => {}, }); export function AuthProvider({ children }: { children: ReactNode }) { const [me, setMe] = useState(null); const [loading, setLoading] = useState(true); const refresh = useCallback(async () => { try { setMe(await api.me()); } finally { setLoading(false); } }, []); const logout = useCallback(async () => { await api.logout(); setMe(null); }, []); useEffect(() => { void refresh(); }, [refresh]); return ( {children} ); } export function useAuth(): Auth { return useContext(AuthContext); }