Wraps a domain event with dispatch and delivery context.
Unlike command envelopes, event envelopes track delivery to multiple handlers. An event is a broadcast — it can be handled by many subscribers, each tracked independently.
Structure
%EventEnvelope{
event: %AssessmentCompleted{...},
status: :pending,
published_at: nil,
handlers: %{
"GenerateReport" => :succeeded,
"NotifyUser" => :pending
}
}
Summary
Functions
Whether all handlers have completed (succeeded, failed, or skipped).
Returns the event id.
Returns the event type.
Marks a specific handler as failed.
Marks a specific handler as processing.
Marks a specific handler as skipped.
Marks a specific handler as succeeded.
Marks the envelope as published.
Returns the event metadata.
Registers a handler for tracking.
Wraps an event in an envelope.
Types
@type handler_status() :: :pending | :processing | :succeeded | :failed | :skipped
@type status() :: :pending | :published | :partially_handled | :handled | :failed
@type t() :: %Orkestra.EventEnvelope{ event: Orkestra.Event.t(), handlers: %{required(String.t()) => handler_status()}, published_at: DateTime.t() | nil, status: status() }
Functions
Whether all handlers have completed (succeeded, failed, or skipped).
Returns the event id.
Returns the event type.
Marks a specific handler as failed.
Marks a specific handler as processing.
Marks a specific handler as skipped.
Marks a specific handler as succeeded.
Marks the envelope as published.
@spec metadata(t()) :: Orkestra.Metadata.t() | nil
Returns the event metadata.
Registers a handler for tracking.
@spec wrap(Orkestra.Event.t()) :: t()
Wraps an event in an envelope.