import type { TranslateFn } from '../i18nFactory'; import type { IMasterDocumentAdapter } from '../adapter/MasterDocumentAdapter.types'; /** * Fetcher semántico para las llamadas del panel de cruce (Modelo B — FEAT-094). * * Enruta SIEMPRE por `adapter.genericFetch` cuando está disponible, de modo que * la app consumidora controle un único punto de salida HTTP: inyección de * autenticación (`Authorization`, `X-Company-Id`), `baseUrl` real y, si lo * necesita, remapeo de las rutas canónicas del kit a las del backend * (p. ej. `/api/v1/crossing/*` → `/api/v1/crossings/*`). * * Solo cae a `fetch` directo contra `baseUrl` cuando el adapter NO implementa * `genericFetch` (escenarios de Storybook/demo sin backend autenticado). En ese * camino los errores HTTP se normalizan a un `Error` con `errorCode`/`data` para * que la clasificación FE-08 (inline vs dialog) siga funcionando. */ export type CrossingFetch = (method: string, path: string, body?: unknown) => Promise; /** * Error normalizado de una operación de cruce. `errorCode` proviene del * `ProblemDetails` del backend (dependencia FE-08); `message` es texto de * usuario listo para mostrar (sin IDs internos ni stack traces). */ export interface CrossingError { errorCode?: string; message: string; /** * Clave i18n cuando el mensaje lo generó el kit y no el backend. * * `extractCrossingError` es una función pura consumida desde hooks, así que no * puede llamar a `useMasterDocumentTranslation`. Cuando el error no traía texto * propio del backend, propaga esta clave para que el hook llamante haga * `messageKey ? t(messageKey) : message`. Cuando el backend SÍ mandó texto queda * `undefined`: ese texto ya viene traducido (el kit envía `Accept-Language`) y * tiene prioridad. */ messageKey?: string; } export declare function isLineLevelCrossingError(errorCode: string | undefined): boolean; /** * Extrae `{ errorCode, message, messageKey }` de cualquier error lanzado por * `CrossingFetch`, cubriendo las formas más comunes: el propio `Error` con * `errorCode`/`data`, un `ProblemDetails` plano, o errores de cliente HTTP con * `response.data`. * * `messageKey` solo se rellena cuando el mensaje es el fallback del kit; si el * backend mandó texto, ese texto gana y `messageKey` queda `undefined`. */ export declare function extractCrossingError(err: unknown): CrossingError; /** * Igual que `extractCrossingError`, pero ya traducido al idioma activo. * * Recibe `t` en vez de llamar al hook porque este módulo es puro; los hooks de * cruce (`useCrossing`, `useCrossDocuments`, `useBulkConversion`) obtienen `t` de * `useMasterDocumentTranslation` y lo pasan aquí. */ export declare function resolveCrossingError(err: unknown, t: TranslateFn): CrossingError; /** * Construye el `CrossingFetch` para una sesión de MasterDocument. * Prefiere `adapter.genericFetch`; si no existe, usa `fetch` directo + `baseUrl`. */ export declare function createCrossingFetch(adapter: IMasterDocumentAdapter, baseUrl: string): CrossingFetch; //# sourceMappingURL=crossingFetch.d.ts.map