(function() { var API_BASE = '/api/admin'; var AUTH_BASE = '/api/auth'; function headers(extra) { return Object.assign({ 'Accept': 'application/json', }, extra || {}); } function attachCorrelation(error, response) { var requestId = response.headers.get('x-request-id'); var traceId = response.headers.get('x-trace-id'); if (requestId && requestId.length <= 128 && /^[!-~]+$/.test(requestId) && requestId.indexOf(',') === -1 && requestId.indexOf(';') === -1) { error.requestId = requestId; } if (traceId && /^[0-9a-f]{32}$/.test(traceId) && traceId !== '00000000000000000000000000000000') { error.traceId = traceId; } return error; } async function request(path, options) { var response = await fetch(path, Object.assign({ credentials: 'same-origin', headers: headers(), }, options || {})); if (response.status === 204) { return null; } var payload = null; var text = await response.text(); if (text) { try { payload = JSON.parse(text); } catch (_error) {} } if (!response.ok) { if (response.status === 401 && window.CrankAuth && typeof window.CrankAuth.handleUnauthorized === 'function') { window.CrankAuth.handleUnauthorized(); } var looksLikeHtml = /^\s*