import { TRAIT_KEYS } from '@rudderstack/featureflag-sdk-node';
export interface FeatureValue {
    /** The name of the feature */
    name: string;
    /** Whether the feature is enabled */
    enabled: boolean;
    /** The value of the feature */
    value?: unknown;
    /** Metadata about the feature */
    metadata?: Record<string, unknown>;
    /** The date and time the feature was last updated */
    lastUpdatedAt?: Date;
    /** Whether the feature value is stale */
    isStale?: boolean;
    /** The error that occurred when evaluating the feature */
    error?: Error;
    /** This function is used to send analytics events to the provider */
    track?: () => void;
}
export interface FeatureFlagUser {
    workspaceId: string;
    traits?: Map<TRAIT_KEYS, string>;
}
export interface FeatureFlagConfig {
    provider: FeatureFlagProvider;
    apiKey?: string;
    enableLocalEvaluation?: boolean;
    enableCache?: boolean;
    cacheTtlSeconds?: number;
    timeoutSeconds?: number;
    retryAttempts?: number;
    enableAnalytics?: boolean;
}
export interface ResolvedFeatureFlagConfig {
    provider: FeatureFlagProvider;
    apiKey?: string;
    enableLocalEvaluation: boolean;
    enableCache: boolean;
    cacheTtlSeconds: number;
    timeoutSeconds: number;
    retryAttempts: number;
    enableAnalytics: boolean;
}
export type FeatureFlagProvider = 'flagsmith' | 'local';
export declare enum ErrorBehaviour {
    RETURN_DEFAULT = "return_default",
    RETURN_RICH_ERROR = "return_rich_error",
    THROW_ERROR = "throw_error"
}
export interface FeatureFlagResponse extends FeatureValue {
    isDefault: boolean;
}
export interface FeatureFlagDefinition {
    key: string;
    name: string;
    description: string;
    defaultValue: boolean | string | number;
    type: 'boolean' | 'string' | 'number';
    category?: string;
    tags?: string[];
}
export interface ProviderInfo {
    name: string;
    version: string;
    supportsCache: boolean;
    supportsRealTime: boolean;
}
export interface IFeatureFlagService {
    initialize(config: Partial<FeatureFlagConfig>): Promise<void>;
    isFeatureEnabled(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
    getFeatureValue(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
    isFeatureEnabledLatest(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
    getFeatureValueLatest(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
    registerFlags(flags: FeatureFlagDefinition[]): void;
    getRegisteredFlag(key: string): FeatureFlagDefinition | undefined;
}
export interface IFeatureFlagProvider {
    initialize(): Promise<void>;
    isFeatureEnabled(user: FeatureFlagUser, flagName: string): Promise<FeatureValue>;
    getFeatureValue(user: FeatureFlagUser, flagName: string): Promise<FeatureValue>;
    isFeatureEnabledLatest(user: FeatureFlagUser, flagName: string): Promise<FeatureValue>;
    getFeatureValueLatest(user: FeatureFlagUser, flagName: string): Promise<FeatureValue>;
    getProviderInfo(): ProviderInfo;
    destroy?(): Promise<void>;
}
export interface IFeatureFlagRegistry {
    register(definition: FeatureFlagDefinition): void;
    register(definitions: FeatureFlagDefinition[]): void;
    get(key: string): FeatureFlagDefinition | undefined;
    getAll(): FeatureFlagDefinition[];
    getByCategory(category: string): FeatureFlagDefinition[];
    getDefaultValue(key: string): boolean | string | number;
    isRegistered(key: string): boolean;
    clear(): void;
}
//# sourceMappingURL=types.d.ts.map