function requestJsonWithXhr(url: string): Promise { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.responseType = "json"; xhr.setRequestHeader("Accept", "application/json"); xhr.onload = () => { if (xhr.status < 200 || xhr.status >= 300) { reject(new Error(`Request failed with status ${xhr.status}`)); return; } resolve((xhr.response ?? JSON.parse(xhr.responseText)) as T); }; xhr.onerror = () => reject(new Error("Request failed")); xhr.send(); }); } export async function requestJson(url: string, init?: RequestInit): Promise { if (typeof fetch === "function") { const res = await fetch(url, init); if (!res.ok) { throw new Error(`Request failed with status ${res.status}`); } return res.json() as Promise; } if (typeof XMLHttpRequest === "function") { return requestJsonWithXhr(url); } throw new Error("No browser request API is available"); }