/// <reference types="node" />
import { EngineService } from '../engine';
import { ILogger } from '../logger';
import { StoreService } from '../store';
import { SubService } from '../sub';
import { CacheMode } from '../../types/cache';
import { HotMeshConfig } from '../../types/hotmesh';
import { ProviderClient, ProviderTransaction } from '../../types/provider';
import { QuorumMessage, QuorumMessageCallback, QuorumProfile, RollCallMessage, SubscriptionCallback } from '../../types/quorum';
declare class QuorumService {
    namespace: string;
    appId: string;
    guid: string;
    engine: EngineService;
    profiles: QuorumProfile[];
    store: StoreService<ProviderClient, ProviderTransaction> | null;
    subscribe: SubService<ProviderClient> | null;
    logger: ILogger;
    cacheMode: CacheMode;
    untilVersion: string | null;
    quorum: number | null;
    callbacks: QuorumMessageCallback[];
    rollCallInterval: NodeJS.Timeout;
    /**
     * @private
     */
    constructor();
    /**
     * @private
     */
    static init(namespace: string, appId: string, guid: string, config: HotMeshConfig, engine: EngineService, logger: ILogger): Promise<QuorumService>;
    /**
     * @private
     */
    verifyQuorumFields(config: HotMeshConfig): void;
    /**
     * @private
     */
    initStoreChannel(store: ProviderClient): Promise<void>;
    /**
     * @private
     */
    initSubChannel(sub: ProviderClient, store: ProviderClient): Promise<void>;
    /**
     * @private
     */
    subscriptionHandler(): SubscriptionCallback;
    /**
     * @private
     */
    sayPong(appId: string, guid: string, originator: string, details?: boolean): Promise<void>;
    /**
     * A quorum-wide command to request a quorum count.
     * @private
     */
    requestQuorum(delay?: number, details?: boolean): Promise<number>;
    /**
     * @private
     */
    doRollCall(message: RollCallMessage): Promise<void>;
    /**
     * @private
     */
    cancelRollCall(): void;
    /**
     * @private
     */
    stop(): void;
    /**
     * @private
     */
    pub(quorumMessage: QuorumMessage): Promise<boolean>;
    /**
     * @private
     */
    sub(callback: QuorumMessageCallback): Promise<void>;
    /**
     * @private
     */
    unsub(callback: QuorumMessageCallback): Promise<void>;
    /**
     * @private
     */
    rollCall(delay?: number): Promise<QuorumProfile[]>;
    /**
     * @private
     */
    activate(version: string, delay?: number, count?: number): Promise<boolean>;
}
export { QuorumService };
