This provider is an implementation for the JavaScript SDK of Flagsmith.
npm install @openfeature/flagsmith-client-provider
The Flagsmith Provider can be created with the standard initialization options and an optional Flagsmith instance to use.
import { FlagsmithClientProvider } from '@openfeature/flagsmith-client-provider';
import { OpenFeature } from '@openfeature/web-sdk';
const flagsmithClientProvider = new FlagsmithClientProvider({
environmentID: '<ENVIRONMENT_ID>'
});
OpenFeature.setProvider(flagsmithClientProvider); // Attach the provider to OpenFeature
The Flagsmith Provider can be constructed with a custom Flagsmith instance and optional server-side generated state, initialization options.
Note: In order to use the React Native implementation of OpenFeature you will need to install both Flagsmith and react-native-flagsmith.
import flagsmith from 'react-native-flagsmith' // Could also be flagsmith/isomorphic, flagsmith-es or createFlagsmithInstance()
import { FlagsmithClientProvider } from '@openfeature/flagsmith-client-provider';
import { OpenFeature } from '@openfeature/web-sdk';
const flagsmithClientProvider = new FlagsmithClientProvider({
environmentID: '<ENVIRONMENT_ID>',
flagsmithInstance: flagsmith,
state:serverState
});
OpenFeature.setProvider(flagsmithClientProvider); // Attach the provider to OpenFeature
In Flagsmith, users are identified in order to allow for segmentation and percentage rollouts.
To identify and set traits you can specify a targetingKey(identity) and optionally a set of traits. This will do the equivalent of flagsmith.identify(id, traits)
or pass these to flagsmith.init
if you are calling this before OpenFeature.setProvider
.
const flagsmithClientProvider = new FlagsmithClientProvider({
environmentID: '<ENVIRONMENT_ID>',
});
await OpenFeature.setContext({ targetingKey, traits });
OpenFeature.setProvider(flagsmithClientProvider); // Attach the provider to OpenFeature
To reset the identity you can simply reset the context. This will do the equivalent of flagsmith.logout()
await OpenFeature.setContext({ });
In Flagsmith, features are evaluated based on the following Resolution reasons:
StandardResolutionReasons.CACHED | StandardResolutionReasons.STATIC | StandardResolutionReasons.DEFAULT | StandardResolutionReasons.ERROR
Note that resolutions of type SPLIT may be the result of targetted matching or percentage split however Flagsmith does not expose this information to client-side SDKs.
The Flagsmith provider emits the following OpenFeature events:
- PROVIDER_READY
- PROVIDER_ERROR
- PROVIDER_CONFIGURATION_CHANGED
Run nx package providers-flagsmith
to build the library.
Run nx test providers-flagsmith
to execute the unit tests via Jest.
You can find examples using this provider in several frameworks Here.