LemonChannels.Registry (lemon_channels v0.1.0)

View Source

Registry for channel plugins.

Manages registration and lookup of channel plugins.

Summary

Functions

Returns a specification to start this module under a supervisor.

Get plugin capabilities.

Get plugin capabilities in the new format.

Get plugin metadata.

Get a plugin by ID.

List adapters with metadata for status UIs.

List all registered plugins.

Stop and unregister a channel adapter by channel_id.

Register a channel plugin.

Summarize configured/connected channel adapters.

Query if a plugin supports a specific capability.

Query if a plugin supports a specific feature within a capability.

Unregister a channel plugin.

Validates a capability request for a plugin.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

get_capabilities(plugin_id)

@spec get_capabilities(binary()) :: map() | nil

Get plugin capabilities.

get_capabilities_new(plugin_id)

@spec get_capabilities_new(binary()) :: LemonChannels.Capabilities.t() | nil

Get plugin capabilities in the new format.

Returns the parsed capability map — %{capability_type => %Capability{}}, as produced by LemonChannels.Capabilities.from_legacy/1 — or nil if the plugin is not registered. Despite the module name, LemonChannels.Capabilities.t/0 is a map, not a struct.

get_meta(plugin_id)

@spec get_meta(binary()) :: map() | nil

Get plugin metadata.

get_plugin(plugin_id)

@spec get_plugin(binary()) :: module() | nil

Get a plugin by ID.

list()

@spec list() :: [{binary(), map()}]

List adapters with metadata for status UIs.

Returns a list of {channel_id, info} tuples.

list_plugins()

@spec list_plugins() :: [module()]

List all registered plugins.

logout(channel_id)

@spec logout(binary()) :: :ok | {:error, :not_found} | {:error, term()}

Stop and unregister a channel adapter by channel_id.

register(plugin_module)

@spec register(module()) :: :ok | {:error, term()}

Register a channel plugin.

start_link(opts \\ [])

status()

@spec status() :: %{configured: [binary()], connected: [binary()]}

Summarize configured/connected channel adapters.

supports?(plugin_id, capability_type)

@spec supports?(binary(), atom()) :: boolean()

Query if a plugin supports a specific capability.

Examples

Registry.supports?("telegram", :attachments)
# => true

Registry.supports?("xmtp", :rich_blocks)
# => false

supports_feature?(plugin_id, capability_type, feature)

@spec supports_feature?(binary(), atom(), atom()) :: boolean()

Query if a plugin supports a specific feature within a capability.

Examples

Registry.supports_feature?("telegram", :rich_blocks, :markdown)
# => true

Registry.supports_feature?("discord", :rich_blocks, :buttons)
# => false

unregister(plugin_id)

@spec unregister(binary()) :: :ok

Unregister a channel plugin.

validate(plugin_id, capability_type, params)

@spec validate(binary(), atom(), map()) :: :ok | {:error, term()}

Validates a capability request for a plugin.

Examples

Registry.validate("telegram", :attachments, %{size: 5_000_000, mime_type: "image/png"})
# => :ok

Registry.validate("xmtp", :attachments, %{size: 1_000})
# => {:error, :capability_not_supported}