@leisurelink/feature-client

0.0.2 • Public • Published

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.

  1. Require the library:

    var Feature = require('feature-client');
  2. 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

Readme

Keywords

none

Package Sidebar

Install

npm i @leisurelink/feature-client

Weekly Downloads

0

Version

0.0.2

License

none

Last publish

Collaborators

  • uniqname
  • blake1321
  • jouellette
  • lhirschi
  • flitbit
  • jtowner
  • twindagger
  • leisurelink-robot