eli02's picture
feat: Implement MainLayout component for consistent layout structure
3299552
raw
history blame contribute delete
1.92 kB
// src/services/auth.js
import axios from './api';
const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || 'https://humblebeeai-al-ghazali-rag-retrieval-api.hf.space';
export const login = async (username, password) => {
try {
const response = await axios.post(
`${API_BASE_URL}/login`,
new URLSearchParams({
username,
password,
grant_type: 'password'
}),
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
);
return {
access_token: response.data.access_token,
refresh_token: response.data.refresh_token,
token_type: response.data.token_type
};
} catch (error) {
if (error.response) {
throw new Error(
error.response.data.detail ||
error.response.data.message ||
'Login failed'
);
}
throw new Error('Network error. Please try again.');
}
};
export const logout = async (accessToken) => {
try {
await axios.post(
`${API_BASE_URL}/logout`,
{},
{
headers: {
Authorization: `Bearer ${accessToken}`
}
}
);
} catch (error) {
console.error('Logout error:', error);
// Proceed with client-side cleanup regardless
}
};
export const refreshToken = async (refreshToken) => {
try {
const response = await axios.post(
`${API_BASE_URL}/refresh`,
{ refresh_token: refreshToken }
);
return {
access_token: response.data.access_token,
refresh_token: response.data.refresh_token || refreshToken, // Fallback to existing if not provided
token_type: response.data.token_type || 'bearer'
};
} catch (error) {
if (error.response) {
throw new Error(
error.response.data.detail ||
'Session expired. Please login again.'
);
}
throw new Error('Network error during token refresh');
}
};