export type RpcMessageEvent = {
    data: any;
    source?: EventMessaging;
    origin?: EventMessaging;
    target?: EventMessaging;
};
/**
 * EventMessaging is a common interface for window and worker
 */
export interface EventMessaging {
    addEventListener(type: string, listener: (event: RpcMessageEvent) => void): void;
    removeEventListener(type: string, listener: (event: RpcMessageEvent) => void): void;
    postMessage(message: any, targetOrigin?: string): void;
}
export declare class JsonRpc {
    private _callbacks;
    private _outcomingRequests;
    private _defaultWindow;
    private _sources;
    constructor(defaultWindow?: EventMessaging);
    addEventSource(source: EventMessaging): void;
    removeEventSource(source: EventMessaging): void;
    call(method: string, params: any[], frame?: EventMessaging): Promise<any>;
    on(method: string, callback: (...args: any[]) => Promise<any> | undefined | boolean): void;
    destroy(): void;
    private _handler;
}
