All Projects â†’ vvo â†’ iron-store

vvo / iron-store

Licence: MIT license
🧿 in-memory, signed and encrypted JavaScript store

Programming Languages

javascript
184084 projects - #8 most used programming language

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()

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].