hunter/lib/hunter/client.ex

55 lines
1.3 KiB
Elixir

defmodule Hunter.Client do
@moduledoc """
Defines a `Hunter` client
"""
alias Hunter.Config
@type t :: %__MODULE__{
base_url: String.t(),
bearer_token: String.t()
}
@derive [Poison.Encoder]
defstruct [:base_url, :bearer_token]
@doc """
Initializes a client
## Options
* `base_url` - URL of the instance you want to connect to
* `bearer_token` - [String] OAuth access token for your authenticated user
"""
@spec new(Keyword.t()) :: Hunter.Client.t()
def new(options \\ []) do
struct(Hunter.Client, options)
end
@doc """
User agent of the client
"""
@spec user_agent() :: String.t()
def user_agent do
"Hunter.Elixir/#{Hunter.version()}"
end
@doc """
Retrieve access token
## Parameters
* `app` - application details, see: `Hunter.Application.create_app/5` for more details.
* `username` - your account's email
* `password` - your password
* `base_url` - API base url, default: `https://mastodon.social`
"""
@spec log_in(Hunter.Application.t(), String.t(), String.t(), String.t()) :: Hunter.Client.t()
def log_in(app, username, password, base_url \\ "https://mastodon.social") do
base_url = base_url || Config.api_base_url()
Config.hunter_api().log_in(app, username, password, base_url)
end
end