Current section
Files
Jump to
Current section
Files
lib/keplars/keplars.ex
defmodule Keplars do
@api_key_regex ~r/^kms_[a-f0-9]+\.(live|adm)_[a-f0-9]+$/
@default_base_url "https://api.keplars.com"
@default_max_retries 3
@default_retry_delay_ms 1_000
@default_timeout_ms 30_000
defstruct [:api_key, :base_url, :max_retries, :retry_delay_ms, :timeout_ms]
@type t :: %__MODULE__{
api_key: String.t(),
base_url: String.t(),
max_retries: non_neg_integer(),
retry_delay_ms: non_neg_integer(),
timeout_ms: non_neg_integer()
}
def new(api_key \\ "", opts \\ []) do
resolved_key =
if api_key == "" or is_nil(api_key) do
System.get_env("KEPLARS_API_KEY") || ""
else
api_key
end
if not Regex.match?(@api_key_regex, resolved_key) do
{:error, "Invalid API key format. Expected: kms_<hex>.(live|adm)_<hex>"}
else
base_url =
Keyword.get(opts, :base_url) ||
System.get_env("KEPLARS_BASE_URL") ||
@default_base_url
client = %__MODULE__{
api_key: resolved_key,
base_url: String.trim_trailing(base_url, "/"),
max_retries: Keyword.get(opts, :max_retries, @default_max_retries),
retry_delay_ms: Keyword.get(opts, :retry_delay_ms, @default_retry_delay_ms),
timeout_ms: Keyword.get(opts, :timeout_ms, @default_timeout_ms)
}
{:ok, client}
end
end
end