interface NsObject {
    ns: string;
}
interface HubOptions {
    ns?: string;
    ctx?: any;
}
export declare type HubListener = (data: any, info: HubEventInfo) => void;
export declare type HubListenerByFullSelector = {
    [selector: string]: HubListener;
};
export declare type HubListenerByHubNameBySelector = {
    [hubName: string]: {
        [selector: string]: HubListener;
    };
};
export declare type HubBindings = HubListenerByFullSelector | HubListenerByHubNameBySelector | (HubListenerByFullSelector | HubListenerByHubNameBySelector)[];
export interface HubEventInfo {
    topic: string;
    label: string;
}
export interface Hub {
    sub(topics: string, handler: HubListener, opts?: HubOptions): void;
    sub(topics: string, labels: string | undefined | null, handler: HubListener, opts?: HubOptions): void;
    pub(topic: string, message: any): void;
    pub(topic: string, label: string, message: any): void;
    unsub(ns: NsObject): void;
}
export declare function addHubEvents(target: HubBindings | undefined, source: HubBindings): (HubListenerByFullSelector | HubListenerByHubNameBySelector)[];
export declare function bindHubEvents(bindings: HubBindings, opts?: HubOptions): void;
export declare function unbindHubEvents(bindings: HubBindings, nsObject: NsObject): void;
export declare function hub(name: string): Hub;
export {};
