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

@leisurelink/feature-client

v0.0.2

Published

LeisureLink feature toggle client library

Downloads

10

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.

  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