5.0.3 • Published 2 years ago

@compassdigital/middleware v5.0.3

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

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
}
5.0.3

2 years ago

5.0.2

2 years ago

5.0.1

2 years ago

5.0.0

2 years ago

4.1.0

3 years ago

4.0.2

3 years ago

4.0.1

3 years ago

4.0.0

3 years ago

3.3.3

3 years ago

3.3.2

3 years ago

3.2.2

4 years ago

3.2.1

4 years ago

3.2.0

4 years ago

3.1.0

4 years ago

3.0.1

5 years ago

3.0.0

5 years ago

2.1.1

5 years ago

2.1.0

5 years ago

2.0.0

5 years ago

1.3.3

5 years ago

1.3.2

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.2

6 years ago

1.2.1

6 years ago

1.2.0

6 years ago

1.1.0

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago