bestony
324a491671
feat: extend Server-Timing to authenticated user web APIs
...
Mirror the Admin UI Server-Timing opt-in for user-facing pages so
authenticated callers can inspect total/app/db/redis/deps metrics on
session, profile, keys, usage, payment, and related user APIs.
- Collect when X-User-UI-Request=1 or path is on the user allowlist
- Emit for non-admin only on allowlisted paths (header is not auth)
- Exclude payment public/webhook surfaces
- Mark matching SPA requests and allow the new CORS request header
2026-07-15 00:23:27 +08:00
bestony and multica-agent
54d228dda5
feat(admin): add opt-in server timing metrics
...
Co-authored-by: multica-agent <github@multica.ai >
2026-07-14 01:29:30 +08:00
superman2003 and Cursor
29a5fcd25e
fix(gateway,frontend): 修复鉴权绕过与前端支付/会话缺陷
...
后端:
- Gemini /v1beta 鉴权中间件补齐主中间件的授权校验: API Key 的 IP 白/黑名单、
专属分组授权、运行时过期/配额二次检查, 修复经 Gemini 端点绕过 IP ACL、
越权访问专属分组、以及状态未刷新时的配额/有效期绕过窗口。
- 粘性会话等待计划分支改走 newSelectionResult 以 hydrate 账号凭证, 修复调度
快照中账号凭证被剥离导致等待路径转发鉴权失败。
- SSE 流式转发客户端断开时不再 break 跳过当前事件 usage 合并, 修复少计费。
- Forward 对 nil gin.Context 的防御补齐; 上游错误体读取失败时记录日志避免静默。
前端:
- logout 将本地会话清理移入 finally, 服务端吊销失败也保证本地登出。
- Stripe 弹窗轮询改用正确的 auth_token 键并加防重入; 收到 INIT 后清除兜底
超时定时器, onUnmounted 清理 message 监听器。
- token 刷新请求补充 30s 超时, 避免挂起导致请求队列与 loading 永久卡死。
- 路由守卫在公共设置未加载时先 await fetchPublicSettings, 避免 payment/
risk_control 被误判为未启用而错误拦截。
- 支付状态轮询回调补充防重入与终态守卫。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-09 09:06:56 +08:00
imfangwenjie
2a58a57a7c
fix(frontend): use configured API base for direct requests
...
Route direct fetch calls, setup requests, gateway usage checks, and ops WebSocket connections through the configured API base instead of assuming same-origin backend paths.
Also derive OAuth callback suggestions from the configured API base so split frontend/API deployments show usable redirect URLs.
2026-06-26 02:42:44 +08:00
shaw
0acf00c4a1
Add admin compliance acknowledgement gate
2026-06-10 14:16:51 +08:00
IanShaw027
ca4e38aa01
fix(profile): stabilize binding compatibility and frontend checks
2026-04-22 14:57:47 +08:00
erio
63f539b382
fix: merge general improvements from release branch
...
Backend:
- gateway_handler: pass subject.UserID instead of int64(0) for user-level routing
- setting_handler: add missing BalanceLowNotifyRechargeURL to UpdateSettings response
- openai_gateway_service: use applyAccountStatsCost for account stats pricing integration
- embed_on: add local file override (data/public/) for embedded frontend assets
Frontend:
- useTableSelection: add batchUpdate method for batch operations
- AccountsView: virtual scrolling params, Set-based isSelected, swipe virtualization
- ProxiesView: add batchUpdate to selection and swipe-select
- BulkEditAccountModal: fix submit handler to prevent event object as argument
- SettingsView: move payload construction outside try block
- i18n: add general translation keys (saved, deleted, view, validation, allowUserRefund)
- api/client: reorder error fields for consistency
- stores/payment: clarify pollOrderStatus JSDoc
2026-04-14 19:29:37 +08:00
shaw
9648c4323f
fix(frontend): resolve TS2352 type assertion error in API client
2026-04-12 18:06:40 +08:00
erio
faee59ee15
fix(payment): propagate reason/metadata in API error responses
...
The API client's error interceptor was dropping the reason and metadata
fields from backend error responses. This caused PaymentView to miss
specific error codes (TOO_MANY_PENDING, CANCEL_RATE_LIMITED) and fall
back to generic error messages.
2026-04-11 17:51:06 +08:00
erio
947800b95f
fix: bulk edit mixed channel warning not showing confirmation dialog
...
The response interceptor in client.ts transforms errors into plain
objects {status, code, message}, but catch blocks were checking
error.response?.status (AxiosError format) which never matched.
- Add error field passthrough in client.ts interceptor
- Refactor BulkEditAccountModal to use pre-check API (checkMixedChannelRisk)
before submit, matching the single edit flow
- Fix EditAccountModal catch blocks to use interceptor error format
- Add bulk-update mixed channel unit tests
2026-03-01 14:25:16 +08:00
shaw
49a3c43741
feat(auth): 实现 Refresh Token 机制
...
- 新增 Access Token + Refresh Token 双令牌认证
- 支持 Token 自动刷新和轮转
- 添加登出和撤销所有会话接口
- 前端实现无感刷新和主动刷新定时器
2026-02-05 12:42:54 +08:00
IanShaw027
11d063e3c4
feat(前端API): 实现运维监控 API 客户端
...
- 新增 ops API 客户端(ops.ts)
- 扩展 settings API 支持 ops 配置
- 更新 admin API 索引导出 ops 模块
- 扩展 API 客户端支持 WebSocket 连接
2026-01-09 20:58:33 +08:00
Yuhao Jiang and Claude
f5603b0780
fix: 修复跨时区用户日期范围查询不准确的问题
...
问题:当用户时区与服务器时区不同时,日期范围查询使用服务器时区解析,
导致用户看到的数据与预期不符。
修复方案:
- 前端:所有 GET 请求自动携带用户时区参数
- 后端:新增时区辅助函数,所有日期解析和默认日期范围计算都使用用户时区
- 当用户时区为空或无效时,自动回退到服务器时区
🤖 Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com >
2026-01-05 20:43:03 -06:00
IanShaw027
aa6f253374
merge: 合并 upstream/main 并解决冲突
...
解决了以下文件的冲突:
- backend/internal/handler/admin/setting_handler.go
- 采用 upstream 的字段对齐风格和 *Configured 字段名
- 添加 EnableIdentityPatch 和 IdentityPatchPrompt 字段
- backend/internal/handler/gateway_handler.go
- 采用 upstream 的 billingErrorDetails 错误处理方式
- frontend/src/api/admin/settings.ts
- 采用 upstream 的 *_configured 字段名
- 添加 enable_identity_patch 和 identity_patch_prompt 字段
- frontend/src/views/admin/SettingsView.vue
- 合并 turnstile_secret_key_configured 字段
- 保留 enable_identity_patch 和 identity_patch_prompt 字段
2026-01-04 23:17:15 +08:00
IanShaw027
6c036d7b59
fix(frontend): 优化前端组件和国际化支持
...
- 添加 Accept-Language 请求头支持后端翻译
- 优化账户状态指示器和测试模态框
- 简化用户属性表单和配置模态框
- 新增多个国际化翻译条目
- 重构管理视图代码,提升可维护性
2026-01-04 20:49:34 +08:00
yangjianbo
bd4bf00856
feat(安全): 强化安全策略与配置校验
...
- 增加 CORS/CSP/安全响应头与代理信任配置
- 引入 URL 白名单与私网开关,校验上游与价格源
- 改善 API Key 处理与网关错误返回
- 管理端设置隐藏敏感字段并优化前端提示
- 增加计费熔断与相关配置示例
测试: go test ./...
2026-01-02 17:40:57 +08:00
ianshaw
f79b0f0fad
style(frontend): 统一 API 模块代码风格
...
- 移除所有语句末尾分号
- 统一对象属性尾随逗号格式
- 优化类型定义导入顺序
- 提升代码一致性和可读性
2025-12-26 00:10:44 -08:00
shaw
642842c29e
First commit
2025-12-18 13:50:39 +08:00