UNPKG

secure-timed-storage

Version:

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

2 lines (1 loc) 1.71 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("crypto-js");function h({encryptionKey:c}){const a=!!c,g=(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?u(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?u(e):JSON.parse(e)).expiry}catch(r){return console.error("Failed to get expiry",r),null}},S=()=>{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()},p=()=>{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")}},u=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:g,getItem:l,removeItem:i,getExpiry:y,getRemainingStorage:S,clearStorage:d,cleanUp:p,query:m}}exports.createSecureTimedStorage=h;