Erros

GenericError, o envelope de erro de domínio e como tratá-lo no frontend sem confundir 404 de proxy com sucesso vazio.

GenericError

const { GenericError } = require("@oondemand/oon-core-back");

throw new GenericError("Informe um nome de até 80 caracteres.", {
  statusCode: 422,
  code: "DEMO_NAME_INVALID",
  details: { field: "nome" },
});

O middleware produz o envelope de domínio:

{
  "message": "Informe um nome de até 80 caracteres.",
  "error": {
    "code": "DEMO_NAME_INVALID",
    "message": "Informe um nome de até 80 caracteres.",
    "details": { "field": "nome" },
    "requestId": "correlacao-quando-disponivel"
  }
}

details e requestId são opcionais. Erros comuns com statusCode 4xx explícito respondem com esse status (error.code é o código do erro ou HTTP_<status>), em vez de 500.

Erros especializados

Classe Origem Status típico
DomainRuleError Fórmula ou validação declarativa 422
DomainManifestError central.domain.json inválido (OON_DOMAIN_MANIFEST_INVALID) 422
ProcessManifestError central.process.json inválido 422
AppManifestError central.app.json inválido — (boot)
PdfRenderingError Capability de PDF (retryable) variável
TransactionalEmailError Capability de e-mail (EMAIL_*) variável

Erros de manifesto carregam code, statusCode e issues[] com path e message.

No frontend

O cliente do Core normaliza erros para OonError:

interface OonError { code: string; message: string; status?: number; details?: unknown; requestId?: string }

Em chamadas diretas com useOonApi, leia error.response.data.error.message, com fallback para data.message e para o status HTTP:

try {
  await http.post("/demo/saudacao", { nome });
} catch (error) {
  const response = (error as { response?: { status?: number; data?: { message?: string; error?: { message?: string } } } }).response;
  setMensagem(response?.data?.error?.message || response?.data?.message || `Falha (HTTP ${response?.status ?? "indisponível"}).`);
}

Regras

  • Faça branching por code, nunca pelo texto da mensagem.
  • Respostas legadas e recusas de autenticação podem conter somente message.
  • Um 404 de proxy/Express pode ser HTML: investigue rota, proxy ou empacotamento — não é uma rejeição da sua API.
  • Não trate erro de rede ou 404 como sucesso vazio.
  • Logs e respostas nunca devem conter token, cookie, credencial, senha ou conteúdo sensível.

Lista completa de códigos em Códigos de erro.