-module(glitch@api@client). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/1, client_id/1, access_token/1, get/2, post/2]). -export_type([client/0]). -opaque client() :: {client, glitch@auth@auth_provider:auth_provider()}. -spec new(glitch@auth@auth_provider:auth_provider()) -> client(). new(Auth_provider) -> {client, Auth_provider}. -spec client_id(client()) -> binary(). client_id(Client) -> glitch@auth@auth_provider:client_id(erlang:element(2, Client)). -spec access_token(client()) -> {ok, glitch@types@access_token:access_token()} | {error, glitch@error:twitch_error()}. access_token(Client) -> glitch@auth@auth_provider:access_token(erlang:element(2, Client)). -spec headers(client()) -> {ok, list({binary(), binary()})} | {error, glitch@error:twitch_error()}. headers(Client) -> Client_id = glitch@auth@auth_provider:client_id(erlang:element(2, Client)), gleam@result:'try'( access_token(Client), fun(Access_token) -> Authorization = <<"Bearer "/utf8, (glitch@types@access_token:token(Access_token))/binary>>, {ok, [{<<"Authorization"/utf8>>, Authorization}, {<<"Client-Id"/utf8>>, Client_id}, {<<"Content-Type"/utf8>>, <<"application/json"/utf8>>}]} end ). -spec get(client(), glitch@api@api_request:twitch_api_request()) -> {ok, glitch@api@api_response:twitch_api_response(binary())} | {error, glitch@error:twitch_error()}. get(Client, Request) -> gleam@result:'try'(headers(Client), fun(Headers) -> _pipe = Request, _pipe@1 = glitch@api@api_request:merge_headers( _pipe, Headers, glitch@api@api_request:headers(Request) ), _pipe@2 = glitch@api@api_request:set_method(_pipe@1, get), glitch@api@api:send(_pipe@2) end). -spec post(client(), glitch@api@api_request:twitch_api_request()) -> {ok, glitch@api@api_response:twitch_api_response(binary())} | {error, glitch@error:twitch_error()}. post(Client, Request) -> gleam@result:'try'(headers(Client), fun(Headers) -> _pipe = Request, _pipe@1 = glitch@api@api_request:merge_headers( _pipe, Headers, glitch@api@api_request:headers(Request) ), _pipe@2 = glitch@api@api_request:set_method(_pipe@1, post), glitch@api@api:send(_pipe@2) end).