lib/dwolla/client_token.ex

defmodule Dwolla.ClientToken do
  @moduledoc """
  Functions for "client-tokens" endpoint.
  """

  alias Dwolla.Utils

  defstruct token: nil

  @type t :: %__MODULE__{token: String.t}
  @type token :: String.t
  @type params :: %{required(atom) => String.t | integer}
  @type error :: HTTPoison.Error.t | Dwolla.Errors.t

  @endpoint "client-tokens"

  @doc """
  Creates a client token.

  Parameters
  ```
  %{
    _links: %{
      customer: %{
        href: "https://api-sandbox.dwolla.com/customers/..."
      }
    },
    action: "beneficialowners.create"
  }
  ```
  """
  @spec create(token, params) :: {:ok, Dwolla.ClientToken.t} | {:error, error}
  def create(token, params) do
    endpoint = @endpoint
    Dwolla.make_request_with_token(:post, endpoint, token, params, %{})
    |> Utils.handle_resp(:client_token)
  end
end