Skip to content

Latest commit

 

History

History

README.md

Flipt Node

npm

This directory contains the TypeScript source code for the Flipt server-side client.

Documentation

API documentation is available at https://www.flipt.io/docs/reference/overview.

Installation

npm i @flipt-io/flipt@{version}

Usage

In your Node code you can import this client and use it as so:

import { FliptClient } from "@flipt-io/flipt";

const fliptClient = new FliptClient();

async function evaluate() {
  const variantEvaluationResponse = await fliptClient.evaluation.variant({
    namespaceKey: "default",
    flagKey: "flag1",
    entityId: "entity",
    context: { fizz: "buzz" }
  });

  console.log(variantEvaluationResponse);
}

There is a more detailed example in the examples directory.

Setting HTTP Headers

You can set custom HTTP headers for the client by using the headers parameter in the constructor.

const fliptClient = new FliptClient({
  headers: { "X-Custom-Header": "Custom-Value" }
});

Flipt V2 Environment Support

Flipt V2 introduces the concept of environments. This client supports evaluation of flags in a specific environment by using the X-Flipt-Environment header.

const fliptClient = new FliptClient({
  headers: { "X-Flipt-Environment": "production" }
});

Metrics

There is support for Datadog RUM through this client. This allows you to track the values of feature flag evaluation and how it relates to active browser sessions.

You can first install the datadog RUM client like so:

npm install --save @datadog/browser-rum

To start tracking feature flags on Datadog:

import { datadogRum } from "@datadog/browser-rum";
import { FliptClient, FliptMetrics } from "@flipt-io/flipt";

datadogRum.init({
  applicationId: "<APPLICATION_ID>",
  clientToken: "<CLIENT_TOKEN>",
  site: "datadoghq.com",
  service: "<SERVICE_NAME>",
  env: "<ENV_NAME>",
  enableExperimentalFeatures: ["feature_flags"],
  sessionSampleRate: 100,
  sessionReplaySampleRate: 20,
  trackUserInteractions: true,
  trackResources: true,
  trackLongTasks: true,
  defaultPrivacyLevel: "mask-user-input"
});

datadogRum.startSessionReplayRecording();

const metricsClient = new FliptMetrics(
  new FliptClient({
    url: "http://localhost:8080"
  }).evaluation,
  datadogRum
);

const response = await metricsClient.variant({
  namespaceKey: "default",
  flagKey: "hello-this",
  entityId: uuidv4(),
  context: {}
});