UNPKG

secure-timed-storage

Version:

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

2 lines (1 loc) 1.72 kB
var secureTimedStorage=function(c,a){"use strict";function y({encryptionKey:l}){const i=!!l,d=(t,e,r=null)=>{try{const o=r!==null?Date.now()+r*36e5:null,n=i?E({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")}},s=t=>{const e=localStorage.getItem(t);if(!e)return null;try{const r=i?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}},u=t=>{localStorage.removeItem(t)},S=t=>{const e=localStorage.getItem(t);if(!e)return null;try{return(i?g(e):JSON.parse(e)).expiry}catch(r){return console.error("Failed to get expiry",r),null}},m=()=>{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}},p=()=>{localStorage.clear()},f=()=>{Object.keys(localStorage).forEach(t=>{const e=s(t);e!=null&&e.expiry&&Date.now()>e.expiry&&u(t)})},h=t=>{const e=[];for(let r=0;r<localStorage.length;r++){const o=localStorage.key(r);if(o){const n=s(o);n&&t(n)&&e.push(n)}}return e},E=t=>{try{return a.AES.encrypt(JSON.stringify(t),l).toString()}catch(e){throw console.error("Encryption failed",e),new Error("Encryption failed")}},g=t=>{try{const e=a.AES.decrypt(t,l);return JSON.parse(e.toString(a.enc.Utf8))}catch(e){throw console.error("Decryption failed",e),new Error("Decryption failed")}};return{setItem:d,getItem:s,removeItem:u,getExpiry:S,getRemainingStorage:m,clearStorage:p,cleanUp:f,query:h}}return c.createSecureTimedStorage=y,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),c}({},CryptoJS);