49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
export type HousekeepingErrorCode =
|
|
| "UNAUTHENTICATED"
|
|
| "FORBIDDEN"
|
|
| "VALIDATION"
|
|
| "NOT_FOUND"
|
|
| "CONFLICT"
|
|
| "RATE_LIMITED"
|
|
| "DEPENDENCY_UNAVAILABLE"
|
|
| "TIMEOUT"
|
|
| "INTERNAL";
|
|
|
|
export interface HousekeepingError {
|
|
code: HousekeepingErrorCode;
|
|
messageKey: string;
|
|
fieldErrors?: Readonly<Record<string, readonly string[]>>;
|
|
}
|
|
|
|
export type HousekeepingResult<T> =
|
|
| { ok: true; data: T; correlationId: string }
|
|
| { ok: false; error: HousekeepingError; correlationId: string };
|
|
|
|
export function ok<T>(data: T, correlationId: string): HousekeepingResult<T> {
|
|
return { ok: true, data, correlationId };
|
|
}
|
|
|
|
export function fail(
|
|
code: HousekeepingErrorCode,
|
|
messageKey: string,
|
|
correlationId: string,
|
|
fieldErrors?: Readonly<Record<string, readonly string[]>>,
|
|
): HousekeepingResult<never> {
|
|
return {
|
|
ok: false,
|
|
error: {
|
|
code,
|
|
messageKey,
|
|
...(fieldErrors === undefined ? {} : { fieldErrors }),
|
|
},
|
|
correlationId,
|
|
};
|
|
}
|
|
|
|
export function mapUnknownError(_error: unknown): HousekeepingError {
|
|
return {
|
|
code: "INTERNAL",
|
|
messageKey: "errors.housekeeping.internal",
|
|
};
|
|
}
|