Current section
Files
Jump to
Current section
Files
lib/flagsmith/sdk/client.ex
defmodule Flagsmith.SDK.Client do
use TypedEctoSchema
alias Flagsmith.SDK
import Ecto.Changeset,
only: [
cast: 3,
apply_action: 2,
validate_required: 2
]
@default_url "https://api.flagsmith.com/api/v1"
@auth_header "X-Environment-Key"
@primary_key false
typed_embedded_schema do
field(:environment_key, SDK.MaybeFunction)
field(:base_url, SDK.MaybeFunction, default_value: @default_url)
end
@spec default_url() :: String.t()
def default_url(), do: @default_url
@spec new(SDK.Types.environment_key(), SDK.Types.base_url()) :: SDK.Client.t()
def new(environment_key, base_url) do
%__MODULE__{}
|> cast(%{environment_key: environment_key, base_url: base_url}, [:environment_key, :base_url])
|> validate_required([:environment_key, :base_url])
|> apply_action(:insert)
end
def auth_middleware(environment_key) when is_binary(environment_key),
do: {Tesla.Middleware.Headers, auth_header(environment_key)}
def base_url_middleware(base_url) when is_binary(base_url),
do: {Tesla.Middleware.BaseUrl, base_url}
defp auth_header(environment_key), do: [{@auth_header, environment_key}]
end