mcphub / frontend /src /services /authService.ts
wuran's picture
Upload folder using huggingface_hub
eb846d0 verified
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<AuthResponse> => {
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<AuthResponse> => {
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<AuthResponse> => {
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<AuthResponse> => {
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();
};