/// <reference types="koa-bodyparser" />
import { List, Map } from 'immutable';
import * as Koa from 'koa';
import * as Router from 'koa-router';
import * as mongoose from 'mongoose';
import { RedisClient } from 'redis';
import { BotServerConfig, BotContext, Executor, Messenger, Middleware, PreProcessor, PostProcessor } from './Api';
declare class BotServer {
    readonly server: Koa;
    readonly router: Router;
    redisClient: RedisClient;
    mongoConnection: mongoose.Connection;
    private config;
    private messengers;
    private middlewares;
    private sortedMiddlewares;
    private preProcessors;
    private postProcessors;
    private executors;
    private nlpService;
    private fileService;
    private transcodeService;
    private sessionRepository;
    private intentRepository;
    private configRepository;
    private messageRepository;
    private issueRepository;
    private senderInfoRepository;
    private logger;
    private nodeServer;
    constructor(config: BotServerConfig);
    init(): void;
    close(): void;
    protected getDefaultValue<T>(defaultValue: T, value?: T): T;
    protected setupKoa(): void;
    protected createDefaultMiddlewares(): Map<number, Middleware>;
    protected createDefaultPreProcessor(): Map<string, PreProcessor>;
    protected createDefaultPostProcessor(): Map<string, PostProcessor>;
    protected createDefaultExecutor(): Map<string, Executor>;
    protected setupMessenger(): void;
    protected createMessengerHandler(messenger: Messenger<any, any>): (serverContext: Koa.Context) => Promise<void>;
    protected createMiddlewareStartPoint(botServiceContext: BotContext, services: List<Middleware>, index?: number): () => Promise<void>;
}
export default BotServer;
