@multiplayer-app/session-recorder-browser
Version:
Multiplayer Fullstack Session Recorder for Browser
54 lines • 2.02 kB
JavaScript
const dbName = 'mpRrwebEventsDB';
const storeName = 'mpEventsStore';
export class IndexedDBService {
constructor() {
this.dbPromise = this.openDB();
}
openDB() {
return new Promise((resolve, reject) => {
const request = indexedDB.open(dbName, 1);
request.onupgradeneeded = () => {
const db = request.result;
if (!db.objectStoreNames.contains(storeName)) {
db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
}
};
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
async saveEvent(event) {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const tx = db.transaction(storeName, 'readwrite');
const store = tx.objectStore(storeName);
store.add({ event });
tx.oncomplete = () => resolve();
tx.onerror = () => reject(tx.error);
});
}
async getAllEvents() {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const tx = db.transaction(storeName, 'readonly');
const store = tx.objectStore(storeName);
const request = store.getAll();
request.onsuccess = () => {
const events = request.result.map((record) => record.event);
resolve(events);
};
request.onerror = () => reject(request.error);
});
}
async clearEvents() {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const tx = db.transaction(storeName, 'readwrite');
const store = tx.objectStore(storeName);
store.clear();
tx.oncomplete = () => resolve();
tx.onerror = () => reject(tx.error);
});
}
}
//# sourceMappingURL=indexedDbService.js.map