UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

1 lines 11.8 kB
{"version":3,"sources":["../../../packages/core/data/sme-extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAW,MAAM,MAAM,CAAC;AAGjD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACH,qBAAqB,EACrB,4BAA4B,EAM5B,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EAC5B,MAAM,8CAA8C,CAAC;AAGtD;;GAEG;AACH,qBAAa,YAAY;IAkBT,OAAO,CAAC,GAAG;IAjBvB;;OAEG;IACH,OAAO,CAAC,OAAO,CAAsE;IAErF;;OAEG;IACH,OAAO,KAAK,aAAa,GAExB;IAED;;;;OAIG;gBACiB,GAAG,EAAE,GAAG;IAK5B;;;;OAIG;IACI,sBAAsB,IAAI,UAAU,CAAC,aAAa,CAAC;IAQ1D;;;;OAIG;IACI,sBAAsB,IAAI,UAAU,CAAC,aAAa,CAAC;IAQ1D;;;;OAIG;IACI,gBAAgB,IAAI,UAAU,CAAC,aAAa,CAAC;IAQpD;;;;;OAKG;IACI,gBAAgB,CAAC,MAAM,EAAE,4BAA4B,GAAG,UAAU,CAAC,aAAa,CAAC;IAUxF;;;;OAIG;IACI,eAAe,IAAI,UAAU,CAAC,qBAAqB,CAAC;IAS3D;;;;OAIG;IACI,wBAAwB,CAAC,aAAa,EAAE,yBAAyB,GAAG,UAAU,CAAC,mBAAmB,CAAC;IAU1G;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;OAKG;IACH,OAAO,CAAC,8BAA8B;IAqBtC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAqBpC;;;;;OAKG;IACH,OAAO,CAAC,iCAAiC;IAmCzC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;CAIxB","file":"sme-extension.d.ts","sourcesContent":["import { from, Observable, Subject } from 'rxjs';\r\nimport { filter, map, mergeMap, take } from 'rxjs/operators';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Rpc } from '../rpc/rpc';\r\nimport {\r\n ExtensionUpdateStatus,\r\n RpcSmeExtensionConfiguration,\r\n RpcSmeExtensionRequest,\r\n RpcSmeExtensionRequestResult,\r\n RpcSmeExtensionRequestType,\r\n RpcSmeExtensionResponseKey,\r\n RpcSmeExtensionUpdateStatus,\r\n SmeExtensionEntries,\r\n SmeExtensions,\r\n SmeExtensionSearchOptions\r\n} from '../rpc/sme-extension/rpc-sme-extension-model';\r\nimport { RpcSmeExtensionRequestClient } from '../rpc/sme-extension/rpc-sme-extension-request-client';\r\n\r\n/**\r\n * Sme Extension Module Side Service.\r\n */\r\nexport class SmeExtension {\r\n /**\r\n * Subject for tracking RPC responses from the extension host.\r\n */\r\n private watcher: Subject<RpcSmeExtensionRequestResult | RpcSmeExtensionUpdateStatus>;\r\n\r\n /**\r\n * The source name to use when logging about this service.\r\n */\r\n private get logSourceName() {\r\n return 'Extensions';\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the Extension Manager class.\r\n *\r\n * @param rpc the rpc to forward auth requests to a parent window.\r\n */\r\n constructor(private rpc: Rpc) {\r\n this.watcher = new Subject<RpcSmeExtensionRequestResult | RpcSmeExtensionUpdateStatus>();\r\n this.rpc.register(RpcSmeExtensionResponseKey.command, this.onRpcResponse.bind(this));\r\n }\r\n\r\n /**\r\n * Get available extension request.\r\n *\r\n * @returns an observable for the response message from the extension host.\r\n */\r\n public getAvailableExtensions(): Observable<SmeExtensions> {\r\n const request: RpcSmeExtensionRequest = {\r\n requestId: MsftSme.newGuid(),\r\n requestType: RpcSmeExtensionRequestType.Available\r\n };\r\n return this.handleRpcRequest(request);\r\n }\r\n\r\n /**\r\n * Get installed extension request.\r\n *\r\n * @returns an observable for the response message from the extension host.\r\n */\r\n public getInstalledExtensions(): Observable<SmeExtensions> {\r\n const request: RpcSmeExtensionRequest = {\r\n requestId: MsftSme.newGuid(),\r\n requestType: RpcSmeExtensionRequestType.Installed\r\n };\r\n return this.handleRpcRequest(request);\r\n }\r\n\r\n /**\r\n * Get all extensions (available + installed) request.\r\n *\r\n * @returns an observable for the response message from the extension host.\r\n */\r\n public getAllExtensions(): Observable<SmeExtensions> {\r\n const request: RpcSmeExtensionRequest = {\r\n requestId: MsftSme.newGuid(),\r\n requestType: RpcSmeExtensionRequestType.All\r\n };\r\n return this.handleRpcRequest(request);\r\n }\r\n\r\n /**\r\n * Install the extension.\r\n *\r\n * @param config the configuration.\r\n * @returns an observable for installed result of extension.\r\n */\r\n public installExtension(config: RpcSmeExtensionConfiguration): Observable<SmeExtensions> {\r\n const request: RpcSmeExtensionRequest = {\r\n requestId: MsftSme.newGuid(),\r\n requestType: RpcSmeExtensionRequestType.InstallExtension,\r\n extensionConfiguration: config\r\n };\r\n\r\n return this.handleRpcExtensionWriteRequest(request);\r\n }\r\n\r\n /**\r\n * Gets the update status of extensions.\r\n *\r\n * @returns An observable for update status of extension availability.\r\n */\r\n public getUpdateStatus(): Observable<ExtensionUpdateStatus> {\r\n const request: RpcSmeExtensionRequest = {\r\n requestId: MsftSme.newGuid(),\r\n requestType: RpcSmeExtensionRequestType.UpdateStatus\r\n };\r\n\r\n return this.handleRpcUpdateStatusRequest(request);\r\n }\r\n\r\n /**\r\n * Search the entry points that meet the search options.\r\n *\r\n * @param searchOptions the search options\r\n */\r\n public searchEntriesByCondition(searchOptions: SmeExtensionSearchOptions): Observable<SmeExtensionEntries> {\r\n const request: RpcSmeExtensionRequest = {\r\n requestId: MsftSme.newGuid(),\r\n requestType: RpcSmeExtensionRequestType.SearchEntryPoints,\r\n extensionSearchOptions: searchOptions\r\n };\r\n\r\n return this.handleRpcSearchEntryPointsRequest(request);\r\n }\r\n\r\n /**\r\n * Internal method handles rpc request.\r\n *\r\n * @param request the result object\r\n * @returns an observable for installed and available extensions.\r\n */\r\n private handleRpcRequest(request: RpcSmeExtensionRequest): Observable<SmeExtensions> {\r\n Logging.logDebug(this.logSourceName, 'Incoming RPC request: {0}'.format(JSON.stringify(request)));\r\n return from(RpcSmeExtensionRequestClient.getExtensionsRequest(this.rpc, request))\r\n .pipe(\r\n mergeMap(() => this.watcher),\r\n filter((result) => result.requestId === request.requestId),\r\n take(1),\r\n map((result) => {\r\n if (result) {\r\n const extensionsResult = <RpcSmeExtensionRequestResult>result;\r\n if (extensionsResult.error) {\r\n throw result.error;\r\n }\r\n\r\n return extensionsResult.extensions;\r\n }\r\n\r\n throw new Error('Unexpected Response from Extension RPC Request');\r\n }));\r\n }\r\n\r\n /**\r\n * Handles the installation request of extension.\r\n *\r\n * @param request the request object.\r\n * @returns an observable for installed result.\r\n */\r\n private handleRpcExtensionWriteRequest(request: RpcSmeExtensionRequest): Observable<SmeExtensions> {\r\n Logging.logDebug(this.logSourceName, 'Incoming RPC request: {0}'.format(JSON.stringify(request)));\r\n return from(RpcSmeExtensionRequestClient.installExtension(this.rpc, request))\r\n .pipe(\r\n mergeMap(() => this.watcher),\r\n filter((result) => result.requestId === request.requestId),\r\n take(1),\r\n map((result) => {\r\n if (result) {\r\n const extensionsResult = <RpcSmeExtensionRequestResult>result;\r\n if (extensionsResult.error) {\r\n throw extensionsResult.error;\r\n }\r\n\r\n return extensionsResult.extensions;\r\n }\r\n\r\n throw new Error('Unexpected Response from Extension RPC Request');\r\n }));\r\n }\r\n\r\n /**\r\n * Handles rpc request of extension update status.\r\n *\r\n * @param request the result object\r\n * @returns an observable for update status of extension availability.\r\n */\r\n private handleRpcUpdateStatusRequest(request: RpcSmeExtensionRequest): Observable<ExtensionUpdateStatus> {\r\n Logging.logDebug(this.logSourceName, 'Incoming RPC request: {0}'.format(JSON.stringify(request)));\r\n return from(RpcSmeExtensionRequestClient.getExtensionsRequest(this.rpc, request))\r\n .pipe(\r\n mergeMap(() => this.watcher),\r\n filter(result => result.requestId === request.requestId),\r\n take(1),\r\n map(result => {\r\n if (result) {\r\n const statusResult = <RpcSmeExtensionUpdateStatus>result;\r\n if (statusResult.error) {\r\n throw statusResult.error;\r\n }\r\n\r\n return statusResult.status;\r\n }\r\n\r\n throw new Error('Unexpected Response from Extension RPC Request');\r\n }));\r\n }\r\n\r\n /**\r\n * Handles rpc request of extension search entry points.\r\n *\r\n * @param request the result object\r\n * @returns an observable for extension entries.\r\n */\r\n private handleRpcSearchEntryPointsRequest(request: RpcSmeExtensionRequest): Observable<SmeExtensionEntries> {\r\n Logging.logDebug(this.logSourceName, 'Incoming RPC request: {0}'.format(JSON.stringify(request)));\r\n return from(RpcSmeExtensionRequestClient.getExtensionsRequest(this.rpc, request))\r\n .pipe(\r\n mergeMap(() => this.watcher),\r\n filter(result => result.requestId === request.requestId),\r\n take(1),\r\n map(result => {\r\n if (!result || !(<RpcSmeExtensionRequestResult>result).findResult) {\r\n throw new Error('Unexpected Response from Extension RPC Request');\r\n }\r\n\r\n const response = <RpcSmeExtensionRequestResult>result;\r\n if (response.error) {\r\n throw new Error(response.error);\r\n }\r\n\r\n const entries: SmeExtensionEntries = <SmeExtensionEntries>{};\r\n const findResult = response.findResult;\r\n entries.conditionValidated = request.extensionSearchOptions.condition.validationRequired;\r\n entries.installed = !!findResult.installed;\r\n entries.upgradable = !!findResult.upgradable;\r\n entries.entryPoints = [];\r\n entries.entryPointsUpgradeable = undefined;\r\n if (findResult.found) {\r\n entries.entryPoints = findResult.entryPoints;\r\n if (findResult.upgradable && findResult.entryPointsUpgradeable) {\r\n entries.entryPointsUpgradeable = findResult.entryPointsUpgradeable;\r\n }\r\n }\r\n\r\n return entries;\r\n }));\r\n }\r\n\r\n /**\r\n * Handles rpc response messages from the extension host.\r\n *\r\n * @param data the result of the extension host request.\r\n * @returns the promise of RPC response.\r\n */\r\n private onRpcResponse(data: RpcSmeExtensionRequestResult): Promise<any> {\r\n this.watcher.next(data);\r\n return Promise.resolve();\r\n }\r\n}\r\n"]}