App Errors
packages/app-errors/README.md
@repo/app-errors
Contrato runtime para errores tipados compartidos entre servicios de aplicación y consumidores cliente. No depende de React, Firebase ni de la UI.
AppError
Cada error incluye un code estable y namespaced, un kind para decisiones genéricas de flujo, y un message técnico seguro que no debe mostrarse directamente al usuario. cause conserva el error original para diagnóstico; fieldErrors y metadata son opcionales y no deben contener secretos.
Los servicios construyen AppError en su frontera pública. La app traduce code/kind a copy de producto y nunca muestra mensajes crudos de Firebase o SDK.
Integración con Information
@repo/app-errors define el contrato runtime y los kinds, no los códigos de cada dominio. Los
códigos de Information se declaran en @repo/app-services/info-errors; el servicio preserva errores
externos en cause sin copiar el mensaje de Firebase. fieldErrors representa errores de
validación y metadata no debe incluir secretos.
En system, modules/information/utils/information-error.ts traduce code/kind a copy de
producto para toasts y estado de página. Esta separación evita que el package runtime dependa de
idioma o UI. La guía del módulo está en
Information en el visor.
import { AppError } from '@repo/app-errors';
const adapterError = new Error('adapter failure');
throw new AppError({
code: 'INFO_PERMISSION_DENIED',
kind: 'permission',
message: 'Information update rejected',
cause: adapterError,
});
Validación
pnpm --filter @repo/app-errors test:run
pnpm --filter @repo/app-errors check-types
pnpm --filter @repo/app-errors lint