/** * Feature Flag Domain Service (Backend) * * Backend-specific domain service that extends BaseDomainService and * uses providers (database, redis, memory, etc.) to manage feature flags. * * Runtime: Backend only (uses providers, no API calls) * * @example * ```typescript * // Create service instance with a provider * const provider = new DatabaseFeatureFlagProvider(config, FEATURES); * await provider.initialize(); * * const flagService = new FeatureFlagDomainService({ * enabled: true, * provider, * }); * * // Use the service * const isEnabled = await flagService.isEnabled('new-feature', { userId: 'user-123' }); * ``` */ import type { FeatureFlag, FeatureFlagRule, FeatureFlagContext, FeatureFlagValue, FeatureFlagEvaluation, CreateFlagRequest } from '@plyaz/types'; import { BaseDomainService } from '../../domain/base'; import type { FeatureFlagDomainServiceConfig as _FeatureFlagDomainServiceConfig, FeatureFlagDomainEventType } from '@plyaz/types/features'; /** * Feature Flag Backend Service * * Extends BaseDomainService with generics for strong typing. * Uses an injected provider (database, redis, memory, etc.) for data access. * * No mapper/validator as this service handles simple flag values. * No API client - uses provider directly for data access. */ export declare class FeatureFlagDomainService extends BaseDomainService<_FeatureFlagDomainServiceConfig> { /** The feature flag provider */ private readonly provider; constructor(config: _FeatureFlagDomainServiceConfig); /** * Check if service is available */ isAvailable(): boolean; /** * Dispose/cleanup the service */ dispose(): void; /** * Refresh the provider cache */ refresh(): Promise; /** * Evaluate a single feature flag * * @param key - Feature flag key * @param context - Evaluation context (user, environment, etc.) * @returns Full evaluation result */ evaluate(key: string, context?: FeatureFlagContext): Promise>; /** * Check if a feature flag is enabled * * @param key - Feature flag key * @param context - Evaluation context * @returns Boolean indicating if flag is enabled */ isEnabled(key: string, context?: FeatureFlagContext): Promise; /** * Get the value of a feature flag * * @param key - Feature flag key * @param context - Evaluation context * @returns The flag value */ getValue(key: string, context?: FeatureFlagContext): Promise; /** * Evaluate all feature flags for a context * * @param context - Evaluation context * @returns Record of all flag evaluations */ evaluateAll(context?: FeatureFlagContext): Promise>>; /** * Create a new feature flag * * @param data - Flag creation data * @returns The created feature flag */ create(data: CreateFlagRequest): Promise>; /** * Update an existing feature flag * * @param key - Flag key to update * @param data - Partial update data * @returns The updated feature flag */ update(key: string, data: Partial>): Promise>; /** * Delete a feature flag * * @param key - Flag key to delete */ delete(key: string): Promise; /** * Get rules for a specific flag * * @param key - Flag key * @returns Array of rules */ getRules(key: string): Promise[]>; /** * Get all rules * * @returns Array of all rules */ getAllRules(): Promise[]>; /** * Set a runtime override for a flag (in-memory, not persisted) * * @param key - Flag key * @param value - Override value */ setOverride(key: string, value: FeatureFlagValue): void; /** * Remove a runtime override for a flag * * @param key - Flag key */ removeOverride(key: string): void; /** * Clear all runtime overrides */ clearOverrides(): void; /** * Subscribe to provider changes * * @param callback - Callback when flags change * @returns Unsubscribe function */ subscribe(callback: () => void): () => void; /** * Subscribe to feature flag events * * @param event - Event type to subscribe to * @param handler - Event handler * @returns Unsubscribe function */ on(event: FeatureFlagDomainEventType, handler: (data: unknown) => void): () => void; } //# sourceMappingURL=FeatureFlagDomainService.d.ts.map