Packages

Production-grade Elixir client for the Lithic API (card issuing & fintech)

Current section

Files

Jump to
lithic lib lithic resources accounts.ex
Raw

lib/lithic/resources/accounts.ex

defmodule Lithic.Resources.Accounts do
@moduledoc "Manage Lithic accounts — retrieve, list, update, and fetch limits/signals."
alias Lithic.{Client, Page}
@path "/accounts"
@spec get(String.t(), keyword()) :: {:ok, map()} | {:error, Lithic.Error.t()}
def get(account_token, opts \\ []) do
Client.get(client(opts), "#{@path}/#{account_token}")
end
@spec list(keyword()) :: {:ok, Page.t(map())} | {:error, Lithic.Error.t()}
def list(opts \\ []) do
{params, client_opts} = split_params(opts)
c = client(client_opts)
case Client.get(c, @path, params: params) do
{:ok, body} -> {:ok, Page.from_response(body, c, @path, params)}
{:error, _} = error -> error
end
end
@spec stream(keyword()) :: Enumerable.t()
def stream(opts \\ []) do
case list(opts) do
{:ok, page} -> Page.stream(page)
{:error, e} -> Lithic.Resources.Base.raise_error!(e)
end
end
@spec update(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Lithic.Error.t()}
def update(account_token, params, opts \\ []) do
Client.patch(client(opts), "#{@path}/#{account_token}", params)
end
@spec get_spend_limits(String.t(), keyword()) :: {:ok, map()} | {:error, Lithic.Error.t()}
def get_spend_limits(account_token, opts \\ []) do
Client.get(client(opts), "#{@path}/#{account_token}/spend_limits")
end
@spec get_signals(String.t(), keyword()) :: {:ok, map()} | {:error, Lithic.Error.t()}
def get_signals(account_token, opts \\ []) do
Client.get(client(opts), "#{@path}/#{account_token}/signals")
end
@spec client(keyword()) :: Client.t()
defp client(opts), do: Keyword.get(opts, :client, Client.new())
defp split_params(opts), do: Keyword.split(opts, [:client])
end