/** * Detección centralizada del conflicto de concurrencia optimista (HTTP 409 / * `OPTIMISTIC_LOCK_VIOLATION`) para CUALQUIER mutación del documento * (saveHeader, saveLine, deleteLine, execute-process/transición). * * El backend responde 409 con un problem-details: * - código `OPTIMISTIC_LOCK_VIOLATION` * - `detail` traducido (`error.row_version_stale` / `document.header_concurrency_conflict`) * - extensiones `row_version_expected` y `row_version_actual`. * * El adapter por defecto LANZA un error (con `.status` y `.body`) ante un * non-ok; otros adapters pueden lanzar con otra forma o devolver la clave * reservada `_conflict`. Este helper hace duck-typing sobre lo que se lanza para * reconocer el 409 sin acoplarse a la clase `ApiError` concreta. */ export declare const OPTIMISTIC_LOCK_CODE = "OPTIMISTIC_LOCK_VIOLATION"; /** * Código de conflicto de concurrencia de los endpoints a medida de Ventas * (contrato FD-10). */ export declare const ROW_VERSION_CONFLICT_CODE = "ROW_VERSION_CONFLICT"; /** * Códigos de negocio que SÍ representan un conflicto de concurrencia optimista. * Debe reflejar `isOptimisticConcurrencyError` de la app consumidora * (`apps/frontend/src/config/document-conflict.ts`). */ export declare const CONCURRENCY_CODES: readonly ["OPTIMISTIC_LOCK_VIOLATION", "ROW_VERSION_CONFLICT"]; export interface ConflictDetails { /** Mensaje traducido (problem-details `detail`/`title`) o el del error. */ message?: string; /** `row_version` que el cliente envió (extensión `row_version_expected`). */ expected?: string | number; /** `row_version` real en el servidor (extensión `row_version_actual`). */ actual?: string | number; } /** * Inspecciona un valor lanzado por una mutación y, si corresponde a un conflicto * de concurrencia optimista, devuelve los detalles para el modal y el log. * Devuelve `null` si NO es un conflicto. * * Es conflicto de concurrencia solo cuando el `code` de negocio es uno de * concurrencia conocido (`OPTIMISTIC_LOCK_VIOLATION` / `ROW_VERSION_CONFLICT`), * o cuando es un 409 SIN `code` de negocio. Cualquier 409 con `code` de negocio * (p.ej. `NegativeCostException`) NO es conflicto y devuelve `null` para que el * kit lo enrute a su manejo de error normal / banner. */ export declare function isConflictError(err: unknown): ConflictDetails | null; //# sourceMappingURL=conflictError.d.ts.map