INTEGRITY Dokumentace

TypeScript Server SDK

FlagshipServerProvider implementuje rozhraní serverového poskytovatele OpenFeature. Poskytovatel funguje v Cloudflare Workers, Node.js a jakékoli serverové běhové prostředí JavaScriptu, které podporuje Fetch API.

Uvnitř Cloudflare Workeru můžete předat Flagship binding přímo poskytovateli. Tím se vyhnete režii HTTP a jde o doporučený postup. Mimo Workers inicializujte poskytovatele pomocí ID aplikace a ID účtu.

Nastavení

Předejte vazbu Flagship přímo poskytovateli. Jde o doporučený postup uvnitř Workeru.

import { OpenFeature } from "@openfeature/server-sdk";
import { FlagshipServerProvider } from "@cloudflare/flagship/server";

export default {
	async fetch(request, env) {
		await OpenFeature.setProviderAndWait(
			new FlagshipServerProvider({ binding: env.FLAGS }),
		);

		const client = OpenFeature.getClient();

		const showNewCheckout = await client.getBooleanValue(
			"new-checkout",
			false,
			{ targetingKey: "user-42", plan: "enterprise" },
		);

		if (showNewCheckout) {
			return new Response("New checkout enabled!");
		}

		return new Response("Standard checkout.");
	},
};
import { OpenFeature } from "@openfeature/server-sdk";
import { FlagshipServerProvider } from "@cloudflare/flagship/server";

export default {
	async fetch(request: Request, env: Env): Promise<Response> {
		await OpenFeature.setProviderAndWait(
			new FlagshipServerProvider({ binding: env.FLAGS }),
		);

		const client = OpenFeature.getClient();

		const showNewCheckout = await client.getBooleanValue(
			"new-checkout",
			false,
			{ targetingKey: "user-42", plan: "enterprise" },
		);

		if (showNewCheckout) {
			return new Response("New checkout enabled!");
		}

		return new Response("Standard checkout.");
	},
};

Použijte ID aplikace, ID účtu a API token, pokud běžíte mimo Worker (například v Node.js). Vygenerujte API token z vašeho účtu Cloudflare s oprávněním Flagship Evaluate nebo Flagship App Evaluate.

import { OpenFeature } from "@openfeature/server-sdk";
import { FlagshipServerProvider } from "@cloudflare/flagship/server";

await OpenFeature.setProviderAndWait(
	new FlagshipServerProvider({
		appId: "<APP_ID>",
		accountId: "<ACCOUNT_ID>",
		authToken: "<API_TOKEN>",
	}),
);

const client = OpenFeature.getClient();

const showNewCheckout = await client.getBooleanValue("new-checkout", false, {
	targetingKey: "user-42",
	plan: "enterprise",
});
import { OpenFeature } from "@openfeature/server-sdk";
import { FlagshipServerProvider } from "@cloudflare/flagship/server";

await OpenFeature.setProviderAndWait(
	new FlagshipServerProvider({
		appId: "<APP_ID>",
		accountId: "<ACCOUNT_ID>",
		authToken: "<API_TOKEN>",
	}),
);

const client = OpenFeature.getClient();

const showNewCheckout = await client.getBooleanValue("new-checkout", false, {
	targetingKey: "user-42",
	plan: "enterprise",
});

Možnosti konfigurace

Možnost Typ Povinné Popis
binding Flagship Ne Binding Flagship z env.FLAGS. Pro nejlepší výkon toto použijte uvnitř Workeru. Vazba řeší ověřování automaticky.
appId string Ne ID aplikace Flagship z Cloudflare dashboardu. Povinné, pokud nepoužíváte binding.
accountId string Ne ID vašeho účtu Cloudflare. Povinné při použití appId.
authToken string Ne Cloudflare API token s oprávněním Flagship Evaluate nebo Flagship App Evaluate. Vyžadováno, pokud nepoužíváte vazbu.
fetchOptions RequestInit Ne Vlastní možnosti fetch aplikované na HTTP požadavky.
timeout number Ne Časový limit požadavku v milisekundách. Výchozí hodnota je 5000.
retries number Ne Počet opakování při dočasných chybách. Výchozí hodnota je 1 a je omezeno na 10.
retryDelay number Ne Prodleva mezi opakováními v milisekundách. Výchozí hodnota je 1000 a je omezeno na 30000.
cacheTtl number Ne TTL cache v milisekundách. Ukládání odpovědí do mezipaměti se zapne, pokud je hodnota vyšší než 0.
cacheMaxSize number Ne Maximální počet položek v mezipaměti. Výchozí hodnota je 1000 když cacheTtl je nastaven.

Zadejte buď binding nebo appId, accountId, a authToken.

Cachování odpovědí

Serverové ukládání odpovědí do mezipaměti je ve výchozím nastavení vypnuté. Povolte je pomocí cacheTtl pokud chcete, aby opakovaná vyhodnocení stejného příznaku, typu a kontextu vyhodnocení znovu použila nedávný výsledek.

new FlagshipServerProvider({
	appId: "<APP_ID>",
	accountId: "<ACCOUNT_ID>",
	authToken: "<API_TOKEN>",
	cacheTtl: 30_000,
	cacheMaxSize: 1000,
});

Ukládání do mezipaměti použijte u serverových aplikací s vysokým provozem, které opakovaně vyhodnocují stejné flagy pro stejné kontexty. Hodnoty v mezipaměti mohou být zastaralé, dokud nevyprší TTL, proto u flagů, které se během aktivních rolloutů mohou měnit, nastavte krátké TTL. Poskytovatel neukládá do mezipaměti vypnuté flagy ani chyby.

Kontext vyhodnocení

OpenFeature používá kontext vyhodnocení k předání atributů uživatele poskytovateli příznaků. Objekt targetingKey pole je hlavní identifikátor uživatele.

Předejte další atributy společně s targetingKey k porovnání s cílicí pravidla. Můžete například zahrnout plan, country, nebo libovolný vlastní atribut, na který vaše pravidla odkazují.

Používejte primitivní hodnoty kontextu, jako jsou řetězce, čísla, booleovské hodnoty a Date objekty. Poskytovatel odmítá objekty a pole jako neplatný kontext.

const value = await client.getBooleanValue("new-checkout", false, {
	targetingKey: "user-42",
	plan: "enterprise",
	country: "US",
});
const value = await client.getBooleanValue("new-checkout", false, {
	targetingKey: "user-42",
	plan: "enterprise",
	country: "US",
});

Dostupné hooky

SDK obsahuje dva hooky, které můžete připojit ke klientovi OpenFeature.

import { LoggingHook, TelemetryHook } from "@cloudflare/flagship/server";

OpenFeature.addHooks(new LoggingHook(), new TelemetryHook());
import { LoggingHook, TelemetryHook } from "@cloudflare/flagship/server";

OpenFeature.addHooks(new LoggingHook(), new TelemetryHook());

Migrace od jiného poskytovatele

Pokud používáte jiného poskytovatele kompatibilního s OpenFeature (například LaunchDarkly nebo Flagsmith), přejděte na Flagship nahrazením inicializace poskytovatele. Na místech, kde voláte vyhodnocení, nejsou potřeba žádné změny.

// Before
await OpenFeature.setProviderAndWait(
	new LaunchDarklyProvider({ sdkKey: "..." }),
);

// After
await OpenFeature.setProviderAndWait(
	new FlagshipServerProvider({
		appId: "<APP_ID>",
		accountId: "<ACCOUNT_ID>",
		authToken: "<API_TOKEN>",
	}),
);
// Before
await OpenFeature.setProviderAndWait(
	new LaunchDarklyProvider({ sdkKey: "..." }),
);

// After
await OpenFeature.setProviderAndWait(
	new FlagshipServerProvider({
		appId: "<APP_ID>",
		accountId: "<ACCOUNT_ID>",
		authToken: "<API_TOKEN>",
	}),
);