import { Eventer, EventerEventListener, EventerEventResponder } from './Eventer'; export declare type MessengerType = 'master' | 'slave'; export declare type Message = { channel: string; topic: string; data: any; }; export declare class Messenger extends Eventer { private listenTo?; private emitTo?; private type; private channel; private linkEstablished; private postMessageListenerAttached; constructor(listenTo?: Window, emitTo?: Window, type?: MessengerType); emit(topic: string, data?: any): void; on(topic: string, listener: EventerEventListener): void; request(topic: string, data?: any, listener?: EventerEventListener): Promise; respond(topic: string, responder: EventerEventResponder): void; once(topic: string, listener?: EventerEventListener): Promise; establishLinkBetweenSlaveAndMaster(): Promise; private setupMaster; private setupSlave; private setupPostMessageListener; protected emitMessage(topic: string, payload: any): void; protected receiveMessage(topic: string, payload: any): void; private receivePostMessage; private emitPostMessage; private createPostMessage; private checkLink; private generateChannelId; private isPrivateTopic; }