PhoenixKit.Integrations.Providers (phoenix_kit v1.7.102)

Copy Markdown View Source

Registry of known integration providers.

Each provider definition describes how to connect to an external service: what auth type it uses, what fields the admin needs to fill in, and how to validate the connection.

Providers are defined in code, not in the database. New providers are added here as needed. External modules can also contribute providers via the integration_providers/0 callback on PhoenixKit.Module.

Summary

Functions

Returns all known providers, including those contributed by external modules.

Clears the cached provider list and used-by map.

Look up a single provider by key.

Returns a map of provider_key => [module_name] showing which modules use each integration.

Types

auth_type()

@type auth_type() :: :oauth2 | :api_key | :key_secret | :bot_token | :credentials

provider()

@type provider() :: %{
  key: String.t(),
  name: String.t(),
  description: String.t(),
  icon: String.t(),
  auth_type: auth_type(),
  oauth_config: map() | nil,
  setup_fields: [setup_field()],
  capabilities: [atom()]
}

setup_field()

@type setup_field() :: %{
  key: String.t(),
  label: String.t(),
  type: :text | :password | :textarea | :number | :select,
  required: boolean(),
  placeholder: String.t(),
  help: String.t() | nil,
  options: [%{value: String.t(), label: String.t()}] | nil
}

Functions

all()

@spec all() :: [provider()]

Returns all known providers, including those contributed by external modules.

Results are cached in persistent_term after the first call. Call clear_cache/0 if modules are added or removed at runtime.

clear_cache()

@spec clear_cache() :: :ok

Clears the cached provider list and used-by map.

Call this when modules are added or removed at runtime so the next call to all/0 or used_by_modules/0 recomputes from the module registry.

get(key)

@spec get(String.t()) :: provider() | nil

Look up a single provider by key.

Accepts both plain keys ("google") and named keys ("google:personal") — the name is stripped before lookup since provider definitions are per-type.

used_by_modules()

@spec used_by_modules() :: %{required(String.t()) => [String.t()]}

Returns a map of provider_key => [module_name] showing which modules use each integration.