/// <reference types="node" />
import { Express, RequestHandler } 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, app: Reshuffle) => void;
    id: string;
}
export default class Reshuffle {
    availableConnectors: any;
    httpDelegates: {
        [path: string]: any;
    };
    port: number;
    registry: {
        connectors: {
            [url: string]: BaseConnector;
        };
        handlers: {
            [id: string]: Handler[];
        };
        common: {
            webserver?: Express;
            persistentStore?: any;
        };
    };
    httpServer?: http.Server;
    logger: Logger;
    middleware: RequestHandler[];
    constructor(loggerOptions?: LoggerOptions);
    addMiddleware(middleware: RequestHandler): void;
    private prepareWebServer;
    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: EventConfiguration['id'], event: any): Promise<boolean>;
    onHandleEvent(handler: Handler, event: any): Promise<boolean>;
    setPersistentStore(adapter: PersistentStoreAdapter): PersistentStoreAdapter;
    getPersistentStore(): any;
    getLogger(): Logger;
}
export { Reshuffle };
