lib/active_campaign/tracking/site.ex

defmodule ActiveCampaign.Tracking.Site do
  @moduledoc """
  Documentation for `ActiveCampaign.Tracking.Site`.
  """

  alias ActiveCampaign.Http

  @doc """
  Add domain to whitelist
  """
  @spec add(String.t()) :: {:ok, map()} | {:error, any()}
  def add(domain) do
    Http.post("siteTrackingDomains", %{siteTrackingDomain: %{name: domain}})
  end

  @doc """
  Retrieve site tracking code
  """
  @spec get_tracking_code :: {:ok, String.t()} | {:error, any()}
  def get_tracking_code do
    Http.get("siteTracking/code")
  end

  @doc """
  Retrieve status
  """
  @spec get_status :: {:ok, map()} | {:error, any()}
  def get_status do
    Http.get("siteTracking")
  end

  @doc """
  Enable/disable
  """
  @spec set_enabled(boolean()) :: {:ok, map()} | {:error, any()}
  def set_enabled(bool) do
    Http.put("siteTracking", %{siteTracking: %{enabled: bool}})
  end

  @doc """
  Remove domain from whitelist
  """
  @spec remove(String.t()) :: {:ok, map()} | {:error, any()}
  def remove(domain) do
    Http.delete("siteTrackingDomains/#{domain}")
  end

  @doc """
  List all whitelisted domains
  """
  @spec list(map()) :: {:ok, map()} | {:error, any()}
  def list(query_params \\ %{}) do
    Http.get("siteTrackingDomains?" <> Http.encode_query(query_params))
  end
end