Provider web
@flagward/openfeature-web — un provider de OpenFeature para el navegador.
OpenFeature es la API estándar de la CNCF para
feature flags. @flagward/openfeature-web es un provider para su SDK web:
una aplicación que ya evalúa flags con OpenFeature se cambia a Flagward
cambiando el provider, y nada más. Flagward figura en el ecosistema de
OpenFeature.
Si tu aplicación no usa OpenFeature, el adaptador de Flagward para tu framework es la opción más simple.
Este provider es para el navegador (@openfeature/web-sdk). Todavía no
existe un provider de servidor para @openfeature/server-sdk.
Instalación
npm install @openfeature/web-sdk @flagward/openfeature-web@flagward/core viene incluido con el provider — no lo instalas por
separado.
Guía rápida
import { OpenFeature } from '@openfeature/web-sdk';
import { FlagwardWebProvider } from '@flagward/openfeature-web';
await OpenFeature.setContext({ targetingKey: user.id, country: user.country });
await OpenFeature.setProviderAndWait(
new FlagwardWebProvider({
apiKey: 'your-environment-api-key',
host: 'https://flags.example.com',
}),
);
const client = OpenFeature.getClient();
if (client.getBooleanValue('new-checkout', false)) {
renderNewCheckout();
}Las opciones son las mismas que las del cliente del núcleo: apiKey,
host, timeout y logLevel. host apunta por defecto al servicio
alojado en https://app.flagward.com.
Si vienes de otro provider, el cambio es solo el provider:
- OpenFeature.setProvider(new SomeOtherProvider(...));
+ OpenFeature.setProvider(new FlagwardWebProvider({ apiKey }));El contexto de evaluación
Las reglas de Flagward leen el contexto que guarda OpenFeature:
targetingKeyse convierte enuser_id, la identidad con la que se reparten los rollouts por porcentaje y las variantes. Un atributouser_idse usa solo cuando no hay targeting key.- Cualquier otro atributo es un trait con su propio nombre:
countryen el contexto es lo que lee una reglacountry EQUALS US.
Cambiar el contexto con OpenFeature.setContext no necesita nada del
servidor — la siguiente evaluación ya lo usa.
Tipos de flag
| Llamada de OpenFeature | Flag de Flagward | Valor |
|---|---|---|
getBooleanValue | BOOLEAN | el resultado de la flag |
getBooleanValue | MULTIVARIATE | si la flag está habilitada |
getStringValue | MULTIVARIATE | el nombre de la variante |
getStringValue | BOOLEAN | tu valor por defecto, con TYPE_MISMATCH |
getNumberValue, getObjectValue | cualquiera | tu valor por defecto, con TYPE_MISMATCH |
Una key que el entorno no tiene responde con tu valor por defecto y
FLAG_NOT_FOUND.
Razones
getBooleanDetails y getStringDetails dicen por qué se eligió un valor:
| Razón | Cuándo |
|---|---|
TARGETING_MATCH | una regla coincidió y decidió el valor |
SPLIT | el bucket del hash del usuario eligió la variante |
DEFAULT | nada apuntó al usuario: ninguna regla coincidió, o no hay targeting key para repartir (la variante de control) |
STATIC | el valor no depende del usuario: un override, o una flag habilitada sin nada que segmentar |
DISABLED | la flag está apagada |
client.getStringDetails('checkout-flow', 'control');
// { value: 'treatment', variant: 'treatment', reason: 'SPLIT', ... }Actualizaciones en vivo
Cuando una flag cambia en el dashboard, el provider emite
ConfigurationChanged:
import { ProviderEvents } from '@openfeature/web-sdk';
client.addHandler(ProviderEvents.ConfigurationChanged, () => rerender());Si las flags no se pueden cargar — una API key incorrecta, un host
inalcanzable — setProviderAndWait rechaza, el provider queda en estado
ERROR y cada evaluación responde con su valor por defecto.
Frameworks
Los SDKs propios de OpenFeature se construyen sobre este provider: consulta React y Angular.
Vue, Solid y Svelte no tienen SDK de OpenFeature. Ahí usas
@openfeature/web-sdk directamente, o el adaptador de Flagward para el
framework.
Elige una sola puerta de entrada por aplicación. El provider y un adaptador de Flagward crean cada uno su propio cliente, así que usar ambos significa dos conexiones y dos cachés que pueden diferir por un momento.
Registro
El provider se registra en el servidor como OPENFEATURE_WEB.