Localstorage with expiry

Extend the local storage to accept an expiry time and expire the entry after that time.

Example

// set 'bar' on 'foo' that will expiry after 1000 milliseconds
myLocalStorage.setItem('foo', 'bar', 1000);

// after 2 seconds
console.log(myLocalStorage.getItem('foo'));
// null

To implement this we will override the existing local storage method.

While adding the entry we will accept the expiry date in milliseconds (30 days by default). Set the expiry date to time from the current date along with the value and store it in the original local storage.

  // add an entry
  // default expiry is 30 days in milliseconds
  setItem(key, value, maxAge = 30 * 60 * 60 * 1000) {
     // store the value as the object
     // along with the expiry date
      let result  = {
        data : value
     }
     
     
     if(maxAge){
       // set the expiry 
       // from the current date
       result.expireTime = Date.now() + maxAge;
     }
     
     // stringify the result
     // and the data in original storage
     window.localStorage.setItem(key, JSON.stringify(result));
  }

Likewise, while getting the value for the given key, check if there is a value associated with the key, if it exists and is not expired then return the value, else remove the entry and return null.

getItem(key) {
    // get the parsed value of the given key
    let result = JSON.parse(window.localStorage.getItem(key));
    
    // if the key has value
    if(result){ 
        
        // if the entry is expired
        // remove the entry and return null
        if(result.expireTime <= Date.now()){
            window.localStorage.removeItem(key);
            return null;
        }  
        
        // else return the value
        return result.data;
    }
    
    // if the key does not have value
    return null;
  }

Putting both together

window.myLocalStorage = {
  getItem(key) {
    // get the parsed value of the given key
    let result = JSON.parse(window.localStorage.getItem(key));
    
    // if the key has value
    if(result){ 
        
        // if the entry is expired
        // remove the entry and return null
        if(result.expireTime <= Date.now()){
            window.localStorage.removeItem(key);
            return null;
        }  
        
        // else return the value
        return result.data;
    }
    
    // if the key does not have value
    return null;
  },
  
  // add an entry
  // default expiry is 30 days in milliseconds
  setItem(key, value, maxAge = 30 * 60 * 60 * 1000) {
     // store the value as object
     // along with expiry date
      let result  = {
        data : value
     }
     
     
     if(maxAge){
       // set the expiry 
       // from the current date
       result.expireTime = Date.now() + maxAge;
     }
     
     // stringify the result
     // and the data in original storage
     window.localStorage.setItem(key, JSON.stringify(result));
  },
  
  // remove the entry with the given key
  removeItem(key) {
    window.localStorage.removeItem(key);
  },
  
  // clear the storage
  clear() {
    window.localStorage.clear();
  }
};
Input:
myLocalStorage.setItem('foo', 'bar', 1000);

setTimeout(() => {
  console.log(myLocalStorage.getItem('foo'));
}, 1500);

Output:
null