Namespace Kuestenlogik.Bowire.Mocking

Classes

BowireRecording

One named recording — an ordered sequence of captured invocations produced by the Bowire UI's recorder and later replayed by the mock server.

BowireRecordingFrame

One frame inside a streaming or duplex recording step — carries the frame payload plus the timestamp offset from the stream start, so streaming replay can pace emission at the original cadence.

BowireRecordingSchemaAnnotation

One effective annotation snapshot inside a BowireRecordingSchemaSnapshot. Matches the four-dimensional addressing the frame-semantics framework uses, plus the resolved Semantic string the workbench uses to pick a widget.

BowireRecordingSchemaSnapshot

Sidecar carried at the top of a Phase-5+ recording file — the set of effective annotations the workbench had resolved for the recorded service+method pairs at record-time. The mock and the recording-replay path use it to mount the same widgets the original session showed, independent of the local annotation store's current state.

BowireRecordingStep

One captured invocation inside a BowireRecording. Mirrors the payload emitted by captureRecordingStep() in the Bowire UI's recording.js.

BowireRecordingStore

On-disk shape of ~/.bowire/recordings.json — a container for one or more BowireRecording instances. The mock server accepts both this wrapper ("full store" file) and a single BowireRecording at the top level (single-scenario file).

MissingPluginDetector

Diff a recording's protocol IDs against the protocols actually registered in BowireProtocolRegistry. Anything the recording references but the host doesn't know about is returned as a MissingPlugin with a suggested NuGet install line.

MockEmitterOptions

The subset of mock-server configuration that IBowireMockEmitter implementations actually consume. Kept deliberately small so plugin authors don't have to take a compile-time dependency on the full MockOptions shape — which carries server-only concerns (matchers, chaos injection, stateful-cursor bookkeeping) that don't apply to emitters.

MockTransportContext

Run-time context handed to every IBowireMockTransportHost at startup — host bind address, requested port, and the playback knobs (replay speed, loop) that affect proactive emission inside the transport. Per-transport-id; the mock server constructs a separate instance for each registered host.

RecordedInterpretation

One captured interpretation inside a BowireRecordingStep — the addressing path the parent-grouping uses, the resolved Kind (the SemanticTag value), and the type-specific payload inlined as a free-form JsonElement so the replay viewer doesn't have to re-resolve from the raw frame.

RecordingInterpretationBuilder

Phase-5 helper that resolves the effective frame-semantics annotations for a single (service, method) pair against a captured frame and produces the list of RecordedInterpretation entries that land on the recording step. Lives in the Kuestenlogik.Bowire.Mocking namespace because the recording-file shape is owned here, but the logic is disk-I/O-free — pure transformation against an in-memory IAnnotationStore.

RecordingProtocolScanner

Pulls the distinct protocol IDs out of a loaded BowireRecording. Used by bowire mock to detect missing protocol plugins before the server boots — every step references one protocol, and replay needs the matching IBowireProtocol implementation registered in the host.

RecordingReplayInterpretationResolver

Phase-5 replay-determinism shim. Given a recording step (either the top-level BowireRecordingStep or one of its BowireRecordingFrame children) plus the frame about to be emitted, decide whether to short-circuit detection with the captured RecordedInterpretation list or fall back to the live IFrameProber + builder pass.

RecordingSchemaSnapshotBuilder

Phase-5 helper that captures the effective annotation set into a BowireRecordingSchemaSnapshot sidecar at the top of a recording file. The sidecar is what the workbench uses to mount widgets when a recording is opened — so a recording made against one user's annotations renders identically for another user whose local annotations differ.

Interfaces

IBowireMockEmitter

Extension point for protocol plugins that need to contribute broadcast-style replay behaviour to the mock server — protocols whose wire model is "server pushes on its own schedule" rather than "client makes a request". MQTT and DIS are the reference implementations (the MQTT emitter is built into the mock server; DIS lives in its own plugin).

IBowireMockHostingExtension

Plugin-contributed hosting extension for the Bowire mock server. Lets a protocol plugin participate in the Kestrel pipeline setup (force HTTP/2, register DI services, map endpoints) based on the loaded recording — without baking protocol-specific knowledge into Kuestenlogik.Bowire.Mock.

IBowireMockLiveSchemaHandler

Optional companion to IBowireMockSchemaSource for schema kinds whose responses can't be pre-baked into a recording (GraphQL is the canonical case — every selection set yields a different response shape, so the mock has to interpret each request as it arrives).

IBowireMockSchemaSource

Plugin-contributed schema-to-recording converter for the Bowire mock server's --schema / --grpc-schema / --graphql-schema family of CLI flags. Each plugin handles one schema kind (OpenAPI on Protocol.Rest, protobuf FileDescriptorSet on Protocol.Grpc, GraphQL SDL on Protocol.GraphQL) and returns a synthesised BowireRecording the standard replay pipeline can serve from.

IBowireMockTransportHost

Plugin-contributed transport host that the Bowire mock server starts alongside its main HTTP listener — for protocols that need their own listener on a separate port (MQTT-broker today, AMQP / DDS / NNG / raw-socket later). Plugins implement this in their own assembly so the heavy transport library (e.g. MQTTnet) hangs only on the protocol-plugin package, not on Kuestenlogik.Bowire.Mock.