Tink.Config (Tink v0.1.1)

Copy Markdown View Source

Configuration management for Tink.

This module handles loading and validating configuration from multiple sources:

  1. Application environment (config.exs)
  2. System environment variables
  3. Runtime options

Configuration Options

Required

  • :client_id - Tink OAuth client ID
  • :client_secret - Tink OAuth client secret (for client credentials flow)

Optional

  • :environment - :production or :sandbox (default: :production)
  • :base_url - API base URL (default: based on environment)
  • :timeout - Request timeout in ms (default: 30_000)
  • :max_retries - Maximum retry attempts (default: 3)
  • :pool_size - HTTP connection pool size (default: 32)
  • :enable_caching - Enable token caching (default: true)
  • :enable_rate_limiting - Enable rate limiting (default: true)
  • :http_client - HTTP client module (default: Tink.HTTPAdapter)
  • :debug_mode - Enable debug logging (default: false)

Configuration Sources

Application Config

# config/config.exs
config :tink,
  client_id: "your_client_id",
  client_secret: "your_client_secret",
  environment: :production

System Environment Variables

export TINK_CLIENT_ID="your_client_id"
export TINK_CLIENT_SECRET="your_client_secret"
export TINK_ENVIRONMENT="production"

Runtime Options

client = Tink.client(
  client_id: "runtime_id",
  client_secret: "runtime_secret"
)

Precedence

Runtime options > Environment variables > Application config > Defaults

Summary

Functions

Gets the base URL for the configured environment.

Builds client configuration from options.

Checks if caching is enabled.

Checks if debug mode is enabled.

Gets a configuration value.

Gets all configuration as a keyword list.

Checks if rate limiting is enabled.

Validates the current configuration.

Functions

base_url()

@spec base_url() :: String.t()

Gets the base URL for the configured environment.

Examples

iex> Tink.Config.base_url()
"https://api.tink.com"

build_client_config(opts \\ [])

@spec build_client_config(keyword()) :: map()

Builds client configuration from options.

Merges provided options with application configuration.

Examples

iex> Tink.Config.build_client_config(client_id: "custom_id")
%{client_id: "custom_id", client_secret: "...", ...}

caching_enabled?()

@spec caching_enabled?() :: boolean()

Checks if caching is enabled.

Examples

iex> Tink.Config.caching_enabled?()
true

debug_mode?()

@spec debug_mode?() :: boolean()

Checks if debug mode is enabled.

get(key, default \\ nil)

@spec get(atom(), term()) :: term()

Gets a configuration value.

Checks in order:

  1. Application environment
  2. System environment variable
  3. Default value (if provided)

Examples

iex> Tink.Config.get(:client_id)
"your_client_id"

iex> Tink.Config.get(:timeout, 5000)
30000

get_all()

@spec get_all() :: keyword()

Gets all configuration as a keyword list.

Examples

iex> Tink.Config.get_all()
[
  client_id: "your_id",
  client_secret: "your_secret",
  environment: :production,
  ...
]

rate_limiting_enabled?()

@spec rate_limiting_enabled?() :: boolean()

Checks if rate limiting is enabled.

Reads the flat :enable_rate_limiting key set by config/runtime.exs.

validate()

@spec validate() :: :ok | {:error, String.t()}

Validates the current configuration.

Returns :ok if valid, {:error, reason} if invalid.

Examples

iex> Tink.Config.validate()
:ok

iex> Tink.Config.validate()
{:error, "Missing required configuration: client_id"}