Class BowireRecording

Namespace
Kuestenlogik.Bowire.Mocking
Assembly
Kuestenlogik.Bowire.dll

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

public sealed class BowireRecording
Inheritance
BowireRecording
Inherited Members

Constructors

BowireRecording()

public BowireRecording()

Properties

Attack

When true, this recording is a security-test probe (a "vulnerability template" in the docs/architecture/security-testing.md ADR), not a captured fixture. The bowire scan subcommand picks these up; the mock-server replay path explicitly skips them so an attack template never accidentally serves traffic. Optional; default false preserves backwards-compat with every pre-v1.4 recording.

[JsonPropertyName("attack")]
public bool Attack { get; set; }

Property Value

bool

CreatedAt

[JsonPropertyName("createdAt")]
public long CreatedAt { get; set; }

Property Value

long

Description

[JsonPropertyName("description")]
public string Description { get; set; }

Property Value

string

Id

[JsonPropertyName("id")]
public string Id { get; set; }

Property Value

string

Name

[JsonPropertyName("name")]
public string Name { get; set; }

Property Value

string

RecordingFormatVersion

Format version the recording was written with. The mock-server loader refuses any version it wasn't built for.

[JsonPropertyName("recordingFormatVersion")]
public int? RecordingFormatVersion { get; set; }

Property Value

int?

SchemaSnapshot

Frozen snapshot of the effective frame-semantics annotations active at record-time — populated by Phase-5 captures so a replayed recording mounts the same widgets the original session showed, even if the local annotation store has drifted since. Optional: recordings made before Phase 5 leave this null and the workbench falls back to the live annotation store on load (same behaviour as pre-v1.3).

[JsonPropertyName("schemaSnapshot")]
public BowireRecordingSchemaSnapshot? SchemaSnapshot { get; set; }

Property Value

BowireRecordingSchemaSnapshot

SourceSchema

Original-schema sidecar — when set, the recording carries the source schema (OpenAPI YAML for REST, AsyncAPI YAML for messaging, &c) that the live target advertised at capture time, plus the format tag the mock host needs to expose it under the right MIME type. Lets IBowireMockHostingExtensions serve the original contract back from the mock — so a peer Bowire discovery against the mock returns the full declared surface, not just the (smaller) set of methods this recording happens to replay. Use the step list to compute coverage; the recording reports the contract, the steps report the realised slice.

[JsonPropertyName("sourceSchema")]
public RecordingSourceSchema? SourceSchema { get; set; }

Property Value

RecordingSourceSchema

Remarks

gRPC keeps its descriptor-set on each SchemaDescriptor because reflection wraps a binary FileDescriptorSet per service; this field carries a recording-wide text document for the protocols whose source schema is a single file (OpenAPI, AsyncAPI, GraphQL SDL, WSDL).

Steps

[JsonPropertyName("steps")]
public IList<BowireRecordingStep> Steps { get; init; }

Property Value

IList<BowireRecordingStep>

Vulnerability

Identifying + classification metadata for the vulnerability the template probes for. Required when Attack is true, ignored otherwise.

[JsonPropertyName("vulnerability")]
public AttackVulnerability? Vulnerability { get; set; }

Property Value

AttackVulnerability

VulnerableWhen

Predicate-tree that, when matched against the response of the probe (the recording's first step), identifies the target as vulnerable. Required when Attack is true.

[JsonPropertyName("vulnerableWhen")]
public AttackPredicate? VulnerableWhen { get; set; }

Property Value

AttackPredicate