@windrun-huaiin/diaomao 29.0.0 → 30.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env.local.txt CHANGED
@@ -140,14 +140,14 @@ CREDITS_ONE_TIME_EXPIRED_DAYS=30
140
140
  ## Project->Database->Settings->ResetPassword
141
141
  #### Transaction Mode, IPv4 supported, great concurrency performance, Prisma prepared statements not supported
142
142
  ## ⚠️⚠️DO NOT use sslmode=require/no-verify, but config SSL cert env: SUPABASE_DB_CA_CERT
143
- ## DATABASE_URL="postgresql://YOURS_app.PROJECT_ID:PASSWORD@SERVER_HOST.pooler.supabase.com:6543/postgres?sslmode=require&schema=YOURS&pgbouncer=true"
143
+ ## DATABASE_URL="postgresql://YOURS_app.PROJECT_ID:PASSWORD@SERVER_HOST.pooler.supabase.com:6543/postgres?schema=YOURS&pgbouncer=true"
144
144
  #### Session Mode, IPv4 supported, consumes connections with slightly poorer concurrency performance, but supports Prisma prepared statements
145
- ## DATABASE_URL="postgresql://YOURS_app.PROJECT_ID:PASSWORD@SERVER_HOST.pooler.supabase.com:5432/postgres?sslmode=require&schema=YOURS"
145
+ ## DATABASE_URL="postgresql://YOURS_app.PROJECT_ID:PASSWORD@SERVER_HOST.pooler.supabase.com:5432/postgres?schema=YOURS"
146
146
 
147
147
  # DB Config, Local Supabase Docker Image
148
148
  ## 🚨⚠️Superuser Account Access🚨⚠️, extremely high risk, will completely invalidate multi-schema permission isolation for one database
149
- ## DATABASE_URL="postgresql://postgres:YOURS_PASSWORD@localhost:5432/postgres?schema=YOURS"
150
149
  ## Project dedicated account access, recommended, ⚠️⚠️ windrun-huaiin/backend-core has limited safety, so in local env you should siable ssl
150
+ ## DATABASE_URL="postgresql://postgres:YOURS_PASSWORD@localhost:5432/postgres?sslmode=disable&schema=YOURS"
151
151
  # DB Config, replace YOUR port、db name、schema
152
152
  DATABASE_URL="postgresql://YOURS_app:YOURS_PASSWORD@localhost:5432/postgres?sslmode=disable&schema=YOURS"
153
153
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/diaomao",
3
- "version": "29.0.0",
3
+ "version": "30.0.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -17,12 +17,12 @@
17
17
  "dependencies": {
18
18
  "@clerk/nextjs": "^7.0.5",
19
19
  "@types/mdx": "^2.0.13",
20
- "@windrun-huaiin/backend-core": "29.0.1",
21
- "@windrun-huaiin/base-ui": "29.0.0",
22
- "@windrun-huaiin/contracts": "29.0.0",
23
- "@windrun-huaiin/fumadocs-local-md": "29.0.0",
24
- "@windrun-huaiin/lib": "29.0.0",
25
- "@windrun-huaiin/third-ui": "29.0.2",
20
+ "@windrun-huaiin/backend-core": "30.0.0",
21
+ "@windrun-huaiin/base-ui": "30.0.0",
22
+ "@windrun-huaiin/contracts": "30.0.0",
23
+ "@windrun-huaiin/fumadocs-local-md": "30.0.0",
24
+ "@windrun-huaiin/lib": "30.0.0",
25
+ "@windrun-huaiin/third-ui": "30.0.0",
26
26
  "clsx": "^2.1.1",
27
27
  "lucide-react": "^0.577.0",
28
28
  "next": "16.1.6",
@@ -31,12 +31,12 @@
31
31
  "react": "19.2.4",
32
32
  "react-dom": "19.2.4",
33
33
  "tailwind-merge": "^3.5.0",
34
- "turbo": "^2.9.6"
34
+ "turbo": "^2.9.12"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@changesets/cli": "^2.29.8",
38
- "@prisma/client": "^7.8.0",
39
38
  "@prisma/adapter-pg": "^7.8.0",
39
+ "@prisma/client": "^7.8.0",
40
40
  "@tailwindcss/postcss": "^4.2.1",
41
41
  "@types/hast": "^3.0.4",
42
42
  "@types/node": "^25.3.2",
@@ -44,9 +44,9 @@
44
44
  "@types/react": "^19.2.14",
45
45
  "@types/react-dom": "^19.2.3",
46
46
  "@typescript-eslint/parser": "^8.56.1",
47
- "@windrun-huaiin/dev-scripts": "^29.0.1",
48
- "dotenv": "^17.4.2",
47
+ "@windrun-huaiin/dev-scripts": "^30.0.0",
49
48
  "baseline-browser-mapping": "^2.10.0",
49
+ "dotenv": "^17.4.2",
50
50
  "eslint": "^9.39.1",
51
51
  "eslint-config-next": "^16.1.6",
52
52
  "eslint-plugin-unused-imports": "^4.4.1",
@@ -88,7 +88,7 @@
88
88
  "build:prod": "turbo run task:build:prod",
89
89
  "task:dev": "prisma generate && next dev",
90
90
  "task:md:build": "pnpm exec local-md build",
91
- "task:build": "pnpm generate-blog-index && prisma generate && next build",
91
+ "task:build": "pnpm exec local-md build && pnpm generate-blog-index && prisma generate && next build",
92
92
  "task:build:dev": "pnpm generate-blog-index && prisma generate && next build",
93
93
  "task:build:prod": "prisma generate && next build",
94
94
  "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
@@ -1,3 +1,3 @@
1
- import { createSiteIcon } from '@windrun-huaiin/base-ui/components/server';
1
+ import { createSiteIcon } from '@windrun-huaiin/base-ui/components/shared';
2
2
 
3
3
  export const SiteIcon = createSiteIcon('BugOff');
@@ -1,4 +1,4 @@
1
- import { getGlobalIcon, globalLucideIcons } from '@windrun-huaiin/base-ui/components/server';
1
+ import { getGlobalIcon, globalLucideIcons } from '@windrun-huaiin/base-ui/components/shared';
2
2
  import { createConfiguredLocalMdSourceFactory } from '@windrun-huaiin/fumadocs-local-md/server/source';
3
3
  import {
4
4
  createFumaDocsBaseCompilerOptions,
@@ -1,10 +1,9 @@
1
1
  ---
2
2
  title: 环境变量速查表
3
- description: 基于 RR.txt 整理的项目环境变量分类文档
3
+ description: 环境变量配置QuickStart
4
4
  date: 2026-04-28
5
5
  ---
6
6
 
7
-
8
7
  ## 说明
9
8
 
10
9
  本文约定如下:
@@ -12,6 +11,7 @@ date: 2026-04-28
12
11
  - `NEXT_PUBLIC_` 开头的变量会暴露到前端
13
12
  - 不带 `NEXT_PUBLIC_` 的变量默认按服务端敏感配置处理
14
13
  - `YOURS-`、`XXX`、空值都表示模板占位,不是可直接使用的真实值
14
+ - 表格里的变量名列支持双击复制;带问号图标的字段可查看补充说明
15
15
 
16
16
  ## 不敏感配置
17
17
 
@@ -21,62 +21,86 @@ date: 2026-04-28
21
21
 
22
22
  ## 网站基础配置
23
23
 
24
- 这组变量用于定义站点名称、基础地址、代码仓库地址以及一些全局展示参数
24
+ 这组变量定义站点身份、源码链接和全局视觉参数。
25
25
 
26
- ### 用途说明
26
+ <CheetTable
27
+ title="网站基础配置"
28
+ description="站点级公开配置,通常会参与页面渲染、SEO、源码链接或全局 UI 展示。"
29
+ copyableColumns={['变量名']}
30
+ >
27
31
 
28
- | 变量名 | 说明 |
32
+ | 变量名??双击复制变量名 | 说明 |
29
33
  | --- | --- |
30
- | `NEXT_PUBLIC_APP_NAME` | 站点名称 |
31
- | `NEXT_PUBLIC_BASE_URL` | 站点主域名,本地一般是 `http://localhost:3000` |
34
+ | !!`NEXT_PUBLIC_APP_NAME` | 站点名称 |
35
+ | !!`NEXT_PUBLIC_BASE_URL` | 站点主域名??本地一般是 `http://localhost:3000`,生产环境应使用真实 HTTPS 域名 |
32
36
  | `NEXT_PUBLIC_I18N_LOCALE_PREFIX_AS_NEEDED` | 国际化路由前缀策略 |
33
37
  | `NEXT_PUBLIC_GITHUB` | 仓库主页地址 |
34
- | `NEXT_PUBLIC_GITHUB_BASE_URL` | 仓库默认分支根地址,通常用于拼接源码链接 |
35
- | `NEXT_PUBLIC_STYLE_ICON_COLOR` | UI 图标主色 |
38
+ | `NEXT_PUBLIC_GITHUB_BASE_URL` | 仓库默认分支根地址??通常用于拼接源码链接、编辑链接或文档源码入口 |
39
+ | `NEXT_PUBLIC_STYLE_ICON_COLOR` | UI 图标主色??支持 `purple`、`orange`、`indigo`、`emerald`、`rose` |
36
40
  | `NEXT_PUBLIC_STYLE_SVG_ICON_SIZE` | SVG 图标尺寸 |
37
41
  | `NEXT_PUBLIC_STYLE_WATERMARK_TEXT` | 页面水印文本 |
38
42
 
43
+ </CheetTable>
44
+
39
45
  ## Clerk 前端路由配置
40
46
 
41
- 这组变量控制登录、注册和候补名单等 Clerk 页面入口与跳转行为
47
+ 这组变量控制登录、注册和候补名单等 Clerk 页面入口与跳转行为。
42
48
 
43
- ### 用途说明
49
+ <CheetTable
50
+ title="Clerk 前端路由"
51
+ description="这些是前端可见路由配置,用来统一 Clerk 登录注册入口和认证完成后的兜底跳转。"
52
+ copyableColumns={['变量名']}
53
+ >
44
54
 
45
55
  | 变量名 | 说明 |
46
56
  | --- | --- |
47
- | `NEXT_PUBLIC_CLERK_SIGN_IN_URL` | 登录页路由 |
57
+ | !!`NEXT_PUBLIC_CLERK_SIGN_IN_URL` | 登录页路由 |
48
58
  | `NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL` | 登录完成后的兜底跳转地址 |
49
- | `NEXT_PUBLIC_CLERK_SIGN_UP_URL` | 注册页路由 |
59
+ | !!`NEXT_PUBLIC_CLERK_SIGN_UP_URL` | 注册页路由 |
50
60
  | `NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL` | 注册完成后的兜底跳转地址 |
51
61
  | `NEXT_PUBLIC_CLERK_WAITLIST_URL` | 候补名单页面路由 |
52
62
 
63
+ </CheetTable>
64
+
53
65
  ## 媒体加载与超时控制
54
66
 
55
- 这组变量用于前端媒体延迟显示和外部嵌入内容的超时控制
67
+ 这组变量用于前端媒体延迟显示和外部嵌入内容的超时控制。
56
68
 
57
- ### 用途说明
69
+ <CheetTable
70
+ title="媒体加载与超时"
71
+ description="前端体验类配置,主要影响图片延迟展示和外部嵌入内容的等待时间。"
72
+ copyableColumns={['变量名']}
73
+ >
58
74
 
59
75
  | 变量名 | 说明 |
60
76
  | --- | --- |
61
77
  | `NEXT_PUBLIC_DELAYED_IMG_SECONDS` | 延迟图片显示秒数 |
62
78
  | `NEXT_PUBLIC_SUNO_EMBED_TIMEOUT_SECONDS` | Suno 嵌入内容超时秒数 |
63
79
 
80
+ </CheetTable>
81
+
64
82
  ## OpenRouter 与聊天配置
65
83
 
66
- 这组变量主要控制模型名、超时、上下文窗口,以及本地 mock 行为
84
+ 这组变量主要控制模型名、超时、上下文窗口,以及本地 mock 行为。
67
85
 
68
- ### 用途说明
86
+ <CheetTable
87
+ title="OpenRouter 与聊天配置"
88
+ description="真实请求和本地 mock 共用的行为配置。生产环境应重点复核 timeout、mock 开关和模型名。"
89
+ copyableColumns={['变量名']}
90
+ >
69
91
 
70
92
  | 变量名 | 说明 |
71
93
  | --- | --- |
72
- | `OPENROUTER_TIMEOUT_SECONDS` | OpenRouter 请求超时时间 |
73
- | `NEXT_PUBLIC_OPENROUTER_MODEL_NAME` | 前端默认展示或使用的模型名 |
94
+ | !!`OPENROUTER_TIMEOUT_SECONDS` | OpenRouter 请求超时时间 |
95
+ | !!`NEXT_PUBLIC_OPENROUTER_MODEL_NAME` | 前端默认展示或使用的模型名 |
74
96
  | `NEXT_PUBLIC_CHAT_CONTEXT_WINDOW_TURNS` | 多轮对话保留轮数 |
75
- | `OPENROUTER_MOCK_TYPE` | mock 响应类型 |
97
+ | `OPENROUTER_MOCK_TYPE` | mock 响应类型??参考下方 `OPENROUTER_MOCK_TYPE` 枚举 |
76
98
  | `OPENROUTER_MOCK_TIMEOUT_SECONDS` | mock 响应前等待时间 |
77
99
  | `OPENROUTER_MOCK_STREAM_CHUNK_DELAY_MS` | mock 流式分片延迟 |
78
100
  | `OPENROUTER_MOCK_STREAM_CHUNK_SIZE` | mock 每次输出的分片大小 |
79
101
 
102
+ </CheetTable>
103
+
80
104
  ### OPENROUTER_MOCK_TYPE 参考
81
105
 
82
106
  - `0`: Normal
@@ -88,30 +112,46 @@ date: 2026-04-28
88
112
 
89
113
  ## Stripe 价格与积分配置
90
114
 
91
- 这部分用于定义订阅套餐、年付折扣、一次性购买以及积分发放规则
115
+ 这部分用于定义订阅套餐、年付折扣、一次性购买以及积分发放规则。
92
116
 
93
- ### 订阅模式
117
+ <CheetTable
118
+ title="订阅模式"
119
+ description="订阅类套餐按套餐与周期拆分,每个套餐都需要 Price ID、金额、币种和积分配置。"
120
+ copyableColumns={['Price ID', '金额', '币种', '积分', '折扣']}
121
+ >
94
122
 
95
123
  | 套餐 | 周期 | Price ID | 金额 | 币种 | 积分 | 折扣 |
96
124
  | --- | --- | --- | --- | --- | --- | --- |
97
- | Pro | Monthly | `STRIPE_PRO_MONTHLY_PRICE_ID` | `STRIPE_PRO_MONTHLY_AMOUNT` | `STRIPE_PRO_MONTHLY_CURRENCY` | `STRIPE_PRO_MONTHLY_CREDITS` | - |
98
- | Ultra | Monthly | `STRIPE_ULTRA_MONTHLY_PRICE_ID` | `STRIPE_ULTRA_MONTHLY_AMOUNT` | `STRIPE_ULTRA_MONTHLY_CURRENCY` | `STRIPE_ULTRA_MONTHLY_CREDITS` | - |
99
- | Pro | Yearly | `STRIPE_PRO_YEARLY_PRICE_ID` | `STRIPE_PRO_YEARLY_AMOUNT` | `STRIPE_PRO_YEARLY_CURRENCY` | `STRIPE_PRO_YEARLY_CREDITS` | `STRIPE_PRO_DISCOUNT_PERCENT` |
100
- | Ultra | Yearly | `STRIPE_ULTRA_YEARLY_PRICE_ID` | `STRIPE_ULTRA_YEARLY_AMOUNT` | `STRIPE_ULTRA_YEARLY_CURRENCY` | `STRIPE_ULTRA_YEARLY_CREDITS` | `STRIPE_ULTRA_DISCOUNT_PERCENT` |
125
+ | Pro | Monthly | !!`STRIPE_PRO_MONTHLY_PRICE_ID` | `STRIPE_PRO_MONTHLY_AMOUNT` | `STRIPE_PRO_MONTHLY_CURRENCY` | `STRIPE_PRO_MONTHLY_CREDITS` | - |
126
+ | Ultra | Monthly | !!`STRIPE_ULTRA_MONTHLY_PRICE_ID` | `STRIPE_ULTRA_MONTHLY_AMOUNT` | `STRIPE_ULTRA_MONTHLY_CURRENCY` | `STRIPE_ULTRA_MONTHLY_CREDITS` | - |
127
+ | Pro | Yearly | !!`STRIPE_PRO_YEARLY_PRICE_ID` | `STRIPE_PRO_YEARLY_AMOUNT` | `STRIPE_PRO_YEARLY_CURRENCY` | `STRIPE_PRO_YEARLY_CREDITS` | `STRIPE_PRO_DISCOUNT_PERCENT`??年付展示折扣 |
128
+ | Ultra | Yearly | !!`STRIPE_ULTRA_YEARLY_PRICE_ID` | `STRIPE_ULTRA_YEARLY_AMOUNT` | `STRIPE_ULTRA_YEARLY_CURRENCY` | `STRIPE_ULTRA_YEARLY_CREDITS` | `STRIPE_ULTRA_DISCOUNT_PERCENT`??年付展示折扣 |
101
129
 
102
- ### 一次性支付
130
+ </CheetTable>
131
+
132
+ <CheetTable
133
+ title="一次性支付"
134
+ description="一次性购买套餐按档位拆分,只发放一次性积分,不创建订阅周期。"
135
+ copyableColumns={['Price ID', '金额', '币种', '积分']}
136
+ >
103
137
 
104
138
  | 档位 | Price ID | 金额 | 币种 | 积分 |
105
139
  | --- | --- | --- | --- | --- |
106
- | Less | `STRIPE_ONE_TIME_LESS_PRICE_ID` | `STRIPE_ONE_TIME_LESS_AMOUNT` | `STRIPE_ONE_TIME_LESS_CURRENCY` | `STRIPE_ONE_TIME_LESS_CREDITS` |
107
- | Mid | `STRIPE_ONE_TIME_MID_PRICE_ID` | `STRIPE_ONE_TIME_MID_AMOUNT` | `STRIPE_ONE_TIME_MID_CURRENCY` | `STRIPE_ONE_TIME_MID_CREDITS` |
108
- | More | `STRIPE_ONE_TIME_MORE_PRICE_ID` | `STRIPE_ONE_TIME_MORE_AMOUNT` | `STRIPE_ONE_TIME_MORE_CURRENCY` | `STRIPE_ONE_TIME_MORE_CREDITS` |
140
+ | Less | !!`STRIPE_ONE_TIME_LESS_PRICE_ID` | `STRIPE_ONE_TIME_LESS_AMOUNT` | `STRIPE_ONE_TIME_LESS_CURRENCY` | `STRIPE_ONE_TIME_LESS_CREDITS` |
141
+ | Mid | !!`STRIPE_ONE_TIME_MID_PRICE_ID` | `STRIPE_ONE_TIME_MID_AMOUNT` | `STRIPE_ONE_TIME_MID_CURRENCY` | `STRIPE_ONE_TIME_MID_CREDITS` |
142
+ | More | !!`STRIPE_ONE_TIME_MORE_PRICE_ID` | `STRIPE_ONE_TIME_MORE_AMOUNT` | `STRIPE_ONE_TIME_MORE_CURRENCY` | `STRIPE_ONE_TIME_MORE_CREDITS` |
143
+
144
+ </CheetTable>
109
145
 
110
146
  ## 公开开关与本地调试开关
111
147
 
112
- 这组变量控制 Banner、水印、延迟图片、Clerk 页面样式以及本地 markdown 调试行为
148
+ 这组变量控制 Banner、水印、延迟图片、Clerk 页面样式以及本地 markdown 调试行为。
113
149
 
114
- ### 用途说明
150
+ <CheetTable
151
+ title="公开开关与本地调试开关"
152
+ description="多数变量会影响前端展示;调试类开关应避免在生产环境误开。"
153
+ copyableColumns={['变量名']}
154
+ >
115
155
 
116
156
  | 变量名 | 说明 |
117
157
  | --- | --- |
@@ -120,25 +160,33 @@ date: 2026-04-28
120
160
  | `NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL` | 是否以弹窗方式展示认证流程 |
121
161
  | `NEXT_PUBLIC_STYLE_WATERMARK_ENABLED` | 是否启用水印 |
122
162
  | `NEXT_PUBLIC_DELAYED_IMG_ENABLED` | 是否启用延迟图片策略 |
123
- | `CLERK_DEBUG` | Clerk 调试开关 |
124
- | `LOCAL_MD_*` | 本地 Markdown 缓存、调试和运行时控制 |
163
+ | !!`CLERK_DEBUG` | Clerk 调试开关??生产环境建议关闭 |
164
+ | !!`LOCAL_MD_*` | 本地 Markdown 缓存、调试和运行时控制 |
165
+
166
+ </CheetTable>
125
167
 
126
168
  ## 计费与积分基础配置
127
169
 
128
- 这组变量用于决定支付提供商、模拟用户价格类型,以及积分初始化和过期规则
170
+ 这组变量用于决定支付提供商、模拟用户价格类型,以及积分初始化和过期规则。
129
171
 
130
- ### 用途说明
172
+ <CheetTable
173
+ title="计费与积分基础配置"
174
+ description="计费运行时的基础参数。支付提供商、初始积分和过期天数会直接影响用户权益。"
175
+ copyableColumns={['变量名']}
176
+ >
131
177
 
132
178
  | 变量名 | 说明 |
133
179
  | --- | --- |
134
- | `MONEY_PRICE_MOCK_USER_TYPE` | 模拟用户价格档位 |
135
- | `ACTIVE_PAYMENT_PROVIDER` | 当前启用的支付服务提供商 |
180
+ | `MONEY_PRICE_MOCK_USER_TYPE` | 模拟用户价格档位??参考下方 `MONEY_PRICE_MOCK_USER_TYPE` 枚举 |
181
+ | !!`ACTIVE_PAYMENT_PROVIDER` | 当前启用的支付服务提供商 |
136
182
  | `CREDITS_INIT_FREE_AMOUNT` | 游客初始积分 |
137
183
  | `CREDITS_INIT_FREE_REGISTER_AMOUNT` | 注册用户初始积分 |
138
184
  | `CREDITS_INIT_FREE_EXPIRED_DAYS` | 免费积分过期天数 |
139
185
  | `CREDITS_ONE_TIME_EXPIRED_DAYS` | 一次性购买积分过期天数 |
140
186
 
141
- ### MONEY_PRICE_MOCK_USER_TYPE参考
187
+ </CheetTable>
188
+
189
+ ### MONEY_PRICE_MOCK_USER_TYPE 参考
142
190
 
143
191
  - `0`: FreeUser
144
192
  - `1`: MonthPro
@@ -154,7 +202,7 @@ date: 2026-04-28
154
202
 
155
203
  ## 数据库配置
156
204
 
157
- 项目注释里已经强调了数据库权限隔离的重要性这里建议把生产与本地环境严格分开,并避免把高权限连接串直接用于日常开发
205
+ 项目注释里已经强调了数据库权限隔离的重要性。生产与本地环境应严格分开,并避免把高权限连接串直接用于日常开发。
158
206
 
159
207
  <TrophyCard title="安全才是最大的豪华与自由, ⚠️🚨数据库配置" icon={<DatabaseZapIcon />}>
160
208
  - 本地: `DATABASE_URL="postgresql://YOURS_app:YOURS_PASSWORD@localhost:5432/postgres?sslmode=disable&schema=YOURS"`
@@ -162,11 +210,17 @@ date: 2026-04-28
162
210
  - 线上会话模式: `DATABASE_URL="postgresql://YOURS_app.PROJECT_ID:PASSWORD@SERVER_HOST.pooler.supabase.com:5432/postgres?sslmode=require&schema=YOURS"`
163
211
  </TrophyCard>
164
212
 
165
- ### 用途说明
213
+ <CheetTable
214
+ title="数据库配置"
215
+ description="数据库连接串属于高敏感配置。生产环境优先使用项目专属账号和池化连接,不要使用超级用户连接串。"
216
+ copyableColumns={['变量名']}
217
+ >
166
218
 
167
219
  | 变量名 | 说明 |
168
220
  | --- | --- |
169
- | `DATABASE_URL` | Prisma 和后端服务的数据库连接串 |
221
+ | !!`DATABASE_URL` | Prisma 和后端服务的数据库连接串??本地常用 `sslmode=disable`;线上建议使用 Supabase pooler 事务模式并开启 SSL |
222
+
223
+ </CheetTable>
170
224
 
171
225
  ### 配置注意事项
172
226
 
@@ -176,53 +230,81 @@ date: 2026-04-28
176
230
 
177
231
  ## Clerk 服务端配置
178
232
 
179
- ### 用途说明
233
+ <CheetTable
234
+ title="Clerk 服务端配置"
235
+ description="Clerk 认证相关密钥。Publishable Key 可公开,Secret Key 和 Webhook Secret 只能放在服务端。"
236
+ copyableColumns={['变量名']}
237
+ >
180
238
 
181
239
  | 变量名 | 说明 |
182
240
  | --- | --- |
183
241
  | `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` | 前端可公开的 Clerk Key |
184
- | `CLERK_SECRET_KEY` | 后端调用 Clerk API 使用的私钥 |
185
- | `CLERK_WEBHOOK_SECRET` | Clerk Webhook 签名校验密钥 |
242
+ | !!`CLERK_SECRET_KEY` | 后端调用 Clerk API 使用的私钥 |
243
+ | !!`CLERK_WEBHOOK_SECRET` | Clerk Webhook 签名校验密钥 |
244
+
245
+ </CheetTable>
186
246
 
187
247
  ## Stripe 密钥配置
188
248
 
189
- ### 用途说明
249
+ <CheetTable
250
+ title="Stripe 密钥配置"
251
+ description="Stripe 支付密钥。服务端私钥和 Webhook 签名密钥必须按环境隔离。"
252
+ copyableColumns={['变量名']}
253
+ >
190
254
 
191
255
  | 变量名 | 说明 |
192
256
  | --- | --- |
193
257
  | `STRIPE_PUBLISHABLE_KEY` | Stripe 前端公钥 |
194
- | `STRIPE_SECRET_KEY` | Stripe 服务端私钥 |
195
- | `STRIPE_WEBHOOK_SECRET` | Stripe Webhook 签名密钥 |
258
+ | !!`STRIPE_SECRET_KEY` | Stripe 服务端私钥 |
259
+ | !!`STRIPE_WEBHOOK_SECRET` | Stripe Webhook 签名密钥 |
260
+
261
+ </CheetTable>
196
262
 
197
263
  ## OpenRouter 密钥配置
198
264
 
199
- ### 用途说明
265
+ <CheetTable
266
+ title="OpenRouter 密钥配置"
267
+ description="OpenRouter 服务端访问密钥。不要使用 `NEXT_PUBLIC_` 前缀,也不要传给浏览器。"
268
+ copyableColumns={['变量名']}
269
+ >
200
270
 
201
271
  | 变量名 | 说明 |
202
272
  | --- | --- |
203
- | `OPENROUTER_API_KEY` | OpenRouter 服务端访问密钥 |
273
+ | !!`OPENROUTER_API_KEY` | OpenRouter 服务端访问密钥 |
274
+
275
+ </CheetTable>
204
276
 
205
277
  ## Upstash 配置
206
278
 
207
- 包括 Redis 和 QStash 两部分,前者偏缓存与状态,后者偏异步任务
279
+ 包括 Redis 和 QStash 两部分,前者偏缓存与状态,后者偏异步任务。
208
280
 
209
- ### 用途说明
281
+ <CheetTable
282
+ title="Upstash 配置"
283
+ description="Redis REST Token、QStash Token 和签名密钥都属于服务端敏感配置;只有缓存任务 URL 可以按业务需要暴露到前端。"
284
+ copyableColumns={['变量名']}
285
+ >
210
286
 
211
287
  | 变量名 | 说明 |
212
288
  | --- | --- |
213
289
  | `UPSTASH_REDIS_REST_URL` | Upstash Redis REST 地址 |
214
- | `UPSTASH_REDIS_REST_TOKEN` | Redis REST Token |
290
+ | !!`UPSTASH_REDIS_REST_TOKEN` | Redis REST Token |
215
291
  | `QSTASH_URL` | QStash 服务地址 |
216
- | `QSTASH_TOKEN` | QStash 访问令牌 |
217
- | `QSTASH_CURRENT_SIGNING_KEY` | 当前签名校验密钥 |
218
- | `QSTASH_NEXT_SIGNING_KEY` | 下一个轮换签名密钥 |
292
+ | !!`QSTASH_TOKEN` | QStash 访问令牌 |
293
+ | !!`QSTASH_CURRENT_SIGNING_KEY` | 当前签名校验密钥 |
294
+ | !!`QSTASH_NEXT_SIGNING_KEY` | 下一个轮换签名密钥??用于密钥轮换期间兼容新旧签名 |
219
295
  | `NEXT_PUBLIC_QSTASH_CACHE_TASK_URL` | 前端可见的缓存任务接口地址 |
220
296
 
297
+ </CheetTable>
298
+
221
299
  ## 分析、代理与 FAQ 配置
222
300
 
223
- 这组变量包含统计分析、CDN 代理以及 FAQ 服务配置
301
+ 这组变量包含统计分析、CDN 代理以及 FAQ 服务配置。
224
302
 
225
- ### 用途说明
303
+ <CheetTable
304
+ title="分析、代理与 FAQ 配置"
305
+ description="统计 ID 和代理 URL 属于公开配置;FAQ 写入密钥和服务端调试开关应按敏感配置处理。"
306
+ copyableColumns={['变量名']}
307
+ >
226
308
 
227
309
  | 变量名 | 说明 |
228
310
  | --- | --- |
@@ -230,24 +312,32 @@ date: 2026-04-28
230
312
  | `NEXT_PUBLIC_MICROSOFT_CLARITY_ID` | Microsoft Clarity 跟踪 ID |
231
313
  | `NEXT_PUBLIC_STYLE_CDN_PROXY_URL` | 前端资源代理地址 |
232
314
  | `NEXT_PUBLIC_QSTASH_CACHE_TASK_URL` | 暴露到前端的缓存任务接口地址 |
233
- | `WINDRUN_HUAIIN_FAQ_*` | FAQ 服务的地址、客户端身份、密钥版本与读写密钥 |
234
- | `WINDRUN_HUAIIN_SDK_DEBUG` | FAQ SDK 调试开关 |
315
+ | !!`WINDRUN_HUAIIN_FAQ_*` | FAQ 服务的地址、客户端身份、密钥版本与读写密钥??通配项里可能包含敏感读写密钥,不能一概视为公开配置 |
316
+ | !!`WINDRUN_HUAIIN_SDK_DEBUG` | FAQ SDK 调试开关 |
235
317
  | `WINDRUN_HUAIIN_FAQ_OUTER_CACHE_ENABLED` | FAQ 外层缓存开关 |
236
318
 
319
+ </CheetTable>
320
+
237
321
  ## 敏感开关
238
322
 
239
- 这类变量不一定是密钥,但会影响调试行为、价格模拟、支付升级流程和内部状态暴露,仍然建议仅保留在服务端环境中
323
+ 这类变量不一定是密钥,但会影响调试行为、价格模拟、支付升级流程和内部状态暴露,仍然建议仅保留在服务端环境中。
240
324
 
241
- ### 用途说明
325
+ <CheetTable
326
+ title="敏感开关"
327
+ description="这类开关会改变运行时行为或暴露调试信息。上线前应逐项复核,尤其是 mock、debug 和内部状态展示。"
328
+ copyableColumns={['变量名']}
329
+ >
242
330
 
243
331
  | 变量名 | 说明 |
244
332
  | --- | --- |
245
- | `SHOW_FINGERPRINT_STATUS` | 是否显示指纹状态 |
246
- | `OPENROUTER_ENABLE_MOCK` | 是否启用 OpenRouter mock |
247
- | `NEXT_PUBLIC_OPENROUTER_DEBUG` | 是否开启前端调试输出 |
248
- | `ENABLE_STRIPE_SUBSCRIPTION_UPGRADE` | 是否允许订阅升级流程 |
249
- | `MONEY_PRICE_MOCK_USER_ENABLED` | 是否启用价格模拟用户 |
250
- | `PRISMA_DEBUG` | 是否输出 Prisma 调试信息 |
333
+ | !!`SHOW_FINGERPRINT_STATUS` | 是否显示指纹状态 |
334
+ | !!`OPENROUTER_ENABLE_MOCK` | 是否启用 OpenRouter mock |
335
+ | !!`NEXT_PUBLIC_OPENROUTER_DEBUG` | 是否开启前端调试输出??虽然带 `NEXT_PUBLIC_`,但生产环境仍应谨慎启用 |
336
+ | !!`ENABLE_STRIPE_SUBSCRIPTION_UPGRADE` | 是否允许订阅升级流程 |
337
+ | !!`MONEY_PRICE_MOCK_USER_ENABLED` | 是否启用价格模拟用户 |
338
+ | !!`PRISMA_DEBUG` | 是否输出 Prisma 调试信息 |
339
+
340
+ </CheetTable>
251
341
 
252
342
  ## 建议的分层理解
253
343
 
@@ -2,7 +2,7 @@
2
2
  title: Blog
3
3
  description: Articles and thoughts about various topics.
4
4
  icon: RssIcon
5
- date: 2026-04-29
5
+ date: 2026-05-11
6
6
  ---
7
7
 
8
8
  ## Past List
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Monthly Summary
3
3
  description: Index and Summary
4
- date: 2026-04-29
4
+ date: 2026-05-11
5
5
  ---
6
6
 
7
7
 
package/src/proxy.ts CHANGED
@@ -103,7 +103,7 @@ export default clerkMiddleware(
103
103
  export const config = {
104
104
  matcher: [
105
105
  // Skip Next.js internals and all static files, but include API routes
106
- "/((?!_next|\\.well-known|sitemap.xml?|robots.txt?|[^?]*.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)",
106
+ "/((?!_next|\\.well-known|sitemap.xml?|robots.txt?|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)(?:$|\\?)).*)",
107
107
  // Include API routes explicitly
108
108
  "/api/(.*)",
109
109
  ],