/** * FeatureFlags — warstwa przełączników funkcjonalności dla bezpiecznych * rolloutów, A/B testów i kill switches. Kontrakt — implementacja w runtime * lub integracja z zewnętrznym providerem (LaunchDarkly, Flagsmith). */ import type { Observable } from 'rxjs'; /** * Kontekst ewaluacji flagi. Projekt wypełnia go z sesji / konfiguracji środowiska. * Puste pola traktujemy jak brak warunku — `rollout` i `tags` to dopuszczalne * bezkontekstowe ewaluacje (deterministic hash po tenant/user, zakładanie globalnie). */ export interface FeatureFlagContext { readonly userId?: string; readonly tenantId?: string; readonly region?: string; readonly role?: string; readonly extras?: Readonly>; } /** * Pojedyncza definicja flagi. Wszystkie warunki są koniunkcją (AND). Jeżeli * wszystkie są spełnione (lub niezdefiniowane), flaga jest "enabled". */ export interface FeatureFlagDefinition { readonly key: string; /** Hard switch — jeśli false, flaga ZAWSZE disabled. */ readonly enabled?: boolean; /** Procent ruchu (0..1). Domyślnie 1.0 (100%). Hash po `userId ?? tenantId ?? key`. */ readonly rollout?: number; /** Białe listy — jeśli podane, context.userId musi być w zbiorze. */ readonly users?: readonly string[]; readonly regions?: readonly string[]; readonly roles?: readonly string[]; readonly tenants?: readonly string[]; /** Przedziały czasu (unix ms) — flaga aktywna jeśli `clock.now()` w przedziale. */ readonly startsAt?: number; readonly endsAt?: number; /** Opcjonalny wariant (A/B) wybrany deterministycznie przy rollout pass-through. */ readonly variants?: readonly { readonly key: string; readonly weight: number; }[]; /** Dowolne tagi do grupowania (nie wpływają na ewaluację). */ readonly tags?: readonly string[]; } export interface FeatureFlagService { isEnabled(key: string, context?: FeatureFlagContext): boolean; variant(key: string, context?: FeatureFlagContext): string | null; /** Stream z pełną mapą definicji — UI/devtools może subskrybować. */ readonly flags$: Observable>; } export declare const FEATURE_FLAGS: import("../index.js").EchelonToken; /** * Config-level gate. Widget/datasource/handler oznaczony `featureFlag` jest * pomijany (nie renderowany / nie uruchamiany) jeśli `isEnabled(key)` zwróci * `false`. Obsługiwany jest też obiektowy format z `variant` (dla A/B). */ export type FeatureFlagRef = string | { readonly key: string; readonly variant?: string; }; //# sourceMappingURL=index.d.ts.map