Skip to content
This repository has been archived by the owner on Mar 5, 2022. It is now read-only.
/ iron-store Public archive
generated from vvo/javascript-library-template

🧿 in-memory, signed and encrypted JavaScript store

License

Notifications You must be signed in to change notification settings

vvo/iron-store

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iron-store GitHub license Tests codecov npm

🧿 in-memory, signed and encrypted JavaScript store

UPDATE FROM MAINTAINER: You can now use https://github.com/vvo/iron-session/ directly and its methods sealData unsealData which will provide the same functionnality than iron-store.


This is a low-level module that you can use to implement signed and encrypted sessions using cookies for example, like next-iron-session does.

Signature and encryption is based on @hapi/iron.

Use https://1password.com/password-generator/ to generate strong passwords.

You can use multiple passwords (password rotation).

npm add iron-store

Examples

Creating a store with sealed data (encrypt):

import ironStore from "iron-store";

const store = await ironStore({
  password: "generated_complex_password_at_least_32_characters_long",
});
store.set("user", { id: 80, admin: true });
const seal = await store.seal();
//

Creating a store from previously sealed data (decrypt):

import ironStore from "iron-store";

const store = await ironStore({
  password: "generated_complex_password_at_least_32_characters_long",
  sealed: "seal_obtained_from_previous_store.seal()_call",
});
const user = store.get("user");
console.log(user);
// { id:80, admin:true }

Creating a store using multiple passwords (password rotation):

You can implement password rotation by providing an array of passwords and ids. The id can be a string (letters, numbers and _) or just a number.

The first password in the array is always the one used to seal data. All the other passwords are used to decrypt data.

Note: The id is mandatory and part of the seal, so that we can know in advance which password to use when decrypting. You need to use unique ids. You cannot reuse a id for a different password.

Note: If you started to use the string form of password, you can always move to an array of password objects. The string form of your password is internally handled as { id: 1, password }.

import ironStore from "iron-store";

const store = await ironStore({
  password: [
    {
      id: 2,
      password: "generated_complex_password_at_least_32_characters_long",
    },
    {
      id: 1,
      password: "generated_complex_password_at_least_32_characters_long",
    },
  ],
});
store.set("user", { id: 80, admin: true });
const seal = await store.seal();

API

ironStore({ [sealed], password, ttl = 0 })

store.set(name, value)

store.get([name])

store.setFlash(name, value)

store.unset(name)

store.seal()

store.clear()

About

🧿 in-memory, signed and encrypted JavaScript store

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published