/* api.js — HTTP-утилиты */ function authHeaders() { return { 'X-Auth-Token': localStorage.getItem('auth_token') || '', 'X-Auth-Env': localStorage.getItem('auth_env') || 'test' }; } async function getJSON(url) { const r = await fetch(url, { headers: authHeaders() }); if (r.status === 401) { doLogout(); throw new Error('Сессия истекла'); } if (!r.ok) { let msg = ''; try { const body = await r.json(); msg = body.error || JSON.stringify(body); } catch (_) { msg = await r.text(); } throw new Error(url + ': ' + r.status + (msg ? ' - ' + msg : '')); } return r.json(); } async function requestJSON(url, method, body) { const r = await fetch(url, { method: method, headers: Object.assign({ 'Content-Type': 'application/json' }, authHeaders()), body: body ? JSON.stringify(body) : undefined }); if (r.status === 401) { doLogout(); throw new Error('Сессия истекла'); } let data = {}; try { data = await r.json(); } catch (_) { } if (!r.ok) { throw new Error(data.error || (url + ': ' + r.status)); } return data; }