Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 1,489 Bytes
3263f99 17509ae 3263f99 | 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 | import axios from "axios";
// In production, VITE_BACKEND_URL points to the Cloud Run backend.
// In local dev it's empty β Vite proxy handles /api and /media routing.
const viteEnv =
typeof import.meta !== "undefined" ? import.meta.env : undefined;
const processEnv =
typeof globalThis !== "undefined" && "process" in globalThis
? (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env
: undefined;
export const BACKEND_URL = viteEnv?.VITE_BACKEND_URL || processEnv?.VITE_BACKEND_URL || "";
const api = axios.create({
baseURL: `${BACKEND_URL}/api`,
headers: {
"Content-Type": "application/json",
},
});
// βββ Auth interceptor βββββββββββββββββββββββββββββββββββββ
api.interceptors.request.use((config) => {
const token = localStorage.getItem("b2v_token");
if (token) {
config.headers.Authorization = `Bearer token`.replace("token", token);
}
return config;
});
api.interceptors.response.use(
(res) => res,
(err) => {
if (err.response?.status === 401) {
localStorage.removeItem("b2v_token");
localStorage.removeItem("b2v_user");
// Only redirect if not already on landing/login page
if (
window.location.pathname !== "/" &&
window.location.pathname !== "/pricing"
) {
window.location.href = "/";
}
}
return Promise.reject(err);
}
);
export default api;
|