learning_ai_notes/backend/src/lib/error-mapping.ts

55 lines
1.3 KiB
TypeScript

import { ServiceError } from '@bytelyst/errors';
type DependencyKind = 'extraction-service' | 'llm' | 'blob';
function causeMessage(error: unknown): string {
return error instanceof Error ? error.message : String(error);
}
function dependencyError(
dependency: DependencyKind,
statusCode: number,
message: string,
code: string,
error: unknown,
): ServiceError {
return new ServiceError(statusCode, message, {
code,
dependency,
cause: causeMessage(error),
});
}
export function mapExtractionFailure(error: unknown): ServiceError {
return dependencyError(
'extraction-service',
502,
'Extraction service failed',
'EXTRACTION_SERVICE_FAILURE',
error,
);
}
export function mapLlmFailure(error: unknown): ServiceError {
const message = causeMessage(error).toLowerCase();
const timedOut = message.includes('timed out') || message.includes('timeout');
return dependencyError(
'llm',
timedOut ? 504 : 502,
timedOut ? 'LLM request timed out' : 'LLM request failed',
timedOut ? 'LLM_TIMEOUT' : 'LLM_FAILURE',
error,
);
}
export function mapBlobFailure(error: unknown): ServiceError {
return dependencyError(
'blob',
502,
'Blob service failed',
'BLOB_SERVICE_FAILURE',
error,
);
}