import { ValueProvider, FactoryProvider, Type, DynamicModule, OnModuleDestroy } from '@nestjs/common'; import { EvaluationContext, Provider, EventDetails, ServerProviderEvents, Client, EvaluationDetails, JsonValue } from '@openfeature/server-sdk'; import { Observable, Subject, ReplaySubject } from 'rxjs'; import * as _openfeature_core from '@openfeature/core'; import { ZodTypeAny, z } from 'zod'; type SmpOpenFeatureProviderEvent = Partial & { providerKey: string; type: ServerProviderEvents.ConfigurationChanged | ServerProviderEvents.Error | ServerProviderEvents.Ready; }; declare class SmpOpenFeatureRegistryService implements OnModuleDestroy { static get DEFAULT_KEY(): string; static get FALLBACK_KEY(): string; get defaultProviderKey(): string; get events$(): Observable; protected _clients: Map; protected _defaultProviderKey: string; protected _events$: Subject; protected _initialization: Map>; protected _initializedEvents: Set; protected _ready$: ReplaySubject; constructor(); getBooleanFlag(providerKey: string, flagKey: string, defaultValue: boolean, context?: EvaluationContext): Promise; getBooleanFlagDetails(providerKey: string, flagKey: string, defaultValue: boolean, context?: EvaluationContext): Promise>; getNumberFlag(providerKey: string, flagKey: string, defaultValue: number, context?: EvaluationContext): Promise; getNumberFlagDetails(providerKey: string, flagKey: string, defaultValue: number, context?: EvaluationContext): Promise>; getObjectFlag(providerKey: string, flagKey: string, defaultValue: U, context?: EvaluationContext): Promise; getObjectFlagDetails(providerKey: string, flagKey: string, defaultValue: U, context?: EvaluationContext): Promise>; getStringFlag(providerKey: string, flagKey: string, defaultValue: string, context?: EvaluationContext): Promise; getStringFlagDetails(providerKey: string, flagKey: string, defaultValue: string, context?: EvaluationContext): Promise>; initialize(providerKey: string, provider: Provider): Promise; onModuleDestroy(): Promise; setContext(providerKey: string, context: EvaluationContext): void; setDefaultProviderKey(providerKey: string): void; protected _getClientOrThrow(providerKey: string): Client; protected _initializeProvider(providerKey: string, provider: Provider): Promise; protected _setupEventListeners(providerKey: string, client: Client): void; } declare class SmpOpenFeatureService implements OnModuleDestroy { get allEvents$(): Observable; get defaultProviderKey(): string; get events$(): Observable<{ [x: string]: unknown; message?: string; metadata?: _openfeature_core.EventMetadata; providerName?: string | undefined; clientName?: string; domain?: string; type: _openfeature_core.ServerProviderEvents.ConfigurationChanged | _openfeature_core.ServerProviderEvents.Error | _openfeature_core.ServerProviderEvents.Ready; } | { [x: string]: unknown; message?: string; metadata?: _openfeature_core.EventMetadata; flagsChanged?: string[]; providerName?: string | undefined; clientName?: string; domain?: string; type: _openfeature_core.ServerProviderEvents.ConfigurationChanged | _openfeature_core.ServerProviderEvents.Error | _openfeature_core.ServerProviderEvents.Ready; }>; protected _ownsRegistry: boolean; protected _registry: SmpOpenFeatureRegistryService; constructor(registry?: SmpOpenFeatureRegistryService, providersInit?: unknown); eventsByProvider$(providerKey?: string): Observable; getBooleanFlag(flagKey: string, defaultValue: boolean, context?: EvaluationContext, providerKey?: string): Observable; getBooleanFlagDetails(flagKey: string, defaultValue: boolean, context?: EvaluationContext, providerKey?: string): Observable<_openfeature_core.EvaluationDetails>; getNumberFlag(flagKey: string, defaultValue: number, context?: EvaluationContext, providerKey?: string): Observable; getNumberFlagDetails(flagKey: string, defaultValue: number, context?: EvaluationContext, providerKey?: string): Observable<_openfeature_core.EvaluationDetails>; getObjectFlag(flagKey: string, defaultValue: U, context?: EvaluationContext, providerKey?: string): Observable; getObjectFlagDetails(flagKey: string, defaultValue: U, context?: EvaluationContext, providerKey?: string): Observable<_openfeature_core.EvaluationDetails>; getStringFlag(flagKey: string, defaultValue: string, context?: EvaluationContext, providerKey?: string): Observable; getStringFlagDetails(flagKey: string, defaultValue: string, context?: EvaluationContext, providerKey?: string): Observable<_openfeature_core.EvaluationDetails>; initialize(provider: Provider, providerKey?: string): Observable; onModuleDestroy(): Promise; setContext(context: EvaluationContext, providerKey?: string): void; } type SmpGeneratedOpenFeatureConfigService$1 = Type<{ get>(key: K): z.infer[K]; get$>(key: K): Observable[K]>; getConfig$(): Observable>; getSnapshot(): z.infer; }> & { flagKey: string; zodSchema: TSchema; }; /** * Generate a typed OpenFeature config service class from a Zod schema. * * @example * ```ts * const smpCommonSchema = z.object({ * mailerStrategyByCountry: z.record(z.string(), z.string()) * }); * * export class SmpCommonConfigService extends smpGenerateSmpOpenFeatureConfigService("common", smpCommonSchema) {} * ``` */ declare function smpGenerateSmpOpenFeatureConfigService(flagKey: string, schema: TSchema): SmpGeneratedOpenFeatureConfigService$1; interface SmpOpenFeatureProviderConfig { context?: EvaluationContext; provider: Provider; key?: string; setAsDefault?: boolean; } declare const SMP_OPEN_FEATURE_PROVIDERS: unique symbol; type OpenFeatureConfigProvider = ValueProvider | FactoryProvider; type OpenFeatureRawConfig = OpenFeatureConfigProvider | SmpOpenFeatureProviderConfig[] | Provider[]; type SmpGeneratedOpenFeatureConfigService = ReturnType>; interface SmpOpenFeatureModuleOpts { openFeatureConfigProviderConfig?: OpenFeatureRawConfig; openFeatureConfigServices?: SmpGeneratedOpenFeatureConfigService | SmpGeneratedOpenFeatureConfigService[]; } declare class SmpOpenFeatureModule { private static _initialized; constructor(); static forRoot(config?: Partial): DynamicModule; static forRootAsync(factory: () => Promise>): Promise; protected static _isProviderConfigArray(raw: SmpOpenFeatureProviderConfig[] | Provider[]): raw is SmpOpenFeatureProviderConfig[]; protected static _parseConfigServices(raw?: SmpOpenFeatureModuleOpts["openFeatureConfigServices"]): SmpGeneratedOpenFeatureConfigService[]; protected static _parseProvidersConfig(raw?: SmpOpenFeatureModuleOpts["openFeatureConfigProviderConfig"]): OpenFeatureConfigProvider; } export { SMP_OPEN_FEATURE_PROVIDERS, SmpOpenFeatureModule, type SmpOpenFeatureProviderConfig, type SmpOpenFeatureProviderEvent, SmpOpenFeatureRegistryService, SmpOpenFeatureService, smpGenerateSmpOpenFeatureConfigService };