Jido.Messaging.MediaPolicy (Jido Messaging v1.0.0)

Copy Markdown View Source

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

media_kind()

@type media_kind() :: :image | :audio | :video | :file

Supported canonical media kinds.

metadata()

@type metadata() :: %{
  accepted: [map()],
  rejected: [map()],
  count: non_neg_integer(),
  total_bytes: non_neg_integer(),
  policy: map()
}

Inbound/outbound policy result metadata.

unsupported_policy()

@type unsupported_policy() :: :reject | :fallback_text

Outbound unsupported-media policy.

Functions

config(overrides \\ [])

@spec config(keyword() | map()) :: keyword()

Resolves effective media policy config.

Config precedence:

  1. defaults
  2. config :jido_messaging, :media_policy, ...
  3. runtime overrides (keyword/map)

normalize_inbound(media_payload, opts \\ [])

@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}

prepare_outbound(media_payload, channel_module, operation, opts \\ [])

@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