From 192f8331f2227028cd02e1f5156746cec1c3c641 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 08:48:28 +0000 Subject: [PATCH] feat(api): expose websocket and sse transport flags Co-Authored-By: Virgil --- openapi.go | 8 ++++++++ spec_builder_helper.go | 2 ++ spec_builder_helper_test.go | 12 ++++++++++++ transport.go | 4 ++++ 4 files changed, 26 insertions(+) diff --git a/openapi.go b/openapi.go index 63a9cb0..0133e35 100644 --- a/openapi.go +++ b/openapi.go @@ -29,7 +29,9 @@ type SpecBuilder struct { GraphQLPath string GraphQLPlayground bool WSPath string + WSEnabled bool SSEPath string + SSEEnabled bool TermsOfService string ContactName string ContactURL string @@ -104,9 +106,15 @@ func (sb *SpecBuilder) Build(groups []RouteGroup) ([]byte, error) { if wsPath := strings.TrimSpace(sb.WSPath); wsPath != "" { spec["x-ws-path"] = normaliseOpenAPIPath(wsPath) } + if sb.WSEnabled { + spec["x-ws-enabled"] = true + } if ssePath := strings.TrimSpace(sb.SSEPath); ssePath != "" { spec["x-sse-path"] = normaliseOpenAPIPath(ssePath) } + if sb.SSEEnabled { + spec["x-sse-enabled"] = true + } if sb.PprofEnabled { spec["x-pprof-enabled"] = true } diff --git a/spec_builder_helper.go b/spec_builder_helper.go index 74004a9..1801047 100644 --- a/spec_builder_helper.go +++ b/spec_builder_helper.go @@ -68,7 +68,9 @@ func (e *Engine) OpenAPISpecBuilder() *SpecBuilder { builder.GraphQLPath = transport.GraphQLPath builder.GraphQLPlayground = transport.GraphQLPlayground builder.WSPath = transport.WSPath + builder.WSEnabled = transport.WSEnabled builder.SSEPath = transport.SSEPath + builder.SSEEnabled = transport.SSEEnabled builder.PprofEnabled = transport.PprofEnabled builder.ExpvarEnabled = transport.ExpvarEnabled diff --git a/spec_builder_helper_test.go b/spec_builder_helper_test.go index 11be95e..3155742 100644 --- a/spec_builder_helper_test.go +++ b/spec_builder_helper_test.go @@ -84,9 +84,15 @@ func TestEngine_Good_OpenAPISpecBuilderCarriesEngineMetadata(t *testing.T) { if got := spec["x-ws-path"]; got != "/socket" { t.Fatalf("expected x-ws-path=/socket, got %v", got) } + if got := spec["x-ws-enabled"]; got != true { + t.Fatalf("expected x-ws-enabled=true, got %v", got) + } if got := spec["x-sse-path"]; got != "/events" { t.Fatalf("expected x-sse-path=/events, got %v", got) } + if got := spec["x-sse-enabled"]; got != true { + t.Fatalf("expected x-sse-enabled=true, got %v", got) + } if got := spec["x-pprof-enabled"]; got != true { t.Fatalf("expected x-pprof-enabled=true, got %v", got) } @@ -314,9 +320,15 @@ func TestEngine_Good_TransportConfigCarriesEngineMetadata(t *testing.T) { if !cfg.GraphQLPlayground { t.Fatal("expected GraphQL playground to be enabled") } + if !cfg.WSEnabled { + t.Fatal("expected WebSocket to be enabled") + } if cfg.WSPath != "/socket" { t.Fatalf("expected ws path /socket, got %q", cfg.WSPath) } + if !cfg.SSEEnabled { + t.Fatal("expected SSE to be enabled") + } if cfg.SSEPath != "/events" { t.Fatalf("expected sse path /events, got %q", cfg.SSEPath) } diff --git a/transport.go b/transport.go index 1da11ad..1ff2ea5 100644 --- a/transport.go +++ b/transport.go @@ -18,7 +18,9 @@ type TransportConfig struct { GraphQLPath string GraphQLEnabled bool GraphQLPlayground bool + WSEnabled bool WSPath string + SSEEnabled bool SSEPath string PprofEnabled bool ExpvarEnabled bool @@ -41,6 +43,8 @@ func (e *Engine) TransportConfig() TransportConfig { SwaggerEnabled: e.swaggerEnabled, GraphQLEnabled: e.graphql != nil, GraphQLPlayground: e.graphql != nil && e.graphql.playground, + WSEnabled: e.wsHandler != nil, + SSEEnabled: e.sseBroker != nil, PprofEnabled: e.pprofEnabled, ExpvarEnabled: e.expvarEnabled, }