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();
};