/** * Auth Service - Mirror backend auth endpoints */ import { apiClient } from '../client'; import { UserRegistration, UserLogin, TokenResponse, RefreshTokenRequest, PasswordChange, PasswordReset, UserResponse, UserUpdate, TokenVerificationResponse, AuthHealthResponse, } from '../types/auth'; export class AuthService { private readonly baseUrl = '/auth'; async register(userData: UserRegistration): Promise { return apiClient.post(`${this.baseUrl}/register`, userData); } async login(loginData: UserLogin): Promise { return apiClient.post(`${this.baseUrl}/login`, loginData); } async refreshToken(refreshToken: string): Promise { const refreshData: RefreshTokenRequest = { refresh_token: refreshToken }; return apiClient.post(`${this.baseUrl}/refresh`, refreshData); } async verifyToken(token?: string): Promise { // If token is provided, temporarily set it; otherwise use current token const currentToken = apiClient.getAuthToken(); if (token && token !== currentToken) { apiClient.setAuthToken(token); } const response = await apiClient.post(`${this.baseUrl}/verify`); // Restore original token if we temporarily changed it if (token && token !== currentToken) { apiClient.setAuthToken(currentToken); } return response; } async logout(refreshToken: string): Promise<{ message: string }> { const refreshData: RefreshTokenRequest = { refresh_token: refreshToken }; return apiClient.post<{ message: string }>(`${this.baseUrl}/logout`, refreshData); } async changePassword(passwordData: PasswordChange): Promise<{ message: string }> { return apiClient.post<{ message: string }>(`${this.baseUrl}/change-password`, passwordData); } async resetPassword(resetData: PasswordReset): Promise<{ message: string }> { return apiClient.post<{ message: string }>(`${this.baseUrl}/reset-password`, resetData); } async getProfile(): Promise { return apiClient.get('/users/me'); } async updateProfile(updateData: UserUpdate): Promise { return apiClient.put('/users/me', updateData); } async verifyEmail( userId: string, verificationToken: string ): Promise<{ message: string }> { return apiClient.post<{ message: string }>(`${this.baseUrl}/verify-email`, { user_id: userId, verification_token: verificationToken, }); } async healthCheck(): Promise { return apiClient.get(`${this.baseUrl}/health`); } } export const authService = new AuthService();