This package has been deprecated

Author message:

use @compassdigital/core/middleware

@compassdigital/middleware

5.0.3 • Public • Published

compassdigital.middleware

CDL Provider middleware module

  • This middleware module extends the CDL core provider with the ability to run functions before requests get handled
  • This can be handled at the provider level (for every incoming request) or at the event level (for particular events, ex: "post_order")

Usage

Registering Provider-level middleware

const Middleware = require("@compassdigital/middleware").handler;
const ActionLogger = require("@compassdigital/middleware").fn.ActionLogger;

/**
 * Inside the Provider constructor.
 * The "bind" call is needed for this particular function but
 * is not needed to make any custom middleware work with this
 * package.
 */
this.middleware = new Middleware(ActionLogger.bind(this));

Registering handler-level middleware

const Middleware = require("@compassdigital/middleware").handler;

// Inside the domain-specific Provider
function bodyLogger (req, res, next) {
	/**
	 * req: the request object from the lambda event
	 * res: the response object currently only holds a reference to user-defined local variables specific to the lifecycle of a single request
	 * next: the callback function to call when the middleware is finished work.
	 *	- No parameters passes the middleware off to the next layer in the stack
	 *	- Passing an error will cause the provider's error handler to take over and send the appropiate response
	 *	- Passing true will skip the rest of the middleware for the current request
	 /
	console.log(JSON.stringify(req.body));
	return next();
}

Provider.on("post_test", "*:*:*", [ bodyLogger, async function (req, next) {
	// Business logic here...
}]);

Feature Flagging

Feature flagging middleware provides an easy way to get state of flags in the req object.

const FeatureFlagging = require('@compassdigital/middleware').fn.FeatureFlagging;

You can register the middleware at the provider level with minimal boilerplate code.

UserProvider.use(FeatureFlagging.call(UserProvider));

Or at the handler level

Provider.on("post_test", "*:*:*", [FeatureFlagging(), async function (req, next) {
	// Business logic here...
}]);

From here on, a feature_flags property will be exposed on the req object. You can then use the flags as

Provider.on("post_test", "*:*:*", async function (req, next) {
	if (req.feature_flags.my_feature_1) doSomething();
});
Split API Key

For the middleware to be able to contact Split, an environment variable must be set in the provider's serverless.yml file.

provider:
    environment:
        SPLIT_KEY: ${config:SPLIT_KEY}
Flag Caching

Before the middleware hits Split to retrieve the flags, it gets a CDL config file that has a cache_time property. This tells the middleware how long it should hold on to the flags before getting them again from Split. This can be changed.

{
    "is_split_enabled": true,
    "cache_time": 10000
}

Readme

Keywords

Package Sidebar

Install

npm i @compassdigital/middleware

Weekly Downloads

7

Version

5.0.3

License

ISC

Unpacked Size

17.6 kB

Total Files

11

Last publish

Collaborators

  • tsinghgill
  • kuaniyeung-cdl
  • kyle.welfare
  • ozan-compass
  • tommytaiwo-cdl
  • sailalitya
  • mayaison
  • magda.strzoda
  • cdl-pavani-jandhyala
  • mrizzello-compass
  • jorszycompass
  • mythusiva-compassdigital
  • rafael-fml
  • evolchek-cd
  • rsteiner
  • harsh-dev-tech
  • vysakh.prasanth
  • abhi9195
  • luke-chisholm-compass
  • petrusdemelo
  • robalonzi
  • aarusharora
  • drashti_patel
  • svietz
  • sanjay_tech
  • brahmrshi_tech
  • tfox121
  • rachitaj
  • matthewclair
  • qihangsong
  • collinstonefromcompass
  • hermsidhu
  • ananthu.cdl
  • ospozito
  • cdl-samir-thaker
  • dhruv.seth
  • ricardodesimas
  • zach-cdl
  • svtokarevsv
  • astrit-cdl
  • keyur-cdl
  • jpdemiranda
  • toronto.devops
  • andrei-cdl
  • alberttir
  • umeshprasad
  • kieranshb
  • eirabie
  • coreycosman.cdl
  • marlondc
  • eiston-cdl
  • icholy
  • brunnodatum