import type { FramebusSubscriberArg, FramebusOnHandler, FramebusReplyHandler } from "./lib";
type VerifyDomainMethod = (domain: string) => boolean;
type IFrameOrWindowList = Array<HTMLIFrameElement | Window>;
type FramebusOptions = {
    channel?: string;
    origin?: string;
    verifyDomain?: VerifyDomainMethod;
    targetFrames?: IFrameOrWindowList;
};
export declare class Framebus {
    origin: string;
    channel: string;
    targetFrames: IFrameOrWindowList;
    private verifyDomain?;
    private isDestroyed;
    private listeners;
    private hasAdditionalChecksForOnListeners;
    private limitBroadcastToFramesArray;
    constructor(options?: FramebusOptions);
    static Promise: PromiseConstructor;
    static setPromise(PromiseGlobal: (typeof Framebus)["Promise"]): void;
    static target(options?: FramebusOptions): Framebus;
    addTargetFrame(frame: Window | HTMLIFrameElement): void;
    include(childWindow: Window): boolean;
    target(options?: FramebusOptions): Framebus;
    emit(eventName: string, data?: FramebusSubscriberArg | FramebusReplyHandler, reply?: FramebusReplyHandler): boolean;
    emitAsPromise<T = void>(eventName: string, data?: FramebusSubscriberArg): Promise<T>;
    on(eventName: string, originalHandler: FramebusOnHandler): boolean;
    off(eventName: string, originalHandler: FramebusOnHandler): boolean;
    teardown(): void;
    private passesVerifyDomainCheck;
    private targetFramesAsWindows;
    private hasMatchingTargetFrame;
    private checkOrigin;
    private namespaceEvent;
}
export {};
