Commit graph

63 commits

Author SHA1 Message Date
Virgil
f6349145bc feat(api): validate openapi client requests and responses
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 17:48:49 +00:00
Virgil
1ec5bf4062 feat(api): attach request meta to error envelopes
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 17:43:37 +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
5b59a1dd10 feat(api): prefer absolute OpenAPI servers
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 17:24:36 +00:00
Virgil
da9bb918f7 fix(api): tighten public path auth bypass matching
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:56:09 +00:00
Virgil
c6034031a3 feat(bridge): enforce additional schema constraints
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:50:29 +00:00
Virgil
bfa80e3a27 feat(api): support repeated query parameters in openapi client
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:42:09 +00:00
Virgil
b9f91811d8 feat(api): support HEAD request bodies in OpenAPI client
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:37:13 +00:00
Virgil
19838779ef feat(api): normalize CLI list arguments
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:31:22 +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
90600aa434 feat(api): expose swagger server metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 16:07:16 +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
28f9540fa8 fix(bridge): enforce tool schema enum validation
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:54:32 +00:00
Virgil
ac21992623 feat(api): enforce tool schema enums
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 15:46:35 +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
b58de8f8f0 feat(provider): expose registry spec files
Add stable registry helpers for enumerating provider OpenAPI spec files, plus iterator coverage. This gives discovery consumers a direct way to aggregate provider docs without changing routing behaviour.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:38:45 +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
684a37cd84 fix(api): return listen errors immediately
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:20:30 +00:00
Virgil
926a723d9c feat(api): add runtime OpenAPI client
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:16:10 +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
Virgil
c4cbd018ac feat(api): auto-attach request metadata
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 14:00:04 +00:00
Virgil
37b7fd21ae feat(cache): refresh request meta on cache hits
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:53:37 +00:00
Virgil
00a59947b4 feat(api): attach request metadata to responses
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:48:53 +00:00
Virgil
4efa435a47 feat(api): add MCP resource listing endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:42:29 +00:00
Virgil
2d8bb12311 fix(api): preserve request id on cache hits
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:37:38 +00:00
Virgil
825b61c113 feat(api): add request ID accessor helper
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:31:19 +00:00
Virgil
c9cf407530 feat(api): add Stoplight docs renderer
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:26:55 +00:00
Virgil
5d5ca8aa51 feat(api): validate ToolBridge output schemas
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:18:10 +00:00
Virgil
9aa7c644ef fix(api): disable non-positive timeouts
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 13:12:51 +00:00
Virgil
65ae0fca6d feat(api): drain SSE clients on shutdown
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 09:45:30 +00:00
Virgil
837a910148 feat(cache): add LRU eviction limit
Add an optional maxEntries cap to WithCache so the in-memory cache can evict old entries instead of growing without bound.\n\nCo-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 09:27:22 +00:00
Virgil
9afaed4d7c feat(api): document bearer auth in openapi
Add a bearerAuth security scheme to the generated OpenAPI document and mark non-public operations as secured, while keeping /health explicitly public.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 09:08:34 +00:00
Virgil
f030665566 feat(api): preserve path params in operationId 2026-04-01 08:11:33 +00:00
Virgil
16abc45efa feat(api): add stable openapi operation ids
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 07:36:35 +00:00
Virgil
491c9a1c69 fix(i18n): preserve matched locale tags 2026-04-01 07:22:25 +00:00
Virgil
5eaaa8a01e feat(api): add seo analysis endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 07:18:01 +00:00
Virgil
71eebc53aa feat(provider): expose proxy metadata in registry info
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 07:08:19 +00:00
Virgil
1c9e4891e7 feat(api): add spec description flag
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 07:02:28 +00:00
Virgil
6fdd769212 feat(api): add per-IP rate limiting middleware
Adds a token-bucket WithRateLimit option that rejects excess requests with 429 Too Many Requests and a standard error envelope.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:54:58 +00:00
Virgil
797c5f9571 feat(api): add entitlements endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:47:28 +00:00
Virgil
db1efd502c feat(api): add unified pixel tracking endpoint
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:41:54 +00:00
Virgil
3ead3fed2b feat(api): implement MCP resource reads
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-01 06:33:11 +00:00
Virgil
6ef194754e feat(bridge): validate tool request bodies 2026-04-01 06:23:58 +00:00