Vibe.Auth.Provider behaviour (vibe v0.2.0)

Copy Markdown View Source

Behaviour for authentication providers.

Providers own protocol-specific login/refresh and token-to-LLM wiring. Shared storage/callback plumbing lives outside providers so additional sign-in options can be added without duplicating persistence code.

Summary

Types

credentials()

@type credentials() :: map()

request_option()

@type request_option() :: {atom(), term()}

Callbacks

ensure_fresh()

@callback ensure_fresh() :: {:ok, credentials()} | {:error, term()}

id()

@callback id() :: String.t()

load()

@callback load() :: {:ok, credentials()} | {:error, term()}

login(keyword)

@callback login(keyword()) :: {:ok, credentials()} | {:error, term()}

model_prefixes()

@callback model_prefixes() :: [String.t()]

put_credentials(credentials)

@callback put_credentials(credentials()) :: :ok | {:error, term()}

refresh(credentials)

@callback refresh(credentials()) :: {:ok, credentials()} | {:error, term()}

request_options()

@callback request_options() :: [request_option()]

resolve_model(prefix, model_id)

@callback resolve_model(prefix :: String.t(), model_id :: String.t()) ::
  {reqllm_model :: term(), [request_option()]}

usage(keyword)

(optional)
@callback usage(keyword()) :: {:ok, map()} | {:error, term()}

Functions

for_model(model, providers \\ Vibe.Auth.providers())

@spec for_model(String.t(), %{required(String.t()) => module()}) ::
  {module(), String.t(), String.t()} | nil