-
Notifications
You must be signed in to change notification settings - Fork 1
/
client.gleam
62 lines (50 loc) · 1.63 KB
/
client.gleam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import gleam/result
import gleam/http.{type Header, Get, Post}
import glitch/api/api
import glitch/api/api_request.{type TwitchApiRequest}
import glitch/api/api_response.{type TwitchApiResponse}
import glitch/auth/auth_provider.{type AuthProvider}
import glitch/types/access_token.{type AccessToken}
import glitch/error.{type TwitchError}
pub opaque type Client {
Client(auth_provider: AuthProvider)
}
pub fn new(auth_provider: AuthProvider) -> Client {
Client(auth_provider)
}
pub fn client_id(client: Client) -> String {
auth_provider.client_id(client.auth_provider)
}
pub fn access_token(client: Client) -> Result(AccessToken, TwitchError) {
auth_provider.access_token(client.auth_provider)
}
fn headers(client: Client) -> Result(List(Header), TwitchError) {
let client_id = auth_provider.client_id(client.auth_provider)
use access_token <- result.try(access_token(client))
let authorization = "Bearer " <> access_token.token(access_token)
Ok([
#("Authorization", authorization),
#("Client-Id", client_id),
#("Content-Type", "application/json"),
])
}
pub fn get(
client: Client,
request: TwitchApiRequest,
) -> Result(TwitchApiResponse(String), TwitchError) {
use headers <- result.try(headers(client))
request
|> api_request.merge_headers(headers, api_request.headers(request))
|> api_request.set_method(Get)
|> api.send
}
pub fn post(
client: Client,
request: TwitchApiRequest,
) -> Result(TwitchApiResponse(String), TwitchError) {
use headers <- result.try(headers(client))
request
|> api_request.merge_headers(headers, api_request.headers(request))
|> api_request.set_method(Post)
|> api.send
}