win
92433656f5
chore: merge upstream Wei-Shaw/sub2api v0.1.128 — keep fork customizations
Upstream 新功能 (34 commits, ~main..origin/main):
- feat(email): 通知邮件模板服务、模板编辑器、订阅/余额提醒邮件
- feat(notification): NotificationEmailService 注入到 Balance/Payment/Setting
- feat(payment): 支付成功通知邮件
- feat(usage): 用户 API Key 用量页支持按日明细
- feat(openai-gateway): Codex OAuth 浏览器 UA 自动改写规避 Cloudflare 质询
- feat(admin): 邮件模板管理接口
- fix(auth): 停用/删除分组后阻断 API Key
- fix(group): 修正分组账号可用计数口径
- fix(openai): /v1/responses respect force chat completions, images n 参数透传
- test(repository): AES Encryptor 单元测试
- chore: VERSION 0.1.128
冲突解决 (backend/cmd/server/wire_gen.go):
- 引入 upstream 新 wire providers: notificationEmailService,
ProvidePaymentService(10 args), ProvideAdminSettingHandler(8 args)
- 保留 fork 独有依赖: rpmTokenBucketService (RPM 平滑),
NewOpsHandler 3 参数版本 (requestEventBus, opsLogBroadcaster)
- ProvideBalanceNotifyService 接受 4 参数 (含 notificationEmailService)
修复 session-id helper 设计 (claude_code_session_id.go):
- 发现: TestGatewayService_AnthropicOAuth_InjectsClaudeCodeSessionHeaderFromMetadata
在 OAuth + mimicClaudeCode=false 场景失败
- 重新审视设计原则: OAuth 凭证本身就是 Claude Code 客户端,可信任 metadata
派生 session_id;不应受 mimicClaudeCode 标志阻止
- 修复: metadata 派生只看 tokenType=="oauth";UUID 兜底仍需 oauth && mimic
- 更新测试: OAuthNonMimicDerivesFromMetadata 取代原 IgnoresMetadata
所有 fork 独有功能保留:
- Claude Code 2.1.145 mimicry bundle (上个 commit 引入)
- RPM token bucket smoothing (commit 95814974)
- Windsurf/Antigravity/Omniroute 定制
- claudemask/ 校验包 (upstream 已删除,我们仍在 gateway_service 中使用)
不在范围:
- 不修复 baseline 既存的 2 个测试失败 (TestProxyImportData...,
TestWindsurfTierAccessService_Snapshot_HappyPath) - 与 merge 无关
2026-05-20 17:50:44 +08:00
..
2026-05-20 17:50:44 +08:00
2026-05-20 17:50:44 +08:00
2026-02-02 22:13:50 +08:00
2026-04-09 18:14:28 +08:00
2026-04-24 11:52:53 +08:00
2026-05-19 15:27:47 +08:00
2026-05-19 15:27:47 +08:00
2026-05-19 15:27:47 +08:00
2026-05-19 15:27:47 +08:00
2026-05-06 20:52:10 +08:00
2026-05-06 20:52:10 +08:00
2026-05-20 13:25:45 +08:00
2026-04-22 14:56:56 +08:00
2026-05-19 15:27:47 +08:00
2026-04-22 12:30:00 +08:00
2026-05-07 10:07:28 +08:00
2026-05-20 13:25:45 +08:00
2026-04-22 13:19:20 +08:00
2026-04-22 14:56:56 +08:00
2026-05-19 15:27:47 +08:00
2026-04-25 08:44:18 +08:00
2026-04-25 08:44:18 +08:00
2026-05-19 15:27:47 +08:00
2026-04-21 21:44:34 +08:00
2026-04-21 21:44:34 +08:00
2026-04-21 00:21:29 +08:00
2026-05-07 09:14:47 +08:00
2026-04-22 12:30:08 +08:00
2026-04-23 20:46:27 +08:00
2026-04-29 10:32:36 +08:00
2026-04-29 10:32:36 +08:00
2026-04-23 16:34:37 +08:00
2026-05-19 19:37:41 +08:00
2026-02-14 11:23:10 +08:00
2026-02-07 19:04:08 +08:00
2026-05-19 19:37:41 +08:00
2026-03-15 16:21:49 +08:00
2026-04-29 22:48:39 +08:00
2026-05-20 17:50:44 +08:00
2026-02-07 22:14:07 +08:00
2026-03-09 19:55:18 +08:00
2026-03-18 11:31:32 +08:00
2026-01-06 20:31:40 +08:00
2026-03-01 15:45:44 +08:00
2026-05-20 12:39:40 +08:00
2026-02-07 17:12:15 +08:00
2026-04-01 02:20:13 +08:00
2026-05-19 19:37:41 +08:00
2026-05-09 01:42:39 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-05-05 03:26:54 +08:00
2026-05-05 03:26:54 +08:00
2026-02-12 19:01:09 +08:00
2026-05-19 19:37:41 +08:00
2026-04-25 05:26:33 +00:00
2026-03-15 22:13:42 +08:00
2026-05-07 09:14:47 +08:00
2026-05-19 19:37:41 +08:00
2026-05-05 03:26:54 +08:00
2026-05-19 19:37:41 +08:00
2026-05-19 19:37:41 +08:00
2026-05-20 12:39:40 +08:00
2026-05-09 00:41:19 +08:00
2026-05-12 15:21:31 +08:00
2026-05-07 10:05:49 +08:00
2026-05-11 11:17:26 +08:00
2026-05-20 15:12:57 +08:00
2026-05-11 11:17:26 +08:00
2026-05-11 11:17:26 +08:00
2025-12-26 16:45:40 +08:00
2025-12-31 08:50:12 +08:00
2025-12-31 08:50:12 +08:00
2026-04-21 20:36:10 +08:00
2026-05-20 11:09:18 +08:00
2025-12-26 16:45:40 +08:00
2026-05-20 13:25:45 +08:00
2026-05-20 15:48:38 +08:00
2026-04-09 18:14:28 +08:00
2026-04-09 18:14:28 +08:00
2026-05-20 15:48:38 +08:00
2026-05-05 03:26:54 +08:00
2026-05-09 01:42:39 +08:00
2026-05-20 13:25:45 +08:00
2026-03-03 01:05:11 +08:00
2026-05-20 17:50:44 +08:00