VashuTheGreat2's picture
Upload folder using huggingface_hub
0e17177 verified
import axios from "axios";
const BASE_URL = import.meta.env.VITE_NODE_BASE_URL || "http://localhost:3000/api";
const api = axios.create({
baseURL: BASE_URL,
withCredentials: true,
headers: {
"Content-Type": "application/json",
},
});
// Optional: Add response interceptor for global error handling
let isRefreshing = false;
let failedQueue: any[] = [];
const processQueue = (error: any, token: string | null = null) => {
failedQueue.forEach((prom) => {
if (error) {
prom.reject(error);
} else {
prom.resolve(token);
}
});
failedQueue = [];
};
api.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
console.log("Interceptor caught error:", {
status: error.response?.status,
data: error.response?.data,
message: error.response?.data?.message
});
if (
(error.response?.status === 401 ||
(error.response?.status === 500 && error.response?.data?.message === 'jwt expired')) &&
!originalRequest._retry
) {
if (isRefreshing) {
return new Promise(function (resolve, reject) {
failedQueue.push({ resolve, reject });
})
.then(() => {
return api(originalRequest);
})
.catch((err) => {
return Promise.reject(err);
});
}
originalRequest._retry = true;
isRefreshing = true;
try {
await axios.get(`${BASE_URL}/user/refresh-token`, { withCredentials: true });
processQueue(null, "refreshed");
isRefreshing = false;
return api(originalRequest);
} catch (refreshError) {
processQueue(refreshError, null);
isRefreshing = false;
localStorage.removeItem("user");
window.location.href = "/login";
return Promise.reject(refreshError);
}
}
console.error("API Error:", error.response?.data?.message || error.message);
return Promise.reject(error);
}
);
export default api;