Spaces:
Sleeping
Sleeping
File size: 1,497 Bytes
0f8617c 8d9c185 f359e2d 0f8617c f359e2d 0f8617c 9055c20 0f8617c | 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 | import axios from 'axios';
const API_URL = import.meta.env.VITE_API_URL || '/api';
const api = axios.create({
baseURL: API_URL,
});
// Add a request interceptor to add the JWT token to headers
api.interceptors.request.use(
(config) => {
const user = JSON.parse(localStorage.getItem('user'));
if (user && user.token) {
config.headers.Authorization = `Bearer ${user.token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
// Add a response interceptor to handle 401 Unauthorized (e.g. database resets)
api.interceptors.response.use(
(response) => {
return response;
},
(error) => {
if (error.response && error.response.status === 401) {
// Token is invalid or user was deleted from memory DB
if (error.response.data?.message === 'Not authorized, user not found' || error.response.data?.message === 'Not authorized, token failed') {
localStorage.removeItem('user');
localStorage.removeItem('activeRole');
window.location.href = '/login';
}
}
return Promise.reject(error);
}
);
export const createBooking = async (bookingData) => {
const response = await api.post('/bookings', bookingData);
return response.data;
};
export const getUserBookings = async () => {
const response = await api.get('/bookings');
return response.data;
};
export default api;
|