main
ts 67 lines 1.79 KB
Raw
1 import SecureLSModule from "secure-ls"
2
3 type SecureLSConstructor = typeof SecureLSModule
4
5 const SecureLS: SecureLSConstructor =
6 typeof SecureLSModule === "function"
7 ? SecureLSModule
8 : (SecureLSModule as unknown as { default: SecureLSConstructor }).default
9
10 const secureLS = new SecureLS({
11 encodingType: "aes",
12 isCompression: false
13 })
14
15 const PREFIX_PERSISTED = "__persisted__"
16 const PREFIX_SESSION = "__persisted-session__"
17
18 export function persistentKey(options?: { session?: boolean }) {
19 const prefix = options?.session ? PREFIX_SESSION : PREFIX_PERSISTED
20 return (id: string) => `${prefix}${id}`
21 }
22
23 export function removePersistentSessionKey() {
24 for (const key of secureLS.getAllKeys()) {
25 if (key.includes(PREFIX_SESSION)) {
26 secureLS.remove(key)
27 }
28 }
29 }
30
31 export function secureLocalStorage(options?: { session?: boolean }) {
32 return {
33 getItem(key: string) {
34 try {
35 return secureLS.get(persistentKey({ session: options?.session })(key))
36 } catch (err) {
37 console.warn(`[secureLocalStorage] Failed to get "${key}"`, err)
38 return null
39 }
40 },
41
42 setItem(key: string, value: string): void {
43 try {
44 secureLS.set(persistentKey({ session: options?.session })(key), value)
45 } catch (err) {
46 console.warn(`[secureLocalStorage] Failed to set "${key}"`, err)
47 }
48 },
49
50 removeItem(key: string): void {
51 try {
52 secureLS.remove(persistentKey({ session: options?.session })(key))
53 } catch (err) {
54 console.warn(`[secureLocalStorage] Failed to remove "${key}"`, err)
55 }
56 }
57 }
58 }
59
60 export function piniaStorage(options?: { session?: boolean }) {
61 return {
62 getItem: (key: string) => secureLS.get(persistentKey({ session: options?.session })(key)),
63 setItem: (key: string, value: unknown) => secureLS.set(persistentKey({ session: options?.session })(key), value)
64 }
65 }
66
67 export { secureLS }