import axios from "axios"; import { dbManager } from "../utils/indexedDB"; const axiosClient = axios.create({ baseURL: "/api", withCredentials: true, headers: { "Content-Type": "application/json", }, }); // Добавляем interceptor для логирования запросов (для отладки) axiosClient.interceptors.request.use( (config) => { console.log("API Request:", config.method?.toUpperCase(), config.url); return config; }, (error) => { return Promise.reject(error); } ); axiosClient.interceptors.response.use( (response) => { console.log("API Response:", response.status, response.config.url); return response; }, (error) => { console.error("API Error:", { url: error.config?.url, status: error.response?.status, message: error.message, data: error.response?.data, }); if (error.response?.status === 401) { // Список URL, где 401 означает неправильный пароль, а не истечение сессии const passwordProtectedUrls = [ "/login", // Страница входа "/register", // Страница регистрации "/notes/archived/all", // Удаление всех архивных заметок "/user/delete-account", // Удаление аккаунта "/user/2fa/verify", // Проверка 2FA кода "/user/2fa/disable", // Отключение 2FA ]; // URL, где 401 не должен обрабатываться как ошибка сессии const statusCheckUrls = [ "/auth/status", // Проверка статуса аутентификации ]; // Проверяем, является ли это запросом с проверкой пароля const isPasswordProtected = passwordProtectedUrls.some((url) => error.config?.url?.includes(url) ); // Проверяем, является ли это запросом проверки статуса const isStatusCheck = statusCheckUrls.some((url) => error.config?.url?.includes(url) ); // Разлогиниваем только если это НЕ запрос с проверкой пароля и НЕ проверка статуса if (!isPasswordProtected && !isStatusCheck) { // Очищаем IndexedDB при автоматическом разлогинивании dbManager.clearAll().catch((err) => { console.error("Ошибка очистки IndexedDB при 401:", err); }); localStorage.removeItem("isAuthenticated"); window.location.href = "/"; } } // Если это ошибка сети (нет ответа от сервера) if (!error.response) { console.error( "Network error - server might be down or proxy not working" ); } return Promise.reject(error); } ); export default axiosClient;