Current section

Files

Jump to
stellar_sdk lib horizon.ex
Raw

lib/horizon.ex

defmodule StellarSDK.Horizon do
@moduledoc false
@behaviour StellarSDK.Horizon.Client
@impl true
def request(method, path, headers \\ [], body \\ "", opts \\ []) do
base_url = config()[:url]
options = http_options(opts)
http_client().request(method, base_url <> path, headers, body, options)
end
@spec config() :: Keyword.t()
def config do
network = Application.get_env(:stellar_sdk, :network, :test)
[
network: network,
url: network_url(network),
passphrase: network_passphrase(network)
]
end
@spec http_client() :: atom()
defp http_client, do: Application.get_env(:stellar_sdk, :http_client, :hackney)
@spec http_options(options :: Keyword.t()) :: Keyword.t()
defp http_options(options) do
default_options = [recv_timeout: 30_000, follow_redirect: true]
override_options = Application.get_env(:stellar_sdk, :hackney_options, [])
default_options
|> Keyword.merge(override_options)
|> Keyword.merge(options)
|> (&[:with_body | &1]).()
end
@spec network_url(network :: atom) :: String.t()
defp network_url(:public), do: "https://horizon.stellar.org"
defp network_url(_network), do: "https://horizon-testnet.stellar.org"
@spec network_passphrase(network :: atom) :: String.t()
defp network_passphrase(:public), do: "Public Global Stellar Network ; September 2015"
defp network_passphrase(_network), do: "Test SDF Network ; September 2015"
end