File size: 777 Bytes
cdc55f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import axios from "axios";

const api = axios.create({
  baseURL: import.meta.env.VITE_API_URL || "http://localhost:8000",
});

// Attach token from module-level getter (set by AuthProvider)
let _getToken: (() => string | null) = () => null;
export function setTokenGetter(fn: () => string | null) { _getToken = fn; }

let _onUnauthorized: (() => void) = () => {};
export function setUnauthorizedHandler(fn: () => void) { _onUnauthorized = fn; }

api.interceptors.request.use((config) => {
  const token = _getToken();
  if (token) config.headers.Authorization = `Bearer ${token}`;
  return config;
});

api.interceptors.response.use(
  (r) => r,
  (err) => {
    if (err.response?.status === 401) _onUnauthorized();
    return Promise.reject(err);
  }
);

export default api;