@prefab-cloud/prefab-cloud-node
v0.4.2
Published
Feature Flags, Live Config, and Dynamic Log Levels
Downloads
3,744
Readme
prefab-cloud-nodejs
Prefab Node.js client
Install the client
npm install @prefab-cloud/prefab-cloud-node
or yarn add @prefab-cloud/prefab-cloud-node
Set up a Prefab client.
import { Prefab } from "@prefab-cloud/prefab-cloud-node";
if (!process.env.PREFAB_API_KEY) {
throw new Error("PREFAB_API_KEY is not set");
}
const prefab = new Prefab({
apiKey: process.env.PREFAB_API_KEY,
enableSSE: true,
enablePolling: true,
});
await prefab.init();
After the init completes you can use
prefab.get('some.config.name')
returns a raw valueprefab.isFeatureEnabled('some.feature.name')
returns true or falseprefab.shouldLog({loggerName, desiredLevel, defaultLevel, contexts})
returns true or false
Prefab supports context for intelligent rule-based evaluation of get
and isFeatureEnabled
based on the current request/device/user/etc.
Given
const context = new Map([
[
"user",
new Map([
["key", "some-unique-identifier"],
["country", "US"],
]),
],
[
"subscription",
new Map([
["key", "pro-sub"],
["plan", "pro"],
]),
],
]);
You can pass this in to each call
prefab.get('some.config.name', context, defaultValue)
prefab.isFeatureEnabled('some.feature.name', context, false)
Or you can set the context in a block (perhaps surrounding evaluation of a web request)
prefab.inContext(context, (pf) => {
const optionalJustInTimeContext = { ... }
console.log(pf.get("some.config.name", optionalJustInTimeContext, defaultValue))
console.log(pf.isEnabled("some.config.name", optionalJustInTimeContext, false))
})
Note that you can also provide Context as an object instead of a Map, e.g.:
{
user: {
key: "some-unique-identifier",
country: "US"
},
subscription: {
key: "pro-sub",
plan: "pro"
}
}
Option Definitions
Besides apiKey
, you can initialize new Prefab(...)
with the following options
| Name | Description | Default |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| collectEvaluationSummaries | Send counts of config/flag evaluation results back to Prefab to view in web app | true |
| collectLoggerCounts | Send counts of logger usage back to Prefab to power log-levels configuration screen | true |
| contextUploadMode | Upload either context "shapes" (the names and data types your app uses in prefab contexts) or periodically send full example contexts | "periodicExample" |
| defaultLevel | Level to be used as the min-verbosity for a loggerPath
if no value is configured in Prefab | "warn" |
| enableSSE | Whether or not we should listen for live changes from Prefab | true |
| enablePolling | Whether or not we should poll for changes from Prefab | false |