UNPKG

capacitor-shamir

Version:

Provides Shamir's Secret Sharing (SSS) functionality for secure splitting and recovering secrets natively on iOS, Android, and Web.

77 lines 2.84 kB
/** * Simple IndexedDB Key-Value Storage * * IndexedDB, as a transactional database, has a somewhat clunky API. * This service provides a localStorage-like interface for IndexedDB, wrapped in promises. * * localStorage has a very low storage limit (5MB), so during development it may not be * sufficient to store all the data required for the app to function properly. */ export class IndexedDbFileStorage { constructor() { this.config = { dbName: 'Disc', version: 1, storeName: 'FileStorage', }; } async setItem(data) { const db = await this.openDB(); const tx = db.transaction(this.config.storeName, 'readwrite'); const store = tx.objectStore(this.config.storeName); const request = store.put(data); await this.handleDBRequest(request, db); } async getItem(path) { const db = await this.openDB(); const tx = db.transaction(this.config.storeName, 'readonly'); const store = tx.objectStore(this.config.storeName); const request = store.get(path); const result = await this.handleDBRequest(request, db); if (result === undefined) { return null; } return result; } async removeItem(path) { const db = await this.openDB(); const tx = db.transaction(this.config.storeName, 'readwrite'); const store = tx.objectStore(this.config.storeName); const request = store.delete(path); await this.handleDBRequest(request, db); } updateIndexedDbConfig(config) { this.config = Object.assign(Object.assign({}, this.config), config); } async openDB() { return new Promise((resolve, reject) => { const request = indexedDB.open(this.config.dbName, this.config.version); request.onupgradeneeded = () => { const db = request.result; if (!db.objectStoreNames.contains(this.config.storeName)) { db.createObjectStore(this.config.storeName, { keyPath: 'path' }); } }; request.onsuccess = () => resolve(request.result); request.onerror = () => reject(request.error); }); } /** * Handle database request promise with proper cleanup * @param request The database request to handle * @param db The database instance to close */ handleDBRequest(request, db) { return new Promise((resolve, reject) => { request.onsuccess = () => { db.close(); resolve(request.result); }; request.onerror = () => { db.close(); reject(request.error); }; }); } } //# sourceMappingURL=indexeddb-file-storage.js.map