主要改动: - 后端:重构 Gemini 配额服务,支持多层级配额策略(GCP Standard/Free, Google One, AI Studio, Code Assist) - 后端:优化 OAuth 服务,增强 tier_id 识别和存储逻辑 - 后端:改进用量统计服务,支持不同平台的配额查询 - 后端:优化限流服务,增加临时解除调度状态管理 - 前端:统一四种授权方式的用量显示格式和徽标样式 - 前端:增强账户配额信息展示,支持多种配额类型 - 前端:改进创建和重新授权模态框的用户体验 - 国际化:完善中英文配额相关文案 - 移除 CHANGELOG.md 文件 测试:所有单元测试通过
73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
/**
|
|
* Admin Gemini API endpoints
|
|
* Handles Gemini OAuth flows for administrators
|
|
*/
|
|
|
|
import { apiClient } from '../client'
|
|
|
|
export interface GeminiAuthUrlResponse {
|
|
auth_url: string
|
|
session_id: string
|
|
state: string
|
|
}
|
|
|
|
export interface GeminiOAuthCapabilities {
|
|
ai_studio_oauth_enabled: boolean
|
|
required_redirect_uris: string[]
|
|
}
|
|
|
|
export interface GeminiAuthUrlRequest {
|
|
proxy_id?: number
|
|
project_id?: string
|
|
oauth_type?: 'code_assist' | 'google_one' | 'ai_studio'
|
|
tier_id?: string
|
|
}
|
|
|
|
export interface GeminiExchangeCodeRequest {
|
|
session_id: string
|
|
state: string
|
|
code: string
|
|
proxy_id?: number
|
|
oauth_type?: 'code_assist' | 'google_one' | 'ai_studio'
|
|
tier_id?: string
|
|
}
|
|
|
|
export type GeminiTokenInfo = {
|
|
access_token?: string
|
|
refresh_token?: string
|
|
token_type?: string
|
|
scope?: string
|
|
expires_in?: number
|
|
expires_at?: number
|
|
project_id?: string
|
|
oauth_type?: string
|
|
tier_id?: string
|
|
extra?: Record<string, unknown>
|
|
[key: string]: unknown
|
|
}
|
|
|
|
export async function generateAuthUrl(
|
|
payload: GeminiAuthUrlRequest
|
|
): Promise<GeminiAuthUrlResponse> {
|
|
const { data } = await apiClient.post<GeminiAuthUrlResponse>(
|
|
'/admin/gemini/oauth/auth-url',
|
|
payload
|
|
)
|
|
return data
|
|
}
|
|
|
|
export async function exchangeCode(payload: GeminiExchangeCodeRequest): Promise<GeminiTokenInfo> {
|
|
const { data } = await apiClient.post<GeminiTokenInfo>(
|
|
'/admin/gemini/oauth/exchange-code',
|
|
payload
|
|
)
|
|
return data
|
|
}
|
|
|
|
export async function getCapabilities(): Promise<GeminiOAuthCapabilities> {
|
|
const { data } = await apiClient.get<GeminiOAuthCapabilities>('/admin/gemini/oauth/capabilities')
|
|
return data
|
|
}
|
|
|
|
export default { generateAuthUrl, exchangeCode, getCapabilities }
|