/** * api.js — Обёртка над fetch с обработкой ошибок и авторизации */ import { showAuthOverlay } from "./auth.js"; export async function readJsonResponse(response) { const text = await response.text(); if (!text) return null; try { return JSON.parse(text); } catch { return { ok: false, error: text }; } } export async function apiFetch(url, options = {}) { const response = await fetch(url, options); if (response.status === 401) { showAuthOverlay(); const data = await readJsonResponse(response); const error = new Error(data?.error || "Требуется авторизация."); error.status = 401; throw error; } const data = await readJsonResponse(response); if (!response.ok || (data && data.ok === false)) { const errorMsg = data?.error || `Ошибка сервера (${response.status})`; const error = new Error(errorMsg); error.status = response.status; error.details = data?.details; error.requestId = data?.requestId; throw error; } return data; }