import { MessengerClient } from 'pandora-messenger';
import { ObjectConsumer } from './object-proxying/ObjectConsumer';
import { HubClient } from './hub/HubClient';
export interface Location {
    initialization?: boolean;
    appName?: string;
    processName?: string;
    pid?: string;
    clientId?: string;
}
export interface Selector extends Location {
    objectName?: string;
    objectTag?: string;
}
export declare const selectorSchema: string[];
export interface ObjectMessage extends HubMessage {
    propertyName: string;
}
export interface SubscribeMessage extends HubMessage {
    register: string;
}
export interface HubMessage extends MessagePackage {
    action: string;
}
export interface MessagePackage {
    needReply?: boolean;
    broadcast?: boolean;
    host?: Selector;
    remote?: Selector;
    data?: any;
    timeout?: number;
}
export interface ReplyPackage extends MessagePackage {
    success?: boolean;
    error?: any;
    batchReply?: Array<ReplyPackage>;
}
export interface PublishPackage extends MessagePackage {
    broadcast?: null;
    remote?: null;
    data: {
        selector: Selector;
    };
}
export interface LookupPackage extends MessagePackage {
    broadcast?: null;
    remote?: null;
    data: {
        selector: Selector;
    };
}
export interface ForceReplyFn {
    (ReplyPackage: any): void;
}
export interface SelectedInfo {
    client: MessengerClient;
    selector: Selector;
}
export interface DispatchHandler {
    dispatch(message: HubMessage): Promise<any> | any;
}
export interface ObjectDescription {
    name: string;
    tag?: string;
}
export interface Introspection {
    properties: Array<{
        name: string;
        type: string;
    }>;
    methods: Array<{
        type: string;
        name: string;
        length: number;
    }>;
}
export interface ObjectProxyBehaviour {
    host: {
        invoke(host: any, method: string, params: any[]): Promise<any>;
        getProperty(host: any, name: string): Promise<any>;
        introspect(host: any): Introspection;
        subscribe(hub: HubClient, objectDescription: ObjectDescription, host: any, register: string): Promise<any>;
        unsubscribe(hub: HubClient, objectDescription: ObjectDescription, host: any, register: string): Promise<any>;
    };
    proxy: {
        invoke(proxy: any, consumer: ObjectConsumer, method: string, params: any[]): Promise<any>;
        getProperty(proxy: any, consumer: ObjectConsumer, name: string): Promise<any>;
        subscribe(proxy: any, consumer: ObjectConsumer, register: string, fn: any): any;
        unsubscribe(proxy: any, consumer: ObjectConsumer, register: string, fn?: any): any;
    };
}
export interface ClientOptions {
    location: Location;
    logger?: any;
}
export interface FacadeSetupOptions extends ClientOptions {
}
export interface ConsumerExtInfo {
    timeout: number;
}
