存储布局
KV 存储布局
| 键模式 | 值 | TTL |
|---|---|---|
config:routes | 路由 JSON 数组 | 永久 |
config:groups | 分组 JSON 数组 | 永久 |
session:{id} | 管理员会话 { userId, login } | 7 天 |
token:{userId} | { userId, accessToken, expiresAt, refreshToken? } | 0.9 × Token 有效期 |
token-reverse:{sha256} | 用于按 Token 反查的用户 id | 0.9 × Token 有效期 |
state:{hex} | { redirectTo, expiresAt, discordUserId?, telegramUserId?, telegramChatId? } | 600 秒 |
invite:{token} | { groupId, role, expiresAt, createdBy, note? } | 7 天 |
invite:group:{id} | 每组的 Token 索引(保证邀请列表一致性) | 永久 |
delivery:{provider}:{groupId}:{id} | Webhook 投递去重(按 provider 与租户隔离) | 300 秒 |
delivery-state:{provider}:{groupId}:{id} | 队列投递状态(pending/processing/delivered/retrying/failed/dead) | 1 天 |
queue:payload:{provider}:{groupId}:{id} | 暂存供队列消费者读取的超大 webhook 负载 | 1 天 |
nonce:{nonce} | 自定义 webhook 重放防护 nonce(一次性) | 600 秒 |
tenant:{groupId} | 分组 webhook secret(64 位 hex,控制台生成) | 永久 |
msg:{routeId}:{key}:{target} | 原地更新用消息 id 追踪(如 workflow_run / check_run) | 7 天 |
cmd:guild:{id} | 已注册命令的服务器 id(去重) | 永久 |
cmd:registered:global | 全局命令注册标记(去重) | 1 天 |
config:discord-app-id | 缓存的 Discord 应用 id | 永久 |
i18n:{lang} | 叠加在英文之上的翻译覆盖 | 永久 |
D1 存储布局
D1 数据库(DB 绑定,数据库 webhooker)包含四张表:
| 表 | 用途 |
|---|---|
send_logs | 每次分发尝试一行(路由 id、事件、目标、ok/error、耗时、错误码、详情) |
audit_logs | 每次管理员操作一行(登录/登出、分组/路由/成员/邀请变更) |
discord_links | 映射 discord_user_id → github_user_id,供 /gh Discord 命令使用 |
telegram_links | 映射 telegram_user_id → github_user_id,供 /gh Telegram 命令使用 |
audit_logs 由定时任务在 AUDIT_RETENTION_DAYS(默认 90)后自动清理。行字段说明见日志。