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, ); }