'use client'; import React, { useEffect, useMemo, useRef, useState } from 'react'; import logger from '@/lib/logger'; import type { AuthUser, LocalUser } from '../types'; import { AuthContext } from './AuthProvider'; export function LocalProviderWrapper({ children }: { children: React.ReactNode }) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const tokenRef = useRef(null); useEffect(() => { if (typeof window === 'undefined') return; const initializeAuth = async () => { try { const response = await fetch('/api/auth/oss'); if (response.ok) { const data = await response.json(); tokenRef.current = data.token; setUser(data.user); logger.info('OSS auth initialized', { user: data.user }); } else { logger.error('Failed to initialize OSS auth'); } } catch (error) { logger.error('Error initializing OSS auth', error); } finally { setLoading(false); } }; initializeAuth(); }, []); const getAccessToken = React.useCallback(async () => { if (typeof window === 'undefined') { return 'ssr-placeholder-token'; } if (!tokenRef.current) { logger.warn('No OSS token available after initialization'); return ''; } return tokenRef.current; }, []); const redirectToLogin = React.useCallback(() => { logger.info('Login redirect not needed in local mode'); }, []); const logout = React.useCallback(async () => { setUser(null); logger.info('Logout requested in OSS mode - server cookies need to be cleared'); }, []); const contextValue = useMemo(() => ({ user: user as AuthUser, isAuthenticated: !loading, loading, getAccessToken, redirectToLogin, logout, provider: 'local' as const, }), [user, loading, getAccessToken, redirectToLogin, logout]); return ( {children} ); }