import { ClientContext } from './client_context';
import { FeatureStateHolder } from './feature_state';
import { FeatureStateValueInterceptor } from './interceptors';
import { AnalyticsCollector } from './analytics';
import { InternalFeatureRepository } from './internal_feature_repository';
import { CatchReleaseListenerHandler, ReadinessListenerHandle } from './feature_hub_config';
export declare enum Readyness {
    NotReady = "NotReady",
    Ready = "Ready",
    Failed = "Failed"
}
export interface ReadynessListener {
    (state: Readyness, firstTimeReady: boolean): void;
}
export interface PostLoadNewFeatureStateAvailableListener {
    (repo: InternalFeatureRepository): void;
}
export interface FeatureHubRepository {
    readyness: Readyness;
    catchAndReleaseMode: boolean;
    logAnalyticsEvent(action: string, other?: Map<string, string>, ctx?: ClientContext): any;
    hasFeature(key: string): undefined | FeatureStateHolder;
    feature(key: string): FeatureStateHolder;
    getFeatureState<T = any>(key: string): FeatureStateHolder<T>;
    release(disableCatchAndRelease?: boolean): Promise<void>;
    simpleFeatures(): Map<string, string | undefined>;
    getFlag(key: string): boolean | undefined;
    getString(key: string): string | undefined;
    getJson(key: string): string | undefined;
    getNumber(key: string): number | undefined;
    isSet(key: string): boolean;
    addValueInterceptor(interceptor: FeatureStateValueInterceptor): void;
    addReadynessListener(listener: ReadynessListener): number;
    addReadinessListener(listener: ReadynessListener, ignoreNotReadyOnRegister?: boolean): ReadinessListenerHandle;
    removeReadinessListener(listener: ReadynessListener | ReadinessListenerHandle): any;
    addAnalyticCollector(collector: AnalyticsCollector): void;
    addPostLoadNewFeatureStateAvailableListener(listener: PostLoadNewFeatureStateAvailableListener): CatchReleaseListenerHandler;
    removePostLoadNewFeatureStateAvailableListener(listener: PostLoadNewFeatureStateAvailableListener | CatchReleaseListenerHandler): any;
}
