Ensure uniform code formatting across components by aligning with the established code style. Adjust imports, indentation, and spacing to enhance readability and maintainability.
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import axios from "axios";
|
|
|
|
const api = axios.create({
|
|
baseURL: process.env.NEXT_PUBLIC_API_URL || "http://localhost:3000",
|
|
withCredentials: true,
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
|
|
// Système anti-spam rudimentaire pour les erreurs répétitives
|
|
const errorCache = new Map<string, number>();
|
|
const SPAM_THRESHOLD_MS = 2000; // 2 secondes de silence après une erreur sur le même endpoint
|
|
|
|
api.interceptors.response.use(
|
|
(response) => {
|
|
// Nettoyer le cache d'erreur en cas de succès sur cet endpoint
|
|
const url = response.config.url || "";
|
|
errorCache.delete(url);
|
|
return response;
|
|
},
|
|
(error) => {
|
|
const url = error.config?.url || "unknown";
|
|
const now = Date.now();
|
|
const lastErrorTime = errorCache.get(url);
|
|
|
|
if (lastErrorTime && now - lastErrorTime < SPAM_THRESHOLD_MS) {
|
|
// Ignorer l'erreur si elle se produit trop rapidement (déjà signalée)
|
|
// On retourne une promesse qui ne se résout jamais ou on rejette avec une marque spéciale
|
|
return new Promise(() => {});
|
|
}
|
|
|
|
errorCache.set(url, now);
|
|
return Promise.reject(error);
|
|
},
|
|
);
|
|
|
|
export default api;
|