Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / helpers / cookies.ts
blobc2831e9a39c88d0305d69fc49a4a7763aeb2310a
1 import isTruthy from '@proton/utils/isTruthy';
3 export const getCookies = (): string[] => {
4     try {
5         return document.cookie.split(';').map((item) => item.trim());
6     } catch (e: any) {
7         return [];
8     }
9 };
11 export const getCookie = (name: string, cookies = document.cookie) => {
12     return `; ${cookies}`.match(`;\\s*${name}=([^;]+)`)?.[1];
15 export enum CookieSameSiteAttribute {
16     Lax = 'lax',
17     Strict = 'strict',
18     None = 'none',
21 export interface SetCookieArguments {
22     cookieName: string;
23     cookieValue: string | undefined;
24     cookieDomain?: string;
25     expirationDate?: string;
26     path?: string;
27     secure?: boolean;
28     samesite?: CookieSameSiteAttribute;
31 export const setCookie = ({
32     cookieName,
33     cookieValue: maybeCookieValue,
34     expirationDate: maybeExpirationDate,
35     path,
36     cookieDomain,
37     samesite = CookieSameSiteAttribute.Lax,
38     secure = true,
39 }: SetCookieArguments) => {
40     const cookieValue = maybeCookieValue === undefined ? '' : maybeCookieValue;
42     let expirationDate = maybeExpirationDate;
44     if (expirationDate === 'max') {
45         /* https://en.wikipedia.org/wiki/Year_2038_problem */
46         expirationDate = new Date(2147483647000).toUTCString();
47     }
49     expirationDate = maybeCookieValue === undefined ? new Date(0).toUTCString() : expirationDate;
51     document.cookie = [
52         `${cookieName}=${cookieValue}`,
53         expirationDate && `expires=${expirationDate}`,
54         cookieDomain && `domain=${cookieDomain}`,
55         path && `path=${path}`,
56         secure && 'secure',
57         samesite && `samesite=${samesite}`,
58     ]
59         .filter(isTruthy)
60         .join(';');
63 export const deleteCookie = (cookieName: string) => {
64     setCookie({
65         cookieName,
66         cookieValue: undefined,
67         path: '/',
68     });