{"version":3,"sources":["../../../packages/core/data/node-extension-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAM,MAAM,MAAM,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAe,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAChE,QAAQ,EAAE,GAAG,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAQjB,OAAO,CAAC,UAAU;IAP9B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkD;IAE3E;;;;OAIG;gBACiB,UAAU,EAAE,UAAU;IAEtC;;;;;;;GAOD;IACI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC,0BAA0B,CAAC;IAuC1I;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CAItB","file":"node-extension-install.d.ts","sourcesContent":["import { defer, Observable, of } from 'rxjs';\r\nimport { map, mergeMap, switchMap } from 'rxjs/operators';\r\nimport { AppContext } from './app-context';\r\nimport { GatewayCondition } from './gateway-connection';\r\nimport { NodeRequest, NodeRequestOptions } from './node-connection';\r\n\r\nexport interface NodeExtensionInstallResult extends GatewayCondition {\r\n    response: any;\r\n}\r\n\r\n/**\r\n * Node extension install class.\r\n */\r\nexport class NodeExtensionInstall {\r\n    private static installUrl = 'features/extensions/{0}/versions/{1}/install';\r\n\r\n    /**\r\n     * Initializes a new instance of the NodeExtensionInstall class.\r\n     *\r\n     * @param appContext the application context.\r\n     */\r\n    constructor(private appContext: AppContext) { }\r\n\r\n        /**\r\n     * Install a node package of extensions. (elevate the desktop gateway if required.)\r\n     *\r\n     * @param nodeName the name of node.\r\n     * @param extension the name of extension.\r\n     * @param version the version of extension.\r\n     * @param options the node request options (optional).\r\n     */\r\n    public install(nodeName: string, extension: string, version: string, options?: NodeRequestOptions): Observable<NodeExtensionInstallResult> {\r\n        const install = defer(() => this.installCall(nodeName, extension, version, options));\r\n        let result: NodeExtensionInstallResult = null;\r\n        return this.appContext.gateway.checkCondition()\r\n            .pipe(\r\n                mergeMap(data => {\r\n                    result = <NodeExtensionInstallResult>data;\r\n                    if (result.isServiceMode) {\r\n                        if (result.isGatewayAdmin) {\r\n                            return install;\r\n                        }\r\n\r\n                        // cannot support this user.\r\n                        return of(null);\r\n                    }\r\n\r\n                    if (result.isGatewayProcessElevated) {\r\n                        return install;\r\n                    }\r\n\r\n                    // on-demand elevate and install.\r\n                    return this.appContext.gateway.elevate()\r\n                        .pipe(switchMap(elevated => {\r\n                            if (elevated) {\r\n                                result.isGatewayProcessElevated = true;\r\n                                return install;\r\n                            }\r\n\r\n                            // user rejected to elevate.\r\n                            return of(result);\r\n                        }));\r\n                }),\r\n                map(installed => {\r\n                    result.response = installed;\r\n                    return result;\r\n                })\r\n            );\r\n    }\r\n\r\n    /**\r\n     * Install a node package of extensions.(doesn't handle elevation for the desktop mode.)\r\n     *\r\n     * @param nodeName the name of node.\r\n     * @param extension the name of extension.\r\n     * @param version the version of extension.\r\n     * @param options the node request options (optional).\r\n     */\r\n    private installCall(nodeName: string, extension: string, version: string, options?: NodeRequestOptions): Observable<any> {\r\n        const url = NodeExtensionInstall.installUrl.format(extension, version);\r\n        return this.appContext.node.post(nodeName, url, null, <NodeRequest>options);\r\n    }\r\n}\r\n"]}