this repo has no description
at main 157 lines 3.1 kB view raw
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 };