← Cloudflare Flagship / flagship / sdk
TypeScript Client SDK
FlagshipClientProvider реализует интерфейс веб-провайдера OpenFeature для приложений в браузере. Он заранее загружает заявленный набор значений флагов при инициализации и синхронно разрешает их из кэша в памяти.
Благодаря этому поставщик подходит для клиентского рендеринга, где требуется синхронный доступ к значениям флагов.
prefetchFlags
prefetchFlags это обязательный массив ключей флагов, которые провайдер загружает при инициализации и при каждом изменении контекста. Только флаги, перечисленные в этом массиве, доступны для синхронной оценки: любой не включенный в него ключ флага возвращает FLAG_NOT_FOUND ошибку во время разрешения значения.
Поведение загрузки:
- При инициализации : все флаги в
prefetchFlagsзагружаются параллельно и сохраняются в кэше в памяти. Провайдер переходит в состояниеREADYпосле завершения всех загрузок (отдельные сбои не являются критическими). - При изменении контекста : кэш сбрасывается, и все флаги загружаются заново для нового контекста. Это требуется в соответствии с парадигма статического контекста ↗ используемый OpenFeature Web SDK, где контекст задаётся глобально, а провайдеры должны заново оценивать флаги при его изменении.
- В момент разрешения : оценки выполняются синхронно из кэша. Сетевой запрос не выполняется во время
getBooleanValue,getStringValue, и т. д.
Настройка
В следующем примере провайдер инициализируется с набором заранее полученных флагов и оценивает их в браузерном приложении.
import { OpenFeature } from "@openfeature/web-sdk";
import { FlagshipClientProvider } from "@cloudflare/flagship/web";
await OpenFeature.setProviderAndWait(
new FlagshipClientProvider({
appId: "<APP_ID>",
accountId: "<ACCOUNT_ID>",
authToken: "<API_TOKEN>",
prefetchFlags: ["promo-banner", "dark-mode", "max-uploads"],
}),
);
// Set evaluation context globally. The provider re-fetches all prefetchFlags
// whenever the context changes.
await OpenFeature.setContext({ targetingKey: "user-42", plan: "enterprise" });
const client = OpenFeature.getClient();
// Synchronous — served from the in-memory cache.
const showBanner = client.getBooleanValue("promo-banner", false);
if (showBanner) {
document.getElementById("banner").style.display = "block";
}import { OpenFeature } from "@openfeature/web-sdk";
import { FlagshipClientProvider } from "@cloudflare/flagship/web";
await OpenFeature.setProviderAndWait(
new FlagshipClientProvider({
appId: "<APP_ID>",
accountId: "<ACCOUNT_ID>",
authToken: "<API_TOKEN>",
prefetchFlags: ["promo-banner", "dark-mode", "max-uploads"],
}),
);
// Set evaluation context globally. The provider re-fetches all prefetchFlags
// whenever the context changes.
await OpenFeature.setContext({ targetingKey: "user-42", plan: "enterprise" });
const client = OpenFeature.getClient();
// Synchronous — served from the in-memory cache.
const showBanner = client.getBooleanValue("promo-banner", false);
if (showBanner) {
document.getElementById("banner").style.display = "block";
}Параметры настройки
| Опция | Тип | Обязательный | Описание |
|---|---|---|---|
appId |
string |
Да | Идентификатор приложения Flagship из панели управления Cloudflare. |
accountId |
string |
Да | Идентификатор вашего аккаунта Cloudflare. |
authToken |
string |
Да | Cloudflare API-токен с разрешением Flagship Evaluate или Flagship App Evaluate. |
fetchOptions |
RequestInit |
Нет | Пользовательские параметры fetch, применяемые к HTTP-запросам. |
timeout |
number |
Нет | Тайм-аут запроса в миллисекундах. По умолчанию 5000. |
retries |
number |
Нет | Попытки повтора при временных ошибках. По умолчанию 1 и ограничено значением 10. |
retryDelay |
number |
Нет | Задержка между повторными попытками в миллисекундах. По умолчанию 1000 и ограничено значением 30000. |
prefetchFlags |
string[] |
Да | Ключи флагов, которые нужно загружать при инициализации и при каждом изменении контекста. Для флагов, не входящих в этот список, возвращается FLAG_NOT_FOUND во время оценки. |
Когда использовать клиентский поставщик
Используйте клиентский поставщик в браузерных приложениях, одностраничных приложениях (SPA) или в любой клиентской среде JavaScript.
Оценка выполняется синхронно, поэтому она не блокирует рендеринг. Значения флагов загружаются один раз при инициализации и повторно при каждом изменении контекста оценки. Чтобы принудительно обновить значения, измените контекст через OpenFeature.setContext(...).