Commit graph

55 commits

Author SHA1 Message Date
Virgil
e8d54797bf feat(openapi): include graphql tag for playground default path
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 03:04:55 +00:00
Virgil
85d6f6dd6e feat(openapi): default graphql path for playground specs
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 03:00:51 +00:00
Virgil
f53617c507 feat(openapi): document sunsetted operations as gone
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 02:56:13 +00:00
Virgil
006a065ea0 feat(openapi): document WebSocket endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 02:33:31 +00:00
Virgil
273bc3d70a feat(openapi): document GraphQL playground endpoint
Adds GraphQL Playground coverage to the generated OpenAPI spec when the GraphQL playground option is enabled, and wires the engine metadata through so runtime docs match the mounted route.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 02:29:20 +00:00
Virgil
86c2150a21 feat(openapi): document SSE endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 01:44:49 +00:00
Virgil
02082db8f4 fix(openapi): document graphql cache headers
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 01:40:05 +00:00
Virgil
08a2d93776 fix(openapi): fall back to Describe for nil iterators
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 01:27:40 +00:00
Virgil
e23d8e9780 feat(openapi): sort generated tags deterministically
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 00:47:51 +00:00
Virgil
812400f303 feat(openapi): keep empty describable group tags
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 00:39:04 +00:00
Virgil
0bb07f43f0 feat(openapi): hide undocumented routes
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 00:35:17 +00:00
Virgil
68bf8dcaf8 feat(openapi): document GraphQL endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 00:17:26 +00:00
Virgil
47e8c8a795 feat(openapi): document route headers on all responses
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 23:21:56 +00:00
Virgil
eb7e1e51cb feat(openapi): reuse deprecation header components 2026-04-01 23:12:40 +00:00
Virgil
29324b0a0b feat(api): add sunset deprecation middleware
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 23:02:52 +00:00
Virgil
ccfbe57faf feat(openapi): document response headers 2026-04-01 22:42:13 +00:00
Virgil
b2116cc896 feat(openapi): omit auth errors on public routes
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 21:46:06 +00:00
Virgil
f62933f570 feat(openapi): document example-only request bodies
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 21:12:14 +00:00
Virgil
b0adb53dec fix(openapi): snapshot describable groups once
Prepare route descriptions once per group before building paths and tags so iterator-backed DescribeIter implementations are consumed safely and deterministically.

Adds a regression test covering a one-shot iterator-backed group.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 21:07:04 +00:00
Virgil
eceda4e5c1 feat(openapi): support iterator-backed route descriptions
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:55:33 +00:00
Virgil
7e4d8eb179 feat(openapi): add route examples to spec
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:51:02 +00:00
Virgil
bb7d88f3ce feat(openapi): add external docs metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:47:38 +00:00
Virgil
4d7f3a9f99 feat(openapi): add terms of service metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:44:01 +00:00
Virgil
071de51bb5 feat(openapi): mark deprecated operations in spec
Expose route-level deprecation in generated OpenAPI operations and cover it with a regression test.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:40:53 +00:00
Virgil
a589d3bac6 feat(api): add OpenAPI contact metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:35:08 +00:00
Virgil
d3737974ce feat(openapi): add info license metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:21:06 +00:00
Virgil
cd4e24d15f feat(api): document custom success statuses 2026-04-01 20:04:34 +00:00
Virgil
6017ac7132 feat(api): collapse equivalent OpenAPI servers
Normalise server metadata so trailing-slash variants deduplicate to a single entry.

Adds a regression test covering both absolute and relative server URLs.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 20:01:34 +00:00
Virgil
6034579c00 feat(openapi): fall back to group tags
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 19:57:10 +00:00
Virgil
408a709a43 feat(openapi): allow route-level security overrides
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 19:54:13 +00:00
Virgil
7c3e8e7ba6 feat(openapi): support gin-style path params
Normalise Gin colon and wildcard route segments into OpenAPI template parameters so documented paths match the framework's route syntax.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 19:46:07 +00:00
Virgil
13cc93f4f4 fix(openapi): skip blank tags in generated specs
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 19:35:36 +00:00
Virgil
3f010b855e feat(api): declare explicit OpenAPI tags 2026-04-01 19:27:04 +00:00
Virgil
ea94081231 feat(api): normalise OpenAPI path joins
Normalise the concatenation of BasePath() and RouteDescription paths so trailing or missing slashes do not produce malformed OpenAPI entries.

Add a regression test for mixed slash formatting.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 19:21:46 +00:00
Virgil
0ed72c4952 feat(api): document explicit route parameters
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 19:12:51 +00:00
Virgil
edb1cf0c1e feat(openapi): document path parameters
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 18:25:00 +00:00
Virgil
164a1d4f0e feat(api): document cache hits in OpenAPI
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 17:52:14 +00:00
Virgil
c48effb6b7 feat(api): normalise OpenAPI server metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 17:31:45 +00:00
Virgil
1cc0f2fd48 feat(api): standardise panic responses
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:25:45 +00:00
Virgil
ac59d284b1 feat(api): document rate limit headers on all responses
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:18:10 +00:00
Virgil
3b92eda93a feat(api): add shared response envelope schema
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:12:50 +00:00
Virgil
e713fb9f56 feat(api): emit rate limit headers on success and reject
Adds X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset to successful responses and 429 rejections, and documents the headers in OpenAPI.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:01:09 +00:00
Virgil
4420651fcf feat(api): document request ID response headers
Add X-Request-ID to the generated OpenAPI response headers so the spec matches the runtime contract for request ID propagation.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:39:38 +00:00
Virgil
1bb2f68b3f feat(api): document rate limit response headers
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:32:01 +00:00
Virgil
fd09309ce9 feat(api): document rate limit and timeout responses
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:26:17 +00:00
Virgil
726938f04a feat(api): add auth responses to openapi
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:18:25 +00:00
Virgil
321ced1a36 feat(api): add OpenAPI server metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:13:39 +00:00
Virgil
4bc132f101 feat(api): fall back to group tags in openapi
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:46:15 +00:00
Virgil
90e237ae31 feat(api): include HEAD request bodies in OpenAPI
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:29:30 +00:00
Virgil
fb6812df09 feat(api): emit request bodies for non-GET operations
Keep OpenAPI requestBody generation aligned with the RouteDescription contract by allowing non-GET operations, including DELETE, to declare JSON bodies.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:04:04 +00:00