import { ConfigBody, DVCLogger, ConfigSource } from '@devcycle/types';
import { ResponseError } from "../server-request/src";
type ConfigPollingOptions = {
    configPollingIntervalMS?: number;
    sseConfigPollingIntervalMS?: number;
    configPollingTimeoutMS?: number;
    configCDNURI?: string;
    clientMode?: boolean;
    disableRealTimeUpdates?: boolean;
};
type SetIntervalInterface = (handler: () => void, timeout?: number) => any;
type ClearIntervalInterface = (intervalTimeout: any) => void;
type SetConfigBufferInterface = (sdkKey: string, projectConfig: string) => void;
type TrackSDKConfigEventInterface = (url: string, responseTimeMS: number, retrievalMetadata?: Record<string, unknown>, err?: ResponseError, reqEtag?: string, reqLastModified?: string, sseConnected?: boolean) => void;
export declare class EnvironmentConfigManager {
    private readonly logger;
    private readonly sdkKey;
    private readonly setConfigBuffer;
    private readonly setInterval;
    private readonly clearInterval;
    private readonly trackSDKConfigEvent;
    private _hasConfig;
    configSSE?: ConfigBody<string>['sse'];
    private currentPollingInterval;
    private readonly configPollingIntervalMS;
    private readonly sseConfigPollingIntervalMS;
    private readonly enableRealtimeUpdates;
    fetchConfigPromise: Promise<void>;
    private intervalTimeout?;
    private clientMode;
    private sseConnection?;
    private readonly requestTimeoutMS;
    private configSource;
    constructor(logger: DVCLogger, sdkKey: string, setConfigBuffer: SetConfigBufferInterface, setInterval: SetIntervalInterface, clearInterval: ClearIntervalInterface, trackSDKConfigEvent: TrackSDKConfigEventInterface, { configPollingIntervalMS, sseConfigPollingIntervalMS, // 10 minutes
    configPollingTimeoutMS, configCDNURI, clientMode, disableRealTimeUpdates, }: ConfigPollingOptions, configSource?: ConfigSource);
    private startSSE;
    private onSSEMessage;
    private stopSSE;
    private startPolling;
    get hasConfig(): boolean;
    get configEtag(): string | undefined;
    private stopPolling;
    cleanup(): void;
    _fetchConfig(sseLastModified?: string): Promise<void>;
    private isLastModifiedHeaderOld;
    private handleSSEConfig;
}
export {};
