import { InterpretedError } from './interpret-error'; import * as i0 from "@angular/core"; /** * Key i18n fija de la librería para fallos de red. Las apps pueden definirla en * su contenido i18n (namespace `_global`) para personalizar el texto; si no * existe, se usa {@link NETWORK_FALLBACK_MESSAGE}. */ export declare const VALTECH_NETWORK_ERROR_KEY = "valtech.error.network"; /** * Opciones de {@link ValtechErrorService.handle}. */ export interface ValtechErrorHandleOptions { /** * Identificador del punto de fallo, ej. `'profile.save'`. Se incluye en el * log de consola y en el reporte a Analytics para facilitar el tracing. */ context?: string; /** * Mapa `código de backend → key i18n`. Lo provee la app, que conoce sus * propias traducciones. Ej. `{ EMAIL_TAKEN: 'errors.emailTaken' }`. */ i18nMap?: Record; /** * Key i18n a usar cuando no hay match en `i18nMap` (y el error no es de red). * Si se omite, se usa un mensaje genérico en español. */ fallbackKey?: string; /** * Namespace i18n para resolver `i18nMap` / `fallbackKey` / la key de red. * Default: `_global`. */ i18nNamespace?: string; /** Si mostrar un toast con el mensaje resuelto. Default: `true`. */ toast?: boolean; } /** * Servicio de UX de errores capturados (Capa 3 del estándar de manejo de errores). * * Mientras la Capa 1 ({@link errorLoggingInterceptor}) observa TODAS las * respuestas HTTP con error, y la Capa 2 (`AnalyticsErrorHandler`) captura los * errores NO manejados, la Capa 3 es el punto único que una página usa en su * `catch` para convertir un error en feedback al usuario. * * Responsabilidades de {@link handle}: * 1. Normaliza el error (`interpretError`). * 2. Loguea a consola + reporta a Analytics (`source: 'handled'`, con `context`). * 3. Resuelve un mensaje localizado (ver orden de resolución en {@link handle}). * 4. Muestra un toast (`color: 'dark'`, estándar Valtech) salvo `toast: false`. * 5. Devuelve el {@link InterpretedError} para que la página decida lógica extra. * * **Nunca lanza.** `AnalyticsService` se inyecta `@Optional()`. * * @example * ```ts * private errors = inject(ValtechErrorService); * * async save() { * try { * await firstValueFrom(this.api.updateProfile(this.form.value)); * this.toast.show({ message: 'Perfil actualizado', color: 'dark' }); * } catch (err) { * this.errors.handle(err, { * context: 'profile.save', * i18nMap: { EMAIL_TAKEN: 'errors.emailTaken' }, * fallbackKey: 'errors.profileSaveFailed', * }); * } * } * ``` */ export declare class ValtechErrorService { private readonly i18n; private readonly toast; private readonly analytics; /** * Maneja un error capturado: normaliza, observa y produce feedback de usuario. * * Orden de resolución del mensaje del toast: * 1. `i18nMap[code]` definido → `i18n.t(esa key)`. * 2. Sin match y `isNetwork` → key de red ({@link VALTECH_NETWORK_ERROR_KEY}), * con fallback al texto español si la app no la tradujo. * 3. `fallbackKey` definido → `i18n.t(fallbackKey)`. * 4. Genérico en español. * * @param err Cualquier error capturado. * @param opts Opciones de contexto, mapeo i18n y toast. * @returns El {@link InterpretedError} normalizado. Nunca lanza. */ handle(err: unknown, opts?: ValtechErrorHandleOptions): InterpretedError; /** * Resuelve el mensaje a mostrar siguiendo el orden documentado en {@link handle}. */ private resolveMessage; /** * Traduce una key i18n. Devuelve `null` si la key no está definida — el * `I18nService` devuelve un placeholder `[namespace.key]` para keys faltantes; * lo detectamos para poder caer a un fallback en lugar de mostrar el placeholder. */ private translate; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }