Public PubSub extension API.
This domain provides non-blocking event fanout to local or optional external PubSub backends.
Topic strategy:
:all->asm:events:session->asm:session:<session_id>:run->asm:session:<session_id>:run:<run_id>
Payload contract:
%{schema: "asm.pubsub.event.v1", event: %ASM.Event{}, meta: %{...}}- broadcast messages are delivered as
{:asm_pubsub, topic, payload}
Summary
Types
Functions
@spec event_callback( pid(), keyword() ) :: (ASM.Event.t(), iodata() -> :ok)
@spec flush_broadcaster(pid(), timeout()) :: :ok | {:error, ASM.Error.t()}
@spec local_adapter(keyword()) :: adapter_spec()
@spec payload_for_event( ASM.Event.t(), keyword() ) :: ASM.Extensions.PubSub.Payload.t()
@spec phoenix_adapter(keyword()) :: adapter_spec()
@spec publish(pid(), ASM.Event.t(), keyword()) :: :ok
@spec start_broadcaster(keyword()) :: GenServer.on_start() | {:error, ASM.Error.t()}
@spec start_local_bus(keyword()) :: GenServer.on_start() | {:error, ASM.Error.t()}
@spec subscribe(adapter_spec(), String.t()) :: :ok | {:error, ASM.Error.t()}
@spec topics_for_event( ASM.Event.t(), keyword() ) :: {:ok, [String.t()]} | {:error, ASM.Error.t()}