Immutable registry for explicitly installed extension modules.
Registration rejects collisions against the complete core catalog for an exact protocol revision, including unsupported and MRTR-only method names. Installation, advertisement, and peer negotiation are separate. Extension routes require negotiation; advertised compatible middleware can observe an unnegotiated request and enforce policy before core execution.
Summary
Functions
Wraps core dispatch in advertised, compatible extension middleware.
Adds application-owned options for installed extensions compatible with the context.
Shapes a protocol-neutral event through its negotiated owning extension.
Collects validated, collision-free subscription filter fields from advertised extensions.
Applies an advertised extension route's exact-versioned transport policy hook.
Types
@type continuation() :: (Snodo.Context.t() -> dispatch_result())
@type dispatch_result() :: {:ok, Snodo.Result.t()} | {:error, Snodo.Error.t()}
@type entry() :: module() | {module(), extension_options()}
@type t() :: %Snodo.Extension.Registry{ by_id: %{optional(String.t()) => module()}, options_by_id: %{optional(String.t()) => extension_options()}, ordered_ids: [String.t()], routes: %{optional({String.t(), String.t()}) => Snodo.Extension.Route.t()}, versions_by_id: %{optional(String.t()) => MapSet.t(String.t())} }
Functions
@spec around_dispatch( t(), String.t(), term(), map(), Snodo.Context.t(), continuation() ) :: dispatch_result()
Wraps core dispatch in advertised, compatible extension middleware.
@spec put_options(t(), Snodo.Context.t()) :: Snodo.Context.t()
Adds application-owned options for installed extensions compatible with the context.
@spec shape_subscription_event( t(), Snodo.Subscription.Event.t(), Snodo.Envelope.id(), Snodo.Context.t() ) :: {:ok, map()} | :drop | {:error, Snodo.Error.t()}
Shapes a protocol-neutral event through its negotiated owning extension.
@spec subscription_filters(t(), String.t(), map(), Snodo.Context.t()) :: {:ok, map(), %{optional(String.t()) => map()}} | {:error, Snodo.Error.t()}
Collects validated, collision-free subscription filter fields from advertised extensions.
@spec transport_policy( t(), String.t(), Snodo.Envelope.t(), map(), Snodo.Transport.Policy.t() ) :: {:ok, Snodo.Transport.Policy.t()} | {:error, Snodo.Error.t()}
Applies an advertised extension route's exact-versioned transport policy hook.