@configdirector/openfeature-server-provider
v1.12.0
Published
OpenFeature server provider for ConfigDirector. ConfigDirector is a remote configuration and feature flag service.
Maintainers
Readme
ConfigDirector OpenFeature Node.js Provider
OpenFeature Node.js provider SDK for ConfigDirector, remote config and feature flags with typed values, JSON Schema validation, and safe renames of live flags. Start free, no card required.
Install
npm install --save @configdirector/openfeature-server-provider @openfeature/server-sdkRetrieve a value
import { OpenFeature } from "@openfeature/server-sdk";
import { ConfigDirectorProvider } from "@configdirector/openfeature-server-provider";
// The server SDK key is a secret. Do not commit it to your source code.
await OpenFeature.setProviderAndWait(new ConfigDirectorProvider("YOUR-SERVER-SDK-KEY"));
const client = OpenFeature.getClient();
const newCheckout = await client.getBooleanValue("new-checkout", false);setProviderAndWait rejects when no config arrives from ConfigDirector within the connection timeout, which is 3 seconds unless you set connection.timeout in milliseconds. Flags then resolve to their in-code default values until config arrives. To start without waiting for ConfigDirector, set the provider with setProvider instead:
OpenFeature.setProvider(new ConfigDirectorProvider("YOUR-SERVER-SDK-KEY"));Or catch the rejection:
try {
await OpenFeature.setProviderAndWait(new ConfigDirectorProvider("YOUR-SERVER-SDK-KEY"));
} catch (error) {
console.warn("Starting on in-code default values until ConfigDirector sends config:", error);
}Full details are in the official documentation.
Test your code
Tests of code that reads flags through OpenFeature swap the provider for the in-memory one the OpenFeature Node.js SDK ships, TypedInMemoryProvider (@openfeature/server-sdk 1.21 and newer), so the test controls the values and nothing from ConfigDirector is involved:
import { OpenFeature, TypedInMemoryProvider } from "@openfeature/server-sdk";
const provider = new TypedInMemoryProvider({
"new-checkout": { variants: { on: true, off: false }, defaultVariant: "on" },
});
await OpenFeature.setProviderAndWait(provider);
const client = OpenFeature.getClient();
expect(await client.getBooleanValue("new-checkout", false)).toBe(true);
provider.putConfiguration({
"new-checkout": { variants: { on: true, off: false }, defaultVariant: "off" },
});
expect(await client.getBooleanValue("new-checkout", true)).toBe(false);Full details are in the testing section of the official documentation.
Documentation
Refer to the official documentation for the OpenFeature Node.js provider.
There is also a quickstart guide for ConfigDirector and any of our SDKs.
