import { ExtensionRect } from './extension-rect';
import { ExtensionSearchOptions } from './extension-search-options';
/**
 * Defines the payload for extension broker requests
 */
export declare type ExtensionBrokerRequestPayload = ExtensionBrokerCreateRequestPayload | ExtensionBrokerCallRequestPayload | ExtensionBrokerRunRequestPayload | ExtensionBrokerDestroyRequestPayload | ExtensionBrokerMoveRequestPayload | ExtensionBrokerFulfillTargetRequestPayload | ExtensionBrokerFindRequestPayload | ExtensionBrokerEmitRequestPayload | ExtensionBrokerListenRequestPayload;
export interface ExtensionMethodPayload {
    /**
     * The version of the method to call on the extension instance
     */
    version: number;
    /**
     * The method to call on the extension instance
     */
    method: string;
    /**
     * The arguments of used in 'call' to pass to the extension instance method.
     */
    arguments?: any[];
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerCreateRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'create';
    /**
     * The id of the extension entry point to create.
     */
    entryPointId: string;
    /**
     * The extension target we are creating this worker for
     */
    extensionTarget?: string;
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerCallRequestPayload extends ExtensionMethodPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'call';
    /**
     * The id of the instance of an extension to call.
     */
    instanceId: string;
    /**
     * Indicates the type of call we are trying to make ('worker" is assumed if not provided)
     */
    callType?: 'worker' | 'service' | 'component';
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerRunRequestPayload extends ExtensionMethodPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'run';
    /**
     * Indicates if a return is expected from the run operation.
     * For dialogs and short lived workers this will be true. For long running workers, it will be false.
     */
    expectReturn?: boolean;
    /**
     * The id of the extension entry point to run.
     */
    entryPointId: string;
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerDestroyRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'destroy';
    /**
     * The id of the instance of an extension to destroy
     */
    instanceId: string;
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerEmitRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'emit';
    /**
     * The id of the instance of an extension that emitted the event
     */
    instanceId: string;
    /**
     * String describing the type of event emitted that listeners have subscribed to
     */
    eventType: string;
    /**
     * The data to emit
     */
    data: any;
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerListenRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'listen';
    /**
     * The id of the instance of an extension to to listen to
     */
    instanceId: string;
    /**
     * The type of even to listen to
     * */
    eventType: string;
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerMoveRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'move';
    /**
     * The id of the instance of an extension to destroy
     */
    instanceId: string;
    /**
     * The rectangular position to move the extension to (relative to the iframe)
     */
    rect: ExtensionRect;
    /**
     * The z-index to move to
     */
    zIndex: number;
}
/**
 * Defines the payload for extension broker requests
 */
export interface ExtensionBrokerFulfillTargetRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'fulfill';
    /**
     * The id of the extension target to fulfill
     */
    extensionTargetId: string;
}
/**
 * Defines the payload for extension broker find requests
 */
export interface ExtensionBrokerFindRequestPayload {
    /**
     * The type of extension broker request
     */
    requestType: 'find';
    /**
     * The search options to find by.
     */
    searchOptions: ExtensionSearchOptions;
}
