#### [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')

## IEventOutbox Interface

Where minted SETs wait for delivery, one queue per stream \- and a stream is the PAIR of a
receiver and an identifier, the same key [IStreamStore](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.IStreamStore 'Abblix\.SharedSignals\.Transmitter\.IStreamStore') uses\. Keying on the
identifier alone is not a shortcut but a different model: two receivers naming their streams
alike then share one queue, each is handed the other's SETs, and whichever acknowledges first
destroys events the other never saw\. The queue IS the holding the
status rules speak of: a paused stream's events stay here because nothing drains them
\(SSF 1\.0 Section 8\.1\.2\.1\), a poll delivery reads and re\-reads here until acknowledged
\(RFC 8936 Section 2\.4\), and a push delivery removes an item only once the receiver's 202
earned it\. Order is enqueue order, which is what keeps same\-principal events in generation
order across a pause\.

```csharp
public interface IEventOutbox
```

Derived  
↳ [DistributedCacheEventOutbox](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.DistributedCacheEventOutbox 'Abblix\.SharedSignals\.Transmitter\.DistributedCacheEventOutbox')  
↳ [InMemoryEventOutbox](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.InMemoryEventOutbox 'Abblix\.SharedSignals\.Transmitter\.InMemoryEventOutbox')
### Methods

## IEventOutbox\.AcknowledgeAsync\(string, string, IReadOnlyCollection\<string\>, CancellationToken\) Method {#Abblix.SharedSignals.Transmitter.IEventOutbox.AcknowledgeAsync(string,string,System.Collections.Generic.IReadOnlyCollection_string_,System.Threading.CancellationToken)}

Removes acknowledged SETs from a stream's queue, releasing the transmitter from
retaining them \(RFC 8936 Section 2\.2\)\. Identifiers with nothing to match are ignored \-
an acknowledgement can only arrive for something that was once here\.

```csharp
System.Threading.Tasks.Task AcknowledgeAsync(string receiverId, string streamId, System.Collections.Generic.IReadOnlyCollection<string> jwtIds, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `receiverId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.AcknowledgeAsync(string,string,System.Collections.Generic.IReadOnlyCollection_string_,System.Threading.CancellationToken).receiverId}

The receiver the stream belongs to\.

###### `streamId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.AcknowledgeAsync(string,string,System.Collections.Generic.IReadOnlyCollection_string_,System.Threading.CancellationToken).streamId}

The stream whose queue is acknowledged\.

###### `jwtIds` [System\.Collections\.Generic\.IReadOnlyCollection&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlycollection-1 'System\.Collections\.Generic\.IReadOnlyCollection\`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.ireadonlycollection-1 'System\.Collections\.Generic\.IReadOnlyCollection\`1') {#Abblix.SharedSignals.Transmitter.IEventOutbox.AcknowledgeAsync(string,string,System.Collections.Generic.IReadOnlyCollection_string_,System.Threading.CancellationToken).jwtIds}

The "jti" values being acknowledged\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SharedSignals.Transmitter.IEventOutbox.AcknowledgeAsync(string,string,System.Collections.Generic.IReadOnlyCollection_string_,System.Threading.CancellationToken).cancellationToken}

Cancels I/O a durable implementation performs\.

#### Returns
[System\.Threading\.Tasks\.Task](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task 'System\.Threading\.Tasks\.Task')

## IEventOutbox\.ClearAsync\(string, string, CancellationToken\) Method {#Abblix.SharedSignals.Transmitter.IEventOutbox.ClearAsync(string,string,System.Threading.CancellationToken)}

Drops a stream's whole queue \- the companion of deleting or disabling the stream, whose
events are not held for later \(SSF 1\.0 Sections 8\.1\.1\.5, 8\.1\.2\.1\)\.

```csharp
System.Threading.Tasks.Task ClearAsync(string receiverId, string streamId, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `receiverId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.ClearAsync(string,string,System.Threading.CancellationToken).receiverId}

The receiver the stream belongs to\.

###### `streamId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.ClearAsync(string,string,System.Threading.CancellationToken).streamId}

The stream whose queue is dropped\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SharedSignals.Transmitter.IEventOutbox.ClearAsync(string,string,System.Threading.CancellationToken).cancellationToken}

Cancels I/O a durable implementation performs\.

#### Returns
[System\.Threading\.Tasks\.Task](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task 'System\.Threading\.Tasks\.Task')

## IEventOutbox\.EnqueueAsync\(string, string, OutboxItem, CancellationToken\) Method {#Abblix.SharedSignals.Transmitter.IEventOutbox.EnqueueAsync(string,string,Abblix.SharedSignals.Transmitter.OutboxItem,System.Threading.CancellationToken)}

Appends a SET to a stream's queue\.

```csharp
System.Threading.Tasks.Task EnqueueAsync(string receiverId, string streamId, Abblix.SharedSignals.Transmitter.OutboxItem item, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `receiverId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.EnqueueAsync(string,string,Abblix.SharedSignals.Transmitter.OutboxItem,System.Threading.CancellationToken).receiverId}

The receiver the stream belongs to\.

###### `streamId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.EnqueueAsync(string,string,Abblix.SharedSignals.Transmitter.OutboxItem,System.Threading.CancellationToken).streamId}

The stream the SET was minted for\.

###### `item` [OutboxItem](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.OutboxItem 'Abblix\.SharedSignals\.Transmitter\.OutboxItem') {#Abblix.SharedSignals.Transmitter.IEventOutbox.EnqueueAsync(string,string,Abblix.SharedSignals.Transmitter.OutboxItem,System.Threading.CancellationToken).item}

The minted SET\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SharedSignals.Transmitter.IEventOutbox.EnqueueAsync(string,string,Abblix.SharedSignals.Transmitter.OutboxItem,System.Threading.CancellationToken).cancellationToken}

Cancels I/O a durable implementation performs\.

#### Returns
[System\.Threading\.Tasks\.Task](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task 'System\.Threading\.Tasks\.Task')

## IEventOutbox\.PendingAsync\(string, string, Nullable\<int\>, CancellationToken\) Method {#Abblix.SharedSignals.Transmitter.IEventOutbox.PendingAsync(string,string,System.Nullable_int_,System.Threading.CancellationToken)}

Reads the unacknowledged head of a stream's queue, oldest first, without removing
anything \- redelivery of the unacknowledged is the delivery protocols' own semantics\.

```csharp
System.Threading.Tasks.Task<System.Collections.Generic.IReadOnlyList<Abblix.SharedSignals.Transmitter.OutboxItem>> PendingAsync(string receiverId, string streamId, System.Nullable<int> maxCount=null, System.Threading.CancellationToken cancellationToken=default(System.Threading.CancellationToken));
```
#### Parameters

###### `receiverId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.PendingAsync(string,string,System.Nullable_int_,System.Threading.CancellationToken).receiverId}

The receiver the stream belongs to\.

###### `streamId` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SharedSignals.Transmitter.IEventOutbox.PendingAsync(string,string,System.Nullable_int_,System.Threading.CancellationToken).streamId}

The stream whose queue is read\.

###### `maxCount` [System\.Nullable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')[System\.Int32](https://learn.microsoft.com/en-us/dotnet/api/system.int32 'System\.Int32')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1') {#Abblix.SharedSignals.Transmitter.IEventOutbox.PendingAsync(string,string,System.Nullable_int_,System.Threading.CancellationToken).maxCount}

The most items to return; null returns everything pending, mirroring an absent
"maxEvents" \(RFC 8936 Section 2\.2\)\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SharedSignals.Transmitter.IEventOutbox.PendingAsync(string,string,System.Nullable_int_,System.Threading.CancellationToken).cancellationToken}

Cancels I/O a durable implementation performs\.

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[System\.Collections\.Generic\.IReadOnlyList&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlylist-1 'System\.Collections\.Generic\.IReadOnlyList\`1')[OutboxItem](https://www.abblix.com/en/docs/api/abblix-sharedsignals/Abblix.SharedSignals.Transmitter.OutboxItem 'Abblix\.SharedSignals\.Transmitter\.OutboxItem')[&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.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')
