import type { User } from '@/types' const API_BASE_URL = '/api' class AuthService { /** * Get the current authenticated user from the session cookie. * Returns null if not authenticated. */ async getCurrentUser(): Promise { try { const response = await fetch(`${API_BASE_URL}/auth/me`, { method: 'GET', credentials: 'include', headers: { 'Content-Type': 'application/json', }, }) if (!response.ok) { if (response.status === 401) { return null } throw new Error(`HTTP error! status: ${response.status}`) } const user: User = await response.json() return user } catch (error) { console.error('Failed to get current user:', error) return null } } /** * Logout the current user by clearing the session cookie. */ async logout(): Promise { try { const response = await fetch(`${API_BASE_URL}/auth/logout`, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', }, }) if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`) } } catch (error) { console.error('Logout failed:', error) throw error } } /** * Redirect to the login endpoint to initiate OAuth flow. */ login(): void { // In development with Vite proxy, we can use relative URL // In production, this will be proxied by nginx window.location.href = `${API_BASE_URL}/login` } } export const authService = new AuthService()