import { Flag } from './flag';
import { RoxString } from './string';
import { RoxNumber } from './number';
export { Flag } from './flag';
export { RoxString } from './string';
export { RoxNumber } from './number';
declare global {
    interface Window {
        rolloutData: any;
    }
}
export interface RoxContainer {
    [key: string]: Flag | RoxNumber | RoxString;
}
export declare enum RoxFetcherStatus {
    AppliedFromEmbedded = "APPLIED_FROM_EMBEDDED",
    AppliedFromCache = "APPLIED_FROM_CACHE",
    AppliedFromNetwork = "APPLIED_FROM_NETWORK",
    ErrorFetchFailed = "ERROR_FETCH_FAILED"
}
export interface RoxFetcherResult {
    fetcherStatus: RoxFetcherStatus;
    creationDate: Date;
    hasChanges: boolean;
    errorDetails?: string;
    clientData?: string;
}
export interface RoxReporting {
    name: string;
    value: string;
}
export interface RoxExperiment {
    identifier: string;
    name: string;
    isArchived: boolean;
    labels: string[];
}
export interface SelfManagedOptions {
    serverURL: string;
    analyticsURL: string;
    pushUpdateURL?: string;
    configurationURL?: string;
    stateURL?: string;
}
export interface RoxSetupOptions {
    version?: string;
    configurationFetchedHandler?(fetcherResult: RoxFetcherResult): void;
    debugLevel?: 'verbose';
    impressionHandler?(reporting: RoxReporting, context: any): void;
    platform?: string;
    fetchIntervalInSec?: number;
    disableNetworkFetch?: boolean;
    dynamicPropertyRuleHandler?(propName: string, context: any): object;
    disablePushUpdateListener?: boolean;
    devModeSecret?: string;
    roxy?: string;
    selfManaged?: SelfManagedOptions;
    disableSignatureVerification?: boolean;
}
export interface dynamicApi {
    isEnabled(nameSpacedFlagName: string, defaultValue: boolean, context?: any): boolean;
    value(nameSpacedFlagName: string, defaultValue: string, context?: any): string;
    getNumber(nameSpacedFlagName: string, defaultValue: number, context?: any): string;
}
export interface overrides {
    setOverride(nameSpacedFlagName: string, value: string): void;
    clearOverride(nameSpacedFlagName: string): void;
    clearAllOverrides(): void;
    getOriginalValue(nameSpacedFlagName: string): string;
    hasOverride(nameSpacedFlagName: string): boolean;
}
export declare enum RoxOverridesPosition {
    TopLeft = "top left",
    TopRight = "top right",
    BottomLeft = "bottom left",
    BottomRight = "bottom right"
}
export declare class _RoxClient {
    dynamicApi: dynamicApi;
    overrides: overrides;
    private alreadyInitialized;
    private _configurationFetchedHandlers;
    private _rolloutData;
    private _initialSetup;
    private _confFetchedHandlers;
    private _impressionHandlers;
    register(namespace: string, roxContainer: RoxContainer): void;
    register(roxContainer: RoxContainer): void;
    setup(apiKey: string, options?: RoxSetupOptions): Promise<void>;
    private _confFetchedHandler;
    private _impressionsHandler;
    _setup(apiKey: string, options?: RoxSetupOptions): Promise<void>;
    setContext(globalContext: any): void;
    setCustomNumberProperty(name: string, value: number | ((context?: any) => number)): void;
    setCustomStringProperty(name: string, value: string | ((context?: any) => string)): void;
    setCustomBooleanProperty(name: string, value: boolean | ((context?: any) => boolean)): void;
    setCustomDateProperty(name: string, value: Date | ((context?: any) => Date)): void;
    setCustomSemverProperty(name: string, value: string | ((context?: any) => string)): void;
    fetch(): void;
    showOverrides(position?: RoxOverridesPosition): void;
    private _configurationFetchedHandler;
    get rolloutData(): string;
    get flags(): ReadonlyArray<Flag | RoxString | RoxNumber>;
}
export declare const Rox: _RoxClient;
