import * as plugins from './plugins.js';
import { SmartdataDb } from './classes.db.js';
import { SmartDataDbDoc } from './classes.doc.js';
import { SmartdataDbWatcher } from './classes.watcher.js';
export declare class DistributedClass extends SmartDataDbDoc<DistributedClass, DistributedClass> {
    id: string;
    data: {
        status: 'initializing' | 'bidding' | 'settled' | 'stopped';
        biddingShortcode?: string;
        biddingStartTime?: number;
        lastUpdated: number;
        elected: boolean;
        /**
         * used to store request
         */
        taskRequests: plugins.taskbuffer.distributedCoordination.IDistributedTaskRequest[];
        /**
         * only used by the leader to convey consultation results
         */
        taskRequestResults: plugins.taskbuffer.distributedCoordination.IDistributedTaskRequestResult[];
    };
}
/**
 * This file implements a distributed coordinator according to the @pushrocks/taskbuffer standard.
 * you should not set up this yourself. Instead, there is a factory on the SmartdataDb class
 * that will take care of setting this up.
 */
export declare class SmartdataDistributedCoordinator extends plugins.taskbuffer.distributedCoordination
    .AbstractDistributedCoordinator {
    readyPromise: Promise<any>;
    db: SmartdataDb;
    private asyncExecutionStack;
    ownInstance: DistributedClass;
    distributedWatcher: SmartdataDbWatcher<DistributedClass>;
    constructor(dbArg: SmartdataDb);
    start(): Promise<void>;
    stop(): Promise<void>;
    id: string;
    private startHeartbeat;
    sendHeartbeat(): Promise<void>;
    private init;
    getEligibleLeader(): Promise<DistributedClass>;
    checkAndMaybeLead(): Promise<void>;
    /**
     * when it has been determined
     * that this instance is leading
     * the leading is implemented here
     */
    leadFunction(): Promise<void>;
    fireDistributedTaskRequest(taskRequestArg: plugins.taskbuffer.distributedCoordination.IDistributedTaskRequest): Promise<plugins.taskbuffer.distributedCoordination.IDistributedTaskRequestResult>;
    updateDistributedTaskRequest(infoBasisArg: plugins.taskbuffer.distributedCoordination.IDistributedTaskRequest): Promise<void>;
}
