@monitor-sefaz/contracts
v0.1.0
Published
Schemas Zod e DTOs compartilhados do Monitor SEFAZ: status, histórico (compacto), resumo, incidentes e eventos de notificação.
Maintainers
Readme
@monitor-sefaz/contracts
Schemas Zod e DTOs compartilhados do Monitor SEFAZ: status de serviço, resumo agregado, histórico, incidentes e eventos de notificação.
É o contrato entre o coletor, a API, o Cloudflare Worker e o dashboard — quem consome a API pública do monitor pode validar as respostas com os mesmos schemas que o servidor usa para produzi-las.
Instalação
npm i @monitor-sefaz/contractsUso
import { statusSnapshotSchema, summarySchema, isUp } from '@monitor-sefaz/contracts';
const snapshot = statusSnapshotSchema.parse(await res.json());
// "No ar" inclui contingência: a SEFAZ responde e ainda dá para emitir.
const noAr = snapshot.services.filter((s) => isUp(s.state));Estados possíveis: OPERATIONAL, CONTINGENCY, SLOWDOWN, DOWN, ERROR.
Validação resiliente
Para um painel, uma resposta parcialmente inválida é melhor que uma tela de erro. O schema resiliente descarta os itens ruins e mantém o resto:
import { resilientStatusSnapshotSchema } from '@monitor-sefaz/contracts';
const snapshot = resilientStatusSnapshotSchema.parse(data); // serviços inválidos são omitidosHistórico compacto
O histórico acumulado pelo Worker não é um ponto por checagem: o estado é guardado como run-length (segmento novo só quando muda) e a latência é agregada por hora. Isso mantém 72h de 135 serviços em ~230 KB em vez de megabytes, sem perder o instante exato de cada queda.
import {
compactHistorySchema,
expandCompactHistory,
LATENCY_BUCKET_MS,
} from '@monitor-sefaz/contracts';
const history = compactHistorySchema.parse(await res.json());
// Expande de volta para pontos, na resolução que você precisa.
const detalhe = expandCompactHistory(history, 'NFe:SP');
const grosso = expandCompactHistory(history, 'NFe:SP', { stepMs: LATENCY_BUCKET_MS });Como a grade de saída é regular, "operacionais / total de pontos" já é a fração de tempo no ar — o uptime sai correto por construção.
Licença
MIT © Felipe Sauer
