Namespace Kuestenlogik.Bowire

Classes

BowireEndpointRouteBuilderExtensions

ASP.NET routing extensions for mounting the Bowire multi-protocol API workbench onto an IEndpointRouteBuilder.

BowireOptions

Runtime configuration for a Bowire instance.

BowirePluginSetting

Describes a single setting that a protocol plugin contributes to the Bowire Settings dialog. The UI renders a control (toggle, text, number, select) based on the Type and persists the value in localStorage under bowire_plugin_{pluginId}_{Key}.

BowirePluginSettingOption

Option entry for a "select" type plugin setting.

BowireProtocolRegistry

Registry of discovered protocol plugins. Scans loaded assemblies for IBowireProtocol implementations.

BowireServerUrl

Parses Bowire's optional hint@url form for server URLs. A plugin hint tells the discovery + invoke endpoints which protocol plugin to consult — without one Bowire still probes every plugin in turn, which is fine in practice but slow when one of them needs a long network round-trip to discover that the URL isn't theirs (e.g. the gRPC plugin opens an HTTP/2 channel against an HTTP/1.1 GraphQL server and waits for the handshake to time out).

Examples:

  • grpc@https://api.example.com:443 → hint=grpc, url=https://api.example.com:443
  • signalr@https://api.example.com/hubs/chat → hint=signalr, url=https://api.example.com/hubs/chat
  • https://alice:pwd@host.com → no hint, url stays intact (the @ is URI userinfo)
  • https://api.example.com → no hint, url stays intact
  • udp://239.0.13.37:8137 → no hint, the URL scheme itself already routes the plugin
BowireServiceCollectionExtensions

DI-container extensions that wire Bowire and its installed protocol plugins into an ASP.NET application.

InvokeResult

Result of a protocol invocation (unary or client-streaming).

OpenApiUploadStore

In-memory store for OpenAPI / Swagger documents uploaded via the UI. The REST plugin reads from this store during discovery and merges the parsed services with whatever it finds via embedded discovery or URL fetching.

The store keeps raw document text only — parsing happens in the REST plugin because Kuestenlogik.Bowire core can't take a dependency on the OpenAPI reader package without dragging it into every host that uses Bowire.

ProtoSource

Source for proto file definitions. Used to provide service schemas when gRPC Server Reflection is not available.

StreamFrame

One frame yielded by a server-streaming call that exposes wire bytes. Json is the display / recording form; Binary is what the mock server replays on the wire.

UploadedDoc

A single uploaded OpenAPI/Swagger document with its raw content.

Interfaces

IBowireChannel

Interactive bidirectional channel for duplex/client-streaming protocols.

IBowireProtocol

Protocol plugin for Bowire. Implement this to add support for a new protocol. Discovered automatically via assembly scanning.

IBowireProtocolServices

Optional extension of IBowireProtocol that allows a protocol plugin to register required services and map discovery endpoints automatically.

When a user calls builder.Services.AddBowire(), Bowire scans loaded assemblies for IBowireProtocol implementations that also implement this interface and calls ConfigureServices(IServiceCollection) on each one. Similarly, app.MapBowire() calls MapDiscoveryEndpoints(IEndpointRouteBuilder).

This eliminates the need for protocol-specific boilerplate. For example, the gRPC plugin uses this to call AddGrpcReflection() and MapGrpcReflectionService() automatically — but only when the gRPC protocol package is actually referenced.

IBowireStreamingWithWireBytes

Optional extension for IBowireProtocol implementations that can expose the raw wire bytes of each server-streamed frame alongside the JSON rendering. Implemented by protocol plugins whose wire format is binary and distinct from their JSON representation (gRPC today); the JSON-only InvokeStreamAsync(string, string, string, List<string>, bool, Dictionary<string, string>?, CancellationToken) stays the default path for everyone else.

IInlineHttpInvoker

Optional capability surface for protocol plugins that can dispatch a generic BowireMethodInfo as an HTTP request — i.e. plugins that know how to bucket fields by their Source (path / query / header / body), substitute path placeholders, build a request body, and parse the response.

The REST plugin implements this so that the gRPC plugin's HTTP-transcoding discovery (which produces BowireMethodInfo instances with HttpMethod + HttpPath set) can be invoked over HTTP without core taking on any HTTP-specific dependencies. If a Bowire build doesn't include the REST plugin, FindHttpInvoker() returns null and the /api/invoke endpoint refuses HTTP transcoding requests with a clear error.

IInlineSseSubscriber

Optional capability surface for protocol plugins that can subscribe to a remote Server-Sent Events stream and yield each event as it arrives.

The SSE plugin implements this so that other plugins (MCP for server-side notifications, GraphQL for the graphql-sse subscription transport) can reuse the SSE event-stream parser without taking a hard dependency on Kuestenlogik.Bowire.Protocol.Sse at compile time. If the SSE plugin isn't loaded, FindSseSubscriber() returns null and the consuming plugin should fall back to a clear "install the SSE plugin" error.

IInlineWebSocketChannel

Optional capability surface for protocol plugins that can open a raw WebSocket channel — used by plugins that need to ride on top of a WebSocket transport (e.g. the GraphQL plugin's graphql-transport-ws subscription support) without taking a compile-time dependency on Kuestenlogik.Bowire.Protocol.WebSocket.

Implementers should honour the subProtocols parameter by passing it to ClientWebSocket.Options.AddSubProtocol(...) before the handshake — that's how WebSocket sub-protocols like graphql-transport-ws are negotiated. Headers go on the upgrade request via SetRequestHeader so the existing auth-helper pipeline keeps working unchanged.

Enums

BowireMode

Bowire UI operating mode — chooses between in-process discovery (embedded) and user-driven URL entry (standalone).

BowireTheme

Initial colour theme for the Bowire UI. Users can always override this from the theme toggle in the header; the selected theme is persisted per browser in localStorage.