UNPKG

secure-timed-storage

Version:

Secure timed storage library for encrypting and managing data in localStorage with expiry

82 lines (81 loc) 2.29 kB
import s from "crypto-js"; function E({ encryptionKey: c }) { const a = !!c, u = (t, e, r = null) => { try { const o = r !== null ? Date.now() + r * 36e5 : null, n = a ? f({ value: e, expiry: o }) : JSON.stringify({ value: e, expiry: o }); localStorage.setItem(t, n); } catch (o) { throw console.error("Failed to set item", o), new Error("Failed to set item"); } }, l = (t) => { const e = localStorage.getItem(t); if (!e) return null; try { const r = a ? g(e) : JSON.parse(e); return r.expiry && Date.now() > r.expiry ? (localStorage.removeItem(t), null) : r.value; } catch (r) { return console.error("Failed to get item", r), null; } }, i = (t) => { localStorage.removeItem(t); }, y = (t) => { const e = localStorage.getItem(t); if (!e) return null; try { return (a ? g(e) : JSON.parse(e)).expiry; } catch (r) { return console.error("Failed to get expiry", r), null; } }, p = () => { const t = Object.keys(localStorage).reduce((e, r) => { const o = localStorage.getItem(r); return o ? e + r.length + o.length : e; }, 0); return { usedBytes: t, remainingBytes: 5 * 1024 * 1024 - t }; }, d = () => { localStorage.clear(); }, S = () => { Object.keys(localStorage).forEach((t) => { const e = l(t); e != null && e.expiry && Date.now() > e.expiry && i(t); }); }, m = (t) => { const e = []; for (let r = 0; r < localStorage.length; r++) { const o = localStorage.key(r); if (o) { const n = l(o); n && t(n) && e.push(n); } } return e; }, f = (t) => { try { return s.AES.encrypt(JSON.stringify(t), c).toString(); } catch (e) { throw console.error("Encryption failed", e), new Error("Encryption failed"); } }, g = (t) => { try { const e = s.AES.decrypt(t, c); return JSON.parse(e.toString(s.enc.Utf8)); } catch (e) { throw console.error("Decryption failed", e), new Error("Decryption failed"); } }; return { setItem: u, getItem: l, removeItem: i, getExpiry: y, getRemainingStorage: p, clearStorage: d, cleanUp: S, query: m }; } export { E as createSecureTimedStorage };