import { z } from 'zod'; import { DEFAULT_GATEWAY_URL, JWT_TOKEN } from './constants'; const agentSchema = z.object({ id: z.string(), name: z.string(), status: z.enum(['online', 'offline', 'degraded']), lastSeen: z.string() }); export type Agent = z.infer; async function fetchJSON(path: string, init?: RequestInit): Promise { const response = await fetch(`${DEFAULT_GATEWAY_URL}${path}`, { ...init, headers: { 'Content-Type': 'application/json', ...(JWT_TOKEN ? { Authorization: `Bearer ${JWT_TOKEN}` } : {}), ...init?.headers } }); if (!response.ok) { throw new Error(`Gateway request failed: ${response.status}`); } return (await response.json()) as T; } export async function listAgents(): Promise { const payload = await fetchJSON('/agents'); const parsed = z.array(agentSchema).safeParse(payload); if (!parsed.success) { console.error(parsed.error.flatten()); return []; } return parsed.data; } export async function gatewayVersion(): Promise { const payload = await fetchJSON<{ version: string }>('/version'); return payload.version; }