import { EdgeService } from './edge_service';
import { ClientContext } from './client_context';
import { InternalFeatureRepository } from './internal_feature_repository';
import { AnalyticsCollector } from './analytics';
import { FeatureStateValueInterceptor } from './interceptors';
import { FeatureHubRepository, Readyness, ReadynessListener } from './featurehub_repository';
import { FeatureStateHolder } from './feature_state';
export type EdgeServiceProvider = (repository: InternalFeatureRepository, config: FeatureHubConfig) => EdgeService;
export type EdgeServiceSupplier = () => EdgeService;
export type FHLogMethod = (...args: any[]) => void;
export type ReadinessListenerHandle = number;
export type CatchReleaseListenerHandler = number;
export declare class FHLog {
    static fhLog: FHLog;
    log: FHLogMethod;
    error: FHLogMethod;
    trace: FHLogMethod;
    quiet(): void;
}
export declare const fhLog: FHLog;
export interface FeatureHubConfig {
    readyness: Readyness;
    readiness: Readyness;
    feature<T = any>(name: string): FeatureStateHolder<T>;
    url(): string;
    repository(repository?: FeatureHubRepository): FeatureHubRepository;
    edgeServiceProvider(edgeService?: EdgeServiceProvider): EdgeServiceProvider;
    newContext(repository?: FeatureHubRepository, edgeService?: EdgeServiceProvider): ClientContext;
    clientEvaluated(): boolean;
    apiKey(apiKey: string): FeatureHubConfig;
    getApiKeys(): Array<string>;
    getHost(): string;
    init(): FeatureHubConfig;
    close(): void;
    get closed(): boolean;
    get initialized(): boolean;
    addReadynessListener(listener: ReadynessListener): ReadinessListenerHandle;
    addReadinessListener(listener: ReadynessListener, ignoreNotReadyOnRegister?: boolean): ReadinessListenerHandle;
    removeReadinessListener(handle: ReadynessListener | ReadinessListenerHandle): any;
    addAnalyticCollector(collector: AnalyticsCollector): void;
    addValueInterceptor(interceptor: FeatureStateValueInterceptor): void;
}
