{"version":3,"sources":["../../../packages/core/rpc/rpc-base.ts"],"names":[],"mappings":"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","file":"rpc-base.d.ts","sourcesContent":["import { Strings } from '../generated/strings';\r\nimport { EnvironmentModuleEntryPointType } from '../manifest/environment-modules';\r\nimport { RpcChannel } from './rpc-channel';\r\nimport { RpcSeek, RpcSeekResult } from './seek/rpc-seek-model';\r\n\r\n/**\r\n * History:\r\n *  Version: 0.1.0\r\n *  Date: 09/20/2018\r\n *     - New RP Public API model.\r\n *\r\n *  Version: 0.0.12\r\n *  Date: 07/17/2018\r\n *    [Update] AzureRequest.\r\n *     - AzureManager and AzureService need to communicate.\r\n *\r\n *  Version: 0.0.11\r\n *  Date: 07/10/2018\r\n *\r\n *    [Update] RpcCredSSPOperation\r\n *     - Restored disableTaskDelay parameter.\r\n *     - Added alertTitle parameter.\r\n *     - added alertId? parameter.\r\n *\r\n *  Version: 0.0.10\r\n *  Date: 07/10/2018\r\n *\r\n *    [Update] RpcCredSSPOperationType\r\n *     - Updated operation types for four operations.\r\n *\r\n *    [Update] RpcCredSSPOperation\r\n *     - Removed taskDelay parameter.\r\n *\r\n *  Version: 0.0.9\r\n *  Date: 05/18/2018\r\n *\r\n *    [Update] RpcInitData.\r\n *     - Added Development settings (consoleDebug, sideLoad, and experiments) to RpcInitData.\r\n *\r\n *  Version: 0.0.8\r\n *  Date: 05/18/2018\r\n *\r\n *    [Update] CredSSPRequest.\r\n *     - CredSSPManager and CredSSPManagerShellService need to communicate.\r\n *\r\n *  Version: 0.0.7\r\n *  Date: 04/27/2018\r\n *    [Update] RpcActivate for re-opening URL as an option.\r\n *     - moduleActivate has 'url' parameter to point re-activating inner URL.\r\n *\r\n *  Version: 0.0.6\r\n *  Date: 01/29/2018\r\n *\r\n *    [Add] OverlayOpen and OverlayClose\r\n *\r\n *  Version: 0.0.5\r\n *  Date: 12/11/2017\r\n *\r\n *    [Update] RpcInitData: accessibilityMode: boolean;\r\n *\r\n *  Version: 0.0.4\r\n *  Date: 10/25/2017\r\n *\r\n *    [Add] Added new RPC call.\r\n *\r\n *  Version: 0.0.3\r\n *  Date: 9/11/2017\r\n *\r\n *    [Updated] added assets and theme to RpcInitData\r\n *\r\n *  Version: 0.0.2\r\n *  Date: 9/11/2017\r\n *\r\n *    [Update] Add \"reload\" property to RpcShellNavigate\r\n *\r\n *  Version: 0.0.1\r\n *  Date: 08/15/2024\r\n *  [Update] Copilot dialog.\r\n *     - Copilot dialog and Shell need to communicate.\r\n *\r\n *  Date: 8/23/2017\r\n *\r\n *    [Deleted] Deactivate\r\n *    [Updated] Open for RpcOpenResult\r\n *\r\n *  Version: 0.0.0\r\n *  Date: 8/14/2017\r\n *\r\n *    [Deleted] CanDeactivate\r\n *    [Deprecated] Deactivate\r\n *    [New Added] Deactivate2\r\n *\r\n */\r\n\r\n/**\r\n * Version number of this RPC.\r\n */\r\nexport const rpcVersion = '0.1.0';\r\nexport const rpcCommandVersion = '0.1.0';\r\n\r\n/**\r\n * Rpc servicing mode.\r\n */\r\nexport const enum RpcMode {\r\n    // Running on Shell.\r\n    Shell = 0,\r\n\r\n    // Running on Module (tool).\r\n    Module = 1\r\n}\r\n\r\n/**\r\n * Rpc relationship type.\r\n */\r\nexport const enum RpcRelationshipType {\r\n    // Rpc parent relationship.\r\n    Parent = 0,\r\n\r\n    // Rpc child relationship.\r\n    Child = 1\r\n}\r\n\r\n/**\r\n * Rpc message packet type.\r\n */\r\nexport enum RpcMessagePacketType {\r\n    // Rpc request call.\r\n    Request = 0,\r\n\r\n    // Rpc response call with success.\r\n    Response = 1,\r\n\r\n    // Rpc response call with error.\r\n    Error = 2\r\n}\r\n\r\n/**\r\n * Rpc message event (original message).\r\n */\r\nexport interface RpcMessageEvent {\r\n    // data object.\r\n    data: RpcMessagePacket<any>;\r\n\r\n    // origin url.\r\n    origin: string;\r\n\r\n    // source window object.\r\n    source: Window;\r\n}\r\n\r\n/**\r\n * Rpc message data packet.\r\n */\r\nexport interface RpcMessagePacket<T> {\r\n    // source name ex.) msft.sme.shell, msft.sme.process-viewer...\r\n    srcName?: string;\r\n\r\n    // source sub name such as path and index ex. #11 and /addServer#1\r\n    srcSubName?: string;\r\n\r\n    // depth of iframe.\r\n    srcDepth?: number;\r\n\r\n    // destination name.\r\n    destName?: string;\r\n\r\n    // destination sub name such as path and index ex. #11 and /addServer#1\r\n    destSubName?: string;\r\n\r\n    // the signature of data packet.\r\n    signature?: string;\r\n\r\n    // the sequence number.\r\n    sequence?: number;\r\n\r\n    // The type of packet.\r\n    type?: RpcMessagePacketType;\r\n\r\n    // The Rpc command.\r\n    command: string;\r\n\r\n    // the version of request command.\r\n    version: string;\r\n\r\n    // The Rpc data.\r\n    data: T;\r\n}\r\n\r\n/**************************************************************************************************************************\r\n * Outbound commands set. (from shell to modules)\r\n **************************************************************************************************************************/\r\n/**\r\n * Interface for messages that contain the remote RPC name that sent the message\r\n */\r\nexport interface RpcBaseData {\r\n    sourceName?: string;\r\n    sourceSubName?: string;\r\n    sourceVersion?: string;\r\n}\r\n\r\n/**\r\n * Rpc init command data.\r\n */\r\nexport interface RpcInitData {\r\n    entryPointType: EnvironmentModuleEntryPointType;\r\n    entryPointName: string;\r\n    locale: string;\r\n    localeRegional: string;\r\n    lib: MsftSme.MsftSmeExternalLibraries;\r\n    sessionId: string;\r\n    modules: any[];\r\n    theme: string;\r\n    sessionExpiration: number;\r\n    performanceProfile: boolean;\r\n    assets: MsftSme.MsftSmeAssets;\r\n    moduleAssets: MsftSme.MsftSmeSharedAssets;\r\n    accessibilityMode: boolean;\r\n    consoleDebug: number;\r\n    sideLoad: MsftSme.StringMap<MsftSme.SideLoad>;\r\n    experiments: string[];\r\n    connectivityLevel: string;\r\n    shellVersion: string;\r\n    gatewayApiVersion: string;\r\n    gatewayPlatform: string;\r\n}\r\n\r\n/**\r\n * Rpc init result data.\r\n */\r\nexport interface RpcInitResult {\r\n    version: string;\r\n}\r\n\r\n/**\r\n * The interface for the inbound init data with some extra information like remote name and other information\r\n */\r\nexport interface RpcInitDataInternal extends RpcInitData, RpcBaseData { }\r\n\r\n/**\r\n * Rpc open state.\r\n */\r\nexport enum RpcOpenState {\r\n    /**\r\n     * Opened.\r\n     */\r\n    Opened = 0,\r\n\r\n    /**\r\n     * Failed.\r\n     */\r\n    Failed = 1,\r\n\r\n    /**\r\n     * In progress.\r\n     */\r\n    InProgress = 2\r\n}\r\n\r\n/**\r\n * Rpc open command data.\r\n */\r\nexport interface RpcOpenData {\r\n    /**\r\n     * The path to open inside of module.\r\n     */\r\n    path: string;\r\n}\r\n\r\n/**\r\n * The interface for the inbound open data with some extra information like remote name and other information\r\n */\r\nexport interface RpcOpenDataInternal extends RpcOpenData, RpcBaseData { }\r\n\r\n/**\r\n * Rpc result data from open command.\r\n */\r\nexport interface RpcOpenResult {\r\n    /**\r\n     * The open result state.\r\n     */\r\n    state: RpcOpenState;\r\n\r\n    /**\r\n     * Waited and holding time.\r\n     */\r\n    waitedTime: number;\r\n\r\n    /**\r\n     * Error reason message if any.\r\n     */\r\n    error?: string;\r\n}\r\n\r\n/**\r\n * Rpc activate command data.\r\n */\r\nexport interface RpcActivateData {\r\n    /**\r\n     * The activate url.\r\n     */\r\n    url: string;\r\n}\r\n\r\n/**\r\n * The interface for the activate data.\r\n */\r\nexport interface RpcActivateDataInternal extends RpcActivateData, RpcBaseData { }\r\n\r\n/**\r\n * Rpc deactivate state.\r\n */\r\nexport enum RpcDeactivateState {\r\n    /**\r\n     * Deactivated.\r\n     */\r\n    Deactivated = 0,\r\n\r\n    /**\r\n     * Cancelled.\r\n     */\r\n    Cancelled = 1,\r\n\r\n    /**\r\n     * In progress.\r\n     */\r\n    InProgress = 2\r\n}\r\n\r\nexport interface RpcDeactivateResult {\r\n    /**\r\n     * Rpc deactivate state.\r\n     */\r\n    state: RpcDeactivateState;\r\n\r\n    /**\r\n     * Waited and holding time.\r\n     */\r\n    waitedTime: number;\r\n}\r\n\r\n/**\r\n * Rpc shutdown command data.\r\n */\r\nexport interface RpcShutdownData extends RpcBaseData {\r\n    /**\r\n     * Shutdown is forced.\r\n     */\r\n    force: boolean;\r\n}\r\n\r\n/**\r\n * Rpc shutdown result.\r\n */\r\nexport interface RpcShutdownResult {\r\n    /**\r\n     * Indicate if it can shutdown now.\r\n     */\r\n    canShutdown: boolean;\r\n}\r\n\r\nexport interface RpcPingData {\r\n    /**\r\n     * The name of ping request.\r\n     */\r\n    name: string;\r\n}\r\n\r\nexport interface RpcPingResult extends RpcPingData {\r\n}\r\n\r\n/**\r\n * Rpc commands that Shell initiates to communicate a module (tool).\r\n */\r\nexport enum RpcOutboundCommands {\r\n    Init = 100,\r\n    Open = 101,\r\n    Activate = 102,\r\n    Deactivate2 = 103,\r\n    Shutdown = 104,\r\n    Ping = 105\r\n}\r\n\r\n/**************************************************************************************************************************\r\n * Inbound commands set.\r\n **************************************************************************************************************************/\r\n\r\n/**\r\n * Rpc commands that a Module (tool) initiates to communicate Shell.\r\n */\r\nexport enum RpcInboundCommands {\r\n    Failed = 201\r\n}\r\n\r\n/**************************************************************************************************************************\r\n * Handlers for each rpc request.\r\n **************************************************************************************************************************/\r\n/**\r\n * Rpc command handlers that a module (tool) handles.\r\n */\r\nexport interface RpcOutboundHandlers {\r\n    InitHandler: (data: RpcInitDataInternal) => Promise<RpcInitResult>;\r\n    OpenHandler: (data: RpcOpenDataInternal) => Promise<RpcOpenResult>;\r\n    ActivateHandler: (data: RpcActivateDataInternal) => Promise<void>;\r\n    Deactivate2Handler: (data: RpcBaseData) => Promise<RpcDeactivateResult>;\r\n    ShutdownHandler: (data: RpcShutdownData) => Promise<RpcShutdownResult>;\r\n    PingHandler: (data: RpcPingData) => Promise<RpcPingResult>;\r\n}\r\n\r\n/**\r\n * Rpc command handlers that Shell handles.\r\n */\r\nexport interface RpcInboundHandlers {\r\n    FailedHandler: (data: RpcBaseData) => Promise<void>;\r\n    SeekHandler: (data: RpcSeek) => Promise<RpcSeekResult>;\r\n}\r\n\r\n/**\r\n * Type of the callback that handles messages with extra information\r\n * as defined by RpcBaseData\r\n */\r\nexport type CommandCallBackType = (data: RpcBaseData) => Promise<any>;\r\n\r\n/**\r\n * The type of RpcBase object.\r\n */\r\nexport enum RpcType {\r\n    Channel = 0,\r\n    Inbound = 1,\r\n    Outbound = 2\r\n}\r\n\r\n/**\r\n * Rpc base class.\r\n */\r\nexport abstract class RpcBase {\r\n    /**\r\n     * Suffix of command to handler mapping.\r\n     */\r\n    public static handlerSuffix = 'Handler';\r\n\r\n    /**\r\n     * the window/iFrame object.\r\n     */\r\n    public window: Window;\r\n\r\n    /**\r\n     * command collection to handle.\r\n     */\r\n    public commandCollection = new Map<string, CommandCallBackType>();\r\n\r\n    /**\r\n     * The sub name created dynamically when Outbound/Inbound communication is established.\r\n     */\r\n    public subName: string;\r\n\r\n    /**\r\n     * The depth of frame.\r\n     */\r\n    public depth: number;\r\n\r\n    /**\r\n     * The version of remote module.\r\n     */\r\n    public version?: string;\r\n\r\n    /**\r\n     * Convert from handler name to command name.\r\n     *\r\n     * @param handlerName the handler name.\r\n     * @return the command name.\r\n     */\r\n    public static handlerToCommandName(handlerName): string {\r\n        const suffix = handlerName.indexOf(RpcBase.handlerSuffix);\r\n        if (suffix > 0) {\r\n            return handlerName.substring(0, suffix);\r\n        }\r\n\r\n        return handlerName;\r\n    }\r\n\r\n    /**\r\n     * Convert from command name to handler name.\r\n     *\r\n     * @param commandName the command name.\r\n     * @return the handler name.\r\n     */\r\n    public static commandToHandlerName(commandName): string {\r\n        return commandName + RpcBase.handlerSuffix;\r\n    }\r\n\r\n    /**\r\n     * Initializes a new instance of the RpcBase class.\r\n     *\r\n     * @param rpcChannel the rpc channel object..\r\n     * @param name the public name of Shell or Module (tool).\r\n     * @param origin the origin url to start Shell or Module (tool).\r\n     */\r\n    constructor(public rpcChannel: RpcChannel, public name: string, public origin: string, public type: RpcType) { }\r\n\r\n    /**\r\n     * Handle the command with data object.\r\n     *\r\n     * @param command the command name.\r\n     * @param sourceVersion the version string.\r\n     * @param sourceName the name of the remote rpc that sent the request.\r\n     * @param sourceSubName the sub name of the remote rpc that sent the request.\r\n     * @param data the data object.\r\n     * @return Promise<any> the promise object.\r\n     */\r\n    public handle(command: string, sourceVersion: string, sourceName: string, sourceSubName: string, data: any): Promise<any> {\r\n        const handler = <CommandCallBackType>this.commandCollection[command];\r\n        if (!handler) {\r\n            const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcNotRegisteredHandler.message;\r\n            throw new Error(message.format(command));\r\n        }\r\n\r\n        Object.assign(data, <RpcBaseData>{\r\n            sourceName,\r\n            sourceSubName,\r\n            sourceVersion\r\n        });\r\n\r\n        return handler(data);\r\n    }\r\n\r\n    /**\r\n     * Register the handler to the command.\r\n     *\r\n     * @param command the command name.\r\n     * @param handler the handler function.\r\n     */\r\n    public register(command: string, handler: CommandCallBackType): void {\r\n        this.commandCollection[command] = handler;\r\n    }\r\n}\r\n"]}