Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / api / helpers / localStorageWithExpiry.ts
blobc356f714884c8ef17afa665662fd59c89e92947c
1 interface StoredItem {
2     value: string;
3     expiresAt: number;
6 /**
7  * Enhances the local storage capabilities by allowing data to be stored with an expiration time.
8  * When data expires, it can be automatically purged from storage.
9  */
10 const localStorageWithExpiry = {
11     /**
12      * Stores a data item with an expiration time in local storage.
13      *
14      * @param key - The key under which the item will be stored.
15      * @param value - The stringified value to be stored.
16      * @param expirationInMs - The duration in milliseconds after which the item expires. Defaults to 600000ms (10 minutes).
17      */
18     storeData: (key: string, value: string, expirationInMs: number = 10 * 60 * 1000): void => {
19         const item: StoredItem = {
20             value,
21             expiresAt: Date.now() + expirationInMs,
22         };
23         window.localStorage.setItem(key, JSON.stringify(item));
24     },
26     /**
27      * Retrieves a data item from local storage if it has not expired.
28      *
29      * @param key - The key of the item to retrieve.
30      * @returns The stored value if it is still valid, or null if it has expired or does not exist.
31      */
32     getData: (key: string): string | null => {
33         const storedValue = window.localStorage.getItem(key);
34         if (storedValue) {
35             const { value, expiresAt }: StoredItem = JSON.parse(storedValue);
36             if (expiresAt > Date.now()) {
37                 return value;
38             }
39             window.localStorage.removeItem(key);
40         }
41         return null;
42     },
44     /**
45      * Removes a data item from local storage.
46      *
47      * @param key - The key of the item to remove.
48      */
49     deleteData: (key: string): void => {
50         window.localStorage.removeItem(key);
51     },
53     /**
54      * Checks if a data item in local storage has expired and removes it if so.
55      *
56      * @param key - The key of the item to check for expiration.
57      */
58     deleteDataIfExpired: (key: string): void => {
59         const storedValue = window.localStorage.getItem(key);
60         if (storedValue) {
61             const { expiresAt }: StoredItem = JSON.parse(storedValue);
62             if (expiresAt < Date.now()) {
63                 window.localStorage.removeItem(key);
64             }
65         }
66     },
69 export default localStorageWithExpiry;