概述
桌面端云回退受WORLDMONITOR_API_KEY 门控。没有有效密钥时,桌面应用以仅本地模式(sidecar)运行。注册表单通过 Convex DB 收集邮箱,用于未来的密钥分发。
架构
必需的环境变量
Vercel
生成 API 密钥
密钥必须至少 16 个字符(客户端验证)。推荐格式:WORLDMONITOR_VALID_KEYS(逗号分隔,无空格)。
Convex 设置
首次部署
验证 Convex 部署
Schema
registrations 表存储:
通过
normalizedEmail 建立索引以检测重复。
安全模型
客户端(桌面应用)
installRuntimeFetchPatch()在允许云回退之前检查WORLDMONITOR_API_KEY- 密钥必须存在且有效(最少 16 个字符)
secretsReadypromise 确保在首次 fetch 之前加载密钥(2 秒超时)- 故障关闭:密钥检查中的任何错误都会阻止云回退
服务端(Vercel edge)
api/_api-key.js在 sebuf 路由上验证X-WorldMonitor-Key头- 源感知:桌面端来源(
tauri.localhost、tauri://、asset://)需要密钥 - Web 来源(
worldmonitor.app)无需密钥即可通过 - 非桌面端来源带密钥头:密钥仍会验证
- 无效密钥返回
401 { error: "Invalid API key" }
CORS
X-WorldMonitor-Key 在 server/cors.ts 和 api/_cors.js 中均被允许。
本地 Vercel 环境导出
请勿将 Vercel 环境导出保留在仓库根目录。.env.vercel-backup
和 .env.vercel-export 被 Git 忽略,但它们仍然是明文
生产密钥导出,本地工具、编辑器代理、备份软件或
依赖安装脚本都可能读取它们。
当任一文件存在时 pre-push 钩子会失败。仅在需要时拉取环境值,
从短期本地环境文件中操作,并在使用后删除该文件。密钥轮换
和从开发机器中删除属于运维任务;通过所属供应商仪表盘轮换
暴露的密钥,优先处理 LLM、支付、认证、Redis 和 Convex
凭据。
验证清单
部署后:- 在 Vercel 中设置
WORLDMONITOR_VALID_KEYS - 在 Vercel 中设置
CONVEX_URL - 运行
npx convex deploy推送 schema - 无密钥的桌面端:云回退被阻止(控制台显示
cloud fallback blocked) - 带无效密钥的桌面端:sebuf 请求返回
401 - 带有效密钥的桌面端:云回退正常工作
- Web 访问:无需密钥,正常工作
- 注册表单:提交邮箱,检查 Convex 仪表盘
- 重复邮箱:显示 “already registered”
- 现有设置标签页(LLM、API Keys、Debug)保持不变
