From c15fd519cc5c5bc1d8cbaa4ecad5d3daf7226675 Mon Sep 17 00:00:00 2001 From: ImogeneOctaviap794 Date: Mon, 30 Mar 2026 08:38:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20CodexProxy=20AT/RT=20=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cpa_upload.py: 新增 upload_at_to_codex_proxy(),走 /api/admin/accounts/at 接口上传 access_token - cpa_upload.py: 新增 upload_to_codex_proxy(),走 /api/admin/accounts 接口上传 refresh_token - plugin.py: 添加 upload_codex_proxy action - external_sync.py: 注册成功后自动上传到 CodexProxy,通过 codex_proxy_upload_type 配置选择 AT 或 RT - Settings.tsx: CodexProxy 配置区新增上传类型选项(AT 推荐 / RT) - Accounts.tsx: 账号列表和详情弹窗显示 refresh_token - api/config.py: 将 codex_proxy_url/key/upload_type 加入配置白名单 --- api/config.py | 1 + frontend/src/pages/Accounts.tsx | 76 +++++++++++++++----- frontend/src/pages/Settings.tsx | 13 ++++ platforms/chatgpt/cpa_upload.py | 121 ++++++++++++++++++++++++++++++++ platforms/chatgpt/plugin.py | 11 +++ services/external_sync.py | 21 ++++++ 6 files changed, 227 insertions(+), 16 deletions(-) diff --git a/api/config.py b/api/config.py index d6dac62..a1c3d3e 100644 --- a/api/config.py +++ b/api/config.py @@ -16,6 +16,7 @@ CONFIG_KEYS = [ "luckmail_base_url", "luckmail_api_key", "luckmail_email_type", "luckmail_domain", "cpa_api_url", "cpa_api_key", "team_manager_url", "team_manager_key", + "codex_proxy_url", "codex_proxy_key", "codex_proxy_upload_type", "cliproxyapi_management_key", "grok2api_url", "grok2api_app_key", "grok2api_pool", "grok2api_quota", "kiro_manager_path", "kiro_manager_exe", diff --git a/frontend/src/pages/Accounts.tsx b/frontend/src/pages/Accounts.tsx index 22565ec..9c46709 100644 --- a/frontend/src/pages/Accounts.tsx +++ b/frontend/src/pages/Accounts.tsx @@ -214,6 +214,15 @@ export default function Accounts() { message.success('已复制') } + const getRefreshToken = (record: any): string => { + try { + const extra = JSON.parse(record.extra_json || '{}') + return extra.refresh_token || '' + } catch { + return '' + } + } + const exportCsv = () => { const header = 'email,password,status,region,cashier_url,created_at' const rows = accounts.map((a) => [a.email, a.password, a.status, a.region, a.cashier_url, a.created_at].join(',')) @@ -353,6 +362,22 @@ export default function Accounts() { ), }, + { + title: 'RT', + key: 'refresh_token', + render: (_: any, record: any) => { + const rt = getRefreshToken(record) + if (!rt) return - + return ( + + + {rt.slice(0, 16)} + +