diff --git a/docs/api/overview.md b/docs/api/overview.md index f4de420..53bcfe6 100644 --- a/docs/api/overview.md +++ b/docs/api/overview.md @@ -10,29 +10,29 @@ https://your-worker.workers.dev ## Endpoints -| Method | Path | Auth | Description | -| -------- | ------------------------------ | ----------------- | ------------------------------------------------------ | -| `GET` | `/health` | None | Health check | -| `POST` | `/webhook` | HMAC signature | GitHub webhook ingestion | -| `POST` | `/discord/interactions` | Ed25519 signature | Discord interactions (slash commands, buttons, modals) | -| `POST` | `/telegram/webhook` | Secret token | Telegram updates (bot `/gh` commands) | +| Method | Path | Auth | Description | +| -------- | ------------------------------ | ----------------- | --------------------------------------------------------- | +| `GET` | `/health` | None | Health check | +| `POST` | `/webhook` | HMAC signature | GitHub webhook ingestion | +| `POST` | `/discord/interactions` | Ed25519 signature | Discord interactions (slash commands, buttons, modals) | +| `POST` | `/telegram/webhook` | Secret token | Telegram updates (bot `/gh` commands) | | `GET` | `/api/richheader` | None | Open Graph page for the Telegram avatar link-preview card | -| `GET` | `/auth/github` | None | Start GitHub OAuth flow | -| `GET` | `/auth/github/callback` | None | OAuth callback | -| `DELETE` | `/auth/token/:userId` | None | Revoke user token | -| `POST` | `/api/comment` | Bearer token | Create issue comment | -| `POST` | `/api/merge` | Bearer token | Merge pull request | -| `POST` | `/api/close` | Bearer token | Close pull request | -| `POST` | `/api/react` | Bearer token | Add reaction to issue | -| `GET` | `/admin` | Admin session | Config console UI | -| `GET` | `/admin/api/routes` | Admin session | List routes | -| `PUT` | `/admin/api/routes` | Admin session | Replace routes | -| `GET` | `/admin/api/groups` | Admin session | List groups (scoped) | -| `PUT` | `/admin/api/groups` | Admin session | Replace groups (super) | -| `GET` | `/admin/api/groups/:id/routes` | Admin session | List a group's routes | -| `PUT` | `/admin/api/groups/:id/routes` | Admin session | Replace a group's routes | -| `GET` | `/admin/api/me` | Admin session | Current session info | -| `GET` | `/admin/api/logs` | Admin session | Send logs (scoped) | +| `GET` | `/auth/github` | None | Start GitHub OAuth flow | +| `GET` | `/auth/github/callback` | None | OAuth callback | +| `DELETE` | `/auth/token/:userId` | None | Revoke user token | +| `POST` | `/api/comment` | Bearer token | Create issue comment | +| `POST` | `/api/merge` | Bearer token | Merge pull request | +| `POST` | `/api/close` | Bearer token | Close pull request | +| `POST` | `/api/react` | Bearer token | Add reaction to issue | +| `GET` | `/admin` | Admin session | Config console UI | +| `GET` | `/admin/api/routes` | Admin session | List routes | +| `PUT` | `/admin/api/routes` | Admin session | Replace routes | +| `GET` | `/admin/api/groups` | Admin session | List groups (scoped) | +| `PUT` | `/admin/api/groups` | Admin session | Replace groups (super) | +| `GET` | `/admin/api/groups/:id/routes` | Admin session | List a group's routes | +| `PUT` | `/admin/api/groups/:id/routes` | Admin session | Replace a group's routes | +| `GET` | `/admin/api/me` | Admin session | Current session info | +| `GET` | `/admin/api/logs` | Admin session | Send logs (scoped) | ## Admin Console diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md index 536faa4..a07350e 100644 --- a/docs/guide/configuration.md +++ b/docs/guide/configuration.md @@ -18,14 +18,14 @@ WebHooker requires several secrets to function. For local development, store the ### Optional Secrets -| Variable | Description | Default | -| ------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------- | -| `DISCORD_PUBLIC_KEY` | Discord application public key (Developer Portal) — required for interactions | Unset → interactions return `401` | -| `DISCORD_APPLICATION_ID` | Discord application id; auto-resolved when omitted | Auto-resolved | -| `TELEGRAM_WEBHOOK_SECRET` | Secret token for `POST /telegram/webhook` verification (X-Telegram-Bot-Api-Secret-Token) | Disabled (no verification) | +| Variable | Description | Default | +| --------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| `DISCORD_PUBLIC_KEY` | Discord application public key (Developer Portal) — required for interactions | Unset → interactions return `401` | +| `DISCORD_APPLICATION_ID` | Discord application id; auto-resolved when omitted | Auto-resolved | +| `TELEGRAM_WEBHOOK_SECRET` | Secret token for `POST /telegram/webhook` verification (X-Telegram-Bot-Api-Secret-Token) | Disabled (no verification) | | `TELEGRAM_RICH_HEADER_HOST` | Base URL of an external rich-header service; when unset, the built-in `GET /api/richheader` serves the Telegram avatar card | Built-in `/api/richheader` | -| `BASE_URL` | Public URL for OAuth callbacks | `http://localhost:8787` | -| `ADMIN_USER_IDS` | Comma-separated GitHub user IDs (or logins) allowed to access the Web UI | Disabled | +| `BASE_URL` | Public URL for OAuth callbacks | `http://localhost:8787` | +| `ADMIN_USER_IDS` | Comma-separated GitHub user IDs (or logins) allowed to access the Web UI | Disabled | ## Web UI diff --git a/docs/zh/api/overview.md b/docs/zh/api/overview.md index 8931844..9bcf7da 100644 --- a/docs/zh/api/overview.md +++ b/docs/zh/api/overview.md @@ -10,29 +10,29 @@ https://your-worker.workers.dev ## 端点 -| 方法 | 路径 | 鉴权 | 说明 | -| -------- | ------------------------------ | ------------ | ------------------------------------- | -| `GET` | `/health` | 无 | 健康检查 | -| `POST` | `/webhook` | HMAC 签名 | GitHub webhook 接入 | -| `POST` | `/discord/interactions` | Ed25519 签名 | Discord 交互(斜杠命令、按钮、modal) | -| `POST` | `/telegram/webhook` | Secret token | Telegram 更新(bot `/gh` 命令) | +| 方法 | 路径 | 鉴权 | 说明 | +| -------- | ------------------------------ | ------------ | ------------------------------------------------ | +| `GET` | `/health` | 无 | 健康检查 | +| `POST` | `/webhook` | HMAC 签名 | GitHub webhook 接入 | +| `POST` | `/discord/interactions` | Ed25519 签名 | Discord 交互(斜杠命令、按钮、modal) | +| `POST` | `/telegram/webhook` | Secret token | Telegram 更新(bot `/gh` 命令) | | `GET` | `/api/richheader` | 无 | 用于 Telegram 头像链接预览卡片的 Open Graph 页面 | -| `GET` | `/auth/github` | 无 | 启动 GitHub OAuth 流程 | -| `GET` | `/auth/github/callback` | 无 | OAuth 回调 | -| `DELETE` | `/auth/token/:userId` | 无 | 撤销用户 Token | -| `POST` | `/api/comment` | Bearer Token | 创建议题评论 | -| `POST` | `/api/merge` | Bearer Token | 合并拉取请求 | -| `POST` | `/api/close` | Bearer Token | 关闭拉取请求 | -| `POST` | `/api/react` | Bearer Token | 添加议题反应 | -| `GET` | `/admin` | 管理员会话 | 配置控制台页面 | -| `GET` | `/admin/api/routes` | 管理员会话 | 列出路由 | -| `PUT` | `/admin/api/routes` | 管理员会话 | 替换路由 | -| `GET` | `/admin/api/groups` | 管理员会话 | 列出分组(按权限过滤) | -| `PUT` | `/admin/api/groups` | 管理员会话 | 替换分组(仅超级管理员) | -| `GET` | `/admin/api/groups/:id/routes` | 管理员会话 | 列出某分组的路由 | -| `PUT` | `/admin/api/groups/:id/routes` | 管理员会话 | 替换某分组的路由 | -| `GET` | `/admin/api/me` | 管理员会话 | 当前会话信息 | -| `GET` | `/admin/api/logs` | 管理员会话 | 发送日志(按权限过滤) | +| `GET` | `/auth/github` | 无 | 启动 GitHub OAuth 流程 | +| `GET` | `/auth/github/callback` | 无 | OAuth 回调 | +| `DELETE` | `/auth/token/:userId` | 无 | 撤销用户 Token | +| `POST` | `/api/comment` | Bearer Token | 创建议题评论 | +| `POST` | `/api/merge` | Bearer Token | 合并拉取请求 | +| `POST` | `/api/close` | Bearer Token | 关闭拉取请求 | +| `POST` | `/api/react` | Bearer Token | 添加议题反应 | +| `GET` | `/admin` | 管理员会话 | 配置控制台页面 | +| `GET` | `/admin/api/routes` | 管理员会话 | 列出路由 | +| `PUT` | `/admin/api/routes` | 管理员会话 | 替换路由 | +| `GET` | `/admin/api/groups` | 管理员会话 | 列出分组(按权限过滤) | +| `PUT` | `/admin/api/groups` | 管理员会话 | 替换分组(仅超级管理员) | +| `GET` | `/admin/api/groups/:id/routes` | 管理员会话 | 列出某分组的路由 | +| `PUT` | `/admin/api/groups/:id/routes` | 管理员会话 | 替换某分组的路由 | +| `GET` | `/admin/api/me` | 管理员会话 | 当前会话信息 | +| `GET` | `/admin/api/logs` | 管理员会话 | 发送日志(按权限过滤) | ## 管理控制台 diff --git a/docs/zh/guide/configuration.md b/docs/zh/guide/configuration.md index f53f926..224fb6b 100644 --- a/docs/zh/guide/configuration.md +++ b/docs/zh/guide/configuration.md @@ -18,13 +18,13 @@ WebHooker 需要多个密钥才能运行。本地开发时存储在 `.dev.vars` ### 可选密钥 -| 变量 | 说明 | 默认值 | -| ------------------------- | -------------------------------------------------------------------- | ----------------------- | -| `BASE_URL` | OAuth 回调的公开 URL | `http://localhost:8787` | -| `ADMIN_USER_IDS` | 允许访问 WebUI 的 GitHub 用户 ID(或登录名),逗号分隔 | 未设置时 WebUI 关闭 | -| `DISCORD_PUBLIC_KEY` | Discord 应用的公钥(开发者门户获取),交互功能必需 | 未设置时交互返回 401 | -| `DISCORD_APPLICATION_ID` | Discord 应用 ID;省略时自动获取 | 自动获取 | -| `TELEGRAM_WEBHOOK_SECRET` | `POST /telegram/webhook` 验签密钥(X-Telegram-Bot-Api-Secret-Token) | 未设置时不校验 | +| 变量 | 说明 | 默认值 | +| --------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------- | +| `BASE_URL` | OAuth 回调的公开 URL | `http://localhost:8787` | +| `ADMIN_USER_IDS` | 允许访问 WebUI 的 GitHub 用户 ID(或登录名),逗号分隔 | 未设置时 WebUI 关闭 | +| `DISCORD_PUBLIC_KEY` | Discord 应用的公钥(开发者门户获取),交互功能必需 | 未设置时交互返回 401 | +| `DISCORD_APPLICATION_ID` | Discord 应用 ID;省略时自动获取 | 自动获取 | +| `TELEGRAM_WEBHOOK_SECRET` | `POST /telegram/webhook` 验签密钥(X-Telegram-Bot-Api-Secret-Token) | 未设置时不校验 | | `TELEGRAM_RICH_HEADER_HOST` | 外部 rich-header 服务的基础 URL;未设置时使用内置的 `GET /api/richheader` 生成 Telegram 头像卡片 | 内置 `/api/richheader` | ## Web 控制台 diff --git a/src/__tests__/formatter.test.ts b/src/__tests__/formatter.test.ts index 083545e..795f9b1 100644 --- a/src/__tests__/formatter.test.ts +++ b/src/__tests__/formatter.test.ts @@ -220,10 +220,7 @@ describe("message title spec", () => { description: "Deploy request from octocat", html_url: "https://github.com/acme/widget/deployments/1", }; - const msg = formatEvent( - route, - event("deployment", { deployment, repository: repo, sender }), - ); + const msg = formatEvent(route, event("deployment", { deployment, repository: repo, sender })); expect(msg.title).toBe("acme/widget: Deployment to `production` — created"); expect(msg.fields![0].value).toBe("🚀 created"); expect(msg.fields![1].value).toBe("production"); diff --git a/src/formatters/deployment.ts b/src/formatters/deployment.ts index bb3d699..ce419f3 100644 --- a/src/formatters/deployment.ts +++ b/src/formatters/deployment.ts @@ -63,7 +63,11 @@ export function formatDeployment( return buildMessage( { author, - title: t("events.deployment.title", { repo: repo ?? t("common.repository"), env, state: "created" }), + title: t("events.deployment.title", { + repo: repo ?? t("common.repository"), + env, + state: "created", + }), url: deployment.html_url ?? deployment.statuses_url, color: GITHUB_COLORS.deployment_pending, fields,