import apiClient from './client' // 配置导出数据结构 export interface ConfigExportData { version: string exported_at: string global_models: GlobalModelExport[] providers: ProviderExport[] } // 用户导出数据结构 export interface UsersExportData { version: string exported_at: string users: UserExport[] } export interface UserExport { email: string username: string password_hash: string role: string allowed_providers?: string[] | null allowed_endpoints?: string[] | null allowed_models?: string[] | null model_capability_settings?: any quota_usd?: number | null used_usd?: number total_usd?: number is_active: boolean api_keys: UserApiKeyExport[] } export interface UserApiKeyExport { key_hash: string key_encrypted?: string | null name?: string | null is_standalone: boolean balance_used_usd?: number current_balance_usd?: number | null allowed_providers?: string[] | null allowed_endpoints?: string[] | null allowed_api_formats?: string[] | null allowed_models?: string[] | null rate_limit?: number concurrent_limit?: number | null force_capabilities?: any is_active: boolean auto_delete_on_expiry?: boolean total_requests?: number total_cost_usd?: number } export interface GlobalModelExport { name: string display_name: string default_price_per_request?: number | null default_tiered_pricing: any supported_capabilities?: string[] | null config?: any is_active: boolean } export interface ProviderExport { name: string display_name: string description?: string | null website?: string | null billing_type?: string | null monthly_quota_usd?: number | null quota_reset_day?: number rpm_limit?: number | null provider_priority?: number is_active: boolean rate_limit?: number | null concurrent_limit?: number | null config?: any endpoints: EndpointExport[] models: ModelExport[] } export interface EndpointExport { api_format: string base_url: string headers?: any timeout?: number max_retries?: number max_concurrent?: number | null rate_limit?: number | null is_active: boolean custom_path?: string | null config?: any keys: KeyExport[] } export interface KeyExport { api_key: string name?: string | null note?: string | null rate_multiplier?: number internal_priority?: number global_priority?: number | null max_concurrent?: number | null rate_limit?: number | null daily_limit?: number | null monthly_limit?: number | null allowed_models?: string[] | null capabilities?: any is_active: boolean } export interface ModelExport { global_model_name: string | null provider_model_name: string provider_model_aliases?: any price_per_request?: number | null tiered_pricing?: any supports_vision?: boolean | null supports_function_calling?: boolean | null supports_streaming?: boolean | null supports_extended_thinking?: boolean | null supports_image_generation?: boolean | null is_active: boolean config?: any } export interface ConfigImportRequest extends ConfigExportData { merge_mode: 'skip' | 'overwrite' | 'error' } export interface UsersImportRequest extends UsersExportData { merge_mode: 'skip' | 'overwrite' | 'error' } export interface UsersImportResponse { message: string stats: { users: { created: number; updated: number; skipped: number } api_keys: { created: number; skipped: number } errors: string[] } } export interface ConfigImportResponse { message: string stats: { global_models: { created: number; updated: number; skipped: number } providers: { created: number; updated: number; skipped: number } endpoints: { created: number; updated: number; skipped: number } keys: { created: number; updated: number; skipped: number } models: { created: number; updated: number; skipped: number } errors: string[] } } // API密钥管理相关接口定义 export interface AdminApiKey { id: string // UUID user_id: string // UUID user_email?: string username?: string name?: string key_display?: string // 脱敏后的密钥显示 is_active: boolean is_standalone: boolean // 是否为独立余额Key balance_used_usd?: number // 已使用余额(仅独立Key) current_balance_usd?: number | null // 当前余额(独立Key预付费模式,null表示无限制) total_requests?: number total_tokens?: number total_cost_usd?: number rate_limit?: number allowed_providers?: string[] | null // 允许的提供商列表 allowed_api_formats?: string[] | null // 允许的 API 格式列表 allowed_models?: string[] | null // 允许的模型列表 auto_delete_on_expiry?: boolean // 过期后是否自动删除 last_used_at?: string expires_at?: string created_at: string updated_at?: string } export interface CreateStandaloneApiKeyRequest { name?: string allowed_providers?: string[] | null allowed_api_formats?: string[] | null allowed_models?: string[] | null rate_limit?: number expire_days?: number | null // null = 永不过期 initial_balance_usd: number // 初始余额,必须设置 auto_delete_on_expiry?: boolean // 过期后是否自动删除 } export interface AdminApiKeysResponse { api_keys: AdminApiKey[] total: number limit: number skip: number } export interface ApiKeyToggleResponse { id: string // UUID is_active: boolean message: string } // 管理员API密钥管理相关API export const adminApi = { // 获取所有独立余额Keys列表 async getAllApiKeys(params?: { skip?: number limit?: number is_active?: boolean }): Promise { const response = await apiClient.get('/api/admin/api-keys', { params }) return response.data }, // 创建独立余额Key async createStandaloneApiKey(data: CreateStandaloneApiKeyRequest): Promise { const response = await apiClient.post( '/api/admin/api-keys', data ) return response.data }, // 更新独立余额Key async updateApiKey(keyId: string, data: Partial): Promise { const response = await apiClient.put( `/api/admin/api-keys/${keyId}`, data ) return response.data }, // 切换API密钥状态(启用/禁用) async toggleApiKey(keyId: string): Promise { const response = await apiClient.patch( `/api/admin/api-keys/${keyId}` ) return response.data }, // 删除API密钥 async deleteApiKey(keyId: string): Promise<{ message: string }> { const response = await apiClient.delete<{ message: string}>( `/api/admin/api-keys/${keyId}` ) return response.data }, // 为独立余额Key调整余额 async addApiKeyBalance(keyId: string, amountUsd: number): Promise { const response = await apiClient.patch( `/api/admin/api-keys/${keyId}/balance`, { amount_usd: amountUsd } ) return response.data }, // 获取API密钥详情(可选包含完整密钥) async getApiKeyDetail(keyId: string, includeKey: boolean = false): Promise { const response = await apiClient.get( `/api/admin/api-keys/${keyId}`, { params: { include_key: includeKey } } ) return response.data }, // 获取完整的API密钥(用于复制)- 便捷方法 async getFullApiKey(keyId: string): Promise<{ key: string }> { const response = await apiClient.get<{ key: string }>( `/api/admin/api-keys/${keyId}`, { params: { include_key: true } } ) return response.data }, // 系统配置相关 // 获取所有系统配置 async getAllSystemConfigs(): Promise { const response = await apiClient.get('/api/admin/system/configs') return response.data }, // 获取特定系统配置 async getSystemConfig(key: string): Promise<{ key: string; value: any }> { const response = await apiClient.get<{ key: string; value: any }>( `/api/admin/system/configs/${key}` ) return response.data }, // 更新系统配置 async updateSystemConfig( key: string, value: any, description?: string ): Promise<{ key: string; value: any; description?: string }> { const response = await apiClient.put<{ key: string; value: any; description?: string }>( `/api/admin/system/configs/${key}`, { value, description } ) return response.data }, // 删除系统配置 async deleteSystemConfig(key: string): Promise<{ message: string }> { const response = await apiClient.delete<{ message: string }>( `/api/admin/system/configs/${key}` ) return response.data }, // 获取系统统计 async getSystemStats(): Promise { const response = await apiClient.get('/api/admin/system/stats') return response.data }, // 获取可用的API格式列表 async getApiFormats(): Promise<{ formats: Array<{ value: string; label: string; default_path: string; aliases: string[] }> }> { const response = await apiClient.get<{ formats: Array<{ value: string; label: string; default_path: string; aliases: string[] }> }>( '/api/admin/system/api-formats' ) return response.data }, // 导出配置 async exportConfig(): Promise { const response = await apiClient.get('/api/admin/system/config/export') return response.data }, // 导入配置 async importConfig(data: ConfigImportRequest): Promise { const response = await apiClient.post( '/api/admin/system/config/import', data ) return response.data }, // 导出用户数据 async exportUsers(): Promise { const response = await apiClient.get('/api/admin/system/users/export') return response.data }, // 导入用户数据 async importUsers(data: UsersImportRequest): Promise { const response = await apiClient.post( '/api/admin/system/users/import', data ) return response.data } }