WebHooker/docs/zh/api/admin.md
RhenCloud 25ebae4ae5
feat(storage): migrate config, dedup and delivery state to D1
- Move oversized queue payloads from KV to R2 (PAYLOAD binding, webhooks/YYYY/MM/DD/*.json, KV queue:payload:* fallback)
- Persist routes/groups to D1 (d1_routes/d1_groups) with memory -> KV -> D1 three-tier cache, seeded from legacy KV config keys
- Move webhook dedup (dedup_keys), delivery state (delivery_state) and message tracking (message_tracking) to D1 via canUseD1 probe with automatic KV fallback
- Batch send_logs inserts (recordSendBatch) and add group_id/ts index
- Add storage-prune scheduled task for expired dedup/state/tracking rows
- Add TTL to invite:group:{id} index and audit all ephemeral KV keys
- Add D1 indexes for the new tables
- Sync AGENTS.md, README.md/zh and docs/ (en/zh) with the new storage layout
2026-08-17 15:01:20 +08:00

5.7 KiB
Raw Blame History

Admin API

管理端点用于管理路由、分组、成员、邀请、webhook 密钥、发送日志与审计日志。它们需要会话 Cookie可通过 GET /admin/loginGitHub OAuth获取登录用户必须列在 ADMIN_USER_IDS 中,或管理某个分组。设置方法见配置 → Web 控制台

控制台本身在 /admin 提供;其标签页可通过 URL 路径直达(/admin/groups/admin/logs/admin/audit)。

端点

端点 说明
GET /admin 配置控制台页面
GET /admin/login 开始管理员登录GitHub OAuth
GET /admin/logout 退出登录并销毁会话
GET /admin/invite?token=… 接受分组邀请(浏览器页面)
GET /admin/api/me 当前会话、权限范围、分组与角色
GET /admin/api/routes 列出路由(按权限过滤)
PUT /admin/api/routes 替换路由(按分组 owner/admin
GET /admin/api/groups 列出分组 + 当前用户在各分组的角色
PUT /admin/api/groups 替换分组超级管理员全部owner 仅自己的)
GET /admin/api/groups/:id/routes 列出某分组的路由
PUT /admin/api/groups/:id/routes 替换某分组的路由owner/admin
PUT /admin/api/groups/:id/rename 重命名分组owner路由、webhook secret 与邀请自动跟随
GET /admin/api/groups/:id/invites 列出待处理的邀请owner
POST /admin/api/groups/:id/invites 创建邀请链接owner
DELETE /admin/api/invites/:token 撤销邀请owner
GET /admin/api/groups/:id/webhook 分组 webhook 端点信息owner
POST /admin/api/groups/:id/webhook/regenerate 生成/重新生成分组 webhook secretowner
DELETE /admin/api/groups/:id/webhook 停用分组 webhook 入口owner
GET /admin/api/logs 发送日志(按可访问的路由过滤)
GET /admin/api/logs/:id 单条发送日志(按权限过滤)
GET /admin/api/audit 审计日志(按可访问的分组过滤)
GET /admin/api/metrics 投递统计(总计、失败率、按平台/事件/状态、最近失败);可选 ?groupId= 按分组过滤;非超管按可访问分组过滤最近失败
GET /admin/api/delivery/:deliveryId 单次投递的全部发送日志(按分组过滤)

校验

  • PUT /admin/api/routes — 请求体为 { "routes": Route[] }校验每条路由id 格式、组内唯一 id、name、enabled、groupId、过滤器——fallback 路由允许空过滤器——可选的 discordRoleIds(身份组 id 字符串列表)、平台感知的 targetsDiscord 需 target.channelIdTelegram 需 target.chatId)并持久化到 D1 d1_routes。返回 200 { ok, count }400 { error } / 401 { error } / 403 { error }。未变更的路由跳过完整校验。
  • PUT /admin/api/groups — 校验分组 id、成员角色至少一个 owner)、providersgithub / gitea)与 installationId
  • 上限:每个实例最多 200 条路由与 100 个分组。

模式:见路由与目标分组与访问控制