Packages
dagger
0.19.8
0.21.7
0.21.6
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.8
0.20.7
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.11
0.19.10
0.19.9
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.19
0.18.18
0.18.17
0.18.16
0.18.15
0.18.14
0.18.13
0.18.12
0.18.11
0.18.10
0.18.9
0.18.8
0.18.7
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.3
0.16.2
0.16.1
0.16.0
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.0
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.2
0.0.0
retired
Dagger SDK for Elixir
Current section
Files
Jump to
Current section
Files
lib/dagger/core/graphql_client.ex
defmodule Dagger.Core.GraphQLClient do
@moduledoc false
alias Dagger.Core.GraphQL.Response
@callback request(
url :: String.t(),
request_body :: iodata(),
headers :: [tuple()],
opts :: keyword()
) :: {:ok, status :: non_neg_integer(), response :: map()} | {:error, term()}
@default_client Application.compile_env(:dagger, :client, Dagger.Core.GraphQLClient.Httpc)
@doc """
Perform a request to GraphQL server.
"""
def request(url, session_token, query, variables, opts \\ []) do
client = Keyword.get(opts, :client) || @default_client
# TODO: change to json erlang standard library when support OTP 27 exclusively.
json = Keyword.get(opts, :json_library, Jason)
timeout = Keyword.get(opts, :timeout, :infinity)
request = %{query: query, variables: variables}
headers =
[]
|> with_basic_auth(session_token)
|> with_traceparent()
with {:ok, request} <- json.encode(request),
{:ok, status, result} <- client.request(url, request, headers, timeout: timeout),
{:ok, map} <- json.decode(result) do
response = Response.from_map(map)
case status do
200 -> {:ok, response}
_ -> {:error, response}
end
else
otherwise ->
otherwise
end
end
defp with_basic_auth(headers, session_token) when is_binary(session_token) do
token = [session_token, ?:] |> IO.iodata_to_binary() |> Base.encode64()
[{"authorization", ["Basic ", token]} | headers]
end
defp with_traceparent(headers, traceparent \\ System.get_env("TRACEPARENT")) do
case traceparent do
nil ->
headers
traceparent ->
[{"traceparent", traceparent} | headers]
end
end
end