export type RequestStatus = | "PENDING" | "SUCCESS" | "FAILED" | "RETRYING" | "CANCELED" | "QUEUED"; export interface ApiRequest { id: string; url: string; method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; data?: T; params?: Record; headers?: Record; options: RequestOptions; status: RequestStatus; priority: number; createdAt: number; lastAttemptAt?: number; retryCount: number; resolve: (response: ApiResponse) => void; reject: (error: ApiError) => void; } export interface ApiResponse { data: T; status: number; statusText: string; headers: Record; config: ApiRequest; requestTime: number; } export interface ApiError extends Error { isNetworkError: boolean; isTimeoutError: boolean; isRateLimitError: boolean; isServerError: boolean; isClientError: boolean; response?: ApiResponse; request?: ApiRequest; classification: | "NETWORK" | "TIMEOUT" | "RATE_LIMIT" | "SERVER" | "CLIENT" | "UNKNOWN"; } export interface ApiClientConfig { baseUrl?: string; debug?: boolean; defaultHeaders?: Record; retry: { maxAttempts: number; delayMs: number; statusCodes: number[]; }; rateLimit: { maxRequests: number; perMilliseconds: number; }; offline: { enabled: boolean; storageKey: string; limit: number; }; queue: { concurrency: number; }; requestOptions: RequestOptions; adapter: "axios" | "fetch"; } export interface RequestOptions { timeout?: number; priority?: number; retryable?: boolean; offlineable?: boolean; cancelToken?: { promise: Promise; onCancel?: () => void; }; headers?: Record; } export interface Logger { log: (...args: any[]) => void; warn: (...args: any[]) => void; error: (...args: any[]) => void; }