/** * Auth API * * Authentication-related API calls */ import { apiClient } from './client'; export interface LoginRequest { email: string; password: string; } export interface RegisterRequest { email: string; password: string; firstName: string; lastName: string; organizationId: string; } export interface AuthResponse { accessToken: string; refreshToken: string; user: { id: string; email: string; firstName: string; lastName: string; role: string; organizationId: string; }; } export interface User { id: string; email: string; firstName: string; lastName: string; role: string; organizationId: string; isEmailVerified: boolean; isActive: boolean; } export const authApi = { /** * Login with email and password */ async login(data: LoginRequest): Promise { const response = await apiClient.post('/api/v1/auth/login', data); // Store tokens in localStorage if (typeof window !== 'undefined') { localStorage.setItem('accessToken', response.accessToken); localStorage.setItem('refreshToken', response.refreshToken); localStorage.setItem('user', JSON.stringify(response.user)); } return response; }, /** * Register new user */ async register(data: RegisterRequest): Promise { const response = await apiClient.post('/api/v1/auth/register', data); // Store tokens in localStorage if (typeof window !== 'undefined') { localStorage.setItem('accessToken', response.accessToken); localStorage.setItem('refreshToken', response.refreshToken); localStorage.setItem('user', JSON.stringify(response.user)); } return response; }, /** * Logout */ async logout(): Promise { try { await apiClient.post('/api/v1/auth/logout'); } finally { // Clear tokens from localStorage if (typeof window !== 'undefined') { localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); localStorage.removeItem('user'); } } }, /** * Get current user */ async me(): Promise { return apiClient.get('/api/v1/auth/me'); }, /** * Refresh access token */ async refresh(refreshToken: string): Promise<{ accessToken: string }> { return apiClient.post<{ accessToken: string }>('/api/v1/auth/refresh', { refreshToken, }); }, /** * Request password reset */ async forgotPassword(email: string): Promise { return apiClient.post('/api/v1/auth/forgot-password', { email }); }, /** * Reset password with token */ async resetPassword(token: string, password: string): Promise { return apiClient.post('/api/v1/auth/reset-password', { token, password }); }, /** * Verify email with token */ async verifyEmail(token: string): Promise { return apiClient.get(`/api/v1/auth/verify-email?token=${token}`); }, /** * Check if user is authenticated */ isAuthenticated(): boolean { if (typeof window === 'undefined') return false; const token = localStorage.getItem('accessToken'); return !!token; }, /** * Get stored user from localStorage */ getStoredUser(): User | null { if (typeof window === 'undefined') return null; const userStr = localStorage.getItem('user'); return userStr ? JSON.parse(userStr) : null; }, };