import axios from 'axios'; const api = axios.create({ baseURL: process.env.NEXT_PUBLIC_API_URL, withCredentials: true, headers: { 'Content-Type': 'application/json', }, timeout: 10000, // 10 секунд таймаут }); // Интерцептор для добавления токена к запросам api.interceptors.request.use((config) => { if (typeof window !== 'undefined') { const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } } return config; }, (error) => { return Promise.reject(error); }); // Интерцептор для обработки ошибок api.interceptors.response.use( (response) => response, (error) => { if (error.response) { // Ошибка от сервера return Promise.reject(error.response.data); } else if (error.request) { // Ошибка сети return Promise.reject({ error: 'Ошибка сети. Проверьте подключение к интернету.' }); } else { // Другие ошибки return Promise.reject({ error: 'Произошла ошибка при выполнении запроса.' }); } } ); export const auth = async (telegramId: string, username: string) => { try { const response = await api.post('/auth', { telegramId, username }); if (typeof window !== 'undefined') { localStorage.setItem('token', response.data.token); } return response.data; } catch (error) { console.error('Auth error:', error); throw error; } }; export const getProfile = async () => { const response = await api.get('/profile'); return response.data; }; export const getShopItems = async () => { const response = await api.get('/shop'); return response.data; }; export const purchaseItem = async (itemId: string) => { const response = await api.post('/shop/purchase', { itemId }); return response.data; }; export const transferBalance = async (recipientUsername: string, amount: number) => { const response = await api.post('/transfer', { recipientUsername, amount }); return response.data; };