Current section
Files
Jump to
Current section
Files
lib/client.ex
defmodule PINXS.Client do
@moduledoc """
Used for building a Tesla client for use with the Pin Payments API
"""
@doc """
Create a new `Tesla.Client`
## Parameters
- `secrets` is [`%PINXS{}`](`PINXS`) struct
"""
def new(%PINXS{} = secrets) do
new(secrets.api_key, default_url(), default_adapter())
end
def new(api_key) when is_binary(api_key) do
new(api_key, default_url(), default_adapter())
end
@doc """
Create a new `Tesla.Client`
## Parameters
- `secrets` is [`%PINXS{}`](`PINXS`) struct
- `url` allows you to override the URL where requests will be sent. Useful for testing
"""
def new(%PINXS{} = secrets, url) do
new(secrets.api_key, url, default_adapter())
end
def new(api_key, url) when is_binary(api_key) do
new(api_key, url, default_adapter())
end
@doc """
Create a new `Tesla.Client`
## Parameters
- `secrets` is [`%PINXS{}`](`PINXS`) struct
- `url` allows you to override the URL where requests will be sent. Useful for testing
- `adapter` Allows you to use a different `Tesla.Adapter` to the default which is `Tesla.Adapter.Gun`
"""
def new(%PINXS{} = secrets, url, adapter), do: new(secrets.api_key, url, adapter)
def new(api_key, url, adapter) when is_binary(api_key) do
middleware = [
Tesla.Middleware.Query,
{Tesla.Middleware.BasicAuth, [username: api_key]},
{Tesla.Middleware.BaseUrl, url},
PINXS.Middleware.KeepRequest,
Tesla.Middleware.Compression,
{Tesla.Middleware.Logger, [filter_headers: ["authorization"]]},
PINXS.Middleware.Normalize,
{Tesla.Middleware.JSON, [engine_opts: [keys: :atoms]]}
]
Tesla.client(middleware, adapter)
end
@doc """
Default adapter to be used for making requests.
"""
def default_adapter do
Application.get_env(
:pinxs,
:adapter,
{Tesla.Adapter.Gun, [timeout: 30_000, certificates_verification: true]}
)
end
@doc """
Default URL for communicating with Pin Payments
"""
def default_url do
"https://api.pin.net.au/1"
end
@doc """
Test URL for communicating with Pin Payments
"""
def test_url do
"https://test-api.pin.net.au/1"
end
end