import { ISessionConfig } from '../../interface/ISessionConfig';
import { ISession } from '../../interface/ISession';
import { ISessionStorage } from '../../interface/ISessionStorage';
import { ISessionStorageFactory } from '../../types';
/**
 * Session implementation
 *
 * Usage:
 *   const session = await new Session(sessionId, ...).start();
 *   1) session.data.general[KEY] = VALUE;
 *   2) session.data.assistants[ALIAS][KEY] = VALUE;
 *   await session.save()
 *
 * If we don't have sessionId we just provide empty value and
 * a new session will be created. Similarly a new session is created
 * if the provided session id does not correspond to a valid session.
 * The session id effectively used is stored in the public class
 * property sessionId.
 */
export declare class Session implements ISession {
    sessionId: string;
    config: ISessionConfig;
    storageFactories: Map<string, ISessionStorageFactory>;
    data: Record<string, any>;
    static sessionStorages: Map<string, ISessionStorage>;
    sessionStorage: ISessionStorage;
    runningAssistant: string;
    constructor(sessionId: string, config?: ISessionConfig, storageFactories?: Map<string, ISessionStorageFactory>);
    initStorage(): Promise<void>;
    restartSession(): Promise<void>;
    private initSessionData;
    start(): Promise<Session>;
    updateContext(newPayload: any): void;
    save(): Promise<void>;
    getStorage(): ISessionStorage;
    currentData(): Record<string, any>;
    setRunningAssistant(runningAssistant: string): void;
}
