From 1bec35999b28c6ca0b7586ff24f558eddd1ae90a Mon Sep 17 00:00:00 2001 From: ianshaw Date: Thu, 25 Dec 2025 23:52:26 -0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E6=B7=BB=E5=8A=A0=20Gemini?= =?UTF-8?q?=20OAuth=20=E8=83=BD=E5=8A=9B=E6=9F=A5=E8=AF=A2=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 GeminiOAuthCapabilities 类型定义 - 添加 getCapabilities API 函数 - useGeminiOAuth composable 导出 getCapabilities 方法 --- frontend/src/api/admin/gemini.ts | 12 +++++++++++- frontend/src/composables/useGeminiOAuth.ts | 13 ++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/frontend/src/api/admin/gemini.ts b/frontend/src/api/admin/gemini.ts index 366e22d3..a01793dd 100644 --- a/frontend/src/api/admin/gemini.ts +++ b/frontend/src/api/admin/gemini.ts @@ -11,6 +11,11 @@ export interface GeminiAuthUrlResponse { state: string } +export interface GeminiOAuthCapabilities { + ai_studio_oauth_enabled: boolean + required_redirect_uris: string[] +} + export interface GeminiAuthUrlRequest { proxy_id?: number project_id?: string @@ -45,4 +50,9 @@ export async function exchangeCode(payload: GeminiExchangeCodeRequest): Promise< return data } -export default { generateAuthUrl, exchangeCode } +export async function getCapabilities(): Promise { + const { data } = await apiClient.get('/admin/gemini/oauth/capabilities') + return data +} + +export default { generateAuthUrl, exchangeCode, getCapabilities } diff --git a/frontend/src/composables/useGeminiOAuth.ts b/frontend/src/composables/useGeminiOAuth.ts index ac74b57f..fb20cc2f 100644 --- a/frontend/src/composables/useGeminiOAuth.ts +++ b/frontend/src/composables/useGeminiOAuth.ts @@ -2,6 +2,7 @@ import { ref } from 'vue' import { useI18n } from 'vue-i18n' import { useAppStore } from '@/stores/app' import { adminAPI } from '@/api/admin' +import type { GeminiOAuthCapabilities } from '@/api/admin/gemini' export interface GeminiTokenInfo { access_token?: string @@ -119,6 +120,15 @@ export function useGeminiOAuth() { } } + const getCapabilities = async (): Promise => { + try { + return await adminAPI.gemini.getCapabilities() + } catch (err: any) { + // Capabilities are optional for older servers; don't block the UI. + return null + } + } + return { authUrl, sessionId, @@ -128,6 +138,7 @@ export function useGeminiOAuth() { resetState, generateAuthUrl, exchangeAuthCode, - buildCredentials + buildCredentials, + getCapabilities } }