openreader/src/lib/server/errors/catalog.ts

65 lines
1.7 KiB
TypeScript

import type { ServerErrorClass } from '@/lib/server/errors/contract';
export type ServerErrorCatalogEntry = {
code: string;
errorClass: ServerErrorClass;
httpStatus: number;
retryable: boolean;
ownerDomain: string;
description: string;
};
export const SERVER_ERROR_CATALOG: ServerErrorCatalogEntry[] = [
{
code: 'UPSTREAM_RATE_LIMIT',
errorClass: 'upstream',
httpStatus: 429,
retryable: true,
ownerDomain: 'tts',
description: 'Upstream provider rate limited the request.',
},
{
code: 'UPSTREAM_TTS_ERROR',
errorClass: 'upstream',
httpStatus: 502,
retryable: true,
ownerDomain: 'tts',
description: 'Upstream TTS provider returned a 5xx/transport failure.',
},
{
code: 'DOCUMENTS_BLOB_MISSING',
errorClass: 'storage',
httpStatus: 404,
retryable: false,
ownerDomain: 'documents',
description: 'Document blob was not found in backing storage.',
},
{
code: 'COMPUTE_WORKER_UNAVAILABLE',
errorClass: 'upstream',
httpStatus: 503,
retryable: true,
ownerDomain: 'compute',
description: 'Compute worker endpoint unavailable or misconfigured.',
},
{
code: 'AUTH_UNAUTHORIZED',
errorClass: 'auth',
httpStatus: 401,
retryable: false,
ownerDomain: 'auth',
description: 'Request requires authentication and no valid session was present.',
},
{
code: 'UNKNOWN_SERVER_ERROR',
errorClass: 'unknown',
httpStatus: 500,
retryable: false,
ownerDomain: 'server',
description: 'Fallback classification for uncategorized server exceptions.',
},
];
export const SERVER_ERROR_CATALOG_BY_CODE = new Map(
SERVER_ERROR_CATALOG.map((entry) => [entry.code, entry] as const),
);