import { logInfo, logError } from '../utils'; import { ErrorType } from '../types/interfaces'; import { ErrorClassifier } from './engine'; export interface ApiResponse { success: boolean; data?: T; error?: { type: ErrorType; message: string; isRecoverable: boolean; }; } /** * ExternalApiHandler: 외부 서비스(Ollama, Gemini, Search API 등)와의 * 모든 통신을 중앙 집중적으로 관리하며, 인증 복구 및 속도 제한 대응을 담당합니다. */ export class ExternalApiHandler { /** * 인증 오류 발생 시 복구 가능성을 판단하고 재시도 로직을 제어합니다. */ public static async handleAuthRecovery(error: any): Promise { logInfo(`[ApiHandler] 인증 오류 감지. 복구 시도 중...`); // TODO: 실제 프로젝트의 인증 스키마(API Key, OAuth 등)에 따른 복구 로직 구현 // 예: 환경 변수 재로드, 만료된 토큰 갱신 요청 등 return false; // 현재는 기본적으로 수동 개입 필요로 처리 } public static async request( call: () => Promise, context: string ): Promise> { try { const data = await call(); return { success: true, data }; } catch (error: any) { logError(`[ApiHandler] [${context}] 호출 실패:`, error); // ErrorClassifier를 통해 시스템 통합 분류 적용 const { type, rule } = ErrorClassifier.classify(error); return { success: false, error: { type, message: error.message, isRecoverable: type === ErrorType.TRANSIENT || type === ErrorType.AUTH_FAILURE } }; } } }