import { createCorrelationId } from "../correlation"; export type HousekeepingErrorCode = | "UNAUTHENTICATED" | "FORBIDDEN" | "VALIDATION" | "NOT_FOUND" | "CONFLICT" | "RATE_LIMITED" | "DEPENDENCY_UNAVAILABLE" | "TIMEOUT" | "INTERNAL"; export interface HousekeepingError { code: HousekeepingErrorCode; messageKey: string; fieldErrors?: Readonly>; } export interface HousekeepingPartialCompletion { readonly status: "partial"; readonly external: "not-required" | "completed" | "failed"; readonly audit: "persisted" | "unavailable"; } export type HousekeepingResult = | { ok: true; data: T; correlationId: string; completion?: HousekeepingPartialCompletion; } | { ok: false; error: HousekeepingError; correlationId: string }; export function ok( data: T, correlationId: string, completion?: HousekeepingPartialCompletion, ): HousekeepingResult { return { ok: true, data, correlationId, ...(completion === undefined ? {} : { completion }), }; } export function fail( code: HousekeepingErrorCode, messageKey: string, correlationId: string, fieldErrors?: Readonly>, ): HousekeepingResult { return { ok: false, error: { code, messageKey, ...(fieldErrors === undefined ? {} : { fieldErrors }), }, correlationId, }; } export function mapUnknownError( _error: unknown, correlationId = createCorrelationId(), ): HousekeepingResult { return fail("INTERNAL", "errors.housekeeping.internal", correlationId); }