feat: OAuth 账户管理、维护调度、端点健康检查增强及前端优化

- 新增 OAuth 账户管理对话框和提供商详情抽屉中的 OAuth 信息展示
- 新增维护调度器(maintenance_scheduler)支持定时清理和健康检查
- 增强端点健康检查器,支持更多检测策略
- 重构 codex 服务为 metadata_collectors 模块
- 优化 OpenAI CLI normalizer 代码结构
- 前端: 改进使用量表格、统计图表、指南页面和异步任务管理
- 扩展多个数据库字符串列为 TEXT 类型
- 新增倒计时 composable 和 provider OAuth API 端点
This commit is contained in:
fawney19
2026-02-04 23:59:45 +08:00
parent 24c9105628
commit 4d6e7c094f
64 changed files with 3885 additions and 930 deletions

View File

@@ -25,6 +25,7 @@ export interface ProviderOAuthCompleteResponse {
provider_type: string
expires_at?: number | null
has_refresh_token: boolean
email?: string | null
}
export async function getProviderOAuthSupportedTypes(): Promise<ProviderOAuthSupportedType[]> {
@@ -49,3 +50,31 @@ export async function refreshProviderOAuth(keyId: string): Promise<ProviderOAuth
const resp = await client.post(`/api/admin/provider-oauth/keys/${keyId}/refresh`)
return resp.data
}
// Provider-level OAuth (不需要预先创建 key)
export interface ProviderOAuthCompleteRequest {
callback_url: string
name?: string
}
export interface ProviderOAuthCompleteResponseWithKey {
key_id: string
provider_type: string
expires_at?: number | null
has_refresh_token: boolean
email?: string | null
}
export async function startProviderLevelOAuth(providerId: string): Promise<ProviderOAuthStartResponse> {
const resp = await client.post(`/api/admin/provider-oauth/providers/${providerId}/start`)
return resp.data
}
export async function completeProviderLevelOAuth(
providerId: string,
data: ProviderOAuthCompleteRequest
): Promise<ProviderOAuthCompleteResponseWithKey> {
const resp = await client.post(`/api/admin/provider-oauth/providers/${providerId}/complete`, data)
return resp.data
}

View File

@@ -249,6 +249,28 @@ export interface EndpointAPIKey {
model_exclude_patterns?: string[] // 模型排除规则(支持 * 和 ? 通配符)
// OAuth 相关
oauth_expires_at?: number | null // OAuth Token 过期时间Unix 时间戳)
oauth_email?: string | null // OAuth 授权的邮箱
oauth_plan_type?: string | null // Codex 订阅类型: plus/free/team/enterprise
oauth_account_id?: string | null // Codex ChatGPT 账号 ID
oauth_invalid_at?: number | null // OAuth Token 失效时间Unix 时间戳)
oauth_invalid_reason?: string | null // OAuth Token 失效原因
// 上游元数据(由响应头采集,如 Codex 额度信息)
upstream_metadata?: CodexUpstreamMetadata | null
}
// Codex 上游元数据类型
export interface CodexUpstreamMetadata {
plan_type?: string // 套餐类型
primary_used_percent?: number // 主限额窗口使用百分比
primary_reset_seconds?: number // 主限额重置剩余秒数
primary_reset_at?: number // 主限额重置时间Unix 时间戳)
primary_window_minutes?: number // 主限额窗口大小(分钟)
secondary_used_percent?: number // 次级限额窗口使用百分比
secondary_reset_seconds?: number // 次级限额重置剩余秒数
secondary_reset_at?: number // 次级限额重置时间Unix 时间戳)
secondary_window_minutes?: number // 次级限额窗口大小(分钟)
has_credits?: boolean // 是否有积分
credits_balance?: number // 积分余额
}
// 按格式的健康度数据