import { Redis, RedisOptions } from 'ioredis';
import { Server } from 'socket.io';
import { ProvidersStorage, Router, Transport, TransportsStorage } from './models';
import { IIoExchangeSchema, IServerContext, IServerContextDefaults } from './types';
import { AnalyticsService, MetricsService } from './services';
import { OnsiteClient } from '../client';
export * from './transports';
export * from './models';
export * from './types';
export interface IMockServerConfiguration {
    port: number;
    host: string;
    containers?: {
        /** Seconds `default: 1h` */
        expiredCleaningInterval?: number;
    };
    transports?: Partial<Record<string, Transport>> & Record<string, Transport>;
    databases?: {
        redis?: RedisOptions;
    };
}
export declare class MockServer<TConfiguration extends IMockServerConfiguration = IMockServerConfiguration, TContext extends IServerContext = IServerContext> {
    configuration: TConfiguration;
    TContext: TContext;
    timestamp: number;
    authority: string;
    databases: {
        redis: Redis | null;
    };
    exchanges: {
        io: import("./models").ISocketIoExchangeService<IIoExchangeSchema>;
    };
    providers: ProvidersStorage<TContext>;
    transports: TransportsStorage<TContext>;
    router: Router<TContext>;
    http: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
    ws: import("ws").Server<typeof import("ws"), typeof import("http").IncomingMessage>;
    io: Server<import("socket.io/dist/typed-events").DefaultEventsMap, import("socket.io/dist/typed-events").DefaultEventsMap, import("socket.io/dist/typed-events").DefaultEventsMap, any>;
    services: {
        readonly analytics: AnalyticsService;
        readonly metrics: MetricsService;
    };
    private internal;
    constructor(configuration: TConfiguration);
    get client(): OnsiteClient<TContext>;
    unbindExpiredContainers(): this;
    static start<TConfiguration extends IMockServerConfiguration, TContext extends IServerContext = IServerContext<{
        transport: IServerContextDefaults['transport'] | Extract<keyof TConfiguration['transports'], string>;
        event: IServerContextDefaults['event'] | {
            [K in keyof TConfiguration['transports']]: NonNullable<TConfiguration['transports']>[K]['TContext']['event'];
        }[keyof TConfiguration['transports']];
        flag: IServerContextDefaults['flag'] | {
            [K in keyof TConfiguration['transports']]: NonNullable<TConfiguration['transports']>[K]['TContext']['flag'];
        }[keyof TConfiguration['transports']];
    }>>(configuration: TConfiguration): Promise<MockServer<TConfiguration, TContext>>;
}
//# sourceMappingURL=index.d.ts.map