import { useEffect, useState } from 'react'; import { User, Session } from '@supabase/supabase-js'; import { supabase } from '@/integrations/supabase/client'; export function useAuth() { const [user, setUser] = useState(null); const [session, setSession] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { let isMounted = true; // Set up auth state listener const { data: { subscription } } = supabase.auth.onAuthStateChange( (event, session) => { if (isMounted) { setSession(session); setUser(session?.user ?? null); setLoading(false); } } ); // Check for existing session supabase.auth.getSession().then(({ data: { session } }) => { if (isMounted) { setSession(session); setUser(session?.user ?? null); setLoading(false); } }); return () => { isMounted = false; subscription.unsubscribe(); }; }, []); const signIn = async (email: string, password: string) => { const { error } = await supabase.auth.signInWithPassword({ email, password, }); return { error }; }; const signUp = async (email: string, password: string) => { const redirectUrl = `${window.location.origin}/`; const { error } = await supabase.auth.signUp({ email, password, options: { emailRedirectTo: redirectUrl } }); return { error }; }; const signOut = async () => { const { error } = await supabase.auth.signOut(); return { error }; }; return { user, session, loading, signIn, signUp, signOut, }; }