2.0.0 • Published 2 years ago

feature-toggle-client v2.0.0

Weekly downloads
184
License
MIT
Repository
-
Last release
2 years ago

Build Status Coverage Status npm MIT license

Feature Toggle Client

Usage

First, install client

npm i -S feature-toggle-client

Initialize user or application with a payload and LauchDarkly key. You also can intialize the Launch Darkly API with an Authorization Token, Project Key and Environment Key.

import { FeatureToggleClientService } from 'feature-toggle-client'

const init = () => {
  // Initialize user instance
  FeatureToggleClientService
    .initializeUser({
      fullName: 'My incredible name',
      email: 'user@email.com', // LauchDarkly user key
    }, 'YOUR-LAUNCH-DARKLY-KEY')

  // Initialize user application
  FeatureToggleClientService
    .initializeApplication({
      shortName: 'applicationShortName', // LauchDarkly user key
      name: 'Application name',
    }, 'YOUR-LAUNCH-DARKLY-KEY')

  // Initialize api service
  FeatureToggleClientService
    .initializeApiService({ 
      projectKey: 'project key', // LaunchDarkly project key, (found in: AccountSettings-Projects)
      environmentKey: 'environment key', // LaunchDarkly environment key (found in: AccountSettings-Projects) 
      authorizationToken: 'YOUR-LAUNCH-DARKLY-API-AUTHORIZATION-TOKEN'
    });
}

While checking for feature value, we recommend decouple a toggling decision point from the logic. (ref). So, we create a class that directly call our client and expose a method like so:

const myFeatureFlagKey = 'feature-flag-key';
export class MyFeaturesDecisions {
  /**
   * Checking for application
   **/
  public static someFeatureApplicationEnabled(): Promise<any> {
    return FeatureToggleClientService
      .getInstance()
      .isApplicationFeatureEnabled(myFeatureFlagKey)
  }

  /**
   * Checking for user
   **/
  public static someFeatureUserEnabled(): Promise<any> {
    return FeatureToggleClientService
      .getInstance()
      .isUserFeatureEnabled(myFeatureFlagKey)
  }

  /**
   * Checking for user or application
   **/
  public static someFeatureEnabled(): Promise<any> {
    return FeatureToggleClientService
      .getInstance()
      .isFeatureEnabled(myFeatureFlagKey)
  }
}

So, in your controller, we recommend use of an interface IToggleable that implements checkFeatures method. This make class more clearly about it implementation.

import { IToggleable } from 'feature-toggle-client'
import { MyFeaturesDecisions } from './MyFeaturesDecisions'

class Foo implements IToggleable {
  /**
   * Check for features
   **/
  public async checkFeatures(): Promise<any> {
    //Checking for user
    this.isUserFeatureEnabled = await MyFeaturesDecisions.someFeatureUserEnabled()

    //Checking for application
    this.isApplicationFeatureEnabled = await MyFeaturesDecisions.someFeatureApplicationEnabled()
  }
}

You can add a user to a feature toggle like the code:

const myFeatureFlagKey = 'feature-flag-key';
export class MyFeaturesDecisions {
  /**
   * Adding user to a feature toggle
   **/
  public static addUserToSomeFeature(): Promise<bool> { // true if user was added successfully
    return FeatureToggleClientService
      .getInstance()
      .addUserToFeatureToggle({ email: 'user@mail.com' }, myFeatureFlagKey)
  }

  /**
   * Adding users to a feature toggle
   **/
  public static addUserToSomeFeature(): Promise<bool> { // true if user was added successfully
    return FeatureToggleClientService
      .getInstance()
      .addUserToFeatureToggle(
        [{ email: 'user1@mail.com' }, { email: 'user2@mail.com' }],
        myFeatureFlagKey)
  }
}

Running tests

Create file secret.ts following this pattern

export const secrectKey = 'YOUR-LAUNCH-DARKLY-KEY';
export const apiAuthorizationToken = 'YOUR-LAUNCH-DARKLY-API-AUTHORIZATION-TOKEN'; //found in: AccountSettings-Authorization

That's all!

1.7.0

2 years ago

2.0.0

2 years ago

1.6.0

3 years ago

1.5.1

3 years ago

1.5.0

3 years ago

1.3.0

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

6 years ago

1.1.0

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

0.0.0

6 years ago