27 lines
946 B
TypeScript
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,
|
|
});
|
|
}
|