/**
* @hidden
*/
///
/**
* Acts as a central point for routing all events received from the provider.
*/
import { EventEmitter } from 'events';
import { Events, TransportMappings, TransportMemberMappings } from './internal';
export interface EventSpecification {
type: string;
}
type EmitterProvider = (targetId: string) => EventEmitter;
type EventDeserializer = (event: Transport) => T;
interface EventTarget {
type: string;
id: string;
}
export type Targeted = T & {
/**
* Indicates which emitter the client should use to dispatch this event.
*
* Allows events to be raised from client-side objects that mirror a corresponding provider-side object. If there
* is no such model of client-side objects, pass `default` to emit the event from a shared top-level/"global" event
* emitter.
*/
target: EventTarget | 'default';
};
export type Transport = TransportMappings extends never ? {
[K in keyof T]: TransportMemberMappings;
} : TransportMappings;
/**
* Class for helping take events that have arrived at the client via the IAB channel, and dispatching them on the correct client-side object
*/
export declare class EventRouter {
private readonly _emitterProviders;
private readonly _deserializers;
private readonly _defaultEmitter;
constructor(defaultEmitter: EventEmitter);
registerEmitterProvider(targetType: string, emitterProvider: EmitterProvider): void;
registerDeserializer(eventType: T['type'], deserializer: EventDeserializer): void;
dispatchEvent(event: Targeted>): void;
}
/**
* The event emitter to emit events received from the service. All addEventListeners will tap into this.
*/
export declare const eventEmitter: EventEmitter;
export declare function getEventRouter(): EventRouter;
export {};