UNPKG

bigblocks

Version:

Complete Bitcoin UI component library - authentication, social, wallet, market, inscriptions, and blockchain interactions for React

84 lines (83 loc) 2.85 kB
/** * Browser sessionStorage adapter * Data persists only for the duration of the page session * Only works in browser environments */ export function createSessionStorage(options) { const prefix = options?.prefix ?? "bigblocks:"; // Check if sessionStorage is available const isAvailable = typeof window !== "undefined" && window.sessionStorage; if (!isAvailable) { console.warn("sessionStorage is not available. Using memory storage as fallback."); // Return a memory storage adapter as fallback const fallbackStore = new Map(); return { async get(key) { return fallbackStore.get(prefix + key) ?? null; }, async set(key, value) { fallbackStore.set(prefix + key, value); }, async delete(key) { fallbackStore.delete(prefix + key); }, async clear() { for (const key of fallbackStore.keys()) { if (key.startsWith(prefix)) { fallbackStore.delete(key); } } }, }; } return { async get(key) { try { return sessionStorage.getItem(prefix + key); } catch (error) { console.error("sessionStorage.get error:", error); return null; } }, async set(key, value) { try { sessionStorage.setItem(prefix + key, value); } catch (error) { console.error("sessionStorage.set error:", error); // Check if it's a quota exceeded error if (error instanceof Error && error.name === "QuotaExceededError") { throw new Error("sessionStorage quota exceeded"); } throw error; } }, async delete(key) { try { sessionStorage.removeItem(prefix + key); } catch (error) { console.error("sessionStorage.delete error:", error); } }, async clear() { try { // Only clear keys with our prefix const keysToRemove = []; for (let i = 0; i < sessionStorage.length; i++) { const key = sessionStorage.key(i); if (key?.startsWith(prefix)) { keysToRemove.push(key); } } for (const key of keysToRemove) { sessionStorage.removeItem(key); } } catch (error) { console.error("sessionStorage.clear error:", error); } }, }; }