@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.
Files changed (176) hide show
  1. package/3rdPartyDisclosure.html +10 -13
  2. package/README.md +110 -33
  3. package/angular/fesm2022/msft-sme-angular.mjs +1235 -1213
  4. package/angular/fesm2022/msft-sme-angular.mjs.map +1 -1
  5. package/angular/index.d.ts +29 -14
  6. package/angular/package.json +1 -1
  7. package/core/azure/azure-manager.d.ts +15 -3
  8. package/core/azure/azure-manager.d.ts.map +1 -1
  9. package/core/azure/azure-manager.js +29 -10
  10. package/core/azure/azure-manager.js.map +1 -1
  11. package/core/azure/models/aadAppConfig-data.d.ts +16 -0
  12. package/core/azure/models/aadAppConfig-data.d.ts.map +1 -1
  13. package/core/azure/models/aadAppConfig-data.js.map +1 -1
  14. package/core/base/environment.d.ts +1 -1
  15. package/core/base/environment.d.ts.map +1 -1
  16. package/core/base/environment.js.map +1 -1
  17. package/core/base/utilities.d.ts +10 -2
  18. package/core/base/utilities.d.ts.map +1 -1
  19. package/core/base/utilities.js +45 -25
  20. package/core/base/utilities.js.map +1 -1
  21. package/core/data/gateway-connection.d.ts.map +1 -1
  22. package/core/data/gateway-connection.js +1 -0
  23. package/core/data/gateway-connection.js.map +1 -1
  24. package/core/diagnostics/sme-web-telemetry.d.ts +17 -1
  25. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  26. package/core/diagnostics/sme-web-telemetry.js +16 -0
  27. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  28. package/core/enterprise/enterprise-models.d.ts +10 -4
  29. package/core/enterprise/enterprise-models.d.ts.map +1 -1
  30. package/core/enterprise/enterprise-models.js +9 -4
  31. package/core/enterprise/enterprise-models.js.map +1 -1
  32. package/core/index.d.ts +5 -3
  33. package/core/index.d.ts.map +1 -1
  34. package/core/index.js +2 -1
  35. package/core/index.js.map +1 -1
  36. package/core/manifest/environment-modules.d.ts +2 -2
  37. package/core/manifest/environment-modules.d.ts.map +1 -1
  38. package/core/manifest/environment-modules.js.map +1 -1
  39. package/core/manifest/gateway-url-validator.d.ts +17 -0
  40. package/core/manifest/gateway-url-validator.d.ts.map +1 -0
  41. package/core/manifest/gateway-url-validator.js +56 -0
  42. package/core/manifest/gateway-url-validator.js.map +1 -0
  43. package/core/manifest/manifest-loader.d.ts +47 -11
  44. package/core/manifest/manifest-loader.d.ts.map +1 -1
  45. package/core/manifest/manifest-loader.js +141 -72
  46. package/core/manifest/manifest-loader.js.map +1 -1
  47. package/core/manifest/module-schema.json +1 -1
  48. package/core/performance/performance-tracker.d.ts +2 -0
  49. package/core/performance/performance-tracker.d.ts.map +1 -1
  50. package/core/performance/performance-tracker.js +18 -0
  51. package/core/performance/performance-tracker.js.map +1 -1
  52. package/core/rpc/azure/rpc-azure-model.d.ts +19 -1
  53. package/core/rpc/azure/rpc-azure-model.d.ts.map +1 -1
  54. package/core/rpc/azure/rpc-azure-model.js.map +1 -1
  55. package/core/rpc/forward/rpc-forward-auto-client.d.ts +5 -0
  56. package/core/rpc/forward/rpc-forward-auto-client.d.ts.map +1 -1
  57. package/core/rpc/forward/rpc-forward-auto-client.js +13 -0
  58. package/core/rpc/forward/rpc-forward-auto-client.js.map +1 -1
  59. package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.d.ts +16 -0
  60. package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.d.ts.map +1 -0
  61. package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.js +18 -0
  62. package/core/rpc/resource-data-changed/rpc-resource-data-changed-client.js.map +1 -0
  63. package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.d.ts +8 -0
  64. package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.d.ts.map +1 -0
  65. package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.js +2 -0
  66. package/core/rpc/resource-data-changed/rpc-resource-data-changed-handler.js.map +1 -0
  67. package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.d.ts +18 -0
  68. package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.d.ts.map +1 -0
  69. package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.js +8 -0
  70. package/core/rpc/resource-data-changed/rpc-resource-data-changed-model.js.map +1 -0
  71. package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.d.ts +27 -0
  72. package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.d.ts.map +1 -0
  73. package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.js +23 -0
  74. package/core/rpc/resource-data-changed/rpc-resource-data-changed-subject-server.js.map +1 -0
  75. package/core/rpc/rpc-forwarder.d.ts +16 -2
  76. package/core/rpc/rpc-forwarder.d.ts.map +1 -1
  77. package/core/rpc/rpc-forwarder.js +50 -6
  78. package/core/rpc/rpc-forwarder.js.map +1 -1
  79. package/core/security/authorization-manager.d.ts +126 -4
  80. package/core/security/authorization-manager.d.ts.map +1 -1
  81. package/core/security/authorization-manager.js +381 -49
  82. package/core/security/authorization-manager.js.map +1 -1
  83. package/core/security/connection-manager.d.ts +2 -1
  84. package/core/security/connection-manager.d.ts.map +1 -1
  85. package/core/security/connection-manager.js +10 -6
  86. package/core/security/connection-manager.js.map +1 -1
  87. package/core/security/tool-condition-validator.d.ts +8 -3
  88. package/core/security/tool-condition-validator.d.ts.map +1 -1
  89. package/core/security/tool-condition-validator.js +43 -28
  90. package/core/security/tool-condition-validator.js.map +1 -1
  91. package/core/version.js +1 -1
  92. package/core/version.js.map +1 -1
  93. package/core/virtualization/virtualization-client.d.ts +47 -78
  94. package/core/virtualization/virtualization-client.d.ts.map +1 -1
  95. package/core/virtualization/virtualization-client.js +57 -77
  96. package/core/virtualization/virtualization-client.js.map +1 -1
  97. package/core/virtualization/virtualization-models.d.ts +9 -8
  98. package/core/virtualization/virtualization-models.d.ts.map +1 -1
  99. package/core/virtualization/virtualization-models.js +7 -5
  100. package/core/virtualization/virtualization-models.js.map +1 -1
  101. package/core/virtualization/virtualization-unavailable-error.d.ts +1 -1
  102. package/core/virtualization/virtualization-unavailable-error.js +1 -1
  103. package/core/virtualization/virtualization-unavailable-error.js.map +1 -1
  104. package/package.json +12 -17
  105. package/{react-sdk-core → react}/hooks/useAppContextInit.d.ts +2 -0
  106. package/react/hooks/useAppContextInit.d.ts.map +1 -0
  107. package/{react-sdk-core → react}/hooks/useAppContextInit.js +18 -2
  108. package/{react-sdk-core → react}/index.js +1 -1
  109. package/react/services/BaseNavigationService.d.ts.map +1 -0
  110. package/{react-sdk-core → react}/services/BaseNavigationService.js +4 -0
  111. package/{react-sdk-core → react}/version.d.ts.map +1 -1
  112. package/react/version.js +3 -0
  113. package/{react-sdk-core → react}/vite/smeCoreStringsPlugin.d.ts +1 -1
  114. package/{react-sdk-core → react}/vite/smeCoreStringsPlugin.js +1 -1
  115. package/{react-sdk-core → react}/vite/smeManifestResourcesPlugin.d.ts +1 -1
  116. package/{react-sdk-core → react}/vite/smeManifestResourcesPlugin.js +1 -1
  117. package/{react-sdk-core → react}/vite/smePowerShellPlugin.d.ts +1 -1
  118. package/{react-sdk-core → react}/vite/smePowerShellPlugin.js +1 -1
  119. package/styles/css/main-v2.css +1 -1
  120. package/styles/package.json +1 -1
  121. package/wac-cli/dist/angular20/configs/ci-build-yml-config.js +3 -2
  122. package/wac-cli/dist/angular20/configs/ci-build-yml-config.js.map +1 -1
  123. package/wac-cli/dist/angular20/upgrader/nvmrc-engines-upgrader.js +2 -2
  124. package/wac-cli/dist/create-react/main.js +3 -2
  125. package/wac-cli/dist/create-react/main.js.map +1 -1
  126. package/wac-cli/module-template/build/pipelines/ci-build.yml +2 -2
  127. package/wac-cli/module-template/build/pipelines/pull-request.yml +2 -2
  128. package/wac-cli/templates/internal/main.ts +2 -2
  129. package/wac-cli/templates/internal/package.json +26 -14
  130. package/wac-cli/templates/react-template/package.json +3 -2
  131. package/wac-cli/templates/react-template/src/App.tsx +1 -1
  132. package/wac-cli/templates/react-template/src/hooks/useServicesData.ts +1 -1
  133. package/wac-cli/templates/react-template/vite.config.ts +1 -1
  134. package/wac-cli/templates/wac-template/angular.json +8 -13
  135. package/wac-cli/templates/wac-template/package.json +26 -14
  136. package/wac-cli/templates/wac-template/src/main.ts +2 -2
  137. package/react-sdk-core/hooks/useAppContextInit.d.ts.map +0 -1
  138. package/react-sdk-core/services/BaseNavigationService.d.ts.map +0 -1
  139. package/react-sdk-core/version.js +0 -3
  140. /package/{react-sdk-core → react}/components/SplashScreen.d.ts +0 -0
  141. /package/{react-sdk-core → react}/components/SplashScreen.d.ts.map +0 -0
  142. /package/{react-sdk-core → react}/components/SplashScreen.js +0 -0
  143. /package/{react-sdk-core → react}/context/AppContextProvider.d.ts +0 -0
  144. /package/{react-sdk-core → react}/context/AppContextProvider.d.ts.map +0 -0
  145. /package/{react-sdk-core → react}/context/AppContextProvider.js +0 -0
  146. /package/{react-sdk-core → react}/hooks/useAppContext.d.ts +0 -0
  147. /package/{react-sdk-core → react}/hooks/useAppContext.d.ts.map +0 -0
  148. /package/{react-sdk-core → react}/hooks/useAppContext.js +0 -0
  149. /package/{react-sdk-core → react}/hooks/useSkeletonStyles.d.ts +0 -0
  150. /package/{react-sdk-core → react}/hooks/useSkeletonStyles.d.ts.map +0 -0
  151. /package/{react-sdk-core → react}/hooks/useSkeletonStyles.js +0 -0
  152. /package/{react-sdk-core → react}/hooks/useWacTheme.d.ts +0 -0
  153. /package/{react-sdk-core → react}/hooks/useWacTheme.d.ts.map +0 -0
  154. /package/{react-sdk-core → react}/hooks/useWacTheme.js +0 -0
  155. /package/{react-sdk-core → react}/index.d.ts +0 -0
  156. /package/{react-sdk-core → react}/index.d.ts.map +0 -0
  157. /package/{react-sdk-core → react}/services/AppContextService.d.ts +0 -0
  158. /package/{react-sdk-core → react}/services/AppContextService.d.ts.map +0 -0
  159. /package/{react-sdk-core → react}/services/AppContextService.js +0 -0
  160. /package/{react-sdk-core → react}/services/BaseNavigationService.d.ts +0 -0
  161. /package/{react-sdk-core → react}/services/NavigationService.d.ts +0 -0
  162. /package/{react-sdk-core → react}/services/NavigationService.d.ts.map +0 -0
  163. /package/{react-sdk-core → react}/services/NavigationService.js +0 -0
  164. /package/{react-sdk-core → react}/services/Polyfills.d.ts +0 -0
  165. /package/{react-sdk-core → react}/services/Polyfills.d.ts.map +0 -0
  166. /package/{react-sdk-core → react}/services/Polyfills.js +0 -0
  167. /package/{react-sdk-core → react}/version.d.ts +0 -0
  168. /package/{react-sdk-core → react}/vite/index.d.ts +0 -0
  169. /package/{react-sdk-core → react}/vite/index.d.ts.map +0 -0
  170. /package/{react-sdk-core → react}/vite/index.js +0 -0
  171. /package/{react-sdk-core → react}/vite/log.d.ts +0 -0
  172. /package/{react-sdk-core → react}/vite/log.d.ts.map +0 -0
  173. /package/{react-sdk-core → react}/vite/log.js +0 -0
  174. /package/{react-sdk-core → react}/vite/smeCoreStringsPlugin.d.ts.map +0 -0
  175. /package/{react-sdk-core → react}/vite/smeManifestResourcesPlugin.d.ts.map +0 -0
  176. /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
@@ -1,4 +1,4 @@
1
1
  export class RuntimeVersion {
2
- static version = '7.5.0';
2
+ static version = '9.1.1';
3
3
  }
4
4
  //# sourceMappingURL=version.js.map
@@ -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 = '7.5.0';\r\n}\r\n"]}
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
- * Optional overrides for {@link VirtualizationClient}. All options are additive and default to the
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 (e.g. Hyper-V, SDN) a single importable
34
- * entry point with typed methods and IntelliSense for the Gateway V2 virtualization database,
35
- * instead of hand-writing stringly-typed `gateway.get('services/enterprisedata/data/...')` calls
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
- * ## Compatibility
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
- * Extensions upgrade and downgrade independently of the gateway platform, so this client may run
42
- * where the vMode database does not exist. Construction is **inert** (no network calls), so simply
43
- * importing and instantiating it is always safe. Use {@link getCapabilities} (which never throws)
44
- * to detect availability before calling the data methods:
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); // inert, no network
48
- * const caps = await firstValueFrom(vc.getCapabilities()); // safe probe, never throws
49
- * if (caps.available) {
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
- * The data methods ({@link getHosts}, etc.) reject with a {@link VirtualizationUnavailableError}
57
- * when the database is absent (a backstop for callers that do not gate on {@link getCapabilities}),
58
- * or a {@link VirtualizationResourceNotFoundError} when the database is installed but the requested
59
- * resource does not exist.
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, options?: VirtualizationClientOptions);
63
+ constructor(appContext: AppContext | VirtualizationClientHost);
85
64
  /**
86
- * Detects whether the virtualization (vMode) experience is supported by the current platform and
87
- * whether the user is currently using it. **Never throws** — on any error (older platform, not
88
- * enterprise mode, network failure) it resolves to `{ available: false, active: ... }`.
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
- * Only `available` (whether the vMode database is installed) and `agentVersion` are cached — they are
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
- getCapabilities(): Observable<VirtualizationCapabilities>;
71
+ isActive(): boolean;
96
72
  /**
97
- * Safely resolves the current vMode-active state via {@link isVirtualizationModeActive}. The default
98
- * reader ({@link readVirtualizationModeActive}) already never throws, but a consumer-supplied override
99
- * might, so this backstop catches any error and reports `false` (standard) to preserve the
100
- * never-throws contract of {@link getCapabilities}.
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
- private resolveActive;
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` only when the user is currently in vMode (`active`), otherwise resolves to
120
- * `fallback`. Encapsulates the common capability-gating pattern so consumers can gracefully fall
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
- * Named for `active` alone on purpose — there is no false promise: the vMode experience cannot be
124
- * `active` unless the vMode database is also `available` (you can't be *in* vMode on a platform
125
- * that doesn't have it). This gate still checks both capability fields defensively, but `active`
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 only when vMode is not active. It is a factory (not a bare
134
- * observable) so its work — and any side effects — only happen when the fallback is taken.
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;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC;;;;;;;;;OASG;IACH,0BAA0B,CAAC,EAAE,MAAM,OAAO,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;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;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAgB;IAE3D;;;;;OAKG;gBACS,UAAU,EAAE,UAAU,GAAG,wBAAwB,EAAE,OAAO,CAAC,EAAE,2BAA2B;IAKpG;;;;;;;;;OASG;IACI,eAAe,IAAI,UAAU,CAAC,0BAA0B,CAAC;IAIhE;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;;;;;;;;;;;;;;;;OAiBG;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;IAclG;;;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;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IAUpC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,WAAW;CAUtB"}
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"}