///
import { EventEmitter } from 'events';
import { ISession } from '../contracts';
import { AbstractClient } from './client';
import { AbstractGateway } from './gateway';
export declare abstract class AbstractSession, TClient extends AbstractClient, TGateway extends AbstractGateway> extends EventEmitter implements ISession {
static add(session: ISession): void;
static get, C extends AbstractClient, G extends AbstractGateway>(id: string): AbstractSession;
static remove(id: string): void;
private static cache;
ID: string;
private _client;
private _gateway;
private _backgroundTimerID;
get client(): TClient;
set client(val: TClient);
get gateway(): TGateway;
set gateway(val: TGateway);
constructor(client: TClient, gateway?: TGateway);
end(code?: number, message?: string): void;
abstract get backgroundMins(): number;
}