Deterministic media normalization and bounded policy checks.
This module is used by ingest and outbound media paths to:
- normalize media payloads into canonical content structs
- enforce bounded type/size/count limits
- apply deterministic unsupported-media fallback/reject behavior
Summary
Types
Supported canonical media kinds.
Inbound/outbound policy result metadata.
Outbound unsupported-media policy.
Functions
Resolves effective media policy config.
Normalizes inbound media list into canonical content blocks.
Preflights outbound media payload for policy/capability/callback checks.
Types
@type media_kind() :: :image | :audio | :video | :file
Supported canonical media kinds.
@type metadata() :: %{ accepted: [map()], rejected: [map()], count: non_neg_integer(), total_bytes: non_neg_integer(), policy: map() }
Inbound/outbound policy result metadata.
@type unsupported_policy() :: :reject | :fallback_text
Outbound unsupported-media policy.
Functions
Resolves effective media policy config.
Config precedence:
- defaults
config :jido_messaging, :media_policy, ...- runtime overrides (keyword/map)
@spec normalize_inbound(term(), keyword() | map()) :: {:ok, [struct()], metadata()} | {:error, {:media_policy_denied, atom()}, metadata()}
Normalizes inbound media list into canonical content blocks.
Returns either:
{:ok, content_blocks, metadata}{:error, {:media_policy_denied, reason}, metadata}
@spec prepare_outbound(term(), module(), atom(), keyword() | map()) :: {:ok, map(), metadata()} | {:fallback_text, String.t(), metadata()} | {:error, term(), metadata()}
Preflights outbound media payload for policy/capability/callback checks.
Returns one of:
{:ok, media_payload, metadata}- send/edit media via channel media callback{:fallback_text, text, metadata}- deterministic text fallback path{:error, reason, metadata}- deterministic reject path