···11-defmodule Atex.HTTP do
22- @adapter Application.compile_env(:atex, :adapter, Atex.HTTP.Adapter.Req)
33-44- defdelegate get(url, opts), to: @adapter
55- defdelegate post(url, opts), to: @adapter
66-end
-13
lib/atex/http/adapter.ex
···11-defmodule Atex.HTTP.Adapter do
22- @moduledoc """
33- Behaviour for defining a HTTP client adapter to be used within atex.
44- """
55- alias Atex.HTTP.Response
66-77- @type success() :: {:ok, Response.t()}
88- @type error() :: {:error, Response.t() | term()}
99- @type result() :: success() | error()
1010-1111- @callback get(url :: String.t(), opts :: keyword()) :: result()
1212- @callback post(url :: String.t(), opts :: keyword()) :: result()
1313-end
-38
lib/atex/http/adapter/req.ex
···11-defmodule Atex.HTTP.Adapter.Req do
22- @moduledoc """
33- `Req` adapter for atex.
44- """
55-66- @behaviour Atex.HTTP.Adapter
77-88- @impl true
99- def get(url, opts) do
1010- Req.get(url, opts) |> adapt()
1111- end
1212-1313- @impl true
1414- def post(url, opts) do
1515- Req.post(url, opts) |> adapt()
1616- end
1717-1818- @spec adapt({:ok, Req.Response.t()} | {:error, any()}) :: Atex.HTTP.Adapter.result()
1919- defp adapt({:ok, %Req.Response{status: status} = res}) when status < 400 do
2020- {:ok, to_response(res)}
2121- end
2222-2323- defp adapt({:ok, %Req.Response{} = res}) do
2424- {:error, to_response(res)}
2525- end
2626-2727- defp adapt({:error, exception}) do
2828- {:error, exception}
2929- end
3030-3131- defp to_response(%Req.Response{} = res) do
3232- %Atex.HTTP.Response{
3333- body: res.body,
3434- status: res.status,
3535- __raw__: res
3636- }
3737- end
3838-end
-13
lib/atex/http/response.ex
···11-defmodule Atex.HTTP.Response do
22- @moduledoc """
33- A generic response struct to be returned by an `Atex.HTTP.Adapter`.
44- """
55-66- use TypedStruct
77-88- typedstruct enforce: true do
99- field :status, integer()
1010- field :body, any()
1111- field :__raw__, any()
1212- end
1313-end
+2-2
lib/atex/identity_resolver/did.ex
···1414 @spec resolve_plc(String.t()) :: resolution_result()
1515 defp resolve_plc("did:plc:" <> _id = did) do
1616 with {:ok, resp} when resp.status in 200..299 <-
1717- Atex.HTTP.get("https://plc.directory/#{did}", []),
1717+ Req.get("https://plc.directory/#{did}"),
1818 {:ok, body} <- decode_body(resp.body),
1919 {:ok, document} <- DIDDocument.from_json(body),
2020 :ok <- DIDDocument.validate_for_atproto(document, did) do
···2929 @spec resolve_web(String.t()) :: resolution_result()
3030 defp resolve_web("did:web:" <> domain = did) do
3131 with {:ok, resp} when resp.status in 200..299 <-
3232- Atex.HTTP.get("https://#{domain}/.well-known/did.json", []),
3232+ Req.get("https://#{domain}/.well-known/did.json"),
3333 {:ok, body} <- decode_body(resp.body),
3434 {:ok, document} <- DIDDocument.from_json(body),
3535 :ok <- DIDDocument.validate_for_atproto(document, did) do
+1-1
lib/atex/identity_resolver/handle.ex
···55555656 @spec resolve_via_http(String.t()) :: {:ok, String.t()} | :error
5757 defp resolve_via_http(handle) do
5858- case Atex.HTTP.get("https://#{handle}/.well-known/atproto-did", []) do
5858+ case Req.get("https://#{handle}/.well-known/atproto-did") do
5959 {:ok, %{body: "did:" <> _ = did}} -> {:ok, did}
6060 _ -> :error
6161 end