021d955a
feat(cmd,graph): wire /query onto core-go's server for webhooks (Phase 5a)
The faithful runtime wiring. /query moves from spec's anon-router handler onto core-go's authenticated router, so the webhook engine gets the auth/database/server context it requires. - cmd: build the executable schema via graph.NewSchema and hand it to both webhooks.NewQueue and server.WithSchema (one schema, both). The server is coreserver.New().WithDefaultMiddleware() (core-go auth + database + server context + the delivery worker via WithQueues). web, MCP and REST stay on the anon router with spec's own authn — only /query changes. The owner "user" row is seeded at startup so core-go's LookupUser stays local. - ownerOnly middleware on /query: 403s any non-owner (core-go auth admits any meta user; spec is single-owner) and remaps the owner to AUTH_INTERNAL so the webhook engine's NewAuthConfig/FilterWebhooks (which refuse AUTH_COOKIE) accept them. - graph: NewSchema exposes the raw executable schema; the webhook resolver ACL now requires AUTH_INTERNAL (only the owner gets it, via ownerOnly) instead of spec's authn, which is no longer in the /query chain. Accepted trade-off: agents lose GraphQL /query reads (they keep MCP + REST). New deploy requirement: WithDefaultMiddleware needs [mail] smtp-from (core-go's notification queue). Verified against a live daemon on Postgres: owner cookie creates and lists webhooks (row stored INTERNAL/user_id 1); non-owner 403; unauth 401; web UI 200 on the anon router.
Eugene Blikh <bigbes@gmail.com> — 2026-07-24 09:37:28 UTC
Commit 021d955ae1dc960cf26517ebd5fe7e5f7c917336 —
view raw patch
Parent(s):
8374a1ef
| File | Status | + | − |
|---|---|---|---|
.up/phase5a-webhooks.md
|
M | +27 | -1 |
cmd/specsrht/main.go
|
M | +76 | -16 |
graph/schema.resolvers.go
|
M | +20 | -9 |
graph/server.go
|
M | +19 | -6 |