This provider is an implementation for the [JavaScript SDK](https://docs.flagsmith.com/clients/javascript/) of [Flagsmith](https://flagsmith.com).
npm install @openfeature/flagsmith-client-providerThis 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.
`javascript
import { FlagsmithClientProvider } from '@openfeature/flagsmith-client-provider';
import { OpenFeature } from '@openfeature/web-sdk';
const flagsmithClientProvider = new FlagsmithClientProvider({
environmentID: '
});
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.
`javascript
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: '
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.
`javascript`
const flagsmithClientProvider = new FlagsmithClientProvider({
environmentID: '
});
await OpenFeature.setContext({
targetingKey: 'my-identity-id',
traits: {
myTraitKey: 'my-trait-value',
},
});
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()
`javascript`
await OpenFeature.setContext({ });
In Flagsmith, features are evaluated based on the following Resolution reasons:
`typescript`
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.