40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
/* 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;
|
|
}
|