import React, { createContext, useState, useEffect, useCallback } from "react"; interface User { id: string; name: string; displayName: string; } interface AuthContextType { isAuthenticated: boolean; user: User | null; loading: boolean; refreshAuth: () => void; } export const AuthContext = createContext({ isAuthenticated: false, user: null, loading: true, refreshAuth: () => {}, }); export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children, }) => { const [isAuthenticated, setIsAuthenticated] = useState(false); const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const checkAuth = useCallback(async () => { setLoading(true); try { const resp = await fetch("http://localhost:8080/me", { credentials: "include", }); if (resp.ok) { const userData = await resp.json(); setIsAuthenticated(true); setUser(userData); } else { setIsAuthenticated(false); setUser(null); } } catch (err) { console.error(err); setIsAuthenticated(false); setUser(null); } finally { setLoading(false); } }, []); useEffect(() => { checkAuth(); }, [checkAuth]); return ( {children} ); };