export interface Message<T> {
    type: string;
    data: T;
}
export interface CrossDocMessenger<T> {
    emit: (message: Message<T>) => void;
    subscribe: (_handlerFn: (event: Message<T>) => void) => void;
    unsubscribe: () => void;
}
interface MessengerConstraint {
    messenger<T>(target: HTMLIFrameElement | undefined, targetOrigin: string): CrossDocMessenger<T>;
}
/**
 * TargetFrameMessenger is of type: CrossDocMessenger<T>
 */
export declare const TargetFrameMessenger: CrossDocMessenger<unknown>;
/**
 * Host document API
 */
export declare class HostConnector implements MessengerConstraint {
    private _hostPort;
    private _channel;
    static getInstance(): HostConnector;
    /**
     * Should be consumed by the parent/hosting document
     * Accepts the iframe target element and its src url, initialize the MessageChannel and returns
     * the host and targets ports ready for messaging.
     * Example:
     * const { hostPort } = CrossDocsMessenger.connectToChannel(iframeRef, targetOrigin);
     * @param target
     * @param targetOrigin
     */
    private _establishChannel;
    messenger<T>(target: HTMLIFrameElement | undefined, targetOrigin: string): CrossDocMessenger<T>;
}
export {};
