Spaces:
Sleeping
Sleeping
File size: 1,922 Bytes
3299552 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
// 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');
}
}; |