encrypted-env
TypeScript icon, indicating that this package has built-in type declarations

0.2.1 • Public • Published

encrypted-env

ci npm license

encrypted-env is designed to make encrypting and decrypting sensitive .env files a breeze. It's supports using different configuration files for different environments (e.g. development, staging, and production) with different encryption keys for each, and can detect which to load based on existing environmental variavbles.

Installation

npm install encrypted-env

Encrypting / Decrypting

This package provides two commands, env-encrypt and env-decrypt. To encrypt your .env file, run npx env-encrypt. If encrypting for the first time, the user will be prompted to enter in a 32-character key. The key is then stored for future encryption / decryption.

Multiple Environments

Create a .env-encrypted.config.json configuration file in the root of your project that maps environment names to the filename of the configuration file to use.

{
  "development": ".env.dev",
  "staging": ".env.staging",
  "production": ".env.prod"
}

Once defined, you can encrypt and decrypt configuration files for each environment by appending the environment name to the command:

npx env-encrypt staging

This may also be used in the scripts section of your package.json file:

{
  "name": "project-name",
  "scripts": {
    "encrypt:staging": "env-encrypt staging",
    "decrypt:staging": "env-decrypt staging"
  }
}

CI

To enable dynamic decryption in CI, set a secret in the repository and inject it into the process ENV for decryption.

For example, here's a GitHub Actions job that decrypts the env files for a project prior to running integration tests that require them:

  integration-test:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: 14.x

      - name: Install dependencies
        run: npm install

      - name: Decrypt env
        run: npx env-decrypt
        env:
          ENV_KEY: ${{ secrets.ENV_KEY }}
          CI: true

      - name: Run integration tests
        run: npm run test:integration

Loading configuration in runtime

To load environmental variables into your project:

import loadENV from 'encrypted-env';

const env = loadENV();

If you have multiple environments defined, it will load the config file that corresponds to the environment set in the NODE_ENV or ENVIRONMENT variable.

For example, if the NODE_ENV process env is set to development and the .env-encrypted.config.json file looks like this:

{
  "development": ".env.dev",
  "staging": ".env.staging",
  "production": ".env.prod"
}

Then it will attempt to parse and load .env.dev. If it cannot find .env.dev, it will fail with an error prompting the user to run npx env-decrypt development- which will attempt to create .env.dev from .env.dev.encrypted.

Version Control

Make sure to add these lines to your .gitignore file:

**/*.env
**/*.key

This way, only the encrypted .env files will be pushed to version control.

License

MIT © Jesse Youngblood

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.2.1
    1
    • latest

Version History

Package Sidebar

Install

npm i encrypted-env

Weekly Downloads

0

Version

0.2.1

License

MIT

Unpacked Size

30.2 kB

Total Files

23

Last publish

Collaborators

  • jessety