lib/http.ex

# This file is derived from Mobilizon:
# SPDX-License-Identifier: AGPL-3.0-only
# Upstream: https://framagit.org/framasoft/mobilizon/-/blob/main/lib/service/http/geospatial_client.ex

defmodule Geospatial.HTTP do
  @moduledoc """
  Tesla HTTP Basic Client
  with JSON middleware
  """

  use Tesla

  @default_opts [
    recv_timeout: 20_000
  ]

  adapter(Tesla.Adapter.Hackney, @default_opts)

  plug(Tesla.Middleware.FollowRedirects)

  plug(Tesla.Middleware.Timeout, timeout: 10_000)

  plug(Tesla.Middleware.Headers, [
    {"User-Agent", get_in(Application.get_env(:geospatial, __MODULE__), [:user_agent]).()}
  ])

  plug(Tesla.Middleware.JSON)
end