0.0.10 • Published 2 years ago

@featurescope/node-sdk v0.0.10

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

@featurescope/node-sdk

Node.js SDK for featurescope.

Featurescope provides simple, reliable, and remotely configurable feature management to power your applications.

Installation

npm install @featurescope/node-sdk

# or ...

yarn add @featurescope/node-sdk

Setup

In order to use the featurescope Node.js SDK, you'll also have to create a featurescope account.

Visit featurescope.io and register for a new account.

Next, follow the instructions on the Getting started page. These steps will walk you through creating your first feature and fetching it with a featurescope SDK.

Usage

The featurescope Node.js SDK is an unopinionated JavaScript client - It exposes a number of functional wrappers around the RESTful featuresope API, the most useful of which are the methods used to fetch a feature or a set of features. Use this SDK in your web bundles, or on the server side.

If you are creating a React application, it is recommended that you use the @featurescope/react-sdk.

To integrate with the Node.js SDK, initialize a featurescope client in your application, with a scope defined, and fetch all of features associated with the scope:

import Featurescope from "@featurescope/node-sdk"
import express from "express"

const scope = process.env.NODE_ENV
const client = Featurescope.init({ apiKey, scope })

init()

async function init() {
  const app = express()
  const { port, useJson } = await client.getFeatures()

  if (useJson) app.use(express.json())

  app.listen(port, () => console.info(`started express on port ${port}`))
}

All of the configuration options available to the client are described below. You may use these props to control which feature variations are provided by the FeaturesContext.

Alternatively, a specific list of features can be resolved:

const { port, useJson } = await client.getFeatures(attributes, {
  featureIds: ["port", "useJson"],
})

It is recommended that you be specific about which features to load as often as possible. There's no limit to how many features can exist within a single scope.

API Methods

In addition to the getFeatures and getFeature method, the Node.js client exposes a number of other helpful methods for working with the featurescope API.

createFeatureVariation

Not implemented.

createFeatureVariations

Not implemented.

findFeatureVariationByAttributes

Fetch a feature variation for a collection of attributes. Aliased by getFeature.

Returns a feature variation:

const attributes = { city: "New York", state: "NY" }
const variation = client.findFeatureVariationByAttributes(
  "featureId",
  attributes,
)

console.log(variation) // "JsonValue"

findFeaturesListVariationsByAttributes

Fetch a list of feature variations for a collection of attributes. Aliased by getFeatures.

Returns a collection of feature variations by feature id:

const attributes = { city: "New York", state: "NY" }
const options = { featureIds: ["featureId"] } // optional
const variationsByFeatureId = client.getFeatures(attributes, options)

console.log(variationsByFeatureId) // { featureId: "JsonValue" }

getAllVariationsForFeature

Not implemented.

getAllVariationsForFeaturesList

Not implemented.

getFeature

Fetch a feature variation for a collection of attributes. Alias of findFeatureVariationByAttributes.

Returns a feature variation:

const attributes = { city: "New York", state: "NY" }
const variation = client.getFeature("featureId", attributes)

console.log(variation) // "JsonValue"

getFeatures

Fetch a list of feature variations for a collection of attributes. Alias of findFeaturesListVariationsByAttributes.

Returns a collection of feature variations by feature id:

const attributes = { city: "New York", state: "NY" }
const options = { featureIds: ["featureId"] } // optional
const variationsByFeatureId = client.getFeatures(attributes, options)

console.log(variationsByFeatureId) // { featureId: "JsonValue" }

listFeaturesForScope

Returns a list of features for the given scope:

const featureIds = client.listFeaturesForScope("default")

console.log(featureIds) // ["featureId"]

listScopesForUser

Returns a list of scopes for the current user:

const scopes = client.listScopesForUser()

console.log(scopes) // ["default", "development", "staging", "production"]

Configuration Options

This table includes all of the options available to the client:

namedescriptiontypedefault
apiKeyThe key to use to connect to the featurescope API.string | nullnull
apiUrlThe URL of the featurescope API. Mainly used for testing purposes.string"https://www.featurescope.io"
attributesAttributes inform the API which feature variations should be served.Attributes{}
childrenReact childrenReact.nodeundefined
defaultFeaturesDefault values to provide for any potential features. If the API does not return a matching feature by name, then these values will not be replaced.Features{}
featureIdsA list of features to which the providers should be limited.Array
scopeThe scope of features which should be loaded by the SDK.string"_"