-module(glitch@api@client). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([client_id/1, access_token/1, headers/1, get/2, post/2]). -export_type([client/0, options/0, api_error/0]). -opaque client() :: {client, options()}. -type options() :: {options, binary(), binary()}. -type api_error() :: request_error. -spec client_id(client()) -> binary(). client_id(Client) -> erlang:element(2, erlang:element(2, Client)). -spec access_token(client()) -> binary(). access_token(Client) -> erlang:element(3, erlang:element(2, Client)). -spec headers(client()) -> list({binary(), binary()}). headers(Client) -> Client_id = client_id(Client), Access_token = <<"Bearer "/utf8, (access_token(Client))/binary>>, [{<<"Authorization"/utf8>>, Access_token}, {<<"Client-Id"/utf8>>, Client_id}, {<<"content-type"/utf8>>, <<"application/json"/utf8>>}]. -spec merge_headers(list({binary(), binary()}), list({binary(), binary()})) -> list({binary(), binary()}). merge_headers(Base_headers, New_headers) -> gleam@list:fold( New_headers, Base_headers, fun(Acc, Header) -> Key = gleam@pair:first(Header), Value = gleam@pair:second(Header), gleam@list:key_set(Acc, Key, Value) end ). -spec get(client(), gleam@http@request:request(gleam@json:json())) -> {ok, gleam@http@response:response(binary())} | {error, gleam@dynamic:dynamic_()}. get(Client, Request) -> Headers = begin _pipe = Client, _pipe@1 = headers(_pipe), merge_headers(_pipe@1, erlang:element(3, Request)) end, _pipe@2 = Request, _pipe@3 = gleam@http@request:set_method(_pipe@2, get), _pipe@4 = glitch@extended@request_ext:set_headers(_pipe@3, Headers), _pipe@5 = glitch@api@api_request:from_request(_pipe@4), gleam@httpc:send(_pipe@5). -spec post(client(), gleam@http@request:request(gleam@json:json())) -> {ok, gleam@http@response:response(binary())} | {error, gleam@dynamic:dynamic_()}. post(Client, Request) -> Headers = begin _pipe = Client, _pipe@1 = headers(_pipe), merge_headers(_pipe@1, erlang:element(3, Request)) end, _pipe@2 = erlang:setelement(3, erlang:setelement(2, Request, post), Headers), _pipe@3 = glitch@api@api_request:from_request(_pipe@2), gleam@httpc:send(_pipe@3).