更新日志
发给 ChatGPT / Claude 等 AI,可更快消化本页并上手上站。
2026-10-21
- fix: restore in-progress generation tasks after a page refresh (
ac793a8)
- fix: stop re-submitting a generation when the page closes (
b18b421)
- fix(payment): claw back a refunded order once and end its subscription (
1dd6dce)
- fix(pricing): show and charge USD in every locale (
a69f061)
- fix(billing): block plan changes while a subscription is canceling (
b74cfdc)在 Stripe 后台开启 webhook 事件 charge.refunded,在 Creem 后台开启 refund.created,退款收回积分才会生效。
- test: drop the partial-repaint test left after its module was removed (
70d73f4)
- fix(billing): don't grant a full period for a same-cycle upgrade (
4a0b75a)
2026-10-19
- feat(auth): localize better-auth json error responses (
91fd41d)
- feat: localize public api error responses (
c70b767)
- feat: add translations for auth and public api errors (
d7cca86)
- fix: accept paraglide message input types in api error translation (
f5fc85e)
- feat: 校准tanstack目录结构,修正nextjs迁移过来的目录和tanstack模板未统一问题 (注意:本次更新改动了目录结构,注意看下多个commit)
2026-10-18
- chore: track src/core/settings/data.ts excluded by the data* ignore rule (
b4af860)
- feat: add plan changes, tickets, and announcements (
06b251d)
- feat: 支持公告、支付等实现,具体看英文commit
注意:下面shipany-template-gpt-image2 是你 远程D1的dbname
#本地
for f in sql/000{5,6,7,8}_*.sql; do
case "$f" in *.postgres.sql) continue;; esac
echo "==> $f"
sqlite3 -bail data/local.db < "$f" || break
done
#远程D1
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0005_ai_task_lease_slot.sql
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0006_subscription_plan_change.sql
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0007_announcement_ticket.sql
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0008_ticket_permissions.sql
2026-10-17
- feat: fill payment product ID mapping from a template (
f8e19bf)
- fix: copy immutable redirect headers before adding security headers (
b1073a9)
- fix: mark user-created API keys with the user type (
21db982)
- feat: 解决本地分支和远程历史分叉问题
- feat: refresh credit balance from the account menu and settings (
b5589da) - feat: 同步官方tanstack更新 (
f000002)
!!! 注意: 本次更新需要本地和远程跑数据库表同步
注意:下面shipany-template-gpt-image2 是你 远程D1的dbname
#本地
for f in sql/000{1,2,3,4}_*.sql; do sqlite3 data/local.db < $f; done
#远程D1
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0001_user_attribution.sql
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0002_order_refund.sql
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0003_user_event.sql
npx wrangler d1 execute shipany-template-gpt-image2 --remote --file=sql/0004_admin_agent.sql
2026-10-09
- feat: 一次性订单金额校验、异常态与管理端人工放行 (
88a5f30)
- feat: 结账按渠道定价,支付宝微信仅支持 CNY 积分包 (
b1d296b)
- feat: 支付渠道实付金额与币种换算上报 (
8257ce7)
2026-10-06
- fix: 拦截扫描探测路径并补安全响应头 (
f0e289d)
2026-10-04
- fix: proxy 无 Content-Length 时强制体大小上限 (
8f21642)
2026-09-14
-
feat: 支持gpt image2.5
-
fix: 管理端修改AI配置,隐藏不支持gpt 2.5默认供应商,将kie、apimart作为默认供应商;
-
fix: 管理端增加自定义配置与积分发放,避免空表覆盖和数据库锁;
-
fix: 定价页按实际最低 4积分改单价,不再把单积分标成 $0.02/张。校准 GPT Image 生图渠道与标价,避免走错供应商和按宣传单价亏本;
-
fix: 刷新后可续上生成并自动更新记录;
-
fix: Kie 分辨率与模型 ID 按接口要求透传,版权错误对用户可见。
2026-09-13
- fix: 对d1数据库的兼容处理
2026-09-09
- feat:支持waffo支付:https://www.waffo.ai/zh
2026-08-08
1、更新tanstack分支(底层改成基于shipany-tanstack框架,UI不变)tanstack文档
部署Cloudflare的命令不变:yarn cf:deploy 或者pnpm cf:deploy
部署Cloudflare的wrangler.toml参考:
name = "shipany-template-gpt-image2"
main = ".output/server/index.mjs"
compatibility_date = "2026-08-08"
compatibility_flags = ["nodejs_compat"]
[triggers]
# Beijing 00:00 = UTC 16:00
crons = ["0 16 * * *"]
[assets]
binding = "ASSETS"
directory = ".output/public"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "64c5c135190xxxxc103ca" // 注意xxxx是需要改成你的
localConnectionString = "postgres://neondb_owner:npg_4jGl2VAaiZKg@ep-xxxx" // 注意xxxx是需要改成你的
[observability]
enabled = true
[vars]
# app
VITE_APP_URL = "https://xxx.xxxx.xxxx" // 注意xxxx是需要改成你的
VITE_APP_NAME = "GPT Image2"
# theme
VITE_THEME = "default"
# appearance
VITE_APPEARANCE = "dark"
# database
DATABASE_URL = "postgresql://neondb_owner:npg_4jGl2VAaiZKg@ep-blue-hall-amhxxxxx" // 注意xxxx是需要改成你的
DATABASE_PROVIDER = "postgresql"
DB_SINGLETON_ENABLED = "false"
DB_SCHEMA = "public"
DB_MAX_CONNECTIONS = "10"
# auth secret
# openssl rand -base64 32
AUTH_SECRET = "xxxxx" // 注意xxxx是需要改成你的
