import { BaseImmutable, Property } from 'immutable-class';
import { External } from 'swiv-plywood';
export declare type SupportedType = 'druid' | 'mysql' | 'postgres';
export declare type SourceListScan = 'disable' | 'auto';
export interface ClusterValue {
    name: string;
    type: SupportedType;
    title?: string;
    host?: string;
    version?: string;
    timeout?: number;
    sourceListScan?: SourceListScan;
    sourceListRefreshOnLoad?: boolean;
    sourceListRefreshInterval?: number;
    sourceReintrospectOnLoad?: boolean;
    sourceReintrospectInterval?: number;
    introspectionStrategy?: string;
    requestDecorator?: string;
    decoratorOptions?: any;
    database?: string;
    user?: string;
    password?: string;
}
export interface ClusterJS {
    name: string;
    type: SupportedType;
    title?: string;
    host?: string;
    version?: string;
    timeout?: number;
    sourceListScan?: SourceListScan;
    sourceListRefreshOnLoad?: boolean;
    sourceListRefreshInterval?: number;
    sourceReintrospectOnLoad?: boolean;
    sourceReintrospectInterval?: number;
    introspectionStrategy?: string;
    requestDecorator?: string;
    decoratorOptions?: any;
    database?: string;
    user?: string;
    password?: string;
}
export declare class Cluster extends BaseImmutable<ClusterValue, ClusterJS> {
    static TYPE_VALUES: SupportedType[];
    static DEFAULT_TIMEOUT: number;
    static DEFAULT_SOURCE_LIST_SCAN: SourceListScan;
    static SOURCE_LIST_SCAN_VALUES: SourceListScan[];
    static DEFAULT_SOURCE_LIST_REFRESH_INTERVAL: number;
    static DEFAULT_SOURCE_REINTROSPECT_INTERVAL: number;
    static DEFAULT_INTROSPECTION_STRATEGY: string;
    static isCluster(candidate: any): candidate is Cluster;
    static fromJS(parameters: ClusterJS): Cluster;
    static PROPERTIES: Property[];
    name: string;
    type: SupportedType;
    host: string;
    title: string;
    version: string;
    timeout: number;
    sourceListScan: SourceListScan;
    sourceListRefreshOnLoad: boolean;
    sourceListRefreshInterval: number;
    sourceReintrospectOnLoad: boolean;
    sourceReintrospectInterval: number;
    introspectionStrategy: string;
    requestDecorator: string;
    decoratorOptions: any;
    database: string;
    user: string;
    password: string;
    constructor(parameters: ClusterValue);
    getTimeout: () => number;
    getSourceListScan: () => SourceListScan;
    getSourceListRefreshInterval: () => number;
    getSourceReintrospectInterval: () => number;
    getIntrospectionStrategy: () => string;
    changeHost: (newHost: string) => Cluster;
    changeTimeout: (newTimeout: string) => Cluster;
    changeSourceListRefreshInterval: (newSourceListRefreshInterval: string) => Cluster;
    toClientCluster(): Cluster;
    makeExternalFromSourceName(source: string, version?: string): External;
    shouldScanSources(): boolean;
}
