this repo has no description
1import Cookies from 'js-cookie';
2
3import { getCurrentAccountNS } from './store-utils';
4
5const cookies = Cookies.withAttributes({ sameSite: 'strict', secure: true });
6
7const local = {
8 get: (key) => {
9 try {
10 return localStorage.getItem(key);
11 } catch (e) {
12 console.warn(e);
13 return null;
14 }
15 },
16 getJSON: (key) => {
17 try {
18 return JSON.parse(local.get(key));
19 } catch (e) {
20 console.warn(e);
21 return null;
22 }
23 },
24 set: (key, value) => {
25 try {
26 return localStorage.setItem(key, value);
27 } catch (e) {
28 console.warn(e);
29 return null;
30 }
31 },
32 setJSON: (key, value) => {
33 try {
34 return local.set(key, JSON.stringify(value));
35 } catch (e) {
36 console.warn(e);
37 return null;
38 }
39 },
40 del: (key) => {
41 try {
42 return localStorage.removeItem(key);
43 } catch (e) {
44 console.warn(e);
45 return null;
46 }
47 },
48};
49
50const session = {
51 get: (key) => {
52 try {
53 return sessionStorage.getItem(key);
54 } catch (e) {
55 console.warn(e);
56 return null;
57 }
58 },
59 getJSON: (key) => {
60 try {
61 return JSON.parse(session.get(key));
62 } catch (e) {
63 console.warn(e);
64 return null;
65 }
66 },
67 set: (key, value) => {
68 try {
69 return sessionStorage.setItem(key, value);
70 } catch (e) {
71 console.warn(e);
72 return null;
73 }
74 },
75 setJSON: (key, value) => {
76 try {
77 return session.set(key, JSON.stringify(value));
78 } catch (e) {
79 console.warn(e);
80 return null;
81 }
82 },
83 del: (key) => {
84 try {
85 return sessionStorage.removeItem(key);
86 } catch (e) {
87 console.warn(e);
88 return null;
89 }
90 },
91};
92
93// Session secure cookie
94const cookie = {
95 get: (key) => cookies.get(key),
96 set: (key, value) => cookies.set(key, value),
97 del: (key) => cookies.remove(key),
98};
99
100// Cookie with sessionStorage fallback
101const sessionCookie = {
102 get: (key) => {
103 if (navigator.cookieEnabled) {
104 return cookie.get(key);
105 } else {
106 return session.get(key);
107 }
108 },
109 set: (key, value) => {
110 if (navigator.cookieEnabled) {
111 return cookie.set(key, value);
112 } else {
113 return session.set(key, value);
114 }
115 },
116 del: (key) => {
117 if (navigator.cookieEnabled) {
118 return cookie.del(key);
119 } else {
120 return session.del(key);
121 }
122 },
123};
124
125// Store with account namespace (id@domain.tld) <- uses id, not username
126const account = {
127 get: (key) => {
128 try {
129 return local.getJSON(key)[getCurrentAccountNS()];
130 } catch (e) {
131 console.warn(e);
132 return null;
133 }
134 },
135 set: (key, value) => {
136 try {
137 const data = local.getJSON(key) || {};
138 data[getCurrentAccountNS()] = value;
139 return local.setJSON(key, data);
140 } catch (e) {
141 console.warn(e);
142 return null;
143 }
144 },
145 del: (key) => {
146 try {
147 const data = local.getJSON(key) || {};
148 delete data[getCurrentAccountNS()];
149 return local.setJSON(key, data);
150 } catch (e) {
151 console.warn(e);
152 return null;
153 }
154 },
155};
156
157export default { local, session, sessionCookie, cookie, account };