npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

env-enforcer

v1.1.0

Published

an express middleware to enforce env config for health routes

Downloads

9

Readme

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.