import { queryOptions } from '@tanstack/react-query' import { apiFetch, apiJSON, apiMutate } from '@/lib/api-client' export interface HealthStatus { ok: boolean status?: string error?: string } export interface ReadyStatus { status?: string /** Backend: string ("ok"|"memory"|"unavailable"), boolean, or { ok, error }. */ checks?: Record } export interface VersionInfo { version?: string app?: string git_sha?: string build_time?: string } export const monitoringKeys = { all: ['monitoring'] as const, health: () => [...monitoringKeys.all, 'health'] as const, ready: () => [...monitoringKeys.all, 'ready'] as const, version: () => [...monitoringKeys.all, 'version'] as const, } async function fetchHealth(): Promise { const res = await apiFetch('/v1/health', { method: 'GET' }) let body: { status?: string } = {} try { body = (await res.json()) as { status?: string } } catch { /* ignore */ } return { ok: res.ok, status: body.status, error: res.ok ? undefined : `HTTP ${res.status}` } } export function monitoringHealthQueryOptions() { return queryOptions({ queryKey: monitoringKeys.health(), queryFn: fetchHealth, staleTime: 15_000, }) } export function monitoringReadyQueryOptions() { return queryOptions({ queryKey: monitoringKeys.ready(), queryFn: () => apiJSON('/v1/ready'), staleTime: 15_000, }) } export function monitoringVersionQueryOptions() { return queryOptions({ queryKey: monitoringKeys.version(), queryFn: () => apiJSON('/v1/version'), staleTime: 60_000, }) } export async function fetchLog(endpoint: string): Promise { const res = await apiFetch(endpoint, { method: 'GET' }) return await res.text() } export async function clearLog(endpoint: string): Promise { await apiMutate(endpoint, 'DELETE', {}) }