Commit graph

61 commits

Author SHA1 Message Date
5deff66b8d
format: remove backticks from push commit short IDs 2026-08-03 09:11:28 +08:00
e2022de4bc
refactor(push): extract commitField helper to reduce duplication 2026-08-03 09:09:56 +08:00
7ee1e5899f
feat(admin): add route reordering with up/down buttons 2026-08-03 08:40:59 +08:00
ac8b4a77b8
fix(dispatch): enforce match criteria for fallback routes 2026-08-03 08:35:47 +08:00
80cc85cd76
fix: use variation selector-16 for star emoji 2026-08-03 08:31:51 +08:00
bec48233fa
refactor(admin): narrow workflows template filter to workflow_run 2026-08-03 08:24:31 +08:00
a001efea5f
feat(admin): add route templates to editor 2026-08-03 08:16:34 +08:00
github-actions[bot]
d6c15a32cd chore: auto-fix lint & formatting [skip ci] 2026-08-02 23:31:48 +00:00
b14b9f0bde
feat: add locales and tests for workflow_job, status, ping formatters 2026-08-03 07:30:38 +08:00
4f6b5929c1
docs: document Telegram richheader avatar card 2026-08-03 07:30:33 +08:00
1fc3991332
feat: add formatters for workflow_job, status, deployment, ping 2026-08-03 07:30:29 +08:00
fc2e2c2efa
feat(telegram): send author avatar as richheader link-preview card
Serve an OG page at /api/richheader and use a small link-preview card
(avatar + author name) above the message instead of sending a photo.
2026-08-03 07:30:25 +08:00
be50d23319
refactor(admin): use target-row grid for target inputs 2026-08-03 07:30:07 +08:00
fb9550b94d
feat: support check_suite webhook events 2026-08-03 07:25:21 +08:00
github-actions[bot]
7179a35457 chore: auto-fix lint & formatting [skip ci] 2026-08-02 22:47:32 +00:00
50ae8c7607
feat(telegram): render markdown and send author avatar photo 2026-08-03 06:46:48 +08:00
github-actions[bot]
568e206643 chore: auto-fix lint & formatting [skip ci] 2026-08-02 21:19:33 +00:00
bd7a8f2632
feat: add Telegram push support with multi-target routes
Add a platform-aware route target system so a single route can forward
to several destinations at once (e.g. a Discord channel and a Telegram
group). Route.target becomes Route.targets[] with per-entry platform,
channelId/threadId for Discord and chatId/topicId for Telegram; the
legacy single-target format is normalized on load and accepted by the
admin API.

Implement the Telegram driver with HTML rendering and Bot API
sendMessage (chat_id + message_thread_id for topics, retry on 429/5xx),
plus /gh commands served over POST /telegram/webhook: login, logout,
comment, merge and close. The comment/merge/close commands resolve the
issue or PR from the replied-to notification message. OAuth binding now
stores a D1 telegram_links mapping and replies with a confirmation.

Sync the Telegram webhook from the scheduled trigger via setWebhook.
2026-08-03 05:19:05 +08:00
dcbe93be91
feat(admin): add detailed send log viewer with extended fields 2026-08-03 05:19:02 +08:00
3a6a2cbbc5
feat: migrate send logs and discord links to D1 2026-08-03 05:18:58 +08:00
github-actions[bot]
5a98e45544 chore: auto-fix lint & formatting [skip ci] 2026-08-02 19:42:35 +00:00
0af6b9a4b8
refactor: modularize into core/events/formatters/drivers 2026-08-03 03:36:36 +08:00
github-actions[bot]
7b341ff9f4 chore: auto-fix lint & formatting [skip ci] 2026-08-02 19:03:12 +00:00
d540d465d1
refactor: replace Discord Gateway DO with Interaction Endpoint 2026-08-03 03:02:42 +08:00
9bb9cb1444
feat(formatter): show queued/running status for workflow and check runs 2026-08-03 01:53:10 +08:00
809f89400b
feat: add per-group emoji toggle and standardized embed titles 2026-08-03 01:25:03 +08:00
49baf63a17
feat: add job field to workflow run notification 2026-08-03 01:19:46 +08:00
github-actions[bot]
2e4cb24c1d chore: auto-fix lint & formatting [skip ci] 2026-08-02 16:44:42 +00:00
4edd468ace
ci: add workflow to auto-fix lint and formatting 2026-08-03 00:44:01 +08:00
1fc702ceb4
docs: add filter tutorial and clarify exact matching rules 2026-08-03 00:39:52 +08:00
8c9720b1b3
docs: document admin groups, OAuth redirect, and API renames 2026-08-03 00:33:18 +08:00
8c8cfbf211
fix: remove click prevent on route toggle switch 2026-08-03 00:12:50 +08:00
38daf7bc83
feat: ignore filters on fallback routes 2026-08-03 00:02:29 +08:00
bd33fa6835
fix: harden input validation, redirect safety, and error resilience 2026-08-02 23:56:58 +08:00
d419b9c940
feat: add fallback routes and repository event enrichment 2026-08-02 23:23:07 +08:00
44b8fead78
feat: add merge/close PR buttons to Discord PR notifications 2026-08-02 23:02:37 +08:00
d40f34cc4d
fix: skip validation for unchanged admin routes 2026-08-02 22:53:36 +08:00
9e0f21c538
feat(admin): add zh/en i18n to the config console
Introduce a lightweight useI18n composable (zh default, auto-detect via
navigator.language, manual toggle persisted to localStorage) with full
zh/en dictionaries, and wire translation keys through the console UI.
2026-08-02 08:40:01 +08:00
d3c1349d00
feat(admin): group-centric console navigation and group-scoped routes API
Add GET/PUT /api/groups/:groupId/routes endpoints that filter and merge
routes by group (backend forces groupId from the path param). Rework the
console so the top level lists groups; entering a group shows and manages
only that group's routes. Drop the route-level group selector and the
now-redundant group badge on route cards.
2026-08-02 08:39:46 +08:00
62985a2f3f
feat(admin): groups management UI in the console
Add a super-admin-only Groups tab to create, edit and delete groups
(name, admin ids, owner scope). Routes now require a group via a select
in the editor, group names are shown on route cards, and the new
useMe/useGroups composables back the UI.
2026-08-02 08:16:05 +08:00
537f4cbb84
feat(admin): scope groups to specific GitHub orgs/users
Add an optional owners[] field to groups (super-admin only). When set,
only webhook events whose repository owner or organization login matches
enter that group's routes; empty owners means no restriction, keeping
existing routes backward compatible.

- types: Group.owners?, groups.ts groupAcceptsOwners()
- webhook.ts eventOwners() extracts repo owner + org login
- discord.ts dispatch skips routes whose group rejects the event owner
- admin-routes.ts validateGroups() validates owners list
2026-08-02 08:15:49 +08:00
667b8038af
feat(web): auto dark mode for terms and privacy pages
Tokenize the legal page palette into CSS variables and add a
prefers-color-scheme:dark override so /terms and /privacy follow the
device theme, matching the landing page and admin console.
2026-08-02 08:14:03 +08:00
c2b78bef69
feat(web): link landing docs button to the docs site
Point the homepage Documentation card at the hosted docs site
(https://webhooker.docs.worldexecute.me), language-aware: /zh for
Chinese and / for English. Still overridable via DOCS_URL.
2026-08-02 07:51:50 +08:00
83794c251f
feat(web): auto dark mode for admin console
Add a prefers-color-scheme dark palette to the Nuxt console so it
follows the device/OS theme automatically. Tokenize the previously
hardcoded dot-grid, sticky header, switch knob and overlay scrim so
they invert correctly, and set color-scheme: dark for native controls.
2026-08-02 07:51:46 +08:00
c3e22de4e6
fix(ci): build admin SPA during wrangler deploy
Cloudflare Workers Build runs "wrangler deploy" on a fresh checkout,
where admin/dist (a gitignored symlink) does not exist, so the deploy
failed with a missing assets.directory.

- add build.command to generate the Nuxt SPA before bundling
- point assets.directory at the real ./admin/.output/public output
  instead of the gitignored admin/dist symlink
2026-08-02 07:43:11 +08:00
81d21ffb08
feat(web): add public landing page and move console to /admin
Serve a public landing page at / with buttons to the docs, GitHub repo,
Terms, Privacy and the admin login. Relocate the Nuxt admin console from
/ to /admin so the root is no longer the private console.

- add home-routes.ts (bilingual landing, auto dark mode, configurable
  DOCS_URL / GITHUB_REPO_URL) mounted at /
- move console to admin/pages/admin.vue; redirect / and unknown SPA
  routes to /admin
- point admin login/logout redirects at /admin
2026-08-02 07:40:14 +08:00
fc243811f0
feat(admin): add group-based access scoping for routes and logs
Introduce optional route groups so non-super admins can be delegated
edit/view access to a subset of routes and their send logs.

- add Group model and Route.groupId
- add groups.ts (load/save groups, resolveScope, permission helpers)
- scope /api/routes and /api/logs by the caller's accessible groups;
  add /api/me and /api/groups (group management is super-admin only)
- require a groupId on every route in validateRoutes
- allow group admins (not just super admins) to sign in to the console
2026-08-02 07:39:35 +08:00
225d5b015e
feat(legal): serve Terms of Service and Privacy Policy pages
Add bilingual (zh/en) /terms and /privacy pages served by the Worker for
configuring the Discord application's Terms of Service and Privacy Policy
URLs. Contact line is configurable via optional LEGAL_CONTACT env var.
2026-08-02 07:12:54 +08:00
fcf3413634
fix(deps): bump @cloudflare/workers-types to v5 to match wrangler peer
wrangler@4.118 requires @cloudflare/workers-types@^5, so a fresh
`npm install` (Cloudflare Workers Build CI) failed with ERESOLVE against
the old ^4 pin. Align to ^5; typecheck, lint and tests still pass.
2026-08-02 07:06:23 +08:00
d996dbe45d
docs: align VitePress site with REST send, optional gateway and slash commands
- deployment: drop DISCORD_CHANNEL_ID, add ADMIN_USER_IDS, PKCS#8 key note,
  applications.commands invite scope, and an optional Gateway section
- getting-started: PKCS#8 .dev.vars example, remove channel ID
- introduction: REST delivery, optional DiscordGateway DO, delivery dedup,
  /admin Web UI in architecture and data flow
- index: refresh Workers feature, add Web UI & slash commands feature
2026-08-02 07:02:40 +08:00