// apps/mobile/lib/auth-context.tsx // Supabase 세션 Context + 로그인 시 Expo Push 토큰 자동 등록 import { createContext, useContext, useEffect, useState, type ReactNode } from 'react' import type { Session, User } from '@supabase/supabase-js' import { supabase } from './supabase' import { registerPushToken } from './push' interface AuthContextValue { session: Session | null user: User | null loading: boolean } const AuthContext = createContext({ session: null, user: null, loading: true }) export function AuthProvider({ children }: { children: ReactNode }): React.ReactElement { const [session, setSession] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { supabase.auth .getSession() .then(({ data }) => { setSession(data.session) if (data.session?.user.id) { void registerPushToken(data.session.user.id) } }) .finally(() => setLoading(false)) const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, newSession) => { setSession(newSession) if (newSession?.user.id) { void registerPushToken(newSession.user.id) } }) return () => { subscription.unsubscribe() } }, []) return ( {children} ) } export function useAuth(): AuthContextValue { return useContext(AuthContext) }