/** * OAuth 与设备码登录相关 API */ import { apiClient } from './client'; export type OAuthProvider = | 'codex' | 'anthropic' | 'antigravity' | 'gemini-cli' | 'qwen'; export interface OAuthStartResponse { url: string; state?: string; } export interface OAuthCallbackResponse { status: 'ok'; } export interface IFlowCookieAuthResponse { status: 'ok' | 'error'; error?: string; saved_path?: string; email?: string; expired?: string; type?: string; } const WEBUI_SUPPORTED: OAuthProvider[] = ['codex', 'anthropic', 'antigravity', 'gemini-cli']; const CALLBACK_PROVIDER_MAP: Partial> = { 'gemini-cli': 'gemini' }; export const oauthApi = { startAuth: (provider: OAuthProvider, options?: { projectId?: string }) => { const params: Record = {}; if (WEBUI_SUPPORTED.includes(provider)) { params.is_webui = true; } if (provider === 'gemini-cli' && options?.projectId) { params.project_id = options.projectId; } return apiClient.get(`/${provider}-auth-url`, { params: Object.keys(params).length ? params : undefined }); }, getAuthStatus: (state: string) => apiClient.get<{ status: 'ok' | 'wait' | 'error'; error?: string }>(`/get-auth-status`, { params: { state } }), submitCallback: (provider: OAuthProvider, redirectUrl: string) => { const callbackProvider = CALLBACK_PROVIDER_MAP[provider] ?? provider; return apiClient.post('/oauth-callback', { provider: callbackProvider, redirect_url: redirectUrl }); }, /** iFlow cookie 认证 */ iflowCookieAuth: (cookie: string) => apiClient.post('/iflow-auth-url', { cookie }) };