import axios from 'axios'; /** * Получает user_token из глобального объекта TeleCart */ function getUserToken() { if (typeof window !== 'undefined' && window.TeleCart?.user_token) { return window.TeleCart.user_token; } // Fallback: пытаемся получить из URL как запасной вариант if (typeof window !== 'undefined') { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('user_token') || ''; } return ''; } /** * Базовый URL для API запросов */ function getBaseUrl() { return '/admin/index.php'; } /** * Создает URL для API запроса * @param {string} apiAction - действие API (например, 'configureBotToken') * @returns {string} полный URL */ function buildApiUrl(apiAction) { const baseUrl = getBaseUrl(); const userToken = getUserToken(); return `${baseUrl}?route=extension/module/tgshop/handle&api_action=${apiAction}&user_token=${userToken}`; } /** * HTTP клиент для работы с API */ const httpClient = axios.create({ headers: { 'Content-Type': 'application/json', }, }); /** * Выполняет POST запрос к API * @param {string} apiAction - действие API * @param {object} data - данные для отправки * @returns {Promise} результат запроса */ export async function apiPost(apiAction, data = {}) { const url = buildApiUrl(apiAction); try { const response = await httpClient.post(url, data); return { success: true, data: response.data, status: response.status, }; } catch (error) { // Обработка ошибок axios if (error.response) { // Сервер вернул ошибку const status = error.response.status; const errorData = error.response.data; return { success: false, error: errorData?.error || error.response.statusText, status, data: errorData, }; } else if (error.request) { // Запрос был отправлен, но ответа не получено return { success: false, error: 'Не удалось получить ответ от сервера', status: 0, }; } else { // Ошибка при настройке запроса return { success: false, error: error.message || 'Произошла неизвестная ошибка', status: 0, }; } } } /** * Выполняет GET запрос к API * @param {string} apiAction - действие API * @param {object} params - query параметры * @returns {Promise} результат запроса */ export async function apiGet(apiAction, params = {}) { const url = buildApiUrl(apiAction); try { const response = await httpClient.get(url, { params: params }); return { success: true, data: response.data.data, status: response.status, }; } catch (error) { if (error.response) { const status = error.response.status; const errorData = error.response.data; return { success: false, error: errorData?.error || error.response.statusText, status, data: errorData, }; } else if (error.request) { return { success: false, error: 'Не удалось получить ответ от сервера', status: 0, }; } else { return { success: false, error: error.message || 'Произошла неизвестная ошибка', status: 0, }; } } } export default { apiPost, apiGet, getUserToken, };