#### [Abblix\.SharedSignals](https://www.abblix.com/en/docs/api/abblix-sharedsignals 'index')
### [Abblix\.SharedSignals\.Transmitter](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter 'Abblix\.SharedSignals\.Transmitter')

## SharedSignalsTransmitterOptions Class

What a transmitter deployment decides once: its identity, its event vocabulary, and the
policies SSF 1\.0 leaves to the implementation \- how many streams a receiver may hold
\(Section 8\.1\.1\.1\), what a new stream covers by default \(Section 7\.1\), and how often
verification may be asked for \(Section 8\.1\.1\)\.

```csharp
public sealed record SharedSignalsTransmitterOptions : System.IEquatable<Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions>
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → SharedSignalsTransmitterOptions

Implements [System\.IEquatable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.iequatable-1 'System\.IEquatable\`1')[SharedSignalsTransmitterOptions](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions 'Abblix\.SharedSignals\.Transmitter\.SharedSignalsTransmitterOptions')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.iequatable-1 'System\.IEquatable\`1')
### Properties

## SharedSignalsTransmitterOptions\.AllowedReceiverAddresses Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.AllowedReceiverAddresses}

The receiver origins this deployment may deliver to whatever their address, matched by scheme, host and
port\. Empty leaves every receiver to the ordinary rules: HTTPS, and an address outside the deployment's
own network\.

```csharp
public System.Collections.Generic.IReadOnlyList<System.Uri> AllowedReceiverAddresses { get; init; }
```

#### Property Value
[System\.Collections\.Generic\.IReadOnlyList&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')[System\.Uri](https://learn.microsoft.com/en-us/dotnet/api/system.uri 'System\.Uri')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')

### Remarks
A receiver names its own delivery endpoint, so the address arrives from outside and is refused when it
points inside the network\. That refusal is wrong for exactly one deployment shape: a receiver of the
operator's own, reached at a private address\. Naming it here is how an operator says so, and it is
deliberately an origin rather than a switch, so permitting one receiver does not permit the rest\.

## SharedSignalsTransmitterOptions\.AllowMultipleStreamsPerReceiver Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.AllowMultipleStreamsPerReceiver}

Whether one receiver may hold several streams\. When false \- the default \- a second
create answers "409 Conflict", and the receiver's move is to read and update the stream
it has \(SSF 1\.0 Section 8\.1\.1\.1\)\.

```csharp
public bool AllowMultipleStreamsPerReceiver { get; init; }
```

#### Property Value
[System\.Boolean](https://learn.microsoft.com/en-us/dotnet/api/system.boolean 'System\.Boolean')

## SharedSignalsTransmitterOptions\.AudiencesFactory Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.AudiencesFactory}

Derives the "aud" of a receiver's streams from the receiver's identity\. The default
uses the identity itself: "Values that uniquely identify the Receiver to the
Transmitter MAY be used" \(SSF 1\.0 Section 4\.1\.8\)\.

```csharp
public System.Func<string,System.Collections.Generic.IReadOnlyList<string>>? AudiencesFactory { get; init; }
```

#### Property Value
[System\.Func&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.func-2 'System\.Func\`2')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[,](https://learn.microsoft.com/en-us/dotnet/api/system.func-2 'System\.Func\`2')[System\.Collections\.Generic\.IReadOnlyList&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.func-2 'System\.Func\`2')

## SharedSignalsTransmitterOptions\.AuthorizationSchemes Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.AuthorizationSchemes}

The authorization scheme descriptions the configuration metadata advertises
\(SSF 1\.0 Section 7\.1\.1\), kept as raw JSON because their shape is scheme\-specific and
authorization itself is the host's, not this package's\.

```csharp
public System.Collections.Generic.IReadOnlyList<System.Text.Json.Nodes.JsonObject>? AuthorizationSchemes { get; init; }
```

#### Property Value
[System\.Collections\.Generic\.IReadOnlyList&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')[System\.Text\.Json\.Nodes\.JsonObject](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonobject 'System\.Text\.Json\.Nodes\.JsonObject')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')

### Remarks
Three settings, and the first of them makes an assertion on the deployment's behalf\.
- Left unset, the document advertises OAuth 2.0 - the value the CAEP Interoperability
                Profile 1.0 Section 2.3.7 requires and Section 2.4.3 requires receivers to use. That is a claim
                about how this deployment authorizes its Stream Management API, made by this package because the
                profile demands it and most deployments do exactly that. A deployment authorizing by something
                else must not leave it unset.
- Set to a list, the member is that list verbatim. The host owns it, including whether the
                OAuth entry is in it, and is told once at startup if it is not.
- Set to an EMPTY list, the member is omitted entirely. That is how a deployment says it
                advertises no scheme at all, and nothing warns about it, because it is a decision rather than an
                oversight.

## SharedSignalsTransmitterOptions\.DefaultSubjectsMode Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.DefaultSubjectsMode}

What a newly created stream covers by default \(SSF 1\.0 Section 7\.1\)\. The conservative
default is [None](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.StreamSubjectsMode#Abblix.SharedSignals.Transmitter.StreamSubjectsMode.None 'Abblix\.SharedSignals\.Transmitter\.StreamSubjectsMode\.None'): nothing flows until the receiver names
its subjects, so a misconfigured stream leaks nothing\.

```csharp
public Abblix.SharedSignals.Transmitter.StreamSubjectsMode DefaultSubjectsMode { get; init; }
```

#### Property Value
[StreamSubjectsMode](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.StreamSubjectsMode 'Abblix\.SharedSignals\.Transmitter\.StreamSubjectsMode')

### Remarks
A deployment targeting the CAEP Interoperability Profile 1\.0 sets this to
[All](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.StreamSubjectsMode#Abblix.SharedSignals.Transmitter.StreamSubjectsMode.All 'Abblix\.SharedSignals\.Transmitter\.StreamSubjectsMode\.All')\. Its Section 2\.4\.4 tells a receiver to "assume that all
subjects are implicitly included in a Stream, without any Add Subject method invocations", so a
conformant receiver adds none \- and against a transmitter covering nothing by default it receives
nothing, with no error on either side to say why\. The profile binds only the receiver, so the
default is left where it is and said out loud at startup instead\.

Changing it reaches only streams created afterwards, because a stream takes its mode at creation -
which is what keeps a later change from silently re-scoping what a receiver already has. What is
left behind therefore depends on the store: the in-memory default keeps nothing across the restart
the change requires, a configured stream set writes the declared mode over every stream on the next
reconcile, and a store outliving the process keeps its streams at the mode they were created with.
The startup warning stops the moment this option changes, in all three.

## SharedSignalsTransmitterOptions\.DefaultSubjectsValue Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.DefaultSubjectsValue}

The "default\_subjects" value the mode advertises, kept beside the enum so the wire word
and the behavior cannot drift apart\.

```csharp
public string DefaultSubjectsValue { get; }
```

#### Property Value
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')

## SharedSignalsTransmitterOptions\.EventsSupported Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.EventsSupported}

The event types this transmitter can emit, advertised in each stream's
"events\_supported"; what a stream actually carries is the intersection with the
receiver's request \(SSF 1\.0 Section 8\.1\.1\)\.

```csharp
public System.Collections.Generic.IReadOnlyList<string> EventsSupported { get; init; }
```

#### Property Value
[System\.Collections\.Generic\.IReadOnlyList&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')

## SharedSignalsTransmitterOptions\.Issuer Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.Issuer}

The transmitter's issuer identifier: the "iss" of every SET and of every stream
configuration, identical to what the configuration metadata asserts
\(SSF 1\.0 Sections 7\.1, 4\.1\.6\)\.

```csharp
public string Issuer { get; init; }
```

#### Property Value
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')

## SharedSignalsTransmitterOptions\.JwksUri Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.JwksUri}

Where this transmitter publishes the JWK Set its SETs verify against, advertised as "jwks\_uri"
\(SSF 1\.0 Section 7\.1\)\. Required in practice AND on paper: that section says "This value MUST be
specified if the Transmitter intends to generate signed JWTs", and this transmitter signs every
event it sends\. Left null, no receiver can obtain a key and the deployment is told so at startup\.

```csharp
public System.Uri? JwksUri { get; init; }
```

#### Property Value
[System\.Uri](https://learn.microsoft.com/en-us/dotnet/api/system.uri 'System\.Uri')

## SharedSignalsTransmitterOptions\.MinVerificationInterval Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.MinVerificationInterval}

The least time between verification requests, advertised as
"min\_verification\_interval" and enforced with "429 Too Many Requests"
\(SSF 1\.0 Sections 8\.1\.1, 8\.1\.4\.2\); null advertises no bound and throttles nothing\.

```csharp
public System.Nullable<System.TimeSpan> MinVerificationInterval { get; init; }
```

#### Property Value
[System\.Nullable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')[System\.TimeSpan](https://learn.microsoft.com/en-us/dotnet/api/system.timespan 'System\.TimeSpan')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')

## SharedSignalsTransmitterOptions\.PollEndpointFactory Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.PollEndpointFactory}

Where the outside world reaches this transmitter's poll endpoint for a stream
\(SSF 1\.0 Section 6\.1\.2\)\. Unset takes the address the poll route was mapped on, so a host that
maps the transmitter's endpoints offers poll delivery without naming anything\.

```csharp
public System.Func<string,System.Uri>? PollEndpointFactory { get; init; }
```

#### Property Value
[System\.Func&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.func-2 'System\.Func\`2')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[,](https://learn.microsoft.com/en-us/dotnet/api/system.func-2 'System\.Func\`2')[System\.Uri](https://learn.microsoft.com/en-us/dotnet/api/system.uri 'System\.Uri')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.func-2 'System\.Func\`2')

### Remarks
Set it when the poll address is not this deployment's advertised prefix plus the poll route on the
issuer's authority \- a separate host name for delivery, say, or a path the route shape cannot
express\. A proxy that merely REWRITES paths needs nothing here: `AdvertisedPrefix` is what the
mapping declares, so the poll address follows it along with the five management addresses\. It wins
over the mapped address wherever both exist\.

It is also how a host that maps its own routes - on some other web framework, or by hand - offers
poll at all, since nothing else then knows the address. With neither source the transmitter offers
no poll delivery: the configuration document omits the method, and a create asking for poll, or
omitting delivery, which Section 8.1.1.1 reads as poll, is refused with "400 Bad Request".

## SharedSignalsTransmitterOptions\.PushDeliveryInterval Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.PushDeliveryInterval}

How often the transmitter sweeps its push streams and delivers what is queued; null leaves
the sweeping to the host\.

```csharp
public System.Nullable<System.TimeSpan> PushDeliveryInterval { get; init; }
```

#### Property Value
[System\.Nullable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')[System\.TimeSpan](https://learn.microsoft.com/en-us/dotnet/api/system.timespan 'System\.TimeSpan')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')

### Remarks
Push delivery is the transmitter reaching out, so something has to decide when\. A default
rather than an opt\-in because the alternative fails silently: every part works, none of
them is called, and a host sees streams created and events queued with nothing delivered
and nothing logged\. Null is for a host that drives passes itself \- from its own scheduler,
or one pass per business event\.

## SharedSignalsTransmitterOptions\.PushDeliveryLeaseDuration Property {#Abblix.SharedSignals.Transmitter.SharedSignalsTransmitterOptions.PushDeliveryLeaseDuration}

How long one instance's claim on a stream's delivery holds, and therefore the longest a
single pass over that stream may run\.

```csharp
public System.TimeSpan PushDeliveryLeaseDuration { get; init; }
```

#### Property Value
[System\.TimeSpan](https://learn.microsoft.com/en-us/dotnet/api/system.timespan 'System\.TimeSpan')

### Remarks
The claim keeps concurrent instances off one another's streams, and it expires because
expiry is the only release an instance that died mid\-pass can perform\. That makes this one
value two limits at once, erring in opposite directions and both of them safe: too short
cuts a legitimate pass off at the deadline and its remainder goes out on the next one, too
long parks a stream for the rest of the claim after the instance holding it dies\. The
default is comfortably longer than a pass over a responsive receiver and well short of an
outage anybody would sit through\.
