import express from 'express';
import { IConversationAPI } from './interface/IConversationAPI';
import { IWAChatServer } from './interface/IWAChatServer';
import { IWAChatServerAdapter } from './interface/IWAChatServerAdapter';
import { IWAChatServerAdapterConstructor } from './interface/IWAChatServerAdapterConstructor';
import { IWAChatServerConfig } from './interface/IWAChatServerConfig';
import { IGetResponse } from './interface/IGetResponse';
import { ServicesRegistrator } from './class/ServicesRegistrator';
import { ISession } from './interface/ISession';
import { ConversationService } from './class/ConversationService/ConversationService';
import { ConversationAssistants } from './class/ConversationAssistants';
import * as Types from './types';
declare class WAChatServer implements IWAChatServer {
    config: IWAChatServerConfig;
    router: express.Application;
    logger: Types.ILogger;
    servicesRegistrator: ServicesRegistrator;
    adapters: Map<string, IWAChatServerAdapter>;
    adapterConfig: Record<string, any>;
    sessionStorageFactories: Map<string, Types.ISessionStorageFactory>;
    sessionStorageDefaultFactory: string;
    conversationAdapter: IConversationAPI;
    conversationAdapters: ConversationAssistants;
    constructor(config: IWAChatServerConfig);
    private separateAppAndAdapterConfig;
    private compileConfig;
    private initRouter;
    private setRoutes;
    private getPort;
    addAdapter(name: string, AdapterClass: IWAChatServerAdapterConstructor): void;
    serve(): void;
    getRouter(): express.Application;
    getServicesRegistrator(): ServicesRegistrator;
    getLogger(): Types.ILogger;
    getConversationAdapter(): IConversationAPI;
    /**
     * Add specific session storage factory implementation. Can be chosen from the **wa-chat-server** library or custom
     * implementation can be added which implements interface **Types.ISessionStorageFactory**.
     * @param storageName can be used to specify storage when starting session using **storageName** value in configOverride
     * @param storageFactory session storage factory implementation
     * @param setDefault specify if the storage should be used by default (without explicitly specifying **storageName**)
     * *DISCLAIMER: first custom factory added will be set as default regardless of this parameter*
     * @returns
     */
    addSessionStorageFactory(storageName: string, storageFactory: Types.ISessionStorageFactory, setDefault?: boolean): void;
    startSession(sessionId: string, configOverride?: Types.ISessionConfig): Promise<ISession>;
    endSession(session: ISession): Promise<void>;
    getResponse(sessionId: string, watsonRequest: Record<string, any>, // AssistantV1.MessageRequest
    configOverride?: Types.ISessionConfig): Promise<IGetResponse>;
}
export { WAChatServer, Types, ConversationService };
