Spaces:
Sleeping
Sleeping
| 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; | |