/** * @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 {};