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
MockOptionsshape — 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
protocolIDs out of a loaded BowireRecording. Used bybowire mockto detect missing protocol plugins before the server boots — every step references one protocol, and replay needs the matchingIBowireProtocolimplementation 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-schemafamily of CLI flags. Each plugin handles one schema kind (OpenAPI onProtocol.Rest, protobuf FileDescriptorSet onProtocol.Grpc, GraphQL SDL onProtocol.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.