Skip to content

Electron-like encryption/decryption API for Node.js and browsers

License

Notifications You must be signed in to change notification settings

pine/safe-storage

Repository files navigation

safe-storage

NPM Version Test codecov

Electron-like encryption/decryption API for Node.js and browsers

Features

  • Only ESM is supported as a module system (CJS is not supported)
  • Supports Node.js (>= v19.0.0) and modern browsers
  • Provides TypeScript type definitions as default

Getting started

Install

First, install this package as follows:

# For npm users
$ npm install --save @pinemz/safe-storage

# For yarn users
$ yarn add @pinemz/safe-storage

# For pnpm users
$ pnpm add @pinemz/safe-storage

Usage

After installation, use the CLI to encrypt any text:

# Encrypts using a password stored in the OS keychain.
# (If none exists, it will be generated automatically and stored in the OS keychain)
$ safe-storage encrypt -s <service> -a <account> <text to encrypt>

Finally, decrypt the encrypted text in your script:

import { Keychain, SafeStorage } from '@pinemz/safe-storage'

const keychain = new Keychain('<service>', '<account>')
const safeStorage = new SafeStorage(await keychain.getOrCreatePassword())

const decryptedText = safeStorage.decryptString('<encrypted text>')
console.log(decryptedText)

References

CLI

$ safe-storage --help
Usage: safe-storage <command> <options> <inputs>

Encryption command:
  Encryption requires -s and -a or -p.
  If you use -s and -a, save your password in your keychain beforehand,
  otherwise a new password will be generated and saved.

  $ safe-storage encrypt -s <service> -a <account> <plainText>
  $ safe-storage encrypt -p <password> <plainText>

Decryption command:
  Decryption requires -s and -a or -p.
  If you use -s and -a, save your password in your keychain beforehand,
  otherwise a new password will be generated and saved.

  $ safe-storage decrypt -s <service> -a <account> <encryptedText>
  $ safe-storage decrypt -p <password> <encryptedText>

Options:
  -s/--service  : Specify keychain service
  -a/--account  : Specify keychain account
  -p/--password : Specify password directly in plain text
  -v/--version  : Show package version
  -h/--help     : Show help

API

FAQ

Q. Is this library only available for macOS?

No, it is also available for Linux and Windows.

This library uses keytar to access keychain when running on Node.js. keytar supports not only macOS, but also Linux and Windows.

License

MIT © Pine Mizune

About

Electron-like encryption/decryption API for Node.js and browsers

Resources

License

Stars

Watchers

Forks

Releases

No releases published