Sage100/src/service/api.ts
2026-01-20 21:20:46 +03:00

87 lines
2.2 KiB
TypeScript

/* eslint-disable import/no-unresolved */
import { ACCESS_TOKEN, REFRESH_TOKEN } from "@/lib/data";
import axios from 'axios'
import Cookies from 'js-cookie';
export const BackUrl = import.meta.env.VITE_API_URL
const access_token: string = Cookies.get(ACCESS_TOKEN) || "";
const apiService = axios.create({
baseURL: BackUrl,
headers: {
Authorization: access_token ? `Bearer ${access_token}` : "dsqd",
"X-API-Key": "sdk_live_TeeZGyvg34H-nIR7tBhyiemAfIV0MbT2HQ1BzG9bofE"
}
})
// Interceptor pour capturer les erreurs et gérer le refresh token
apiService.interceptors.response.use(
response => response,
async error => {
if (!error.response) {
throw new Error('Network Error');
}
// Si le token est expiré (401), tente de le rafraîchir
if (error.response.status === 401) {
const refreshToken = Cookies.get(REFRESH_TOKEN);
if (refreshToken) {
try {
const res = await axios.post(
`${BackUrl}/auth/refresh`,
{ refresh_token: refreshToken }
);
if (res.data && res.data.success && res.data.data.access_token) {
Cookies.set(ACCESS_TOKEN, res.data.data.access_token);
error.config.headers.Authorization = `Bearer ${res.data.data.access_token}`;
return apiService.request(error.config);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (refreshErr) {
Cookies.remove(ACCESS_TOKEN);
Cookies.remove(REFRESH_TOKEN);
}
}
}
return Promise.reject(error);
}
);
// Interceptor pour capturer les erreurs
apiService.interceptors.response.use(
response => response,
error => {
if (!error.response) {
throw new Error('Network Error');
}
return Promise.reject(error);
}
)
apiService.interceptors.request.use(
request => {
const access_token: string = Cookies.get(ACCESS_TOKEN) || "";
// Assurer que le token est présent et valide
if (access_token) {
request.headers.Authorization = `Bearer ${access_token}`;
}
return request;
},
error => {
// Gérer les erreurs d'intercepteur
return Promise.reject(error);
}
);
export default apiService