Snaplocal / client /src /api /api.js
Kuruva Laxmi
Add global 401 frontend interceptor to handle memory DB resets automatically
9055c20
Raw
History Blame Contribute Delete
1.5 kB
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;