import { EventEmitter } from 'events';
import { ClientFeaturesDelta, ClientFeaturesResponse, EnhancedFeatureInterface, FeatureInterface } from '../feature';
import { CustomHeaders, CustomHeadersFunction } from '../headers';
import { HttpOptions } from '../http-options';
import { TagFilter } from '../tags';
import { BootstrapProvider } from './bootstrap-provider';
import { StorageProvider } from './storage-provider';
import { Segment } from '../strategy/strategy';
import { Mode } from '../unleash-config';
export declare const SUPPORTED_SPEC_VERSION = "5.2.0";
export interface RepositoryInterface extends EventEmitter {
    getToggle(name: string): FeatureInterface | undefined;
    getToggles(): FeatureInterface[];
    getTogglesWithSegmentData(): EnhancedFeatureInterface[];
    getSegment(id: number): Segment | undefined;
    stop(): void;
    start(): Promise<void>;
}
export interface RepositoryOptions {
    url: string;
    appName: string;
    instanceId: string;
    connectionId: string;
    projectName?: string;
    refreshInterval: number;
    timeout?: number;
    headers?: CustomHeaders;
    customHeadersFunction?: CustomHeadersFunction;
    httpOptions?: HttpOptions;
    namePrefix?: string;
    tags?: Array<TagFilter>;
    bootstrapProvider: BootstrapProvider;
    bootstrapOverride?: boolean;
    storageProvider: StorageProvider<ClientFeaturesResponse>;
    eventSource?: EventSource;
    mode: Mode;
}
export default class Repository extends EventEmitter implements EventEmitter {
    private timer;
    private url;
    private etag;
    private appName;
    private instanceId;
    private connectionId;
    private refreshInterval;
    private headers?;
    private failures;
    private customHeadersFunction?;
    private timeout?;
    private stopped;
    private projectName?;
    private httpOptions?;
    private readonly namePrefix?;
    private readonly tags?;
    private bootstrapProvider;
    private bootstrapOverride;
    private storageProvider;
    private ready;
    private connected;
    private data;
    private segments;
    private eventSource;
    private mode;
    constructor({ url, appName, instanceId, connectionId, projectName, refreshInterval, timeout, headers, customHeadersFunction, httpOptions, namePrefix, tags, bootstrapProvider, bootstrapOverride, storageProvider, eventSource, mode, }: RepositoryOptions);
    private handleFlagsFromStream;
    timedFetch(interval: number): void;
    validateFeature(feature: FeatureInterface): void;
    start(): Promise<void>;
    loadBackup(): Promise<void>;
    setReady(): void;
    createSegmentLookup(segments: Segment[] | undefined): Map<number, Segment>;
    save(response: ClientFeaturesResponse, fromApi: boolean): Promise<void>;
    saveDelta(delta: ClientFeaturesDelta): Promise<void>;
    notEmpty(content: ClientFeaturesResponse): boolean;
    loadBootstrap(): Promise<void>;
    private convertToMap;
    getFailures(): number;
    nextFetch(): number;
    private backoff;
    private countSuccess;
    private configurationError;
    private recoverableError;
    private handleErrorCases;
    fetch(): Promise<void>;
    mergeTagsToStringArray(tags: Array<TagFilter>): Array<string>;
    stop(): void;
    getSegment(segmentId: number): Segment | undefined;
    getToggle(name: string): FeatureInterface | undefined;
    getToggles(): FeatureInterface[];
    getTogglesWithSegmentData(): EnhancedFeatureInterface[];
    private enhanceStrategies;
}
//# sourceMappingURL=index.d.ts.map