feat(connections): set up provider webhooks automatically or by hand
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 28/100
- issue の種類
- 機能追加
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- nextjs, playwright, react, typescript
- 領域
- backend, documentation, frontend
調査の方向性
Start by reading the webhook contract from #28 and the Permission type (with access: "full" and fullAccessReason) in src/lib/adapters/types.ts, then the existing connection code under src/lib/connections/ and the connection page under src/app/. Build the adapter declaration first, then the setup panel with its two paths, and finish with the Playwright spec for a simulated provider plus an axe and keyboard pass. Done means every acceptance criterion holds, including the write-access warning shown before consent and the last delivery time announced via aria-live="polite"; also update docs/adapters.md and the provider pages. Note this depends on #28 landing first, and provider-specific create/delete calls are separate issues.
索引モデルが issue の本文から書いたものです。
説明
Context
Eddie's decision on #424 (2026-11-14): for providers where the user has to create the webhook (Resend, GitLab, Polar, Better Stack, Render), the user chooses between automatic setup and setup by hand. Where automatic setup needs write access because the platform has no read-only way to create a webhook, DevMacro says so before asking, and tells the user to set the webhook up by hand if they want DevMacro to stay read-only.
GitHub, Sentry, Vercel, and Stripe need none of this: their webhook URL is on DevMacro's own app registration (#62, #421, #422, #423).
Plan
- Adapter declaration. Using the webhook contract from #28, an adapter that needs a user-created webhook declares: whether it supports automatic setup, the extra scope automatic setup needs (none for Resend), whether the provider generates the signing secret (so the user pastes it back), and the steps for setup by hand.
- Setup panel on the connection page, shown after a provider connects and from the connection's settings later. A
fieldsetwith alegendand two radio choices, each with its explanation (copy below), then a button for the chosen path. - Automatic setup with write access. A second OAuth consent for the extra scope. The write-scoped grant replaces the stored credential for that connection, so DevMacro can delete the webhook on disconnect. The connect screen and the connection page show the scope with
access: "full"and itsfullAccessReason(Permissioninsrc/lib/adapters/types.ts), so the write access is visible for as long as it is held. - Setup by hand. Show the per-connection webhook URL and secret (copy buttons, secret shown once, regenerate to rotate), the provider's steps, and a field for the provider's signing secret where the provider generates it. Show when the last delivery arrived, so the user can see it works.
- Disconnect. Automatic: delete the webhook through the provider's API, then revoke. By hand: show the steps to remove the webhook in the provider. Either way, deliveries for a removed connection are dropped.
- Switching. Moving from automatic to by hand means disconnecting and reconnecting read-only; the panel says so. No in-place downgrade.
- Docs:
docs/adapters.md(the read-only rule now has one exception: automatic webhook setup the user opts into), and each affected provider page.
Copy
Panel heading: "Get events as they happen"
When automatic setup needs write access (shown with the provider's name):
- Set up automatically: "DevMacro asks {Provider} for write access, because {Provider} has no read-only access that can create a webhook. With write access, DevMacro's connection can change your {Provider} account, not only read it. If you want DevMacro to stay read-only, set up the webhook by hand instead."
- Set up by hand: "DevMacro stays read-only. You add the webhook in {Provider} yourself, using the address and secret below."
When automatic setup needs no new access (Resend):
- Set up automatically: "DevMacro adds a webhook to your {Provider} team, using the access you already granted. You can see it in {Provider}, and DevMacro removes it when you disconnect."
- Set up by hand: "You add the webhook in {Provider} yourself, using the address below."
Without a webhook: "Until a webhook is set up, DevMacro checks {Provider} for changes on a schedule."
Acceptance criteria
- Each provider with a user-created webhook shows both choices, with the copy above, before anything is requested or changed.
- Choosing automatic setup with write access shows the write access warning before the provider's consent screen, and the connection page shows the write access while it is held.
- Setup by hand shows the URL, the secret, the provider's steps, and the last delivery time, and never requests a new scope.
- Disconnect deletes an automatic webhook, or shows the steps to remove a manual one.
- Keyboard only: the choices, copy buttons, and actions are reachable and operable, with visible focus. The last delivery time announces through
aria-live="polite". Axe scan clean on the panel. - Playwright e2e: both paths for a simulated provider, including the write access warning.
Files and areas
src/lib/adapters/types.ts(declaration from #28),src/lib/connections/, the connection page undersrc/app/,docs/adapters.md, provider pages.- Non-goals: provider-specific create and delete calls (each provider's issue), in-place downgrade from write to read-only.
Verification
npm run lint,npm run typecheck,npm test- Playwright spec for the panel, plus the axe scan and a keyboard-only pass.
Depends on
- #28 Ingest provider webhooks (contract, route, per-connection secrets)
Branch: <issue-number>-webhook-setup-panel
Closes with a Closes #<issue-number> footer on the commit or pull request.
Model: anthropic/claude-opus-5-5 | Reasoning effort: unknown
- 主要言語
- TypeScript
- スター
- 1
- フォーク
- 1
- 平均マージ
- 6時間 56分
- マージ済み PR(30日)
- 136
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
eddiejaoude/StackDash のほかの issue
-
area: docs documentation priority: P3 size: S
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
eddiejaoude/StackDash#462 ·
メンテナーはふだん 1 日以内に返信
-
area: web bug priority: P3 size: XS
難易度 1/5 1〜3時間 初心者へのやさしさ 85/100
eddiejaoude/StackDash#432 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
area: database bug priority: P3 size: S
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
eddiejaoude/StackDash#419 ·
メンテナーはふだん 1 日以内に返信
-
area: docs bug priority: P2 size: XS
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
eddiejaoude/StackDash#418 ·
メンテナーはふだん 1 日以内に返信
-
accessibility area: timeline bug priority: P3 size: XS
難易度 2/5 1〜3時間 初心者へのやさしさ 80/100
eddiejaoude/StackDash#389 ·
メンテナーはふだん 1 日以内に返信
eddiejaoude/StackDash の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
open-webui/tether#52 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
voidzero-dev/void#835 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
AykutSarac/jsoncrack.com#616 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
melgarafael/DeskcommCRM#4679 ·
メンテナーはふだん 1 日以内に返信