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

1.1.0 • Public • Published

env-enforcer

a tool to help validate the process env for express applications.

purpose

the idea behind this module is this:

  • you're deploying an application
  • you need to validate all deployments have the correct env config
  • you want the app to fail a health check and provide information about why

those things in mind, you can use this tool to auto-fail your health check if a deployment is misconfigured. bear in mind the logs will provide information about your application so make sure it's not user facing. this tool is meant to send info to your logs and those should be privately indexed with splunk or whatever log ingestion tool you love.

use

to use the tool, create a middleware and add it to your health route:

import express from 'express';
import { envMiddleware } from 'env-enforcer';

const app = express();

const middleware = envMiddleware({
  USERNAME: 'hammy',
});

app.get('/health', middleWare, (req, res) => {
  res.send('ok');
});

app.use((err, req, res, next) => {
  if (!res.headersSent) res.send(err.message);
  next();
});

app.listen(42069);

Which would return a 500 for /health if the process.env.USERNAME is not 'hammy'. There are a few types we can parse in the helper.

EnvConfig Help

The env config exports it's types for use with TypeScript, but here they are:

export type PossibleValidator = string | number | number[] | string[] | RegExp | ((key: string) => boolean)

export interface EnvConfig {
  [envKey: string]: PossibleValidator
}

So a number/string or an array of them, a RegEx check, or a function that will be passed the key value and expects a boolean return; true if valid, false if invalid. The return function is async and allows the passing of promise based validation functions.

Middleware Overrides

We also export the TypeScript types, but here they are:

export interface Overrides {
  infoLogger?: (msg: string) => void
  errorLogger?: (msg: string) => void
  shouldThrow?: boolean
  updateStatus?: boolean
  statusCode?: number
}

We give you the ability to add info and error logs, override the default status setting of 500 or at all, and allow you to set it to 'throw' or pass an error to the NextFunction from express, triggering your final error catching middleware. Our implementation uses the next callback to process your validation. Make sure you're using next and middleware in the prescribed way. The statusCode key allows for a custom error code if your stack uses them.

Examples

There is a live example you can see in the lib/examples folder.

Readme

Keywords

none

Package Sidebar

Install

npm i env-enforcer

Weekly Downloads

0

Version

1.1.0

License

WTFPL

Unpacked Size

26.4 kB

Total Files

18

Last publish

Collaborators

  • hweeks