(function () { if (window.__sub2apiAccountHotfixLoaded) return; window.__sub2apiAccountHotfixLoaded = true; var originalFetch = window.fetch ? window.fetch.bind(window) : null; if (!originalFetch) return; function sameOrigin(url) { try { var parsed = new URL(url, window.location.origin); return parsed.origin === window.location.origin; } catch (error) { return false; } } function normalizePath(url) { try { return new URL(url, window.location.origin).pathname; } catch (error) { return ""; } } function hasSensitiveFields(account) { if (!account || typeof account !== "object") return false; var credentials = account.credentials; if (!credentials || typeof credentials !== "object") return false; var apiKey = credentials.api_key; var modelMapping = credentials.model_mapping; return Boolean(apiKey) || Boolean(modelMapping && Object.keys(modelMapping).length); } function mergeAccount(listItem, detail) { if (!detail || typeof detail !== "object") return listItem; var merged = Object.assign({}, listItem, detail); if (listItem && typeof listItem === "object" && detail && typeof detail === "object") { merged.credentials = Object.assign({}, listItem.credentials || {}, detail.credentials || {}); merged.extra = Object.assign({}, listItem.extra || {}, detail.extra || {}); } return merged; } async function hydrateAccounts(payload) { if (!payload || !Array.isArray(payload.items) || !payload.items.length) return payload; var items = payload.items.slice(); var detailRequests = items.map(async function (item, index) { if (!item || !item.id || hasSensitiveFields(item)) return; try { var response = await originalFetch("/admin/accounts/" + encodeURIComponent(item.id), { credentials: "same-origin", headers: { Accept: "application/json" } }); if (!response.ok) return; var detail = await response.json(); items[index] = mergeAccount(item, detail); } catch (error) { } }); await Promise.all(detailRequests); return Object.assign({}, payload, { items: items }); } window.fetch = async function (input, init) { var response = await originalFetch(input, init); var method = ((init && init.method) || (input && input.method) || "GET").toUpperCase(); var url = typeof input === "string" ? input : input && input.url; if (!url || method !== "GET" || !sameOrigin(url)) return response; var path = normalizePath(url); if (path !== "/admin/accounts") return response; try { var contentType = response.headers.get("content-type") || ""; if (contentType.indexOf("application/json") === -1) return response; var payload = await response.clone().json(); if (!payload || !Array.isArray(payload.items)) return response; var hydrated = await hydrateAccounts(payload); return new Response(JSON.stringify(hydrated), { status: response.status, statusText: response.statusText, headers: response.headers }); } catch (error) { return response; } }; })();