A simple wrapper for IndexedDB with Expiry Time
// Usage:
// await idb.setItem('myKey', 'myValue', maxAge = 30 * 24 * 60 * 60 * 1000);
// await idb.getItem('myKey');
// await idb.removeItem('myKey');
// await idb.clear();
// This is a simple wrapper for IndexedDB // Note: This is a basic example and error handling should be implemented for production use. const dbRequest = indexedDB.open('myDatabase', 1); dbRequest.onupgradeneeded = event => { let db = event.target.result; db.createObjectStore('myObjectStore', { keyPath: 'id' }); }; const dbPromise = new Promise((resolve, reject) => { const dbRequest = indexedDB.open('myDatabase', 1); dbRequest.onupgradeneeded = event => { let db = event.target.result; db.createObjectStore('myObjectStore', { keyPath: 'id' }); }; dbRequest.onsuccess = () => resolve(dbRequest.result); dbRequest.onerror = () => reject(dbRequest.error); }); const idb = { async getItem(key) { const db = await dbPromise; return new Promise((resolve, reject) => { const transaction = db.transaction('myObjectStore', 'readonly'); const objectStore = transaction.objectStore('myObjectStore'); const request = objectStore.get(key); request.onsuccess = () => { const result = request.result; if (result) { if (result.expireTime <= Date.now()) { idb.removeItem(key); resolve(null); } else { resolve(result.data); } } else { resolve(null); } }; request.onerror = () => { reject('Error getting item from IndexedDB'); }; }); }, async setItem(key, value, maxAge = 30 * 24 * 60 * 60 * 1000) { const db = await dbPromise; const transaction = db.transaction('myObjectStore', 'readwrite'); const objectStore = transaction.objectStore('myObjectStore'); const data = { id: key, data: value, expireTime: maxAge ? Date.now() + maxAge : undefined }; objectStore.put(data); }, async removeItem(key) { const transaction = dbRequest.result.transaction('myObjectStore', 'readwrite'); const objectStore = transaction.objectStore('myObjectStore'); objectStore.delete(key); }, async clear() { const transaction = dbRequest.result.transaction('myObjectStore', 'readwrite'); const objectStore = transaction.objectStore('myObjectStore'); objectStore.clear(); } // Usage: // await idb.setItem('myKey', 'myValue'); // await idb.getItem('myKey'); // await idb.removeItem('myKey'); // await idb.clear(); };