- def request(method, url, body \\ "", headers \\ [], options \\ []) do
- options =
- process_request_options(options)
- |> process_sni_options(url)
-
- %{}
- |> Builder.method(method)
- |> Builder.headers(headers)
- |> Builder.opts(options)
- |> Builder.url(url)
- |> Builder.add_param(:body, :body, body)
- |> Enum.into([])
- |> (&Tesla.request(Connection.new(), &1)).()
+ @spec request(atom(), Request.url(), String.t(), Request.headers(), keyword()) ::
+ {:ok, Env.t()} | {:error, any()}
+ def request(method, url, body, headers, options) when is_binary(url) do
+ with uri <- URI.parse(url),
+ received_adapter_opts <- Keyword.get(options, :adapter, []),
+ adapter_opts <- Connection.options(uri, received_adapter_opts),
+ options <- put_in(options[:adapter], adapter_opts),
+ params <- Keyword.get(options, :params, []),
+ request <- build_request(method, headers, options, url, body, params),
+ client <- Tesla.client([Tesla.Middleware.FollowRedirects], tesla_adapter()),
+ pid <- Process.whereis(adapter_opts[:pool]) do
+ pool_alive? =
+ if tesla_adapter() == Tesla.Adapter.Gun do
+ if pid, do: Process.alive?(pid), else: false
+ else
+ false
+ end
+
+ request_opts =
+ adapter_opts
+ |> Enum.into(%{})
+ |> Map.put(:env, Pleroma.Config.get([:env]))
+ |> Map.put(:pool_alive?, pool_alive?)
+
+ response =
+ request(
+ client,
+ request,
+ request_opts
+ )
+
+ Connection.after_request(adapter_opts)
+
+ response
+ end