Current section
Files
Jump to
Current section
Files
lib/ccxt/defaults.ex
defmodule CCXT.Defaults do
@moduledoc """
Centralized default configuration values for ccxt_client.
All defaults can be overridden via application config:
config :ccxt_client,
recv_window_ms: 10_000,
request_timeout_ms: 60_000
## Available Defaults
| Config Key | Default | Description |
|------------|---------|-------------|
| `:recv_window_ms` | 5000 | Request timestamp validity window (exchanges reject stale requests) |
| `:request_timeout_ms` | 30000 | HTTP request timeout |
| `:retry_policy` | `:safe_transient` | HTTP retry strategy (GET/HEAD only) |
| `:rate_limiter_enabled` | `true` | Enable/disable rate limiter |
| `:rate_limit_cleanup_interval_ms` | 60000 | Interval for cleaning up old rate limit timestamps |
| `:rate_limit_max_age_ms` | 60000 | Maximum age for rate limit request timestamps |
"""
@default_recv_window_ms 5_000
@default_request_timeout_ms 30_000
@default_retry_policy :safe_transient
@default_rate_limiter_enabled true
@default_rate_limit_cleanup_interval_ms 60_000
@default_rate_limit_max_age_ms 60_000
@doc """
Returns the recv_window value in milliseconds.
The recv_window defines how long a signed request is valid.
Exchanges reject requests with timestamps outside this window.
Default: #{@default_recv_window_ms}ms
"""
@spec recv_window_ms() :: pos_integer()
def recv_window_ms do
Application.get_env(:ccxt_client, :recv_window_ms, @default_recv_window_ms)
end
@doc """
Returns the HTTP request timeout in milliseconds.
Maximum time to wait for a response from an exchange API.
Default: #{@default_request_timeout_ms}ms
"""
@spec request_timeout_ms() :: pos_integer()
def request_timeout_ms do
Application.get_env(:ccxt_client, :request_timeout_ms, @default_request_timeout_ms)
end
@doc """
Returns the HTTP retry policy.
## Trading Safety (CRITICAL)
Uses `:safe_transient` by default — only retries GET/HEAD requests.
**Never use `:transient` for trading APIs** as it could duplicate orders.
Default: `:safe_transient`
"""
@spec retry_policy() :: :safe_transient | :transient | false
def retry_policy do
Application.get_env(:ccxt_client, :retry_policy, @default_retry_policy)
end
@doc """
Returns whether the rate limiter is enabled.
Default: `true`
"""
@spec rate_limiter_enabled?() :: boolean()
def rate_limiter_enabled? do
Application.get_env(:ccxt_client, :rate_limiter_enabled, @default_rate_limiter_enabled)
end
@doc """
Returns the interval for cleaning up expired rate limit timestamps.
Default: #{@default_rate_limit_cleanup_interval_ms}ms
"""
@spec rate_limit_cleanup_interval_ms() :: pos_integer()
def rate_limit_cleanup_interval_ms do
Application.get_env(
:ccxt_client,
:rate_limit_cleanup_interval_ms,
@default_rate_limit_cleanup_interval_ms
)
end
@doc """
Returns the maximum age for rate limit request timestamps before removal.
Default: #{@default_rate_limit_max_age_ms}ms
"""
@spec rate_limit_max_age_ms() :: pos_integer()
def rate_limit_max_age_ms do
Application.get_env(:ccxt_client, :rate_limit_max_age_ms, @default_rate_limit_max_age_ms)
end
@doc false
@spec raw_defaults() :: %{
recv_window_ms: pos_integer(),
request_timeout_ms: pos_integer(),
retry_policy: atom(),
rate_limiter_enabled: boolean(),
rate_limit_cleanup_interval_ms: pos_integer(),
rate_limit_max_age_ms: pos_integer()
}
def raw_defaults do
%{
recv_window_ms: @default_recv_window_ms,
request_timeout_ms: @default_request_timeout_ms,
retry_policy: @default_retry_policy,
rate_limiter_enabled: @default_rate_limiter_enabled,
rate_limit_cleanup_interval_ms: @default_rate_limit_cleanup_interval_ms,
rate_limit_max_age_ms: @default_rate_limit_max_age_ms
}
end
end