interface IBroadcastJS {
    close: VoidFunction;
    postMessage: (message: Message) => void;
    onMessage: (messageName: string, onReceive: (message: Message) => void) => void;
    canBrowserSupportBroadcastJS: () => boolean;
    hasListeners: (messageName: string) => boolean;
}
interface Message<T = unknown> {
    message: string;
    data: T;
    isInternal?: boolean;
}
interface BroadcastHandlers {
    onBeforeSendMessage?: (message: Message) => void;
    onAfterSendMessage?: (message: Message) => void;
    onBeforePostMessage?: (message: Message) => void;
    onAfterPostMessage?: (message: Message) => void;
    onBeforeClose?: VoidFunction;
    onAfterClose?: VoidFunction;
    onError?: (message: Message) => void;
}
declare class BroadcastJS implements IBroadcastJS {
    private static bcInstance;
    private static bcJSInstance;
    private static messageCallbacks;
    private static handlers;
    constructor(name: string, handlers?: BroadcastHandlers);
    close(): void;
    postMessage(message: Message): void;
    onMessage<T>(messageName: string, onRecieve: (message: Message<T>) => void): void;
    removeMessage(messageName: string): void;
    canBrowserSupportBroadcastJS(): boolean;
    hasListeners(messageName: string): boolean;
    private static internalMessage;
    private createMessage;
    private createSerializedMessage;
}

export { BroadcastJS, type Message };
