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