import { ChildProcess } from 'child_process';
import express from 'express';
import { Container } from 'inversify';
import { Logger } from '@5minds/processcube_engine_sdk';
import { BaseController } from '../Api/Controller/BaseController';
import { SocketController } from '../Api/Controller/SocketController';
import { ServiceFacade } from './ServiceFacade';
import { WorkerFacade } from './WorkerFacade';
export type ClassConstructor = new (...args: Array<never>) => unknown;
export type SocketControllerConstructor = new (...args: Array<never>) => SocketController;
export type ProxyConfiguration = {
    proxyKey: string;
    targetKey: string;
    target: ClassConstructor;
    provideGlobally?: boolean;
    getGlobally?: boolean;
};
export type HttpRouteConfiguration = {
    route: string;
    method: 'post' | 'get' | 'delete' | 'put';
    controllerClass: ClassConstructor;
    controllerMethod: Function;
    isCancelable?: boolean;
    isDeprecated?: boolean | string;
    deprecateSilently?: boolean;
};
export declare function subscribable(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
export declare function cancelable(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
export declare abstract class EngineRouter {
    engineApiRouter?: express.Router;
    extensionRouter?: express.Router;
    protected workerFacade?: WorkerFacade;
    protected serviceFacade?: ServiceFacade;
    protected logger: Logger;
    protected globalContainer: Container;
    protected routerContainer: Container;
    private engineApiRoutes;
    private extensionRoutes;
    private proxies;
    private socketControllers;
    private eventTopicsListening;
    private loggerNamespace;
    constructor(workerFacade: WorkerFacade, serviceFacade: ServiceFacade, globalContainer: Container, namespace: string);
    private onNotificationPublishedCallback;
    init(): Promise<void>;
    getChildProcess(): ChildProcess;
    dispose(): Promise<void>;
    onNotificationPublished(callback: (topic: string, message: any) => void): void;
    abstract initProxies(): Array<ProxyConfiguration>;
    abstract initSocketController(): Array<SocketControllerConstructor>;
    abstract initEventTopicsListening(): Array<string>;
    abstract initHttpRoutes(): Array<HttpRouteConfiguration>;
    protected getExtensionRoutes(): Promise<Array<HttpRouteConfiguration>>;
    protected getController<TController extends BaseController>(controller: ClassConstructor): TController;
    private buildIoc;
    private buildProxies;
    private buildControllers;
    private initMainThreadRouting;
    private registerEngineApiRoute;
    private registerExtensionRoute;
    private registerHttpRoute;
    private initMainThreadSocketNotificationBindings;
    private initWorkerRouting;
}
