/** * Authentication API endpoints * Handles user login, registration, and logout operations */ import { apiClient } from './client'; import type { LoginRequest, RegisterRequest, AuthResponse, User, SendVerifyCodeRequest, SendVerifyCodeResponse, PublicSettings } from '@/types'; /** * Store authentication token in localStorage */ export function setAuthToken(token: string): void { localStorage.setItem('auth_token', token); } /** * Get authentication token from localStorage */ export function getAuthToken(): string | null { return localStorage.getItem('auth_token'); } /** * Clear authentication token from localStorage */ export function clearAuthToken(): void { localStorage.removeItem('auth_token'); localStorage.removeItem('auth_user'); } /** * User login * @param credentials - Username and password * @returns Authentication response with token and user data */ export async function login(credentials: LoginRequest): Promise { const { data } = await apiClient.post('/auth/login', credentials); // Store token and user data setAuthToken(data.access_token); localStorage.setItem('auth_user', JSON.stringify(data.user)); return data; } /** * User registration * @param userData - Registration data (username, email, password) * @returns Authentication response with token and user data */ export async function register(userData: RegisterRequest): Promise { const { data } = await apiClient.post('/auth/register', userData); // Store token and user data setAuthToken(data.access_token); localStorage.setItem('auth_user', JSON.stringify(data.user)); return data; } /** * Get current authenticated user * @returns User profile data */ export async function getCurrentUser(): Promise { const { data } = await apiClient.get('/auth/me'); return data; } /** * User logout * Clears authentication token and user data from localStorage */ export function logout(): void { clearAuthToken(); // Optionally redirect to login page // window.location.href = '/login'; } /** * Check if user is authenticated * @returns True if user has valid token */ export function isAuthenticated(): boolean { return getAuthToken() !== null; } /** * Get public settings (no auth required) * @returns Public settings including registration and Turnstile config */ export async function getPublicSettings(): Promise { const { data } = await apiClient.get('/settings/public'); return data; } /** * Send verification code to email * @param request - Email and optional Turnstile token * @returns Response with countdown seconds */ export async function sendVerifyCode(request: SendVerifyCodeRequest): Promise { const { data } = await apiClient.post('/auth/send-verify-code', request); return data; } export const authAPI = { login, register, getCurrentUser, logout, isAuthenticated, setAuthToken, getAuthToken, clearAuthToken, getPublicSettings, sendVerifyCode, }; export default authAPI;