forked from deco-cx/deco
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflags.ts
39 lines (32 loc) · 956 Bytes
/
flags.ts
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
import { getCookies, setCookie } from "std/http/mod.ts";
const DECO_COOKIE = "dcxf_";
export const cookies = {
getFlags: (headers: Headers) => {
const cookies = getCookies(headers);
const flags: CookiedFlag[] | undefined = Object.keys(cookies)
.filter((cookie) => cookie.startsWith(DECO_COOKIE))
.map((cookie) => JSON.parse(atob(cookies[cookie])));
if (!flags) {
return null;
}
const flagSet = new Map<string, CookiedFlag>();
for (const flag of flags) {
flagSet.set(flag.key, flag);
}
return flagSet;
},
setFlags: (headers: Headers, flags: CookiedFlag[]) => {
for (const flag of flags) {
const name = `${DECO_COOKIE}${flag.key}`;
const value = btoa(JSON.stringify(flag));
setCookie(headers, { name, value });
}
},
};
export interface CookiedFlag {
key: string;
isMatch: boolean;
// deno-lint-ignore no-explicit-any
value: any;
updated_at: string;
}