Bucket Node.js OpenFeature Provider
The official OpenFeature Node.js provider for Bucket feature management service.
Installation
$ npm install @bucketco/openfeature-node-provider
Required peer dependencies
The OpenFeature SDK is required as peer dependency.
The minimum required version of @openfeature/server-sdk
currently is 1.13.5
.
The minimum required version of @bucketco/node-sdk
currently is 2.0.0
.
$ npm install @openfeature/server-sdk @bucketco/node-sdk
Usage
The provider uses the Bucket Node.js SDK.
The available options can be found in the Bucket Node.js SDK.
Example using the default configuration
import { BucketNodeProvider } from "@bucketco/openfeature-node-provider";
import { OpenFeature } from "@openfeature/server-sdk";
const provider = new BucketNodeProvider({ secretKey });
await OpenFeature.setProviderAndWait(provider);
OpenFeature.setContext({ region: "us-east-1" });
const requestContext = {
targetingKey: req.user.id,
email: req.user.email,
companyPlan: req.locals.plan,
};
const client = OpenFeature.getClient();
const enterpriseFeatureEnabled = await client.getBooleanValue(
"enterpriseFeature",
false,
requestContext,
);
Translating Evaluation Context
Bucket uses a context object of the following shape:
export type BucketContext = {
user?: { id: string; [k: string]: any };
company?: { id: string; [k: string]: any };
other?: Record<string, any>;
};
To use the Bucket Node.js OpenFeature provider, you must convert your OpenFeature contexts to Bucket contexts.
You can achieve this by supplying a context translation function which takes the Open Feature context and returns
a corresponding Bucket Context:
import { BucketNodeProvider } from "@openfeature/bucket-node-provider";
const contextTranslator = (context: EvaluationContext): BucketContext => {
return {
user: {
id: context.targetingKey,
name: context["name"]?.toString(),
email: context["email"]?.toString(),
country: context["country"]?.toString(),
},
company: {
id: context["companyId"],
name: context["companyName"],
},
};
};
const provider = new BucketNodeProvider({ secretKey, contextTranslator });
OpenFeature.setProvider(provider);
License
MIT License
Copyright (c) 2024 Bucket ApS