Files
sar/apps/web/src/lib/queries/ping.ts
2026-05-28 01:00:45 +00:00

27 lines
946 B
TypeScript

import { useQuery } from '@tanstack/react-query';
import { PingResponseSchema, type PingResponse } from '@sar/api-interface';
import { apiFetch } from '../api-client';
// useApiPing — prova de conectividade ponta-a-ponta API↔Web.
//
// O contrato é o schema Zod compartilhado (@sar/api-interface). Qualquer drift
// no servidor (campo removido, tipo trocado) falha alto via .parse() ANTES de
// chegar nos componentes — o erro vai pra TanStack `error` e mostramos pill 🔴.
//
// refetchInterval 30s = "sereno" (Visual DNA) — sem flash de loading constante.
export const PING_QUERY_KEY = ['health', 'ping'] as const;
export function useApiPing() {
return useQuery<PingResponse, Error>({
queryKey: PING_QUERY_KEY,
queryFn: async () => {
const raw = await apiFetch('/ping');
return PingResponseSchema.parse(raw);
},
refetchInterval: 30_000,
refetchOnWindowFocus: false,
staleTime: 25_000,
});
}