Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

fastify-feature-flags

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fastify-feature-flags

Fastify feature flags plugin

  • 1.2.9
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
3
Maintainers
1
Weekly downloads
 
Created
Source

fastify-feature-flags

NPM Version Downloads Count Vunerabilities Count Build Status License

Fastify feature flags plugin. By default it has built-in provider for config module. However it could be extended by various plugins that implement simple interface.

This plugin is currently in beta, so some bugs can appear. Feel free to create an issue and I'll try to fix them asap.

ToC

Fastify support

  • v1.x.x - supports >= fastify-1.0.0, including v2.x.x versions.

Installation

npm i fastify-feature-flags --save

Back to top

Features and requirements


  • Requires fastify >=1.0.0.
  • Node.js >=8.9.0.

Back to top

Usage

Add it to your project like regular fastify plugin. Use register method and pass options to it.

const fastify = require('fastify');
const app = fastify();

const ffPlugin = require('fastify-feature-flags');
const ConfigProvider = require('fastify-feature-flags/dist/providers/config');
app.register(ffPlugin, {providers: [new ConfigProvider()]});

Plugin adds an object with built-in providers and generic provider interface that you can extend. For checking features availability it adds two methods: fastify.featureFlags.isEnabled which returns true or false and fastify.featureFlags.checkEnabled which throws an error if feature is disabled. The list of built-in providers is available below.

Back to top

Providers

Generic provider

Generic provider is an abstract class that you may extend to add new providers. It should have isEnabled method that consumes feature name and context (optionally) and returns true or false.

Config provider

Reads feature flags from specified config section. Depends on config module. You should install it manually. It's constuctor consumes options object that contains prefix for config section where features are defined.

Example:

default.js (in config directory):

module.exports = {
  features: {
    a: true,
    b: false,
  }
}

Configuring provider:

const ConfigProvider = require('fastify-feature-flags/dist/providers/config');
const provider = new ConfigProvider({
  prefix: 'features',
})

Valid config values for feature to be enabled are: true, "true" or "1". Last two may be useful if you're using config module with env overrides.

Env provider

Reads feature flags from env variables. It's constuctor consumes options object that may contain prefix for filtering env variables containing features.

Example:

default.js (in config directory):

FEATURE_A = true
FEATURE_B = false

Configuring provider:

const EnvProvider = require('fastify-feature-flags/dist/providers/env');
const provider = new EnvProvider({
  prefix: 'FEATURE_',
})

Valid config values for feature to be enabled are: "true" or "1".

Unleash provider

This provider relies on feature flags service Unleash. You should install the module manually.

Example:

Configuring provider:

const UnleashProvider = require('fastify-feature-flags/dist/providers/unleash');
const provider = new UnleashProvider({
  appName: 'my-fastify-app',
  url: 'https://unleash.example.com/api',
})

For more options please refer to unleash docs

Using plugin

After configuring providers and registering the plugin in your fastify app you can use isEnabled or checkEnabled methods.

You may also specify multiple providers, then the feature will be enabled only when it will be enabled in all providers.

Example:

const fastify = require('fastify')();
const ffPlugin = require('fastify-feature-flags');
const EnvProvider = require('fastify-feature-flags/dist/providers/env');

fastify.register(ffPlugin, {
  providers: [new EnvProvider({prefix: 'FEATURE_'})]
});

fastify.get('/a', async (request, reply) => {
  await fastify.featureFlags.checkEnabled('A');
  reply.type('application/json').code(200);
  return { a: 'enabled' };
});

fastify.get('/b', async (request, reply) => {
  const isEnabled = await fastify.featureFlags.isEnabled('B');
  reply.type('application/json').code(200);
  return { b: isEnabled };
});

(async () => {
  await fastify.ready();
  await fastify.listen(3000);
})();

Back to top

Docs

See docs.

Back to top

Changelog

See changelog.

Back to top

See also

Back to top

License

Licensed under MIT.

Back to top

Keywords

FAQs

Package last updated on 15 Jul 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc