@microsoft/windows-admin-center-sdk 6.0.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3rdPartyDisclosure.html +10 -13
- package/README.md +110 -33
- package/angular/fesm2022/msft-sme-angular.mjs +1235 -1213
- package/angular/fesm2022/msft-sme-angular.mjs.map +1 -1
- package/angular/index.d.ts +29 -14
- package/angular/package.json +1 -1
- package/core/azure/azure-manager.d.ts +15 -3
- package/core/azure/azure-manager.d.ts.map +1 -1
- package/core/azure/azure-manager.js +29 -10
- package/core/azure/azure-manager.js.map +1 -1
- package/core/azure/models/aadAppConfig-data.d.ts +16 -0
- package/core/azure/models/aadAppConfig-data.d.ts.map +1 -1
- package/core/azure/models/aadAppConfig-data.js.map +1 -1
- package/core/base/environment.d.ts +1 -1
- package/core/base/environment.d.ts.map +1 -1
- package/core/base/environment.js.map +1 -1
- package/core/base/utilities.d.ts +10 -2
- package/core/base/utilities.d.ts.map +1 -1
- package/core/base/utilities.js +45 -25
- package/core/base/utilities.js.map +1 -1
- package/core/data/gateway-connection.d.ts.map +1 -1
- package/core/data/gateway-connection.js +1 -0
- package/core/data/gateway-connection.js.map +1 -1
- package/core/diagnostics/sme-web-telemetry.d.ts +17 -1
- package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
- package/core/diagnostics/sme-web-telemetry.js +16 -0
- package/core/diagnostics/sme-web-telemetry.js.map +1 -1
- package/core/enterprise/enterprise-models.d.ts +10 -4
- package/core/enterprise/enterprise-models.d.ts.map +1 -1
- package/core/enterprise/enterprise-models.js +9 -4
- package/core/enterprise/enterprise-models.js.map +1 -1
- package/core/index.d.ts +5 -3
- package/core/index.d.ts.map +1 -1
- package/core/index.js +2 -1
- package/core/index.js.map +1 -1
- package/core/manifest/environment-modules.d.ts +2 -2
- package/core/manifest/environment-modules.d.ts.map +1 -1
- package/core/manifest/environment-modules.js.map +1 -1
- package/core/manifest/gateway-url-validator.d.ts +17 -0
- package/core/manifest/gateway-url-validator.d.ts.map +1 -0
- package/core/manifest/gateway-url-validator.js +56 -0
- package/core/manifest/gateway-url-validator.js.map +1 -0
- package/core/manifest/manifest-loader.d.ts +47 -11
- package/core/manifest/manifest-loader.d.ts.map +1 -1
- package/core/manifest/manifest-loader.js +141 -72
- package/core/manifest/manifest-loader.js.map +1 -1
- package/core/manifest/module-schema.json +1 -1
- package/core/performance/performance-tracker.d.ts +2 -0
- package/core/performance/performance-tracker.d.ts.map +1 -1
- package/core/performance/performance-tracker.js +18 -0
- package/core/performance/performance-tracker.js.map +1 -1
- package/core/rpc/azure/rpc-azure-model.d.ts +19 -1
- package/core/rpc/azure/rpc-azure-model.d.ts.map +1 -1
- package/core/rpc/azure/rpc-azure-model.js.map +1 -1
- package/core/rpc/forward/rpc-forward-auto-client.d.ts +5 -0
- package/core/rpc/forward/rpc-forward-auto-client.d.ts.map +1 -1
- package/core/rpc/forward/rpc-forward-auto-client.js +13 -0
- package/core/rpc/forward/rpc-forward-auto-client.js.map +1 -1
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.d.ts +16 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.d.ts.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.js +18 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.js.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.d.ts +8 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.d.ts.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.js +2 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.js.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.d.ts +18 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.d.ts.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.js +8 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.js.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.d.ts +27 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.d.ts.map +1 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.js +23 -0
- package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.js.map +1 -0
- package/core/rpc/rpc-forwarder.d.ts +16 -2
- package/core/rpc/rpc-forwarder.d.ts.map +1 -1
- package/core/rpc/rpc-forwarder.js +50 -6
- package/core/rpc/rpc-forwarder.js.map +1 -1
- package/core/security/authorization-manager.d.ts +126 -4
- package/core/security/authorization-manager.d.ts.map +1 -1
- package/core/security/authorization-manager.js +381 -49
- package/core/security/authorization-manager.js.map +1 -1
- package/core/security/connection-manager.d.ts +2 -1
- package/core/security/connection-manager.d.ts.map +1 -1
- package/core/security/connection-manager.js +10 -6
- package/core/security/connection-manager.js.map +1 -1
- package/core/security/tool-condition-validator.d.ts +8 -3
- package/core/security/tool-condition-validator.d.ts.map +1 -1
- package/core/security/tool-condition-validator.js +43 -28
- package/core/security/tool-condition-validator.js.map +1 -1
- package/core/version.js +1 -1
- package/core/version.js.map +1 -1
- package/core/virtualization/virtualization-client.d.ts +47 -78
- package/core/virtualization/virtualization-client.d.ts.map +1 -1
- package/core/virtualization/virtualization-client.js +57 -77
- package/core/virtualization/virtualization-client.js.map +1 -1
- package/core/virtualization/virtualization-models.d.ts +9 -8
- package/core/virtualization/virtualization-models.d.ts.map +1 -1
- package/core/virtualization/virtualization-models.js +7 -5
- package/core/virtualization/virtualization-models.js.map +1 -1
- package/core/virtualization/virtualization-unavailable-error.d.ts +1 -1
- package/core/virtualization/virtualization-unavailable-error.js +1 -1
- package/core/virtualization/virtualization-unavailable-error.js.map +1 -1
- package/package.json +12 -17
- package/{react-sdk-core → react}/hooks/useAppContextInit.d.ts +2 -0
- package/react/hooks/useAppContextInit.d.ts.map +1 -0
- package/{react-sdk-core → react}/hooks/useAppContextInit.js +18 -2
- package/{react-sdk-core → react}/index.js +1 -1
- package/react/services/BaseNavigationService.d.ts.map +1 -0
- package/{react-sdk-core → react}/services/BaseNavigationService.js +4 -0
- package/{react-sdk-core → react}/version.d.ts.map +1 -1
- package/react/version.js +3 -0
- package/{react-sdk-core → react}/vite/smeCoreStringsPlugin.d.ts +1 -1
- package/{react-sdk-core → react}/vite/smeCoreStringsPlugin.js +1 -1
- package/{react-sdk-core → react}/vite/smeManifestResourcesPlugin.d.ts +1 -1
- package/{react-sdk-core → react}/vite/smeManifestResourcesPlugin.js +1 -1
- package/{react-sdk-core → react}/vite/smePowerShellPlugin.d.ts +1 -1
- package/{react-sdk-core → react}/vite/smePowerShellPlugin.js +1 -1
- package/styles/css/main-v2.css +1 -1
- package/styles/package.json +1 -1
- package/wac-cli/dist/angular20/configs/ci-build-yml-config.js +3 -2
- package/wac-cli/dist/angular20/configs/ci-build-yml-config.js.map +1 -1
- package/wac-cli/dist/angular20/upgrader/nvmrc-engines-upgrader.js +2 -2
- package/wac-cli/dist/create-react/main.js +3 -2
- package/wac-cli/dist/create-react/main.js.map +1 -1
- package/wac-cli/module-template/build/pipelines/ci-build.yml +2 -2
- package/wac-cli/module-template/build/pipelines/pull-request.yml +2 -2
- package/wac-cli/templates/internal/main.ts +2 -2
- package/wac-cli/templates/internal/package.json +26 -14
- package/wac-cli/templates/react-template/package.json +3 -2
- package/wac-cli/templates/react-template/src/App.tsx +1 -1
- package/wac-cli/templates/react-template/src/hooks/useServicesData.ts +1 -1
- package/wac-cli/templates/react-template/vite.config.ts +1 -1
- package/wac-cli/templates/wac-template/angular.json +8 -13
- package/wac-cli/templates/wac-template/package.json +26 -14
- package/wac-cli/templates/wac-template/src/main.ts +2 -2
- package/react-sdk-core/hooks/useAppContextInit.d.ts.map +0 -1
- package/react-sdk-core/services/BaseNavigationService.d.ts.map +0 -1
- package/react-sdk-core/version.js +0 -3
- /package/{react-sdk-core → react}/components/SplashScreen.d.ts +0 -0
- /package/{react-sdk-core → react}/components/SplashScreen.d.ts.map +0 -0
- /package/{react-sdk-core → react}/components/SplashScreen.js +0 -0
- /package/{react-sdk-core → react}/context/AppContextProvider.d.ts +0 -0
- /package/{react-sdk-core → react}/context/AppContextProvider.d.ts.map +0 -0
- /package/{react-sdk-core → react}/context/AppContextProvider.js +0 -0
- /package/{react-sdk-core → react}/hooks/useAppContext.d.ts +0 -0
- /package/{react-sdk-core → react}/hooks/useAppContext.d.ts.map +0 -0
- /package/{react-sdk-core → react}/hooks/useAppContext.js +0 -0
- /package/{react-sdk-core → react}/hooks/useSkeletonStyles.d.ts +0 -0
- /package/{react-sdk-core → react}/hooks/useSkeletonStyles.d.ts.map +0 -0
- /package/{react-sdk-core → react}/hooks/useSkeletonStyles.js +0 -0
- /package/{react-sdk-core → react}/hooks/useWacTheme.d.ts +0 -0
- /package/{react-sdk-core → react}/hooks/useWacTheme.d.ts.map +0 -0
- /package/{react-sdk-core → react}/hooks/useWacTheme.js +0 -0
- /package/{react-sdk-core → react}/index.d.ts +0 -0
- /package/{react-sdk-core → react}/index.d.ts.map +0 -0
- /package/{react-sdk-core → react}/services/AppContextService.d.ts +0 -0
- /package/{react-sdk-core → react}/services/AppContextService.d.ts.map +0 -0
- /package/{react-sdk-core → react}/services/AppContextService.js +0 -0
- /package/{react-sdk-core → react}/services/BaseNavigationService.d.ts +0 -0
- /package/{react-sdk-core → react}/services/NavigationService.d.ts +0 -0
- /package/{react-sdk-core → react}/services/NavigationService.d.ts.map +0 -0
- /package/{react-sdk-core → react}/services/NavigationService.js +0 -0
- /package/{react-sdk-core → react}/services/Polyfills.d.ts +0 -0
- /package/{react-sdk-core → react}/services/Polyfills.d.ts.map +0 -0
- /package/{react-sdk-core → react}/services/Polyfills.js +0 -0
- /package/{react-sdk-core → react}/version.d.ts +0 -0
- /package/{react-sdk-core → react}/vite/index.d.ts +0 -0
- /package/{react-sdk-core → react}/vite/index.d.ts.map +0 -0
- /package/{react-sdk-core → react}/vite/index.js +0 -0
- /package/{react-sdk-core → react}/vite/log.d.ts +0 -0
- /package/{react-sdk-core → react}/vite/log.d.ts.map +0 -0
- /package/{react-sdk-core → react}/vite/log.js +0 -0
- /package/{react-sdk-core → react}/vite/smeCoreStringsPlugin.d.ts.map +0 -0
- /package/{react-sdk-core → react}/vite/smeManifestResourcesPlugin.d.ts.map +0 -0
- /package/{react-sdk-core → react}/vite/smePowerShellPlugin.d.ts.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-condition-validator.js","sourceRoot":"","sources":["../../src/security/tool-condition-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { EMPTY, Observable, of } from 'rxjs';\r\nimport { catchError, expand, filter, map, take } from 'rxjs/operators';\r\nimport { AppContext } from '../data/app-context';\r\nimport { Net } from '../data/net';\r\nimport { PowerShell, PowerShellCommand } from '../data/powershell';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport {\r\n EnvironmentMode,\r\n EnvironmentModule,\r\n EnvironmentModuleConditionMap,\r\n EnvironmentModuleConditionStatement,\r\n EnvironmentModuleEntryPoint,\r\n EnvironmentModuleEntryPointWithToolConditionResult,\r\n EnvironmentModuleToolConditionResult,\r\n EnvironmentModuleToolState\r\n} from '../manifest/environment-modules';\r\nimport { Connection } from '../security/connection';\r\nimport { GatewayMode } from '../shared/gateway-inventory/gateway-inventory';\r\nimport { InventoryQueryCaches } from '../shared/inventory-query-caches';\r\nimport { ServerInventory } from '../shared/server-inventory/server-inventory';\r\nimport { ToolInventoryCache } from '../shared/tool-inventory/tool-inventory-cache';\r\n\r\n/**\r\n * The interface object to be used by expand calculation.\r\n */\r\ninterface ToolConditionExpandResult extends EnvironmentModuleToolConditionResult {\r\n ends: boolean;\r\n}\r\n\r\n/**\r\n * The calculation weight ratio base on performance.\r\n */\r\nexport const enum ToolConditionWeight {\r\n /**\r\n * Not using any observable calculation.\r\n */\r\n NonObservable,\r\n\r\n /**\r\n * Using the connection property.\r\n */\r\n Property,\r\n\r\n /**\r\n * Using the gateway inventory data.\r\n */\r\n Gateway,\r\n\r\n /**\r\n * Using the server inventory data.\r\n */\r\n Server,\r\n\r\n /**\r\n * Using a custom PowerShell script.\r\n */\r\n Script\r\n}\r\n\r\n/**\r\n * The condition result with weight information.\r\n */\r\nexport interface ToolConditionResultWithWeight {\r\n /**\r\n * The calculation weight.\r\n */\r\n weight: ToolConditionWeight;\r\n\r\n /**\r\n * The result data.\r\n */\r\n result: Observable<EnvironmentModuleEntryPointWithToolConditionResult> | EnvironmentModuleEntryPointWithToolConditionResult;\r\n}\r\n\r\n/**\r\n * The class handles conditions of tools to be presented on tools' menu.\r\n * @dynamic\r\n */\r\nexport class ToolConditionValidator {\r\n /**\r\n * Support the following condition name.\r\n * It can be a string, number, boolean and version string.\r\n */\r\n private static serverInventoryProperties: { conditionName: string; dataName: string }[] = [\r\n // string\r\n {\r\n conditionName: 'computerManufacturer',\r\n dataName: 'computerManufacturer'\r\n },\r\n\r\n // string\r\n {\r\n conditionName: 'computerModel',\r\n dataName: 'computerModel'\r\n },\r\n\r\n // number\r\n {\r\n conditionName: 'operatingSystemSKU',\r\n dataName: 'operatingSystemSKU'\r\n },\r\n\r\n // version string\r\n {\r\n conditionName: 'operatingSystemVersion',\r\n dataName: 'operatingSystemVersion'\r\n },\r\n\r\n // number\r\n {\r\n conditionName: 'windowsProductType',\r\n dataName: 'productType'\r\n },\r\n\r\n // string\r\n {\r\n conditionName: 'clusterFqdn',\r\n dataName: 'clusterFqdn'\r\n },\r\n\r\n // string\r\n {\r\n conditionName: 'systemLockdownPolicy',\r\n dataName: 'systemLockdownPolicy'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isHyperVRoleInstalled',\r\n dataName: 'isHyperVRoleInstalled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isHyperVPowershellInstalled',\r\n dataName: 'isHyperVPowershellInstalled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isManagementToolsAvailable',\r\n dataName: 'isManagementToolsAvailable'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isWmfInstalled',\r\n dataName: 'isWmfInstalled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isRemoteAppEnabled',\r\n dataName: 'isRemoteAppEnabled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isDomainController',\r\n dataName: 'isDomainController'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isS2dEnabled',\r\n dataName: 'isS2dEnabled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isBritannicaEnabled',\r\n dataName: 'isBritannicaEnabled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isHciServer',\r\n dataName: 'isHciServer'\r\n }\r\n ];\r\n\r\n /**\r\n * The following operators are supported.\r\n * String comparison uses caseinsesitive pattern.\r\n */\r\n private static operators = {\r\n /**\r\n * Greater than: number, string (caseinsesitive), version\r\n */\r\n gt: 'gt',\r\n\r\n /**\r\n * Greater or equal: number, string (caseinsesitive), version\r\n */\r\n ge: 'ge',\r\n\r\n /**\r\n * Less than: number, string (caseinsesitive), version\r\n */\r\n lt: 'lt',\r\n\r\n /**\r\n * Less or equal: number, string (caseinsesitive), version\r\n */\r\n le: 'le',\r\n\r\n /**\r\n * Equal: number, string (caseinsesitive), version (Accept '*' like \"1.2.*\")\r\n */\r\n eq: 'eq',\r\n\r\n /**\r\n * Not equal: number, string (caseinsesitive), version (Accept '*' like \"1.2.*\")\r\n */\r\n ne: 'ne',\r\n\r\n /**\r\n * Test true: number, string, boolean\r\n */\r\n is: 'is',\r\n\r\n /**\r\n * Test false: number, string, boolean\r\n */\r\n not: 'not',\r\n\r\n /**\r\n * Contains a string: string (caseinsesitive)\r\n */\r\n contains: 'contains',\r\n\r\n /**\r\n * Not contains a string: string (caseinsesitive)\r\n */\r\n notContains: 'notContains',\r\n\r\n /**\r\n * Any one of value (number or string) equal: numberArray, stringArray\r\n */\r\n anyEq: 'anyEq',\r\n\r\n /**\r\n * Any one of value (number or string) not equal: numberArray, stringArray\r\n */\r\n anyNe: 'anyNe',\r\n\r\n /**\r\n * Any one of string contains: stringArray\r\n */\r\n anyContains: 'anyContains',\r\n\r\n /**\r\n * Any one of string not contains: stringArray\r\n */\r\n anyNotContains: 'anyNotContains'\r\n };\r\n\r\n private static internalCurrent: ToolConditionValidator;\r\n\r\n private caches: InventoryQueryCaches;\r\n private toolInventoryCache: ToolInventoryCache;\r\n private errorStrings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error;\r\n\r\n /**\r\n * Gets the current object of the ToolConditionValidator class, and maintains as singleton.\r\n *\r\n * @param appContext the application context.\r\n * @param caches the instance of the inventory query caches to share the resource.\r\n */\r\n public static current(appContext: AppContext, caches: InventoryQueryCaches): ToolConditionValidator {\r\n if (!ToolConditionValidator.internalCurrent) {\r\n ToolConditionValidator.internalCurrent = new ToolConditionValidator(appContext, caches);\r\n }\r\n\r\n return ToolConditionValidator.internalCurrent;\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the ToolConditionValidator class.\r\n *\r\n * @param appContext the application context.\r\n * @param caches the instance of the inventory query caches to share the resource.\r\n */\r\n constructor(\r\n private appContext: AppContext,\r\n caches: InventoryQueryCaches\r\n ) {\r\n const statusExpiration = 4 * 60 * 1000; // 4 min\r\n this.caches = caches;\r\n this.toolInventoryCache = new ToolInventoryCache(appContext, { expiration: statusExpiration });\r\n }\r\n\r\n /**\r\n * Scan the tool condition to be present or not.\r\n *\r\n * @param connection the connection object.\r\n * @param solution The entry point object of solution.\r\n * @param tool The entry point object of tool.\r\n * @param scanMode The mode of scanning.\r\n * @return the result observable.\r\n */\r\n public scanToolCondition(connection: Connection, solution: EnvironmentModuleEntryPoint, tool: EnvironmentModuleEntryPoint): ToolConditionResultWithWeight {\r\n if (!tool.requirements) {\r\n // tool is missing requirements, never show.\r\n return {\r\n weight: ToolConditionWeight.NonObservable,\r\n result: {\r\n ...tool,\r\n ...(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported\r\n })\r\n }\r\n };\r\n }\r\n\r\n const solutionId = EnvironmentModule.createFormattedEntrypoint(solution);\r\n const toolId = EnvironmentModule.createFormattedEntrypoint(tool);\r\n const checkersCollection = [];\r\n let weight = ToolConditionWeight.NonObservable;\r\n for (const requirement of tool.requirements) {\r\n const checkers: Observable<EnvironmentModuleToolConditionResult>[] = [];\r\n\r\n // tool must specify the solutions it can show in\r\n if (!requirement.solutionIds || requirement.solutionIds.every(id => id !== solutionId)) {\r\n continue;\r\n }\r\n\r\n // if this solution is a connections type, then the tool must specify the connection type\r\n if (solution.rootNavigationBehavior === 'connections' && (!requirement.connectionTypes || requirement.connectionTypes.every(type => type !== connection.type))) {\r\n continue;\r\n }\r\n\r\n // if there are no conditions to check, then this tool has been satisfied.\r\n if (!requirement.conditions || requirement.conditions.length === 0) {\r\n checkers.push(this.installationTypeValidate(connection));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n\r\n checkers.push(this.environmentModeValidate());\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n } else {\r\n for (const condition of requirement.conditions) {\r\n checkers.push(this.installationTypeValidate(connection, condition.installationTypes));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n\r\n checkers.push(this.environmentModeValidate(condition.environmentModes, condition.virtualizationViews));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n\r\n if (condition.localhost !== undefined && !condition.localhost) {\r\n // if connection is localhost and not supported.\r\n checkers.push(this.localhostValidate(connection));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n }\r\n\r\n if (condition.inventory) {\r\n checkers.push(this.inventoryValidate(connection, condition.inventory));\r\n weight = Math.max(weight, ToolConditionWeight.Server);\r\n }\r\n\r\n if (condition.properties) {\r\n checkers.push(this.propertyValidate(connection, condition.properties));\r\n weight = Math.max(weight, ToolConditionWeight.Property);\r\n }\r\n\r\n if (condition.powerShell) {\r\n // powerShell { command, script }\r\n checkers.push(this.toolInventoryValidate(connection, toolId, condition.powerShell));\r\n weight = Math.max(weight, ToolConditionWeight.Script);\r\n } else if (condition.script) {\r\n // deprecated\r\n checkers.push(this.toolInventoryValidate(connection, toolId, condition.script));\r\n weight = Math.max(weight, ToolConditionWeight.Script);\r\n }\r\n }\r\n }\r\n\r\n checkersCollection.push(checkers);\r\n }\r\n\r\n if (checkersCollection.length === 0) {\r\n return {\r\n weight: ToolConditionWeight.NonObservable,\r\n result: {\r\n ...tool,\r\n ...(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported,\r\n connectionId: connection ? connection.id : null\r\n })\r\n }\r\n };\r\n }\r\n\r\n let collectionIndex = 0;\r\n let checkerIndex = 0;\r\n let lastDetail: EnvironmentModuleToolState = null;\r\n let lastMessage: string = null;\r\n return {\r\n weight: weight,\r\n result: this.runChecker(checkersCollection[collectionIndex][checkerIndex]).pipe(\r\n catchError(() => {\r\n Logging.log({\r\n level: LogLevel.Error,\r\n message: this.errorStrings.ToolValidationResult.message.format(tool.parentModule.name, tool.displayName),\r\n source: 'ToolConditionValidator'\r\n });\r\n return of(<ToolConditionExpandResult>{\r\n show: false,\r\n ends: true\r\n });\r\n }),\r\n expand(value => {\r\n checkerIndex++;\r\n if (value.ends) {\r\n return EMPTY;\r\n }\r\n\r\n if (value.detail !== undefined && lastDetail == null) {\r\n lastDetail = value.detail;\r\n }\r\n\r\n if (value.message !== undefined && lastMessage == null) {\r\n lastMessage = value.message;\r\n }\r\n\r\n if (!value.show) {\r\n // failed result. increment collection index and reset checkerIndex.\r\n if (checkersCollection.length > ++collectionIndex) {\r\n // still has another condition, try next checker set.\r\n return this.runChecker(checkersCollection[collectionIndex][(checkerIndex = 0)]);\r\n } else {\r\n // no more condition, end to return 'false'.\r\n return of(<ToolConditionExpandResult>{\r\n show: false,\r\n detail: lastDetail,\r\n message: lastMessage,\r\n ends: true\r\n });\r\n }\r\n }\r\n\r\n if (checkersCollection[collectionIndex].length > checkerIndex) {\r\n // check next checker.\r\n return this.runChecker(checkersCollection[collectionIndex][checkerIndex]);\r\n } else {\r\n // all state/succeeded within the checker set.\r\n return of({\r\n show: true,\r\n detail: lastDetail,\r\n message: lastMessage,\r\n ends: true\r\n });\r\n }\r\n }),\r\n filter(combined => combined.ends),\r\n map(combined => {\r\n return {\r\n ...tool,\r\n ...(<EnvironmentModuleToolConditionResult>{\r\n show: combined.show,\r\n detail: combined.detail,\r\n message: combined.message,\r\n connectionId: connection ? connection.id : null\r\n })\r\n };\r\n })\r\n )\r\n };\r\n }\r\n\r\n private runChecker(checker: Observable<EnvironmentModuleToolConditionResult>): Observable<ToolConditionExpandResult> {\r\n return checker.pipe(\r\n take(1),\r\n map(result => <ToolConditionExpandResult>{ ...result, ends: false })\r\n );\r\n }\r\n\r\n private localhostValidate(connection: Connection): Observable<EnvironmentModuleToolConditionResult> {\r\n return this.caches.gatewayCache.createObservable({}).pipe(\r\n map(\r\n instance =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: !(instance.mode !== GatewayMode.Service && connection.properties && connection.properties.displayName === 'localhost')\r\n }\r\n )\r\n );\r\n }\r\n\r\n private installationTypeValidate(connection: Connection, installationType?: String[]): Observable<EnvironmentModuleToolConditionResult> {\r\n if (MsftSme.getValue<boolean>(MsftSme.self().Environment.configuration, 'gateway.disabled')) {\r\n return of({ show: true });\r\n }\r\n\r\n if (!installationType || !Array.isArray(installationType) || installationType.length === 0) {\r\n // Default to standard if property doesn't exist in the manifest.\r\n installationType = ['Standard'];\r\n }\r\n\r\n return this.caches.gatewayCache.createObservable({ params: {} }).pipe(\r\n catchError(error => {\r\n const errorStrings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error;\r\n const notification = this.appContext.notification.create(connection.name);\r\n notification.showError(\r\n errorStrings.ToolValidationGatewayInventoryError.title,\r\n errorStrings.ToolValidationGatewayInventoryError.message.format(Net.getErrorMessage(error))\r\n );\r\n return of(null);\r\n }),\r\n map(\r\n instance =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: installationType.some(t => instance.installationType === t)\r\n }\r\n )\r\n );\r\n }\r\n\r\n private environmentModeValidate(environmentModes?: EnvironmentMode[], virtualizationViews?: string[]): Observable<EnvironmentModuleToolConditionResult> {\r\n // Set default environment mode to standard if not defined (pre-virtualization mode)\r\n const environmentMode = MsftSme.getValue<EnvironmentMode>(MsftSme.self().Environment.configuration, 'environmentMode') ?? 'standard';\r\n\r\n if (!environmentModes || !Array.isArray(environmentModes) || environmentModes.length === 0) {\r\n // Default to only showing in standard if property isn't defined in manifest\r\n environmentModes = ['standard'];\r\n }\r\n\r\n if (environmentMode === 'virtualization') {\r\n // Default to compute view only if connection type is not defined in configuration\r\n const virtualizationView = MsftSme.getValue<string>(MsftSme.self().Environment.configuration, 'virtualizationView') ?? 'compute';\r\n\r\n if (!virtualizationViews || !Array.isArray(virtualizationViews) || virtualizationViews.length === 0) {\r\n virtualizationViews = [];\r\n }\r\n\r\n return of(<EnvironmentModuleToolConditionResult>{\r\n show: environmentModes.some(mode => environmentMode === mode) && virtualizationViews.some(view => virtualizationView === view)\r\n });\r\n }\r\n\r\n return of(<EnvironmentModuleToolConditionResult>{\r\n show: environmentModes.some(mode => environmentMode === mode)\r\n });\r\n }\r\n\r\n private inventoryValidate(connection: Connection, condition: EnvironmentModuleConditionMap): Observable<EnvironmentModuleToolConditionResult> {\r\n const nodeName = connection.activeAlias ? connection.activeAlias : connection.name;\r\n return this.caches.serverCache.createObservable({ params: { name: nodeName } }).pipe(\r\n catchError(error => {\r\n const errorStrings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error;\r\n const notification = this.appContext.notification.create(connection.name);\r\n notification.showError(errorStrings.ToolValidationInventoryError.title, errorStrings.ToolValidationInventoryError.message.format(Net.getErrorMessage(error)));\r\n return of(null);\r\n }),\r\n filter((instance: ServerInventory) => instance.serverName === nodeName),\r\n map(\r\n instance =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: this.checkServerInventoryCondition(condition, instance)\r\n }\r\n )\r\n );\r\n }\r\n\r\n private propertyValidate(connection: Connection, condition: EnvironmentModuleConditionMap): Observable<EnvironmentModuleToolConditionResult> {\r\n const propertyNames = Object.keys(condition);\r\n let result = true;\r\n for (const propertyName of propertyNames) {\r\n const propertyValue = connection.properties && connection.properties[propertyName];\r\n const conditionItem = condition[propertyName];\r\n if (conditionItem && !this.checkCondition(propertyValue, conditionItem)) {\r\n result = false;\r\n break;\r\n }\r\n }\r\n\r\n return of(<EnvironmentModuleToolConditionResult>{ show: result });\r\n }\r\n\r\n private toolInventoryValidate(connection: Connection, id: string, scriptOrCommand: string | PowerShellCommand): Observable<EnvironmentModuleToolConditionResult> {\r\n const command = PowerShell.getPowerShellCommand(scriptOrCommand);\r\n return this.toolInventoryCache.query({ ...{ name: connection.activeAlias ? connection.activeAlias : connection.name, id: id }, ...command }).pipe(\r\n map(\r\n inventory =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: inventory.instance.state === EnvironmentModuleToolState.Available || inventory.instance.state === EnvironmentModuleToolState.NotConfigured,\r\n detail: inventory.instance.state,\r\n message: inventory.instance.message\r\n }\r\n ),\r\n catchError(error => {\r\n const message = Net.getErrorMessage(error);\r\n Logging.logError('ToolConditionValidator', `${id}: ${message}`);\r\n return of(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported,\r\n message\r\n });\r\n })\r\n );\r\n }\r\n\r\n private checkServerInventoryCondition(condition: EnvironmentModuleConditionMap, instance: ServerInventory): boolean {\r\n for (const property of ToolConditionValidator.serverInventoryProperties) {\r\n const conditionItem = condition[property.conditionName];\r\n if (conditionItem && !this.checkCondition(instance[property.dataName], conditionItem)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private checkCondition(data: any, condition: EnvironmentModuleConditionStatement): boolean {\r\n switch (condition.type) {\r\n case 'number':\r\n const numberValue: number = this.getNumberOrZero(data);\r\n const numberTest: number = this.getNumberOrZero(condition.value);\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.gt:\r\n return numberValue > numberTest;\r\n case ToolConditionValidator.operators.ge:\r\n return numberValue >= numberTest;\r\n case ToolConditionValidator.operators.lt:\r\n return numberValue < numberTest;\r\n case ToolConditionValidator.operators.le:\r\n return numberValue <= numberTest;\r\n case ToolConditionValidator.operators.eq:\r\n return numberValue === numberTest;\r\n case ToolConditionValidator.operators.ne:\r\n return numberValue !== numberTest;\r\n case ToolConditionValidator.operators.is:\r\n return !!numberValue;\r\n case ToolConditionValidator.operators.not:\r\n return !numberValue;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n case 'string':\r\n const stringValue: string = '' + data;\r\n const stringTest: string = '' + condition.value;\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.gt:\r\n return stringValue.toLowerCase() > stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.ge:\r\n return stringValue.toLowerCase() >= stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.lt:\r\n return stringValue.toLowerCase() < stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.le:\r\n return stringValue.toLowerCase() <= stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.eq:\r\n return stringValue.toLowerCase() === stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.ne:\r\n return stringValue.toLowerCase() !== stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.is:\r\n return !!data;\r\n case ToolConditionValidator.operators.not:\r\n return !data;\r\n case ToolConditionValidator.operators.contains:\r\n return stringValue.toLowerCase().indexOf(stringTest.toLowerCase()) >= 0;\r\n case ToolConditionValidator.operators.notContains:\r\n return stringValue.toLowerCase().indexOf(stringTest.toLowerCase()) < 0;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n case 'boolean':\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.is:\r\n return !!data;\r\n case ToolConditionValidator.operators.not:\r\n return !data;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n case 'version':\r\n const versionValue: string = data;\r\n const versionTest: string = <string>condition.value;\r\n return this.compareVersion(versionValue, versionTest, condition.operator);\r\n\r\n case 'numberArray':\r\n const checkNumber: any = condition.value;\r\n if (!checkNumber || typeof checkNumber === 'string' || !checkNumber.length || typeof checkNumber[0] !== 'number') {\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedDataType.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n const numberArrayValue: number = this.getNumberOrZero(data);\r\n const numberArray: number[] = <number[]>condition.value;\r\n for (const numberItem of numberArray) {\r\n const numberArrayTest = this.getNumberOrZero(numberItem);\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.anyEq:\r\n if (numberArrayValue === numberArrayTest) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyNe:\r\n if (numberArrayValue !== numberArrayTest) {\r\n return true;\r\n }\r\n\r\n break;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n }\r\n\r\n return false;\r\n\r\n case 'stringArray':\r\n const checkString: any = condition.value;\r\n if (!checkString || typeof checkString === 'string' || !checkString.length || typeof checkString[0] !== 'string') {\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedDataType.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n const stringArrayValue: string = '' + data;\r\n const stringArray: string[] = <string[]>condition.value;\r\n for (const stringArrayTest of stringArray) {\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.anyEq:\r\n if (stringArrayValue.toLowerCase() === stringArrayTest.toLowerCase()) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyNe:\r\n if (stringArrayValue.toLowerCase() !== stringArrayTest.toLowerCase()) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyContains:\r\n if (stringArrayValue.toLowerCase().indexOf(stringArrayTest.toLowerCase()) >= 0) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyNotContains:\r\n if (stringArrayValue.toLowerCase().indexOf(stringArrayTest.toLowerCase()) < 0) {\r\n return true;\r\n }\r\n\r\n break;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n }\r\n\r\n return false;\r\n\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedDataType.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n }\r\n\r\n private compareVersion(left: string, right: string, operator: string): boolean {\r\n const leftSegments = left.split('.');\r\n const rightSegments = right.split('.');\r\n if (!leftSegments || leftSegments.length <= 0 || !rightSegments || rightSegments.length <= 0) {\r\n throw new Error(this.errorStrings.ToolValidationVersionFormat.message);\r\n }\r\n\r\n const count = Math.max(leftSegments.length, rightSegments.length);\r\n let status;\r\n for (let index = 0; index < count; index++) {\r\n if (rightSegments[index] === '*') {\r\n // quit comparison with wildcard.\r\n status = 0;\r\n break;\r\n }\r\n\r\n const leftSegment = this.getNumberOrZero(leftSegments[index]);\r\n const rightSegment = this.getNumberOrZero(rightSegments[index]);\r\n if (leftSegment === rightSegment) {\r\n // equal.\r\n status = 0;\r\n } else if (leftSegment > rightSegment) {\r\n // greater.\r\n status = 1;\r\n break;\r\n } else {\r\n // lesser.\r\n status = -1;\r\n break;\r\n }\r\n }\r\n\r\n switch (operator) {\r\n case ToolConditionValidator.operators.gt:\r\n return status > 0;\r\n case ToolConditionValidator.operators.ge:\r\n return status >= 0;\r\n case ToolConditionValidator.operators.lt:\r\n return status < 0;\r\n case ToolConditionValidator.operators.le:\r\n return status <= 0;\r\n case ToolConditionValidator.operators.eq:\r\n return status === 0;\r\n case ToolConditionValidator.operators.ne:\r\n return status !== 0;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(operator, left));\r\n }\r\n }\r\n\r\n private getNumberOrZero(data: any): number {\r\n const result = Number(data);\r\n return isNaN(result) ? 0 : result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"tool-condition-validator.js","sourceRoot":"","sources":["../../src/security/tool-condition-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { EMPTY, Observable, of } from 'rxjs';\r\nimport { catchError, expand, filter, map, take } from 'rxjs/operators';\r\nimport { AppContext } from '../data/app-context';\r\nimport { Net } from '../data/net';\r\nimport { PowerShell, PowerShellCommand } from '../data/powershell';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport {\r\n EnvironmentMode,\r\n EnvironmentModule,\r\n EnvironmentModuleConditionMap,\r\n EnvironmentModuleConditionStatement,\r\n EnvironmentModuleEntryPoint,\r\n EnvironmentModuleEntryPointWithToolConditionResult,\r\n EnvironmentModuleToolConditionResult,\r\n EnvironmentModuleToolState,\r\n VirtualizationView\r\n} from '../manifest/environment-modules';\r\nimport { Connection } from '../security/connection';\r\nimport { GatewayMode } from '../shared/gateway-inventory/gateway-inventory';\r\nimport { InventoryQueryCaches } from '../shared/inventory-query-caches';\r\nimport { ServerInventory } from '../shared/server-inventory/server-inventory';\r\nimport { ToolInventoryCache } from '../shared/tool-inventory/tool-inventory-cache';\r\n\r\n/**\r\n * The interface object to be used by expand calculation.\r\n */\r\ninterface ToolConditionExpandResult extends EnvironmentModuleToolConditionResult {\r\n ends: boolean;\r\n}\r\n\r\n/**\r\n * The calculation weight ratio base on performance.\r\n */\r\nexport const enum ToolConditionWeight {\r\n /**\r\n * Not using any observable calculation.\r\n */\r\n NonObservable,\r\n\r\n /**\r\n * Using the connection property.\r\n */\r\n Property,\r\n\r\n /**\r\n * Using the gateway inventory data.\r\n */\r\n Gateway,\r\n\r\n /**\r\n * Using the server inventory data.\r\n */\r\n Server,\r\n\r\n /**\r\n * Using a custom PowerShell script.\r\n */\r\n Script\r\n}\r\n\r\n/**\r\n * The condition result with weight information.\r\n */\r\nexport interface ToolConditionResultWithWeight {\r\n /**\r\n * The calculation weight.\r\n */\r\n weight: ToolConditionWeight;\r\n\r\n /**\r\n * The result data.\r\n */\r\n result: Observable<EnvironmentModuleEntryPointWithToolConditionResult> | EnvironmentModuleEntryPointWithToolConditionResult;\r\n}\r\n\r\n/**\r\n * The class handles conditions of tools to be presented on tools' menu.\r\n * @dynamic\r\n */\r\nexport class ToolConditionValidator {\r\n /**\r\n * Support the following condition name.\r\n * It can be a string, number, boolean and version string.\r\n */\r\n private static serverInventoryProperties: { conditionName: string; dataName: string }[] = [\r\n // string\r\n {\r\n conditionName: 'computerManufacturer',\r\n dataName: 'computerManufacturer'\r\n },\r\n\r\n // string\r\n {\r\n conditionName: 'computerModel',\r\n dataName: 'computerModel'\r\n },\r\n\r\n // number\r\n {\r\n conditionName: 'operatingSystemSKU',\r\n dataName: 'operatingSystemSKU'\r\n },\r\n\r\n // version string\r\n {\r\n conditionName: 'operatingSystemVersion',\r\n dataName: 'operatingSystemVersion'\r\n },\r\n\r\n // number\r\n {\r\n conditionName: 'windowsProductType',\r\n dataName: 'productType'\r\n },\r\n\r\n // string\r\n {\r\n conditionName: 'clusterFqdn',\r\n dataName: 'clusterFqdn'\r\n },\r\n\r\n // string\r\n {\r\n conditionName: 'systemLockdownPolicy',\r\n dataName: 'systemLockdownPolicy'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isHyperVRoleInstalled',\r\n dataName: 'isHyperVRoleInstalled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isHyperVPowershellInstalled',\r\n dataName: 'isHyperVPowershellInstalled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isManagementToolsAvailable',\r\n dataName: 'isManagementToolsAvailable'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isWmfInstalled',\r\n dataName: 'isWmfInstalled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isRemoteAppEnabled',\r\n dataName: 'isRemoteAppEnabled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isDomainController',\r\n dataName: 'isDomainController'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isS2dEnabled',\r\n dataName: 'isS2dEnabled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isBritannicaEnabled',\r\n dataName: 'isBritannicaEnabled'\r\n },\r\n\r\n // boolean\r\n {\r\n conditionName: 'isHciServer',\r\n dataName: 'isHciServer'\r\n }\r\n ];\r\n\r\n /**\r\n * The following operators are supported.\r\n * String comparison uses caseinsesitive pattern.\r\n */\r\n private static operators = {\r\n /**\r\n * Greater than: number, string (caseinsesitive), version\r\n */\r\n gt: 'gt',\r\n\r\n /**\r\n * Greater or equal: number, string (caseinsesitive), version\r\n */\r\n ge: 'ge',\r\n\r\n /**\r\n * Less than: number, string (caseinsesitive), version\r\n */\r\n lt: 'lt',\r\n\r\n /**\r\n * Less or equal: number, string (caseinsesitive), version\r\n */\r\n le: 'le',\r\n\r\n /**\r\n * Equal: number, string (caseinsesitive), version (Accept '*' like \"1.2.*\")\r\n */\r\n eq: 'eq',\r\n\r\n /**\r\n * Not equal: number, string (caseinsesitive), version (Accept '*' like \"1.2.*\")\r\n */\r\n ne: 'ne',\r\n\r\n /**\r\n * Test true: number, string, boolean\r\n */\r\n is: 'is',\r\n\r\n /**\r\n * Test false: number, string, boolean\r\n */\r\n not: 'not',\r\n\r\n /**\r\n * Contains a string: string (caseinsesitive)\r\n */\r\n contains: 'contains',\r\n\r\n /**\r\n * Not contains a string: string (caseinsesitive)\r\n */\r\n notContains: 'notContains',\r\n\r\n /**\r\n * Any one of value (number or string) equal: numberArray, stringArray\r\n */\r\n anyEq: 'anyEq',\r\n\r\n /**\r\n * Any one of value (number or string) not equal: numberArray, stringArray\r\n */\r\n anyNe: 'anyNe',\r\n\r\n /**\r\n * Any one of string contains: stringArray\r\n */\r\n anyContains: 'anyContains',\r\n\r\n /**\r\n * Any one of string not contains: stringArray\r\n */\r\n anyNotContains: 'anyNotContains'\r\n };\r\n\r\n private static readonly currentByCaches = new WeakMap<InventoryQueryCaches, ToolConditionValidator>();\r\n\r\n private caches: InventoryQueryCaches;\r\n private toolInventoryCache: ToolInventoryCache;\r\n private errorStrings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error;\r\n\r\n /**\r\n * Gets the ToolConditionValidator associated with the provided inventory caches.\r\n *\r\n * @param appContext the application context.\r\n * @param caches the instance of the inventory query caches to share the resource.\r\n */\r\n public static current(appContext: AppContext, caches: InventoryQueryCaches): ToolConditionValidator {\r\n let current = ToolConditionValidator.currentByCaches.get(caches);\r\n if (!current) {\r\n current = new ToolConditionValidator(appContext, caches);\r\n ToolConditionValidator.currentByCaches.set(caches, current);\r\n }\r\n\r\n return current;\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the ToolConditionValidator class.\r\n *\r\n * @param appContext the application context.\r\n * @param caches the instance of the inventory query caches to share the resource.\r\n */\r\n constructor(\r\n private appContext: AppContext,\r\n caches: InventoryQueryCaches\r\n ) {\r\n const statusExpiration = 4 * 60 * 1000; // 4 min\r\n this.caches = caches;\r\n this.toolInventoryCache = new ToolInventoryCache(appContext, { expiration: statusExpiration });\r\n }\r\n\r\n /**\r\n * Checks a manifest condition's environment mode and view without a connection.\r\n * Missing environmentModes allows only standard mode; missing virtualizationViews allows no virtualization view.\r\n */\r\n public static matchesEnvironment(environmentModes?: EnvironmentMode[], virtualizationViews?: VirtualizationView[]): boolean {\r\n const environmentMode = MsftSme.getValue<EnvironmentMode>(MsftSme.self().Environment.configuration, 'environmentMode') ?? 'standard';\r\n\r\n if (!environmentModes || !Array.isArray(environmentModes) || environmentModes.length === 0) {\r\n environmentModes = ['standard'];\r\n }\r\n\r\n if (!environmentModes.some(mode => environmentMode === mode)) {\r\n return false;\r\n }\r\n\r\n if (environmentMode !== 'virtualization') {\r\n return true;\r\n }\r\n\r\n const virtualizationView = MsftSme.getValue<VirtualizationView>(MsftSme.self().Environment.configuration, 'virtualizationView') ?? 'compute';\r\n\r\n if (!virtualizationViews || !Array.isArray(virtualizationViews) || virtualizationViews.length === 0) {\r\n virtualizationViews = [];\r\n }\r\n\r\n return virtualizationViews.some(view => virtualizationView === view);\r\n }\r\n\r\n /**\r\n * Scan the tool condition to be present or not.\r\n *\r\n * @param connection the connection object.\r\n * @param solution The entry point object of solution.\r\n * @param tool The entry point object of tool.\r\n * @param scanMode The mode of scanning.\r\n * @return the result observable.\r\n */\r\n public scanToolCondition(connection: Connection, solution: EnvironmentModuleEntryPoint, tool: EnvironmentModuleEntryPoint): ToolConditionResultWithWeight {\r\n if (!tool.requirements) {\r\n // tool is missing requirements, never show.\r\n return {\r\n weight: ToolConditionWeight.NonObservable,\r\n result: {\r\n ...tool,\r\n ...(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported\r\n })\r\n }\r\n };\r\n }\r\n\r\n const solutionId = EnvironmentModule.createFormattedEntrypoint(solution);\r\n const toolId = EnvironmentModule.createFormattedEntrypoint(tool);\r\n const checkersCollection = [];\r\n let weight = ToolConditionWeight.NonObservable;\r\n for (const requirement of tool.requirements) {\r\n const checkers: Observable<EnvironmentModuleToolConditionResult>[] = [];\r\n\r\n // tool must specify the solutions it can show in\r\n if (!requirement.solutionIds || requirement.solutionIds.every(id => id !== solutionId)) {\r\n continue;\r\n }\r\n\r\n // if this solution is a connections type, then the tool must specify the connection type\r\n if (solution.rootNavigationBehavior === 'connections' && (!requirement.connectionTypes || requirement.connectionTypes.every(type => type !== connection.type))) {\r\n continue;\r\n }\r\n\r\n // if there are no conditions to check, then this tool has been satisfied.\r\n if (!requirement.conditions || requirement.conditions.length === 0) {\r\n checkers.push(this.installationTypeValidate(connection));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n\r\n checkers.push(this.environmentModeValidate());\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n } else {\r\n for (const condition of requirement.conditions) {\r\n checkers.push(this.installationTypeValidate(connection, condition.installationTypes));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n\r\n checkers.push(this.environmentModeValidate(condition.environmentModes, condition.virtualizationViews));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n\r\n if (condition.localhost !== undefined && !condition.localhost) {\r\n // if connection is localhost and not supported.\r\n checkers.push(this.localhostValidate(connection));\r\n weight = Math.max(weight, ToolConditionWeight.Gateway);\r\n }\r\n\r\n if (condition.inventory) {\r\n checkers.push(this.inventoryValidate(connection, condition.inventory));\r\n weight = Math.max(weight, ToolConditionWeight.Server);\r\n }\r\n\r\n if (condition.properties) {\r\n checkers.push(this.propertyValidate(connection, condition.properties));\r\n weight = Math.max(weight, ToolConditionWeight.Property);\r\n }\r\n\r\n if (condition.powerShell) {\r\n // powerShell { command, script }\r\n checkers.push(this.toolInventoryValidate(connection, toolId, condition.powerShell));\r\n weight = Math.max(weight, ToolConditionWeight.Script);\r\n } else if (condition.script) {\r\n // deprecated\r\n checkers.push(this.toolInventoryValidate(connection, toolId, condition.script));\r\n weight = Math.max(weight, ToolConditionWeight.Script);\r\n }\r\n }\r\n }\r\n\r\n checkersCollection.push(checkers);\r\n }\r\n\r\n if (checkersCollection.length === 0) {\r\n return {\r\n weight: ToolConditionWeight.NonObservable,\r\n result: {\r\n ...tool,\r\n ...(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported,\r\n connectionId: connection ? connection.id : null\r\n })\r\n }\r\n };\r\n }\r\n\r\n let collectionIndex = 0;\r\n let checkerIndex = 0;\r\n let lastDetail: EnvironmentModuleToolState = null;\r\n let lastMessage: string = null;\r\n return {\r\n weight: weight,\r\n result: this.runChecker(checkersCollection[collectionIndex][checkerIndex]).pipe(\r\n catchError(() => {\r\n Logging.log({\r\n level: LogLevel.Error,\r\n message: this.errorStrings.ToolValidationResult.message.format(tool.parentModule.name, tool.displayName),\r\n source: 'ToolConditionValidator'\r\n });\r\n return of(<ToolConditionExpandResult>{\r\n show: false,\r\n ends: true\r\n });\r\n }),\r\n expand(value => {\r\n checkerIndex++;\r\n if (value.ends) {\r\n return EMPTY;\r\n }\r\n\r\n if (value.detail !== undefined && lastDetail == null) {\r\n lastDetail = value.detail;\r\n }\r\n\r\n if (value.message !== undefined && lastMessage == null) {\r\n lastMessage = value.message;\r\n }\r\n\r\n if (!value.show) {\r\n // failed result. increment collection index and reset checkerIndex.\r\n if (checkersCollection.length > ++collectionIndex) {\r\n // still has another condition, try next checker set.\r\n return this.runChecker(checkersCollection[collectionIndex][(checkerIndex = 0)]);\r\n } else {\r\n // no more condition, end to return 'false'.\r\n return of(<ToolConditionExpandResult>{\r\n show: false,\r\n detail: lastDetail,\r\n message: lastMessage,\r\n ends: true\r\n });\r\n }\r\n }\r\n\r\n if (checkersCollection[collectionIndex].length > checkerIndex) {\r\n // check next checker.\r\n return this.runChecker(checkersCollection[collectionIndex][checkerIndex]);\r\n } else {\r\n // all state/succeeded within the checker set.\r\n return of({\r\n show: true,\r\n detail: lastDetail,\r\n message: lastMessage,\r\n ends: true\r\n });\r\n }\r\n }),\r\n filter(combined => combined.ends),\r\n map(combined => {\r\n return {\r\n ...tool,\r\n ...(<EnvironmentModuleToolConditionResult>{\r\n show: combined.show,\r\n detail: combined.detail,\r\n message: combined.message,\r\n connectionId: connection ? connection.id : null\r\n })\r\n };\r\n })\r\n )\r\n };\r\n }\r\n\r\n private runChecker(checker: Observable<EnvironmentModuleToolConditionResult>): Observable<ToolConditionExpandResult> {\r\n return checker.pipe(\r\n take(1),\r\n map(result => <ToolConditionExpandResult>{ ...result, ends: false })\r\n );\r\n }\r\n\r\n private localhostValidate(connection: Connection): Observable<EnvironmentModuleToolConditionResult> {\r\n return this.caches.gatewayCache.createObservable({}).pipe(\r\n map(\r\n instance =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: !(instance.mode !== GatewayMode.Service && connection.properties && connection.properties.displayName === 'localhost')\r\n }\r\n )\r\n );\r\n }\r\n\r\n private installationTypeValidate(connection: Connection, installationType?: String[]): Observable<EnvironmentModuleToolConditionResult> {\r\n if (MsftSme.getValue<boolean>(MsftSme.self().Environment.configuration, 'gateway.disabled')) {\r\n return of({ show: true });\r\n }\r\n\r\n if (!installationType || !Array.isArray(installationType) || installationType.length === 0) {\r\n // Default to standard if property doesn't exist in the manifest.\r\n installationType = ['Standard'];\r\n }\r\n\r\n return this.caches.gatewayCache.createObservable({ params: {} }).pipe(\r\n catchError(error => {\r\n const errorStrings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error;\r\n const notification = this.appContext.notification.create(connection.name);\r\n notification.showError(\r\n errorStrings.ToolValidationGatewayInventoryError.title,\r\n errorStrings.ToolValidationGatewayInventoryError.message.format(Net.getErrorMessage(error))\r\n );\r\n return of(null);\r\n }),\r\n map(\r\n instance =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: installationType.some(t => instance.installationType === t)\r\n }\r\n )\r\n );\r\n }\r\n\r\n private environmentModeValidate(environmentModes?: EnvironmentMode[], virtualizationViews?: VirtualizationView[]): Observable<EnvironmentModuleToolConditionResult> {\r\n return of(<EnvironmentModuleToolConditionResult>{\r\n show: ToolConditionValidator.matchesEnvironment(environmentModes, virtualizationViews)\r\n });\r\n }\r\n\r\n private inventoryValidate(connection: Connection, condition: EnvironmentModuleConditionMap): Observable<EnvironmentModuleToolConditionResult> {\r\n const nodeName = connection.activeAlias ? connection.activeAlias : connection.name;\r\n return this.caches.serverCache.createObservable({ params: { name: nodeName } }).pipe(\r\n filter((instance: ServerInventory) => instance.serverName === nodeName),\r\n map(\r\n instance =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: this.checkServerInventoryCondition(condition, instance)\r\n }\r\n ),\r\n // Must stay after the filter and map: recovering earlier would make the filter dereference null,\r\n // and that error escapes the partial catchError in toolValidate.\r\n catchError(error => {\r\n const message = Net.getErrorMessage(error);\r\n const errorStrings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error;\r\n const notification = this.appContext.notification.create(connection.name);\r\n notification.showError(errorStrings.ToolValidationInventoryError.title, errorStrings.ToolValidationInventoryError.message.format(message));\r\n return of(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported,\r\n message\r\n });\r\n })\r\n );\r\n }\r\n\r\n private propertyValidate(connection: Connection, condition: EnvironmentModuleConditionMap): Observable<EnvironmentModuleToolConditionResult> {\r\n const propertyNames = Object.keys(condition);\r\n let result = true;\r\n for (const propertyName of propertyNames) {\r\n const propertyValue = connection.properties && connection.properties[propertyName];\r\n const conditionItem = condition[propertyName];\r\n if (conditionItem && !this.checkCondition(propertyValue, conditionItem)) {\r\n result = false;\r\n break;\r\n }\r\n }\r\n\r\n return of(<EnvironmentModuleToolConditionResult>{ show: result });\r\n }\r\n\r\n private toolInventoryValidate(connection: Connection, id: string, scriptOrCommand: string | PowerShellCommand): Observable<EnvironmentModuleToolConditionResult> {\r\n const command = PowerShell.getPowerShellCommand(scriptOrCommand);\r\n return this.toolInventoryCache.query({ ...{ name: connection.activeAlias ? connection.activeAlias : connection.name, id: id }, ...command }).pipe(\r\n map(\r\n inventory =>\r\n <EnvironmentModuleToolConditionResult>{\r\n show: inventory.instance.state === EnvironmentModuleToolState.Available || inventory.instance.state === EnvironmentModuleToolState.NotConfigured,\r\n detail: inventory.instance.state,\r\n message: inventory.instance.message\r\n }\r\n ),\r\n catchError(error => {\r\n const message = Net.getErrorMessage(error);\r\n Logging.logError('ToolConditionValidator', `${id}: ${message}`);\r\n return of(<EnvironmentModuleToolConditionResult>{\r\n show: false,\r\n detail: EnvironmentModuleToolState.NotSupported,\r\n message\r\n });\r\n })\r\n );\r\n }\r\n\r\n private checkServerInventoryCondition(condition: EnvironmentModuleConditionMap, instance: ServerInventory): boolean {\r\n for (const property of ToolConditionValidator.serverInventoryProperties) {\r\n const conditionItem = condition[property.conditionName];\r\n if (conditionItem && !this.checkCondition(instance[property.dataName], conditionItem)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private checkCondition(data: any, condition: EnvironmentModuleConditionStatement): boolean {\r\n switch (condition.type) {\r\n case 'number':\r\n const numberValue: number = this.getNumberOrZero(data);\r\n const numberTest: number = this.getNumberOrZero(condition.value);\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.gt:\r\n return numberValue > numberTest;\r\n case ToolConditionValidator.operators.ge:\r\n return numberValue >= numberTest;\r\n case ToolConditionValidator.operators.lt:\r\n return numberValue < numberTest;\r\n case ToolConditionValidator.operators.le:\r\n return numberValue <= numberTest;\r\n case ToolConditionValidator.operators.eq:\r\n return numberValue === numberTest;\r\n case ToolConditionValidator.operators.ne:\r\n return numberValue !== numberTest;\r\n case ToolConditionValidator.operators.is:\r\n return !!numberValue;\r\n case ToolConditionValidator.operators.not:\r\n return !numberValue;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n case 'string':\r\n const stringValue: string = '' + data;\r\n const stringTest: string = '' + condition.value;\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.gt:\r\n return stringValue.toLowerCase() > stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.ge:\r\n return stringValue.toLowerCase() >= stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.lt:\r\n return stringValue.toLowerCase() < stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.le:\r\n return stringValue.toLowerCase() <= stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.eq:\r\n return stringValue.toLowerCase() === stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.ne:\r\n return stringValue.toLowerCase() !== stringTest.toLowerCase();\r\n case ToolConditionValidator.operators.is:\r\n return !!data;\r\n case ToolConditionValidator.operators.not:\r\n return !data;\r\n case ToolConditionValidator.operators.contains:\r\n return stringValue.toLowerCase().indexOf(stringTest.toLowerCase()) >= 0;\r\n case ToolConditionValidator.operators.notContains:\r\n return stringValue.toLowerCase().indexOf(stringTest.toLowerCase()) < 0;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n case 'boolean':\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.is:\r\n return !!data;\r\n case ToolConditionValidator.operators.not:\r\n return !data;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n case 'version':\r\n const versionValue: string = data;\r\n const versionTest: string = <string>condition.value;\r\n return this.compareVersion(versionValue, versionTest, condition.operator);\r\n\r\n case 'numberArray':\r\n const checkNumber: any = condition.value;\r\n if (!checkNumber || typeof checkNumber === 'string' || !checkNumber.length || typeof checkNumber[0] !== 'number') {\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedDataType.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n const numberArrayValue: number = this.getNumberOrZero(data);\r\n const numberArray: number[] = <number[]>condition.value;\r\n for (const numberItem of numberArray) {\r\n const numberArrayTest = this.getNumberOrZero(numberItem);\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.anyEq:\r\n if (numberArrayValue === numberArrayTest) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyNe:\r\n if (numberArrayValue !== numberArrayTest) {\r\n return true;\r\n }\r\n\r\n break;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n }\r\n\r\n return false;\r\n\r\n case 'stringArray':\r\n const checkString: any = condition.value;\r\n if (!checkString || typeof checkString === 'string' || !checkString.length || typeof checkString[0] !== 'string') {\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedDataType.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n\r\n const stringArrayValue: string = '' + data;\r\n const stringArray: string[] = <string[]>condition.value;\r\n for (const stringArrayTest of stringArray) {\r\n switch (condition.operator) {\r\n case ToolConditionValidator.operators.anyEq:\r\n if (stringArrayValue.toLowerCase() === stringArrayTest.toLowerCase()) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyNe:\r\n if (stringArrayValue.toLowerCase() !== stringArrayTest.toLowerCase()) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyContains:\r\n if (stringArrayValue.toLowerCase().indexOf(stringArrayTest.toLowerCase()) >= 0) {\r\n return true;\r\n }\r\n\r\n break;\r\n case ToolConditionValidator.operators.anyNotContains:\r\n if (stringArrayValue.toLowerCase().indexOf(stringArrayTest.toLowerCase()) < 0) {\r\n return true;\r\n }\r\n\r\n break;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n }\r\n\r\n return false;\r\n\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedDataType.message.format(JSON.stringify(condition), JSON.stringify(data)));\r\n }\r\n }\r\n\r\n private compareVersion(left: string, right: string, operator: string): boolean {\r\n const leftSegments = left.split('.');\r\n const rightSegments = right.split('.');\r\n if (!leftSegments || leftSegments.length <= 0 || !rightSegments || rightSegments.length <= 0) {\r\n throw new Error(this.errorStrings.ToolValidationVersionFormat.message);\r\n }\r\n\r\n const count = Math.max(leftSegments.length, rightSegments.length);\r\n let status;\r\n for (let index = 0; index < count; index++) {\r\n if (rightSegments[index] === '*') {\r\n // quit comparison with wildcard.\r\n status = 0;\r\n break;\r\n }\r\n\r\n const leftSegment = this.getNumberOrZero(leftSegments[index]);\r\n const rightSegment = this.getNumberOrZero(rightSegments[index]);\r\n if (leftSegment === rightSegment) {\r\n // equal.\r\n status = 0;\r\n } else if (leftSegment > rightSegment) {\r\n // greater.\r\n status = 1;\r\n break;\r\n } else {\r\n // lesser.\r\n status = -1;\r\n break;\r\n }\r\n }\r\n\r\n switch (operator) {\r\n case ToolConditionValidator.operators.gt:\r\n return status > 0;\r\n case ToolConditionValidator.operators.ge:\r\n return status >= 0;\r\n case ToolConditionValidator.operators.lt:\r\n return status < 0;\r\n case ToolConditionValidator.operators.le:\r\n return status <= 0;\r\n case ToolConditionValidator.operators.eq:\r\n return status === 0;\r\n case ToolConditionValidator.operators.ne:\r\n return status !== 0;\r\n default:\r\n throw new Error(this.errorStrings.ToolValidationUnsupportedOperator.message.format(operator, left));\r\n }\r\n }\r\n\r\n private getNumberOrZero(data: any): number {\r\n const result = Number(data);\r\n return isNaN(result) ? 0 : result;\r\n }\r\n}\r\n"]}
|
package/core/version.js
CHANGED
package/core/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IAChB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export class RuntimeVersion {\r\n public static version = '
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IAChB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export class RuntimeVersion {\r\n public static version = '9.1.1';\r\n}\r\n"]}
|
|
@@ -11,52 +11,39 @@ export interface VirtualizationClientHost {
|
|
|
11
11
|
gateway: GatewayConnection;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
* production behavior, so `new VirtualizationClient(appContext)` continues to work unchanged.
|
|
16
|
-
*/
|
|
17
|
-
export interface VirtualizationClientOptions {
|
|
18
|
-
/**
|
|
19
|
-
* Overrides how the client determines whether the user is currently in the virtualization
|
|
20
|
-
* experience (vMode) rather than standard mode. By default the client reads the ambient
|
|
21
|
-
* `MsftSme` environment configuration — an un-Angular global that is awkward to fake in a
|
|
22
|
-
* `TestBed`. Provide this seam to control vMode-active state in tests (e.g. `() => true`) or to
|
|
23
|
-
* source it from an Angular-injected service, without monkey-patching the global.
|
|
24
|
-
*
|
|
25
|
-
* Must be synchronous and never throw; the default reader defaults to `false` (standard mode)
|
|
26
|
-
* on any error.
|
|
27
|
-
*/
|
|
28
|
-
isVirtualizationModeActive?: () => boolean;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Typed, discoverable SDK client for the Windows Admin Center virtualization (vMode) inventory APIs.
|
|
14
|
+
* Typed, discoverable SDK client for vMode inventory APIs.
|
|
32
15
|
*
|
|
33
|
-
* `VirtualizationClient` gives extension authors
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* against an internal, undocumented surface. It works in both Angular and React extensions; React
|
|
37
|
-
* consumers can use the `useEnterpriseData()` hook in `@msft-sme/react-sdk`.
|
|
16
|
+
* `VirtualizationClient` gives extension authors a single importable entry point with typed methods
|
|
17
|
+
* and IntelliSense for the vMode virtualization database, instead of hand-writing
|
|
18
|
+
* `gateway.get('services/enterprisedata/data/...')` calls against an internal, undocumented surface.
|
|
38
19
|
*
|
|
39
|
-
* ##
|
|
20
|
+
* ## Detecting vMode and gating data calls
|
|
21
|
+
*
|
|
22
|
+
* Construction is **inert** (no network calls), so importing and instantiating the client is always
|
|
23
|
+
* safe. Two checks cover the common needs, and neither throws:
|
|
40
24
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
25
|
+
* - {@link isActive} — a synchronous, local read of whether the user is currently in vMode. Use it
|
|
26
|
+
* for lightweight UI decisions such as showing or hiding vMode-only content.
|
|
27
|
+
* - {@link whenActive} — runs an operation (typically a data call) only when vMode is active **and**
|
|
28
|
+
* the vMode database is installed, otherwise runs a fallback. Use it when accessing vMode data.
|
|
29
|
+
* - {@link getCapabilities} — combines the result from isActive with a gateway probe to determine
|
|
30
|
+
* whether the vMode database is present and usable, along with the agent version if available. This
|
|
31
|
+
* is the least likely use case, but is available for scenarios where more data is needed.
|
|
45
32
|
*
|
|
46
33
|
* ```ts
|
|
47
|
-
* const vc = new VirtualizationClient(appContext);
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* const hosts = await firstValueFrom(vc.getHosts());
|
|
51
|
-
* } else {
|
|
52
|
-
* // platform has no vMode database — fall back to legacy behavior, no crash
|
|
34
|
+
* const vc = new VirtualizationClient(appContext); // inert, no network
|
|
35
|
+
* if (vc.isActive()) {
|
|
36
|
+
* // show vMode-only UI
|
|
53
37
|
* }
|
|
38
|
+
* const hosts = await firstValueFrom(vc.whenActive(() => vc.getHosts(), () => of([])));
|
|
54
39
|
* ```
|
|
55
40
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
41
|
+
* ## Compatibility
|
|
42
|
+
*
|
|
43
|
+
* This will work whether vMode is installed or not. The data methods ({@link getHosts}, etc.) reject
|
|
44
|
+
* with a {@link VirtualizationUnavailableError} when the database is absent (a backstop for callers
|
|
45
|
+
* that do not gate with {@link whenActive}), or a {@link VirtualizationResourceNotFoundError} when the
|
|
46
|
+
* database is installed but the requested resource does not exist.
|
|
60
47
|
*/
|
|
61
48
|
export declare class VirtualizationClient {
|
|
62
49
|
private readonly gateway;
|
|
@@ -69,37 +56,29 @@ export declare class VirtualizationClient {
|
|
|
69
56
|
* successful probe and cached alongside {@link databaseInstalled}; stays `undefined` when not reported.
|
|
70
57
|
*/
|
|
71
58
|
private agentVersion?;
|
|
72
|
-
/**
|
|
73
|
-
* Resolves whether the user is currently in vMode. Defaults to {@link readVirtualizationModeActive}
|
|
74
|
-
* (the ambient `MsftSme` read); overridable via {@link VirtualizationClientOptions} so consumers
|
|
75
|
-
* can fake vMode-active state in tests without touching the global.
|
|
76
|
-
*/
|
|
77
|
-
private readonly isVirtualizationModeActive;
|
|
78
59
|
/**
|
|
79
60
|
* Creates a virtualization client. This does **not** make any network calls.
|
|
80
61
|
* @param appContext The app context (or any object exposing a `gateway`) to issue requests on.
|
|
81
|
-
* @param options Optional overrides (see {@link VirtualizationClientOptions}); all default to the
|
|
82
|
-
* production behavior.
|
|
83
62
|
*/
|
|
84
|
-
constructor(appContext: AppContext | VirtualizationClientHost
|
|
63
|
+
constructor(appContext: AppContext | VirtualizationClientHost);
|
|
85
64
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
65
|
+
* Returns whether the user is using WAC in vMode rather than standard (aMode). This is a
|
|
66
|
+
* synchronous read of the shell's environment mode with no network call; use it for UI
|
|
67
|
+
* decisions such as showing or hiding vMode-only content.
|
|
89
68
|
*
|
|
90
|
-
*
|
|
91
|
-
* immutable for the lifetime of the gateway install, so they are probed at most once. `active` is read
|
|
92
|
-
* **fresh on every subscription**, because the user can switch between standard mode and vMode at any time.
|
|
93
|
-
* @returns An observable of {@link VirtualizationCapabilities}.
|
|
69
|
+
* @returns `true` when the user is in vMode; otherwise `false`.
|
|
94
70
|
*/
|
|
95
|
-
|
|
71
|
+
isActive(): boolean;
|
|
96
72
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
73
|
+
* Reports whether the vMode database is installed (`available`, probed once and cached with
|
|
74
|
+
* `agentVersion`) and whether the user is in vMode (`active`, from {@link isActive} on each
|
|
75
|
+
* subscription). Never throws; on any error `available` is `false`.
|
|
76
|
+
*
|
|
77
|
+
* Most callers should use {@link isActive} for UI decisions and {@link whenActive} to gate data
|
|
78
|
+
* calls. Use this method only when you need the individual flags.
|
|
79
|
+
* @returns An observable of {@link VirtualizationCapabilities}.
|
|
101
80
|
*/
|
|
102
|
-
|
|
81
|
+
getCapabilities(): Observable<VirtualizationCapabilities>;
|
|
103
82
|
/**
|
|
104
83
|
* Resolves whether the vMode database is installed on this platform, caching the result for the
|
|
105
84
|
* lifetime of the client. The install state is **immutable** for the lifetime of the gateway
|
|
@@ -116,22 +95,20 @@ export declare class VirtualizationClient {
|
|
|
116
95
|
*/
|
|
117
96
|
private isDatabaseInstalled;
|
|
118
97
|
/**
|
|
119
|
-
* Runs `operation`
|
|
120
|
-
* `fallback
|
|
121
|
-
* back to their existing (e.g. aMode) path when vMode is not in use.
|
|
98
|
+
* Runs `operation` when the user is in vMode and the vMode database is installed; otherwise runs
|
|
99
|
+
* `fallback` (e.g. the existing aMode path). Use it to gate calls to the data methods.
|
|
122
100
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* is the meaningful condition. See {@link getCapabilities}.
|
|
101
|
+
* The check runs on subscription and never errors; errors from `operation` or `fallback` propagate.
|
|
102
|
+
* When the user is not in vMode it takes the fallback with no network call; otherwise it consults
|
|
103
|
+
* the cached database-install probe.
|
|
127
104
|
*
|
|
128
105
|
* ```ts
|
|
129
106
|
* const hosts$ = vc.whenActive(() => vc.getHosts(), () => of([]));
|
|
130
107
|
* ```
|
|
131
108
|
*
|
|
132
|
-
* @param operation Factory invoked only when vMode is active.
|
|
133
|
-
* @param fallback Factory invoked
|
|
134
|
-
*
|
|
109
|
+
* @param operation Factory invoked only when vMode is active and the database is installed.
|
|
110
|
+
* @param fallback Factory invoked otherwise. It is a factory (not a bare observable) so its work —
|
|
111
|
+
* and any side effects — only happen when the fallback is taken.
|
|
135
112
|
*/
|
|
136
113
|
whenActive<T>(operation: () => Observable<T>, fallback: () => Observable<T>): Observable<T>;
|
|
137
114
|
/**
|
|
@@ -203,14 +180,6 @@ export declare class VirtualizationClient {
|
|
|
203
180
|
* Issues a flat list request for a collection and unwraps the `{ data: [...] }` envelope.
|
|
204
181
|
*/
|
|
205
182
|
private list;
|
|
206
|
-
/**
|
|
207
|
-
* The default reader for {@link isVirtualizationModeActive}: reads whether the user is currently
|
|
208
|
-
* in the virtualization experience (vMode) vs standard mode from the ambient `MsftSme` environment
|
|
209
|
-
* configuration. Synchronous local read; defaults to `false` (standard) and never throws. Consumers
|
|
210
|
-
* that need to fake this in tests should pass {@link VirtualizationClientOptions.isVirtualizationModeActive}
|
|
211
|
-
* rather than overriding this method.
|
|
212
|
-
*/
|
|
213
|
-
private readVirtualizationModeActive;
|
|
214
183
|
/**
|
|
215
184
|
* Runs a data request, ensuring the (cached) database-install probe has resolved first so that
|
|
216
185
|
* {@link toDataError} can distinguish "the vMode database is absent" from "the requested resource
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualization-client.d.ts","sourceRoot":"","sources":["../../src/virtualization/virtualization-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAkB,MAAM,MAAM,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EACH,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EAEvB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACxB,MAAM,yBAAyB,CAAC;AAOjC;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,iBAAiB,CAAC;CAC9B;AAED
|
|
1
|
+
{"version":3,"file":"virtualization-client.d.ts","sourceRoot":"","sources":["../../src/virtualization/virtualization-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAkB,MAAM,MAAM,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EACH,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EAEvB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACxB,MAAM,yBAAyB,CAAC;AAOjC;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAU;IACpC;;;OAGG;IACH,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B;;;OAGG;gBACS,UAAU,EAAE,UAAU,GAAG,wBAAwB;IAI7D;;;;;;OAMG;IACI,QAAQ,IAAI,OAAO;IAU1B;;;;;;;;OAQG;IACI,eAAe,IAAI,UAAU,CAAC,0BAA0B,CAAC;IAIhE;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;;;;;;;;;;;;;;OAeG;IACI,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAkBlG;;;OAGG;IACI,QAAQ,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;IAInD;;;OAGG;IACI,WAAW,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC;IAIzD;;;OAGG;IACI,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAI/C;;;OAGG;IACI,iBAAiB,IAAI,UAAU,CAAC,2BAA2B,EAAE,CAAC;IAIrE;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAI5D;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,qBAAqB,CAAC;IAIlE;;;OAGG;IACI,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAIxD;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,2BAA2B,CAAC;IAI9E;;;;OAIG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IASnB;;;;OAIG;IACI,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;IAIxE;;;;OAIG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;IAIlF;;OAEG;IACH,OAAO,CAAC,IAAI;IAWZ;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,WAAW;CAUtB"}
|