-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathscript.rhai
More file actions
66 lines (60 loc) · 2.21 KB
/
script.rhai
File metadata and controls
66 lines (60 loc) · 2.21 KB
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
63
64
65
66
// At the router_service stage, register callbacks for processing
// responses. We are using a closure here, but it could be a
// function if we chose (see execution_service).
fn supergraph_service(service) {
let map_callback = |response| {
try {
// Extract our set-cookie key from context
// If there is no set-cookie key in our context,
// there is no work to do.
if response.context["set_cookie_headers"] != () {
let header_value = response.context["set_cookie_headers"];
response.headers["set-cookie"] = header_value;
}
}
catch(err)
{
// log any errors
log_error(`set-cookie not created: ${err}`);
}
};
let add_cookies_to_response = |response| {
if response.context["set_cookie_headers"]?.len > 0 {
response.headers["set-cookie"] = response.context["set_cookie_headers"];
}
};
service.map_response(add_cookies_to_response);
service.map_response(map_callback);
}
fn subgraph_service(service, subgraph) {
let store_cookies_from_subgraphs = |response| {
if response.headers.values("set-cookie")?.len > 0 {
if response.context["set_cookie_headers"] == () {
response.context.set_cookie_headers = []
}
response.context.set_cookie_headers += response.headers.values("set-cookie");
}
};
const request_callback = Fn("process_request");
service.map_request(request_callback);
service.map_response(store_cookies_from_subgraphs);
}
fn process_request(request) {
// Find our cookies
if "cookie" in request.headers {
let cookies = request.headers["cookie"].split(';');
for cookie in cookies {
// Split our cookies into name and value
let k_v = cookie.split('=', 2);
if k_v.len() == 2 {
// trim off any whitespace
k_v[0].trim();
k_v[1].trim();
// update our headers
// Note: we must update subgraph.headers, since we are
// setting a header in our sub graph request
request.subgraph.headers[k_v[0]] = k_v[1];
}
}
}
}