import { AuthResponse, LoginCredentials, RegisterCredentials, ChangePasswordCredentials, } from '../types'; import { getApiUrl } from '../utils/runtime'; // Token key in localStorage const TOKEN_KEY = 'mcphub_token'; // Get token from localStorage export const getToken = (): string | null => { return localStorage.getItem(TOKEN_KEY); }; // Set token in localStorage export const setToken = (token: string): void => { localStorage.setItem(TOKEN_KEY, token); }; // Remove token from localStorage export const removeToken = (): void => { localStorage.removeItem(TOKEN_KEY); }; // Login user export const login = async (credentials: LoginCredentials): Promise => { try { console.log(getApiUrl('/auth/login')); const response = await fetch(getApiUrl('/auth/login'), { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(credentials), }); const data: AuthResponse = await response.json(); if (data.success && data.token) { setToken(data.token); } return data; } catch (error) { console.error('Login error:', error); return { success: false, message: 'An error occurred during login', }; } }; // Register user export const register = async (credentials: RegisterCredentials): Promise => { try { const response = await fetch(getApiUrl('/auth/register'), { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(credentials), }); const data: AuthResponse = await response.json(); if (data.success && data.token) { setToken(data.token); } return data; } catch (error) { console.error('Register error:', error); return { success: false, message: 'An error occurred during registration', }; } }; // Get current user export const getCurrentUser = async (): Promise => { const token = getToken(); if (!token) { return { success: false, message: 'No authentication token', }; } try { const response = await fetch(getApiUrl('/auth/user'), { method: 'GET', headers: { 'x-auth-token': token, }, }); return await response.json(); } catch (error) { console.error('Get current user error:', error); return { success: false, message: 'An error occurred while fetching user data', }; } }; // Change password export const changePassword = async ( credentials: ChangePasswordCredentials, ): Promise => { const token = getToken(); if (!token) { return { success: false, message: 'No authentication token', }; } try { const response = await fetch(getApiUrl('/auth/change-password'), { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-auth-token': token, }, body: JSON.stringify(credentials), }); return await response.json(); } catch (error) { console.error('Change password error:', error); return { success: false, message: 'An error occurred while changing password', }; } }; // Logout user export const logout = (): void => { removeToken(); };