import { DeviceOptionsBase } from 'timeline-state-resolver-types';
import { BaseRemoteDeviceIntegration } from './remoteDeviceInstance';
import { DeviceOptionsAnyInternal } from '../conductor';
import { EventEmitter } from 'eventemitter3';
import { DeviceInstanceEvents } from './DeviceInstance';
export type ConnectionManagerEvents = ConnectionManagerIntEvents & MappedDeviceEvents;
export interface ConnectionManagerIntEvents {
    info: [info: string];
    warning: [warning: string];
    error: [context: string, err?: Error];
    debug: [...debug: any[]];
    connectionAdded: [id: string, container: BaseRemoteDeviceIntegration<DeviceOptionsBase<any>>];
    connectionInitialised: [id: string];
    connectionRemoved: [id: string];
}
export type MappedDeviceEvents = {
    [T in keyof DeviceInstanceEvents as `connectionEvent:${T}`]: [string, ...DeviceInstanceEvents[T]];
};
export declare class ConnectionManager extends EventEmitter<ConnectionManagerEvents> {
    private _config;
    private _connections;
    private _updating;
    private _connectionAttempts;
    private _nextAttempt;
    /**
     * Set the config options for all connections
     */
    setConnections(connectionsConfig: Record<string, DeviceOptionsAnyInternal>): void;
    getConnections(includeUninitialized?: boolean): Array<BaseRemoteDeviceIntegration<DeviceOptionsBase<any>>>;
    getConnection(connectionId: string, includeUninitialized?: boolean): BaseRemoteDeviceIntegration<DeviceOptionsBase<any>> | undefined;
    /**
     * Iterate over config and check that the existing connection has the right config, if
     * not... recreate it
     */
    private _updateConnections;
    private executeOperation;
    private createConnection;
    private deleteConnection;
    private setDebugForConnection;
    private _handleConnectionInitialisation;
    private _setupDeviceListeners;
}
//# sourceMappingURL=ConnectionManager.d.ts.map