@leisurelink/feature-client
v0.0.2
Published
LeisureLink feature toggle client library
Downloads
3
Keywords
Readme
Feature Flags
This module enables an application to have the ability to control certain aspects of its execution based on whether or not a feature is enabled or has other specific enabling criteria, such as if the requesting user is an admin.
Note: This module is still in progress and currently only operates inside of the quicklink-api database. This will be refactored to utilize the Consul key-value store with refreshable configuration and will then be usable by any project.
Usage
There are two ways to test for enabled features: async invocation with enabled/disabled callbacks and as Express middleware. Either way, initialization of the backing API client must be performed beforehand.
Initialization
To provide friendlier syntax for actually wrapping feature blocks, we take a slightly different approach and establish the backing TrustedClient with an initialization routine.
Require the library:
var Feature = require('feature-client');
Inside wireup, initialize the client:
Feature.init(<feature-api-url>, config.get(configName, '#/trusted_endpoint/key_id'), app.locals.privateKey, log);
That's it! Now you're able to use one of the two following invocation methods:
Async Invocation
Given a feature named bookings
:
Feature('bookings', req).isEnabled(function() {
// The feature is enabled
}, function(error) {
if (error) {
// There was a problem checking for the feature
}
// The feature was disabled
});
Note that when we create the Feature object, we're passing along the Node.js request object. This is utilized in conjunction with a feature being marked as adminOnly
. In this scenario, we will check that the req.user
object has one of the claims associated with being an admin.
*Note: You must provide both enabled and disabled callbacks to the isEnabled() function.
If the req
object is not passed into the Feature constructor, features that are marked as adminOnly
will be treated as disabled.
Middleware Invocation
Express routes are effective a series of middleware functions, and the Feature library easily allows securing routes.
Feature('bookings').isEnabled(function(req, res, next) {
// Normal code for your middleware goes here
});
In the above example, if the bookings
feature is enabled, the route (middleware) will be invoked normally.
If bookings
was disabled, the Feature library will automatically invoke the next
function with a message denoting the feature was disabled. By convention, when the next
function receives an argument, Express.js will treat it as an error and halt execution of subsequent non-error-handling middleware.
Testing
To invoke the feature-client tests, we need feature-api to be up and running. We also need a clean database. The following should get you there:
cd /path/to/feature-api
mocha
FEATURE_DB_URI=mongodb://localhost/quicklink-test node app
Now, in a new terminal:
cd /path/to/feature-client
mocha