// Duenne fetch()-Wrapper fuer die Phase-1-REST-API (siehe API.md). Reine Daten-Ebene, kein // DOM-Zugriff - office-render.js ruft diese Funktionen auf und reicht die Ergebnisse an die // Layoutlogik (office-scene.js) weiter. Basis-URL ist per window.MONITOR_API_BASE // ueberschreibbar - gesetzt wird sie zur Laufzeit von /config.js, das der Webserver aus der // Umgebungsvariable MONITOR_API_BASE erzeugt (siehe .env.example und // docker/nginx/default.conf.template). Noetig, weil Frontend und API auf unterschiedlichen // Origins laufen koennen (Dev: web :8090, api :8091); die API liefert dafuer CORS-Header, // siehe api/src/Http/Response.php. const DEFAULT_API_BASE = "/api/v1"; function apiBase() { const configured = typeof window !== "undefined" ? window.MONITOR_API_BASE : null; // Leer = gleicher Origin. Der startsWith-Check faengt einen nicht ersetzten Platzhalter // ab (z.B. wenn config.js von einem anderen Webserver ohne Substitution ausgeliefert // wird) - der waere sonst eine truthy Muell-URL. if (!configured || configured.startsWith("${")) { return DEFAULT_API_BASE; } return configured; } async function getJson(path) { const response = await fetch(`${apiBase()}${path}`, { headers: { Accept: "application/json" } }); if (!response.ok) { throw new Error(`GET ${path} fehlgeschlagen: HTTP ${response.status}`); } return response.json(); } export async function fetchTickets() { const { tickets } = await getJson("/tickets"); return tickets; } export async function fetchEvents(limit = 200) { const { events } = await getJson(`/events?limit=${encodeURIComponent(limit)}`); return events; } export async function fetchSystems() { const { systems } = await getJson("/systems"); return systems; } export async function fetchKpis() { const { kpis } = await getJson("/kpis"); return kpis; } export async function fetchAgents() { const { agents } = await getJson("/agents"); return agents; } /** * Baut die Stream-URL fuer den SSE-Push-Endpoint (F13, Phase 4). Wird von office-realtime.js * an EventSource() uebergeben. */ export function streamUrl() { return `${apiBase()}/stream`; }