erio
e2018cbcf9
fix: 渠道 PUT schema 兼容字符串类型的 models/features 字段
...
前端 linesToJsonString 传的是 JSON 字符串,而 .strict() schema
只接受数组/对象,导致所有渠道编辑保存失败"参数校验失败"。
移除 .strict(),models/features 改为 union 接受 string | array/record。
v1.10.5
2026-03-16 05:33:24 +08:00
erio
a1d3f3b639
chore: 从 git 中移除 CLAUDE.md 并加入 gitignore
v1.10.4
2026-03-15 19:23:23 +08:00
erio
58d4c7efbf
fix: 滚动条主题适配 + 套餐 API 输入校验补全
...
- 滚动条默认浅色,data-theme="dark" 下切换深色
- admin layout / PayPageLayout 根 div 加 data-theme 属性
- 套餐 POST/PUT: name 类型、空值、长度(100)校验 + trim
- 套餐 PUT: 补全 sort_order 非负整数校验
v1.10.3
2026-03-15 17:24:44 +08:00
erio
a7089936a4
fix: 修复页面加载时闪现「入口未开放」的问题
...
allEntriesClosed 判断需要等 userLoaded 和 channelsLoaded 都完成,
避免 channelsLoaded 先完成但 config 还未加载时误判为入口关闭。
v1.10.2
2026-03-15 12:03:27 +08:00
erio
6bca9853b3
style: fix prettier formatting in user route
2026-03-15 03:14:47 +08:00
erio
33e4a811f3
fix: 提取 resolveEnabledPaymentTypes 共享函数,下单接口同步校验 + 恢复并发
...
- 将 resolveEnabledPaymentTypes 提取到 src/lib/payment/resolve-enabled-types.ts
- /api/orders 下单时也校验 ENABLED_PAYMENT_TYPES 配置,防止绕过前端直接调用
- /api/user 恢复 queryMethodLimits 与 getUser 并发执行,避免性能退化
v1.10.1
2026-03-15 02:56:28 +08:00
eriol touwa
0a94cecad8
Merge pull request #10 from gopkg-dev/main
...
fix: ENABLED_PAYMENT_TYPES configuration not being applied correctly
2026-03-15 02:54:22 +08:00
Karen
b3730b567e
Merge pull request #1 from gopkg-dev/copilot/fix-enabled-payment-types-issue
...
Honor `ENABLED_PAYMENT_TYPES` in `/api/user` response config
2026-03-14 22:08:52 +08:00
copilot-swe-agent[bot]
9af7133d93
test: cover ENABLED_PAYMENT_TYPES fallback paths
...
Co-authored-by: gopkg-dev <58848833+gopkg-dev@users.noreply.github.com >
2026-03-14 13:52:02 +00:00
copilot-swe-agent[bot]
1f2d0499ed
fix: honor ENABLED_PAYMENT_TYPES in user config api
...
Co-authored-by: gopkg-dev <58848833+gopkg-dev@users.noreply.github.com >
2026-03-14 13:49:40 +00:00
copilot-swe-agent[bot]
ae3aa2e0e4
Initial plan
2026-03-14 13:46:39 +00:00
erio
48244f270b
ci: GitHub Actions 自动构建推送 Docker 镜像到 Docker Hub
v1.10.0
2026-03-14 14:09:09 +08:00
erio
6dd7583b6c
style: prettier 格式化
2026-03-14 05:10:28 +08:00
erio
bd1db1efd8
feat: 套餐分组清理 + 续费延期 + UI统一
...
- Schema: groupId 改为 nullable,新增迁移
- GET 套餐列表自动检测并清除 Sub2API 中已删除的分组绑定
- PUT 保存时校验分组存在性,已删除则自动解绑并返回 409
- 续费逻辑:同分组有活跃订阅时从到期日计算天数再 createAndRedeem
- 提取 PlanInfoDisplay 共享组件,SubscriptionConfirm 复用
- 默认模型统一到 /v1/messages badge 内
- 前端编辑表单适配 nullable groupId,未绑定时禁用保存
2026-03-14 05:06:36 +08:00
erio
ef4241b82f
fix: admin布局间隙主题适配 + 默认模型移至/v1/messages badge内
...
- AdminLayout添加主题背景色包裹,消除tab与内容间的未适配间隙
- 缩小nav底部margin (mb-4 → mb-1)
- SubscriptionPlanCard默认模型从独立区块移到/v1/messages badge后面
2026-03-14 04:42:39 +08:00
erio
4ce3484179
fix: 全面安全审计修复 — 支付验签、IDOR、竞态、token过期等
...
- H1: 支付宝响应验签 (verifyResponseSign + bracket-matching 提取签名内容)
- H2/H3: EasyPay queryOrder 从 GET 改 POST,PKEY 不再暴露于 URL
- H5: users/[id] IDOR 修复,校验当前用户只能查询自身信息
- H6: 限额校验移入 prisma.$transaction() 防止 TOCTOU 竞态
- C1: access_token 增加 24h 过期、userId 绑定、派生密钥分离
- M1: EasyPay 回调增加 pid 校验防跨商户注入
- M4: 充值码增加 crypto.randomBytes 随机后缀
- M5: 过期订单批量处理增加 BATCH_SIZE 限制
- M6: 退款失败增加 [CRITICAL] 日志和余额补偿标记
- M7: admin channels PUT 增加 Zod schema 校验
- M8: admin subscriptions 分页参数增加上限
- M9: orders src_url 限制 HTTP/HTTPS 协议
- L1: 微信支付回调时间戳 NaN 检查
- L9: WXPAY_API_V3_KEY 长度校验
2026-03-14 04:36:33 +08:00
erio
34ad876626
docs: 合并重复的管理后台章节,保留集成说明中的完整列表
2026-03-14 04:09:02 +08:00
erio
e98f01f472
docs: ZPay推荐补充明文URL显示
2026-03-14 04:07:53 +08:00
erio
8f0ec3d9de
docs: EasyPay描述改为代收/转发官方,强调资金直达自己账户
2026-03-14 04:06:31 +08:00
erio
b44a8db9ef
docs: 推荐区块精简,去掉重复的资金安全提示
2026-03-14 04:00:40 +08:00
erio
ac70635879
docs: 免责声明合并到推荐区块,EasyPay章节精简
2026-03-14 03:58:46 +08:00
erio
87a6237a8f
docs: ZPay推荐从EasyPay章节移到功能特性下方,更醒目
2026-03-14 03:57:55 +08:00
erio
6d01fcb822
docs: README重构 — EasyPay前置、支付宝/微信改称官方、集成说明增加管理后台端点
...
- GitHub About 双语描述
- "Stripe 国际信用卡" → "Stripe"
- EasyPay 放在支付服务商最前面
- "支付宝直连" → "支付宝官方"、"微信支付直连" → "微信官方"
- 集成到 Sub2API 章节重写:用户端页面 + 管理后台端点完整列表
- 管理后台集成无需带 query 参数
- "使用第三方聚合支付时" → "使用第三方平台时"
- 中英文 README 同步更新
2026-03-14 03:53:20 +08:00
erio
886389939e
style: format all files with Prettier
2026-03-14 03:45:37 +08:00
erio
78ecd206de
fix: resolve GitHub Actions CI failures (lint, typecheck, test, format)
...
- Remove unused `Locale` type imports from admin pages
- Fix type annotations in easy-pay client test (CID fields as string | undefined)
- Replace `as any` with proper types in limits test
- Fix listSubscriptions test mock response structure (data.data.items)
- Fix formatting with Prettier
2026-03-14 03:42:16 +08:00
erio
d30c663f29
docs: README补充EasyPay安全提示和ZPay个人/企业额度说明
2026-03-14 03:33:29 +08:00
erio
48e94c205a
fix: 暗色主题二轮修复 - 支付页面、订单状态、Stripe弹窗、Fallback组件
...
- PaymentForm: 快速金额选中暗色态、禁用按钮暗色态
- PaymentQRCode: Stripe错误框、成功图标、取消按钮暗色适配
- MobileOrderList: 底部文字对比度修复(slate-600→slate-400)
- OrderStatus: getStatusConfig增加isDark参数,所有状态色适配暗色
- result/page: getStatusConfig传isDark、链接按钮暗色、Fallback暗色背景
- stripe-popup/page: 金额/成功图标/链接/禁用按钮/Fallback暗色适配
- pay/page: 帮助图片容器、错误提示、Fallback暗色背景
- orders/page: 错误提示、Fallback暗色背景
- README: 补充lang参数说明
2026-03-14 03:27:24 +08:00
erio
3b5a3ba5df
fix: 暗色主题全面优化 - 滚动条、颜色适配、dark:伪类修复
...
- 添加全局暗色滚动条样式 (globals.css)
- 修复 channels/subscriptions 页面 dark: 伪类无效的bug (改用 isDark)
- 修复 RefundDialog 暗色下退款金额、disabled 按钮颜色
- 修复 admin OrderTable 暗色下缺少背景色
- 统一所有 admin 页面 text-gray-500 为 slate 色系
- 修复 UserSubscriptions 续费按钮暗色适配
- 修复日期标签文字缺少暗色颜色类
- MainTabs 暗色容器改用 slate-900 提升对比度
- OpenAI 默认模型区域暗色边框透明度提升
- 更新 README 文档
2026-03-14 03:19:39 +08:00
erio
8a5f8662d0
fix: 暗色主题下平台颜色降低亮度,按钮和文字更柔和
2026-03-14 03:09:29 +08:00
erio
5050544d4b
test: 补充订单费用和限额单元测试
2026-03-14 02:22:31 +08:00
erio
45713aeb57
fix: 订阅套餐卡片也适配平台颜色(按钮、倍率、价格)
2026-03-14 02:11:06 +08:00
erio
8dd0d1144b
feat: 页面标题/副标题更新、按钮和倍率跟随平台颜色、messages调度移到标题行、返回按钮统一
...
1. 标题改为"选择适合你的 充值/订阅服务",副标题改为"充值余额或者订阅套餐"
2. ChannelCard: 按钮bg、倍率数字、额度描述 跟随平台颜色
3. platform-style: 新增 button + accent 字段
4. SubscriptionPlanCard/SubscriptionConfirm: /v1/messages 调度 badge 移到标题行
5. 充值返回按钮样式与订阅确认页统一(灰色+箭头图标)
2026-03-14 02:08:14 +08:00
erio
5ce7ba3cb8
fix: tab名称改为余额充值/套餐订阅、有效期直接显示配置值、模型标签跟随平台颜色
...
1. MainTabs: "按量付费"→"余额充值","包月套餐"→"套餐订阅"
2. subscription-utils: 去掉所有智能转换,配置什么就显示什么(1月/30天/2周)
3. platform-style: 新增 modelTag 样式字段,每个平台独立颜色
4. ChannelCard: 模型标签颜色跟随平台(橙/绿/蓝/粉/紫)而非统一蓝色
2026-03-14 02:02:03 +08:00
erio
d8078eb38c
fix: 有效期30天不再显示"包月"、我的订阅移到tab外、确认订单展示完整信息
...
1. subscription-utils: day=30 不再特殊处理为"包月",直接显示"30天"
2. pay page: "我的订阅"移到 tab 外部,按量付费和包月套餐下都可见
3. SubscriptionConfirm: 展示平台badge、倍率、限额grid、OpenAI messages调度信息
2026-03-14 01:57:09 +08:00
erio
14ec33fc69
fix: 清空搜索关键词后查询所有订阅而非保留上次用户
...
- handleKeywordChange 清空时同步清空 subsUserId
- fetchSubs 在无 user_id 时不传该参数,查询所有订阅
2026-03-14 01:52:22 +08:00
erio
aeaa09d2c1
fix: searchUsers 也修复分页响应解析(data.data.items)
2026-03-14 01:47:57 +08:00
erio
10e9189bcb
fix: 修复订阅列表API响应解析和管理后台messages调度字段缺失
...
1. listSubscriptions 解析 data.data.items 而非 data.data(Sub2API分页格式)
2. 管理后台套餐API返回 groupAllowMessagesDispatch 和 groupDefaultMappedModel
2026-03-14 01:46:37 +08:00
erio
4427c17417
feat: 渠道/订阅管理UI优化 — 平台图标、布局改善、分组信息卡片
...
- 渠道管理:平台列用 PlatformBadge 带图标,分类下拉显示 label
- 渠道管理:添加 antigravity/anthropic 平台选项
- 订阅管理:/v1/messages 调度改为"已启用/未启用"文字
- 订阅管理:编辑 modal 选择分组后展示只读分组信息卡片
- 订阅管理:有效期+单位独立一行,排序单独一行
2026-03-14 01:34:49 +08:00
erio
6e0fe54720
test: 补充 platform-style 和 listSubscriptions 单元测试
...
- platform-style: getPlatformStyle/PlatformBadge/PlatformIcon 共 17 个测试
- listSubscriptions: URL 拼接、响应解析、错误处理共 4 个测试
2026-03-14 01:26:34 +08:00
erio
1218b31461
feat: 订阅套餐展示优化、平台图标、默认月、用户订阅查询
...
- 新建共享平台样式模块 platform-style.ts,含各平台 SVG 图标 + 彩色 badge
- SubscriptionPlanCard 重设计:平台图标 badge、倍率/限额 grid 展示、OpenAI messages 调度信息
- UserSubscriptions 显示 group_name + 平台 badge
- ChannelCard 复用共享平台样式模块
- 管理后台:新建套餐默认 1 月、去掉模型展示、平台图标 badge、OpenAI 信息
- 管理后台用户订阅 tab 默认查询所有订阅(user_id 可选)
- Sub2API client 新增 listSubscriptions 函数
- API 返回 allowMessagesDispatch / defaultMappedModel / group_name / platform
2026-03-14 01:23:21 +08:00
erio
10e3e445ed
fix: EasyPay支付回调缺少access_token导致结果页显示"凭证缺失"
...
EasyPay provider未将动态returnUrl传递给底层client,
导致return_url使用静态环境变量,不含order_id和access_token参数。
2026-03-14 01:07:33 +08:00
erio
ce223f09d8
fix: 所有支付入口关闭时正确显示"入口未开放"提示
...
当没有可用支付方式(未配置或被禁用)且没有订阅套餐时,
显示"充值/订阅 入口未开放"提示,而不是空的订阅UI
2026-03-14 00:54:05 +08:00
erio
405fab8c8d
fix: Dockerfile ADMIN_TOKEN dummy value too short for zod validation
2026-03-14 00:47:21 +08:00
erio
6c61c3f877
feat: 订阅管理增强、商品名称配置、余额充值开关
...
- R1: 用户订阅搜索改为模糊关键词(邮箱/用户名/备注/APIKey)
- R2: "分组状态"列名改为"Sub2API 状态"
- R3: 订阅套餐可配置支付商品名称(productName)
- R4: 订阅订单校验 subscription_type 必须为 subscription
- R5: 渠道管理配置余额充值商品名前缀/后缀
- R6: 渠道管理可关闭余额充值,前端隐藏入口,API 拒绝
- R7: 所有入口关闭时显示"入口被管理员关闭"提示
- fix: easy-pay client 测试 mock 方式修复(vi.fn + 参数快照)
2026-03-14 00:43:00 +08:00
erio
1bb11ee32b
feat: 金额上限校验、订阅详情展示优化、支付商品名称区分
...
- 硬编码 MAX_AMOUNT=99999999.99,所有金额输入(API+前端)统一校验上限
- 管理后台订阅列表改为卡片布局,Sub2API 分组信息嵌套只读展示(平台/倍率/限额/模型)
- 用户端套餐卡片和确认页展示平台、倍率、用量限制
- 订阅订单支付商品名改为 "Sub2API 订阅 {分组名}",余额充值保持原格式
2026-03-13 23:40:23 +08:00
erio
ca03a501f2
fix: 全面安全审计修复
...
安全加固:
- 系统配置 API 增加写入 key 白名单,防止任意配置注入
- ADMIN_TOKEN 最小长度要求 16 字符
- 补充安全响应头(X-Content-Type-Options, X-Frame-Options, Referrer-Policy)
- /api/users/[id] 和 /api/limits 增加 token 鉴权
- console.error 敏感信息脱敏(config route)
- 敏感值 mask 修复短值完全隐藏
输入校验:
- admin 渠道接口校验 rate_multiplier > 0、sort_order >= 0、name 非空
- admin 订阅套餐接口校验 price > 0、validity_days > 0、sort_order >= 0
金额精度:
- feeRate 字段精度从 Decimal(5,2) 提升到 Decimal(5,4)
- calculatePayAmount 返回 string 避免 Number 中间转换精度丢失
- 支付宝查询订单增加金额有效性校验(isFinite && > 0)
UI 统一:
- 订阅管理「售卖」列改为 toggle switch 开关(与渠道管理一致)
- 表单中 checkbox 改为 toggle switch
- 列名统一为「启用售卖」,支持直接点击切换
2026-03-13 23:03:01 +08:00
erio
38156bd4ef
fix: 订阅套餐 API features 字段序列化及返回格式修复
...
- POST/PUT 写入前 JSON.stringify(features),修复数组写入 TEXT 列报错
- GET/POST/PUT 返回时统一字段映射(validDays/enabled/groupName/features 数组)
2026-03-13 22:30:20 +08:00
erio
bc9ae8370c
fix: /admin 直接显示数据概览,去掉管理首页导航项
2026-03-13 22:15:19 +08:00
erio
b1c90d4b04
refactor: /admin 聚合入口(数据概览优先),订单管理移至 /admin/orders
2026-03-13 22:08:14 +08:00
erio
41f7059585
revert: 去掉总览入口,/admin 直接显示订单管理
2026-03-13 22:03:06 +08:00