/
nsstnc
/
lab3
Обзор
Документация
Войти
/
nsstnc
/
lab3
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/api/client.ts
53 строки
1 KB
nsstnc
Добавил поддержку идемпотентности
25 ноя 2025, 20:23
25 ноя 2025, 20:23
164e32a
Код
Авторство
О чём код?
import axios from 'axios'; import {useAuthStore} from '../store/authStore'; function simpleHash(str: string): string { let hash = 0 for (let i = 0; i < str.length; i++) { const char = str.charCodeAt(i) hash = ((hash << 5) - hash) + char hash = hash & hash } return Math.abs(hash).toString(36) } const api = axios.create({ baseURL: 'http://localhost:5083', timeout: 10000, }); api.defaults.headers.common['Accept'] = 'text/plain'; api.defaults.headers.post['Content-Type'] = 'application/json'; api.defaults.headers.put['Content-Type'] = 'application/json'; api.interceptors.request.use((config) => { const token = useAuthStore.getState().accessToken; if (token) { config.headers.Authorization = `Bearer ${token}`; } config.headers.Accept = 'text/plain'; if (config.method?.toUpperCase() === 'POST' && !config.headers['Idempotency-Key']) { const bodyStr = JSON.stringify(config.data) config.headers['Idempotency-Key'] = simpleHash(bodyStr) } return config; }); api.interceptors.response.use( (response) => response, (error) => { if (error.response?.status === 401) { useAuthStore.getState().logout(); window.location.reload(); } if (error.response?.status === 429) { alert('Слишком много запросов. Подождите'); } return Promise.reject(error); } ); export default api;