Quick Task 260416-eht: Implement SSE Streaming Support
What Was Done#
Added Server-Sent Events (SSE) streaming support across all 5 sebuf protoc generators, enabling real-time streaming HTTP APIs from protobuf definitions.
Changes#
- Proto annotation (
proto/sebuf/http/annotations.proto): Addedbool stream = 3toHttpConfigmessage, regenerated Go proto code - Shared annotations (
internal/annotations/http_config.go): AddedStream boolfield toHTTPConfigstruct, populated from proto - Go HTTP server (
internal/httpgen/generator.go): AddedSSESenderinterface,sseSenderstruct, andSSEHandler[Req]generic handler withtext/event-streamheaders,http.Flushersupport, and request binding (path params, query params, body, validation) - Go HTTP client (
internal/clientgen/generator.go): AddedEventStream[T]generic type withNext(T) bool/Err()/Close()followingbufio.Scannerpattern, and SSE-specific method generation - TS client (
internal/tsclientgen/generator.go): Addedasync *method()returningAsyncGenerator<T>withReadableStreamSSE parsing - TS server (
internal/tsservergen/generator.go): Added SSE route generation where handler returnsReadableStream<T>, route wraps into SSE-formattedResponse - OpenAPI (
internal/openapiv3/generator.go): Addedtext/event-streamcontent type withx-sse-event-schemavendor extension for SSE operations
Test Coverage#
- SSE test proto covers: standard unary RPC + SSE streaming + SSE with path params + SSE with query params (all in same service)
- Golden tests pass for all 5 generators (14 test cases each for tsclientgen/tsservergen, 9+ for others)
- Non-SSE methods verified unchanged across all generators
- All 8 test packages pass, 0 lint issues
Outcome#
SSE streaming is now a first-class feature in sebuf. Users can annotate RPCs with stream: true on sebuf.http.config to generate streaming endpoints across all supported languages and documentation formats.
