The Web SDK is under development and based on a experimental client concepts.
For more information, see this issue.
👋 Hey there! Thanks for checking out the OpenFeature Web SDK
What is OpenFeature?
OpenFeature is an open standard that provides a vendor-agnostic, community-driven API for feature flagging that works with your favorite feature flag management tool.
Why standardize feature flags?
Standardizing feature flags unifies tools and vendors behind a common interface which avoids vendor lock-in at the code level. Additionally, it offers a framework for building extensions and integrations and allows providers to focus on their unique value proposition.
🔍 Requirements:
ES2015-compatible web browser (Chrome, Edge, Firefox, etc)
import { OpenFeature } from'@openfeature/web-sdk';
// configure a providerawaitOpenFeature.setProvider(newYourProviderOfChoice());
// create a clientconst client = OpenFeature.getClient('my-app');
// get a bool flag valueconst boolValue = client.getBooleanValue('boolFlag', false);
Context-aware evaluation:
Sometimes the value of a flag must take into account some dynamic criteria about the application or user, such as the user location, IP, email address, or the location of the server.
In OpenFeature, we refer to this as targeting.
If the flag system you're using supports targeting, you can provide the input data using the EvaluationContext.
// global context for static dataawaitOpenFeature.setContext({ origin: document.location.host })
// use contextual data to determine a flag valueconst boolValue = client.getBooleanValue('some-flag', false);
Providers:
To develop a provider, you need to create a new project and include the OpenFeature SDK as a dependency. This can be a new repository or included in an existing contrib repository available under the OpenFeature organization. Finally, you’ll then need to write the provider itself. In most languages, this can be accomplished by implementing the provider interface exported by the OpenFeature SDK.
import { JsonValue, Provider, ResolutionDetails } from'@openfeature/web-sdk';
// implement the provider interfaceclassMyProviderimplementsProvider {
readonly metadata = {
name: 'My Provider',
} asconst;
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean): ResolutionDetails<boolean> {
// resolve a boolean flag value
}
resolveStringEvaluation(flagKey: string, defaultValue: string): ResolutionDetails<string> {
// resolve a string flag value
}
resolveNumberEvaluation(flagKey: string, defaultValue: number): ResolutionDetails<number> {
// resolve a numeric flag value
}
resolveObjectEvaluation<T extendsJsonValue>(flagKey: string, defaultValue: T): ResolutionDetails<T> {
// resolve an object flag value
}
Hooks are a mechanism that allow for the addition of arbitrary behavior at well-defined points of the flag evaluation life-cycle. Use cases include validation of the resolved flag value, modifying or adding data to the evaluation context, logging, telemetry, and tracking.
import { OpenFeature, Hook, HookContext } from'@openfeature/web-sdk';
// Example hook that logs if an error occurs during flag evaluationexportclassGlobalDebugHookimplementsHook {
after(hookContext: HookContext, err: Error) {
console.log('hook context', hookContext);
console.error(err);
}
}
You can implement the Logger interface (compatible with the console object, and implementations from common logging libraries such as winston) and set it on the global API object.
// implement loggerclassMyLoggerimplementsLogger {
error(...args: unknown[]): void {
// implement me
}
warn(...args: unknown[]): void {
// implement me
}
info(...args: unknown[]): void {
// implement me
}
debug(...args: unknown[]): void {
// implement me
}
}
// set the loggerOpenFeature.setLogger(newMyLogger());
The npm package @openfeature/web-sdk receives a total of 23,533 weekly downloads. As such, @openfeature/web-sdk popularity was classified as popular.
We found that @openfeature/web-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.It has 0 open source maintainers collaborating on the project.
Package last updated on 06 Jun 2023
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.