58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import axios from 'axios';
|
|
|
|
// Function to get the token from local storage or state management
|
|
export const ACCESS_TOKEN_KEY: 'access_token' = 'access_token' as const;
|
|
export const getAccessToken = () => sessionStorage.getItem(ACCESS_TOKEN_KEY);
|
|
|
|
const apiClient = axios.create({
|
|
// Define the base URL for all API requests
|
|
baseURL: import.meta.env.VITE_API_URL,
|
|
|
|
// Set a timeout for requests (e.g., 10 seconds)
|
|
timeout: 10000,
|
|
|
|
// Set default headers
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Accept: 'application/json',
|
|
},
|
|
});
|
|
|
|
// --- Request Interceptor ---
|
|
// This runs BEFORE each request is sent
|
|
apiClient.interceptors.request.use(
|
|
(config) => {
|
|
const token = getAccessToken();
|
|
if (token) {
|
|
// Add the authorization token to the headers
|
|
config.headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
return config;
|
|
},
|
|
(error) => {
|
|
// Handle request errors
|
|
return Promise.reject(error);
|
|
},
|
|
);
|
|
|
|
// --- Response Interceptor ---
|
|
// This runs AFTER a response is received
|
|
// TODO: set global post api logic
|
|
// apiClient.interceptors.response.use(
|
|
// (response) => {
|
|
// // Any status code within the 2xx range will trigger this function
|
|
// return response;
|
|
// },
|
|
// (error) => {
|
|
// // Handle common errors globally
|
|
// if (error.response?.status === 401) {
|
|
// // e.g., redirect to login page if unauthorized
|
|
// console.error("Unauthorized! Redirecting to login...");
|
|
// // window.location.href = '/login';
|
|
// }
|
|
// return Promise.reject(error);
|
|
// }
|
|
// );
|
|
|
|
export default apiClient;
|