Files
connectai/src/lib/api.ts
T

54 lines
1.8 KiB
TypeScript

import { logInfo, logError } from '../utils';
import { ErrorType } from '../types/interfaces';
import { ErrorClassifier } from './engine';
export interface ApiResponse<T> {
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<boolean> {
logInfo(`[ApiHandler] 인증 오류 감지. 복구 시도 중...`);
// TODO: 실제 프로젝트의 인증 스키마(API Key, OAuth 등)에 따른 복구 로직 구현
// 예: 환경 변수 재로드, 만료된 토큰 갱신 요청 등
return false; // 현재는 기본적으로 수동 개입 필요로 처리
}
public static async request<T>(
call: () => Promise<T>,
context: string
): Promise<ApiResponse<T>> {
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
}
};
}
}
}