lib/dwolla/token.ex

defmodule Dwolla.Token do
  @moduledoc """
  Functions for Dwolla OAuth 2 endpoint.
  """

  defstruct access_token: nil, expires_in: nil, token_type: nil

  @type t :: %__MODULE__{access_token: String.t,
                         expires_in: integer,
                         token_type: String.t}
  @type cred :: %{required(atom) => String.t}
  @type error :: HTTPoison.Error.t | Dwolla.Errors.t

  @doc """
  Gets an access token from application credentials.
  """
  @spec get(cred | nil) :: {:ok, Dwolla.Token.t} | {:error, error}
  def get(cred \\ Dwolla.get_cred()) do
    params = %{grant_type: "client_credentials"}
    Dwolla.make_oauth_token_request(params, cred)
    |> Dwolla.Utils.handle_resp(:token)
  end

end