/// <reference types="node" />
import { Express } from 'express';
import { PersistentStoreAdapter } from './persistency';
import { BaseConnector, BaseHttpConnector, EventConfiguration } from 'reshuffle-base-connector';
import { Logger, LoggerOptions } from 'winston';
import http from 'http';
export interface Handler {
    handle: (event?: any) => void;
    id: string;
}
export default class Reshuffle {
    availableConnectors: any;
    httpDelegates: {
        [path: string]: BaseHttpConnector;
    };
    port: number;
    registry: {
        connectors: {
            [url: string]: BaseConnector;
        };
        handlers: {
            [id: string]: Handler[];
        };
        common: {
            webserver?: http.Server;
            persistentStore?: any;
        };
    };
    logger: Logger;
    constructor(loggerOptions?: LoggerOptions);
    prepareWebServer(): Express;
    register(connector: BaseConnector): Reshuffle;
    unregister(connector: BaseConnector): Promise<void>;
    getConnector(connectorId: BaseConnector['id']): BaseConnector;
    registerHTTPDelegate(path: string, delegate: BaseHttpConnector): Reshuffle;
    unregisterHTTPDelegate(path: string): void;
    when(eventConfiguration: EventConfiguration, handler: () => void | Handler): Reshuffle;
    start(port?: number, callback?: () => void): void;
    stopWebServer(): void;
    restart(port?: number): void;
    handleEvent(eventId: string, event: any): Promise<boolean>;
    _p_handle(handler: Handler, event: any): Promise<void>;
    setPersistentStore(adapter: PersistentStoreAdapter): PersistentStoreAdapter;
    getPersistentStore(): any;
    clearInterval(intervalID: NodeJS.Timer): void;
    setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
    getLogger(): Logger;
}
export { Reshuffle };
