@microsoft/windows-admin-center-sdk 4.52.0 → 4.123.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/angular/esm2020/src/controls/actions/containers/action-bar/action-bar.component.mjs +2 -2
- package/angular/esm2020/src/controls/master-view/master-view.component.mjs +8 -6
- package/angular/esm2020/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.mjs +56 -1
- package/angular/esm2020/src/service/navigation.service.mjs +3 -1
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +66 -6
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +65 -6
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/src/controls/master-view/master-view.component.d.ts +6 -2
- package/angular/src/controls/ux/sme-ux-footer/sme-ux-footer-template/sme-wizard-lite-footer-template/sme-wizard-lite-footer-template.component.d.ts +64 -0
- package/core/assets/strings/cs-CZ/strings.json +1 -1
- package/core/assets/strings/de-DE/strings.json +1 -1
- package/core/assets/strings/es-ES/strings.json +1 -1
- package/core/assets/strings/fr-FR/strings.json +1 -1
- package/core/assets/strings/hu-HU/strings.json +1 -1
- package/core/assets/strings/id-ID/strings.json +1 -1
- package/core/assets/strings/it-IT/strings.json +1 -1
- package/core/assets/strings/ja-JP/strings.json +1 -1
- package/core/assets/strings/ko-KR/strings.json +1 -1
- package/core/assets/strings/nl-NL/strings.json +1 -1
- package/core/assets/strings/pl-PL/strings.json +1 -1
- package/core/assets/strings/pt-BR/strings.json +1 -1
- package/core/assets/strings/pt-PT/strings.json +1 -1
- package/core/assets/strings/ru-RU/strings.json +1 -1
- package/core/assets/strings/strings.json +1 -1
- package/core/assets/strings/sv-SE/strings.json +1 -1
- package/core/assets/strings/tr-TR/strings.json +1 -1
- package/core/assets/strings/zh-CN/strings.json +1 -1
- package/core/assets/strings/zh-TW/strings.json +1 -1
- package/core/azure/azure-constants.d.ts +7 -3
- package/core/azure/azure-constants.d.ts.map +1 -1
- package/core/azure/azure-constants.js +8 -4
- package/core/azure/azure-constants.js.map +1 -1
- package/core/azure/models/azureArcStatusEnum.d.ts +4 -2
- package/core/azure/models/azureArcStatusEnum.d.ts.map +1 -1
- package/core/azure/models/azureArcStatusEnum.js +3 -1
- package/core/azure/models/azureArcStatusEnum.js.map +1 -1
- package/core/base/utilities.d.ts +3 -3
- package/core/base/utilities.d.ts.map +1 -1
- package/core/base/utilities.js +2 -2
- package/core/base/utilities.js.map +1 -1
- package/core/data/active-directory/active-directory.d.ts.map +1 -1
- package/core/data/active-directory/active-directory.js +1 -1
- package/core/data/active-directory/active-directory.js.map +1 -1
- package/core/data/cookie.d.ts.map +1 -1
- package/core/data/cookie.js +7 -0
- package/core/data/cookie.js.map +1 -1
- package/core/data/gateway-connection.d.ts +12 -0
- package/core/data/gateway-connection.d.ts.map +1 -1
- package/core/data/gateway-connection.js +16 -0
- package/core/data/gateway-connection.js.map +1 -1
- package/core/data/gateway-url-translator.d.ts +1 -0
- package/core/data/gateway-url-translator.d.ts.map +1 -1
- package/core/data/gateway-url-translator.js +15 -0
- package/core/data/gateway-url-translator.js.map +1 -1
- package/core/data/gateway-urls.d.ts +6 -0
- package/core/data/gateway-urls.d.ts.map +1 -1
- package/core/data/gateway-urls.js +8 -0
- package/core/data/gateway-urls.js.map +1 -1
- package/core/data/net.d.ts +1 -0
- package/core/data/net.d.ts.map +1 -1
- package/core/data/net.js +26 -1
- package/core/data/net.js.map +1 -1
- package/core/data/websocket-stream.d.ts.map +1 -1
- package/core/data/websocket-stream.js +2 -2
- package/core/data/websocket-stream.js.map +1 -1
- package/core/generated/powershell-scripts.d.ts.map +1 -1
- package/core/generated/powershell-scripts.js +1 -1
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/generated/strings.d.ts +3 -0
- package/core/generated/strings.d.ts.map +1 -1
- package/core/generated/strings.js.map +1 -1
- package/core/notification/notification.d.ts.map +1 -1
- package/core/notification/notification.js +1 -3
- package/core/notification/notification.js.map +1 -1
- package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +8 -8
- package/core/security/tool-condition-validator.d.ts.map +1 -1
- package/core/security/tool-condition-validator.js +5 -5
- package/core/security/tool-condition-validator.js.map +1 -1
- package/core/shared/server-inventory/server-inventory-cache.d.ts.map +1 -1
- package/core/shared/server-inventory/server-inventory-cache.js +1 -2
- package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
- package/core/shared/server-inventory/server-inventory.d.ts +4 -4
- package/core/shared/server-inventory/server-inventory.d.ts.map +1 -1
- package/core/shared/server-inventory/server-inventory.js +2 -2
- package/core/shared/server-inventory/server-inventory.js.map +1 -1
- package/microsoft-windows-admin-center-sdk-4.123.0.tgz +0 -0
- package/package.json +4 -4
- package/styles/css/main-v2.css +1 -1
- package/tools/module-template/build/pipelines/ci-build.yml +2 -2
- package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts +2 -7
- package/tools/wac-cli/src/angular15/configs/angular-json-config.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/configs/angular-json-config.js +8 -1
- package/tools/wac-cli/src/angular15/configs/angular-json-config.js.map +1 -1
- package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts +4 -0
- package/tools/wac-cli/src/angular15/configs/package-json-config.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/configs/package-json-config.js +13 -9
- package/tools/wac-cli/src/angular15/configs/package-json-config.js.map +1 -1
- package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.d.ts +14 -0
- package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +21 -0
- package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js.map +1 -0
- package/tools/wac-cli/src/angular15/main.d.ts +33 -3
- package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/main.js +69 -7
- package/tools/wac-cli/src/angular15/main.js.map +1 -1
- package/tools/wac-cli/src/angular15/test/ui-test-automation-package.json/after.json +14 -0
- package/tools/wac-cli/src/angular15/test/ui-test-automation-package.json/before.json +13 -0
- package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.d.ts +15 -0
- package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +48 -0
- package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js.map +1 -0
- package/tools/wac-cli/src/angular15/utils/main-debugger.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/utils/main-debugger.js +3 -0
- package/tools/wac-cli/src/angular15/utils/main-debugger.js.map +1 -1
- package/tools/wac-cli/src/angular15/utils/update-shell-references.d.ts +2 -0
- package/tools/wac-cli/src/angular15/utils/update-shell-references.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/utils/update-shell-references.js +69 -0
- package/tools/wac-cli/src/angular15/utils/update-shell-references.js.map +1 -0
- package/tools/wac-cli/src/common.d.ts +6 -0
- package/tools/wac-cli/src/common.d.ts.map +1 -1
- package/tools/wac-cli/src/common.js +13 -0
- package/tools/wac-cli/src/common.js.map +1 -1
- package/tools/wac-cli/src/create/main.d.ts.map +1 -1
- package/tools/wac-cli/src/create/main.js +3 -51
- package/tools/wac-cli/src/create/main.js.map +1 -1
- package/tools/wac-cli/src/eslint/main.d.ts +5 -1
- package/tools/wac-cli/src/eslint/main.d.ts.map +1 -1
- package/tools/wac-cli/src/eslint/main.js +17 -2
- package/tools/wac-cli/src/eslint/main.js.map +1 -1
- package/tools/wac-cli/src/index.d.ts.map +1 -1
- package/tools/wac-cli/src/index.js +2 -2
- package/tools/wac-cli/src/index.js.map +1 -1
- package/tools/wac-cli/templates/wac-template/package.json +3 -0
package/core/data/net.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/data/net.ts"],"names":[],"mappings":"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","file":"net.js","sourcesContent":["import { Observable, of } from 'rxjs';\r\nimport { AjaxError } from 'rxjs/ajax';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { Strings } from '../generated/strings';\r\nimport { Crypto } from './crypto';\r\nimport { ErrorExtended } from './error-extended';\r\nimport { HttpStatusCode } from './http-constants';\r\n\r\n/**\r\n * Escape binary string code\r\n * @param data A value representing original binary string code\r\n */\r\ndeclare function escape(data: string): string;\r\n\r\n/**\r\n * Unescape non-binary string code\r\n * @param data A value representing original non-binary string code\r\n */\r\ndeclare function unescape(data: string): string;\r\n\r\n/**\r\n * The options interface of getErrorMessage function\r\n */\r\nexport interface ErrorMessageOptions {\r\n /**\r\n * adding additional error message\r\n * addNativeError: native error code\r\n */\r\n addNativeError?: boolean;\r\n\r\n /**\r\n * Add error prefix for output string.\r\n *\r\n * \"Error: {error message}\"\r\n */\r\n errorPrefix?: boolean;\r\n\r\n /**\r\n * Use the detailRecordremoteExceptionMessage on the error instead of detailRecord.message\r\n */\r\n useRemoteExceptionMessage?: boolean;\r\n}\r\n\r\ninterface Credentials {\r\n username: string;\r\n password: string;\r\n passwordEncryptedWith: string;\r\n domain: string;\r\n}\r\n\r\n/**\r\n * Net communication class.\r\n * @dynamic\r\n */\r\nexport class Net {\r\n private static cachedErrorCodeMap: { [index: number]: string };\r\n private static get errorCodeMap(): { [index: number]: string } {\r\n if (!Net.cachedErrorCodeMap) {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n Net.cachedErrorCodeMap = {\r\n // added from https://msdn.microsoft.com/en-us/library/aa392154(v=vs.85).aspx\r\n 0: strings.ErrorCode.Code0.message,\r\n 5: strings.ErrorCode.Code5.message,\r\n 50: strings.ErrorCode.Code50.message,\r\n 87: strings.ErrorCode.Code87.message,\r\n 110: strings.ErrorCode.Code110.message,\r\n 1323: strings.ErrorCode.Code1323.message,\r\n 1326: strings.ErrorCode.Code1326.message,\r\n 1355: strings.ErrorCode.Code1355.message,\r\n 2224: strings.ErrorCode.Code2224.message,\r\n 2691: strings.ErrorCode.Code2691.message,\r\n 2692: strings.ErrorCode.Code2692.message,\r\n 0x80041087: strings.ErrorCode.Code8004108.message\r\n };\r\n }\r\n\r\n return Net.cachedErrorCodeMap;\r\n }\r\n\r\n /**\r\n * The static definition of Web API URLs.\r\n */\r\n public static apiVersionParam = 'api-version';\r\n public static apiVersion20190201 = '2019-02-01';\r\n public static apiRoot = '/api/{0}';\r\n public static batch = '/batch';\r\n public static streamSocket = '{0}/api/streams/socket/{1}';\r\n public static downlevel = 'features/downlevelSupport';\r\n public static downlevelInstall = Net.downlevel + '/install';\r\n public static downlevelComponents = Net.downlevel + '/components';\r\n public static extensionsSettings = '/settings/extension';\r\n public static installedExtensions = '/settings/extension/installed';\r\n public static extensions = '/extensions';\r\n public static updatesSettings = '/settings/updates';\r\n public static isExtensionUpdateAvailable = Net.extensions + '/isUpdateAvailable';\r\n public static cimClass = 'features/cim/namespaces/{0}/classes/{1}';\r\n public static cimQuery = 'features/cim/query';\r\n public static cimInvoke = '/methods/{0}/invoke';\r\n public static powerShellApiInvokeCommand = 'features/powershellApi/invokeCommand';\r\n public static powerShellApiSessions = 'features/powershellApi/pssessions/{0}';\r\n public static powerShellApiExecuteCommand: string = Net.powerShellApiSessions + '/invokeCommand';\r\n public static powerShellApiRetrieveOutput: string = Net.powerShellApiSessions + '?$expand=output';\r\n public static powerShellApiCancelCommand: string = Net.powerShellApiSessions + '/cancel';\r\n public static powerShellConsoleSessions = 'features/powershellConsole/pssessions/{0}';\r\n public static powerShellConsoleExecuteCommand: string = Net.powerShellConsoleSessions + '/invokeCommand';\r\n public static powerShellConsoleRetrieveOutput: string = Net.powerShellConsoleSessions + '?$expand=output';\r\n public static stopCommand: string = Net.powerShellConsoleSessions + '/cancel';\r\n public static tabCommand: string = Net.powerShellConsoleSessions + '/tab';\r\n public static userProfile = '/settings/user';\r\n public static applicationSettings = '/settings/all';\r\n public static adminSettings = '/settings/admin';\r\n public static user = '/user';\r\n\r\n public static fileTransferFormat = 'features/fileTransfer/files/{0}';\r\n public static fileTransferDownloadPost: string = Net.fileTransferFormat + '/download';\r\n public static fileTransferUpload: string = Net.fileTransferFormat + '/uploadlink';\r\n\r\n public static jeaFeature = 'features/jea/endpoint';\r\n public static jeaExport = Net.jeaFeature + '/export';\r\n\r\n public static gateway = '/gateway';\r\n public static gatewayAccessCheck = Net.gateway + '/access/check';\r\n public static gatewayStatus = Net.gateway + '/status';\r\n\r\n // {HttpMethod} {relativeNodeUrl} HTTP/1.1\r\n public static multiPartCallBodyUrl = '{0} {1} HTTP/1.1';\r\n\r\n /**\r\n * Gateway version 2.0.0 Node API set.\r\n */\r\n /**\r\n * WinREST service on Windows platform.\r\n */\r\n public static serviceWinRest = 'WinREST';\r\n\r\n /**\r\n * WinStream service on Windows platform.\r\n */\r\n public static serviceWinStream = 'WinStream';\r\n\r\n /**\r\n * LinuxBase on Linux platform.\r\n */\r\n public static serviceLinuxBase = 'LinuxBase';\r\n\r\n /**\r\n * ActiveDirectory on WinREST.\r\n */\r\n public static controllerActiveDirectory = 'ActiveDirectory';\r\n\r\n /**\r\n * CIM on WinREST.\r\n */\r\n public static controllerCim = 'CIM';\r\n\r\n /**\r\n * Extensions on WinREST.\r\n */\r\n public static controllerExtensions = 'Extensions';\r\n\r\n /**\r\n * FileTransfer on WinREST.\r\n */\r\n public static controllerFileTransfer = 'FileTransfer';\r\n\r\n /**\r\n * JEA on WinREST.\r\n */\r\n public static controllerJea = 'JEA';\r\n\r\n /**\r\n * Nuget on WinREST.\r\n */\r\n public static controllerNuget = 'Nuget';\r\n\r\n /**\r\n * PerformanceCounter on WinREST.\r\n */\r\n public static controllerPerformanceCounter = 'PerformanceCounter';\r\n\r\n /**\r\n * PowerShell on WinREST.\r\n */\r\n public static controllerPowerShell = 'PowerShell';\r\n\r\n /**\r\n * PseudoConsole on WinStream.\r\n */\r\n public static controllerPseudoConsole = 'PseudoConsole';\r\n\r\n /**\r\n * Ssh on LinuxBase.\r\n */\r\n public static controllerSsh = 'Ssh';\r\n\r\n /**\r\n * SshFile on LinuxBase.\r\n */\r\n public static controllerSshFile = 'SshFile';\r\n\r\n /**\r\n * State on WinREST.\r\n */\r\n public static controllerState = 'State';\r\n\r\n /**\r\n * Stream on WinStream.\r\n */\r\n public static controllerStream = 'Stream';\r\n\r\n /**\r\n * Stream on LinuxBase.\r\n */\r\n public static controllerStreamSsh = 'StreamSsh';\r\n\r\n /**\r\n * Tcp on WinStream and LinuxBase.\r\n */\r\n public static controllerTcp = 'Tcp';\r\n\r\n /**\r\n * Wdac on WinREST.\r\n */\r\n public static controllerWdac = 'Wdac';\r\n\r\n /**\r\n * Socket URL on WinStream.\r\n */\r\n public static streamSocketV200 = '{0}/api/services/' + Net.serviceWinStream + '/' + Net.controllerStream + '/socket/{1}';\r\n\r\n /**\r\n * Socket URL on LinuxBase.\r\n */\r\n public static sshStreamSocket = '{0}/api/services/' + Net.serviceLinuxBase + '/' + Net.controllerStreamSsh + '/socket';\r\n\r\n /**\r\n * Encodes the specified data as Base64-encoded URL.\r\n *\r\n * If the resultant URL is longer than 260 characters, it is converted to a\r\n * relative path where each segment (e.g. '/') defines the character length boundary.\r\n * The HTTP.SYS subsystem in Windows does now allow a URL segment larger than 260\r\n * characters without changing a Registry key and restarting the OS.\r\n * @param data The data to be encoded.\r\n * @return An encoded Base64 URL, potentially segmented by '/' every 260 characters.\r\n */\r\n public static toSegmentedBase64Url(data: string): string {\r\n const MAX_HTTP_SYS_URL_SEGMENT_LENGTH = 260;\r\n const base64Url = Net.utf8Base64UrlEncode(data);\r\n const parts = Net.splitByLength(base64Url, MAX_HTTP_SYS_URL_SEGMENT_LENGTH);\r\n return parts.join('/');\r\n }\r\n\r\n /**\r\n * Update URL with api-version=20190201.\r\n * @param url the original URL\r\n * @returns new url string added version parameter.\r\n */\r\n public static updateApiVersion20190201(url: string): string {\r\n const index = url.indexOf('?');\r\n const prefix = index > 0 ? '&' : '?';\r\n if (index > 0 && url.indexOf(`${Net.apiVersionParam}=`) > 0) {\r\n return url;\r\n }\r\n\r\n return `${url}${prefix}${Net.apiVersionParam}=${Net.apiVersion20190201}`;\r\n }\r\n\r\n /**\r\n * Convert IPV6 address to literal format.\r\n *\r\n * @param ipv6Address the ipv6 address format.\r\n */\r\n public static convertIPv6ToLiteral(ipv6Address: string): string {\r\n let data = '';\r\n for (let i = 0; i < ipv6Address.length; i++) {\r\n let ch = ipv6Address.charAt(i);\r\n if (ch === ':') {\r\n ch = '-';\r\n } else if (ch === '%') {\r\n ch = 's';\r\n }\r\n\r\n data += ch;\r\n }\r\n\r\n return `${data}.ipv6-literal.net`;\r\n }\r\n\r\n /**\r\n * Convert IPV6 address to literal format.\r\n *\r\n * @param ipv6Address the ipv6 address format.\r\n */\r\n public static convertLiteralToIPv6(literal: string): string {\r\n const firstSegment = literal.split('.ipv6-literal.net')[0];\r\n if (!firstSegment) {\r\n throw new Error('Not recognized as an IPv6 literal format: \\'{0}\\'!'.format(literal || 'null'));\r\n }\r\n\r\n let data = '';\r\n for (let i = 0; i < firstSegment.length; i++) {\r\n let ch = firstSegment.charAt(i);\r\n if (ch === '-') {\r\n ch = ':';\r\n } else if (ch === 's') {\r\n ch = '%';\r\n }\r\n\r\n data += ch;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Encode a string with base64url.\r\n *\r\n * @param data the input string.\r\n * @return string the encoded string.\r\n */\r\n public static base64urlEncode(data: string): string {\r\n // REF: https://tools.ietf.org/html/rfc4648#section-5\r\n const base64 = window.btoa(data);\r\n let base64Url = '';\r\n\r\n for (let i = 0; i < base64.length; i++) {\r\n const ch = base64.charAt(i);\r\n\r\n switch (ch) {\r\n case '+':\r\n base64Url += '-';\r\n break;\r\n case '/':\r\n base64Url += '_';\r\n break;\r\n case '=':\r\n return base64Url;\r\n default:\r\n base64Url += ch;\r\n break;\r\n }\r\n }\r\n\r\n return base64Url;\r\n }\r\n\r\n /**\r\n * Decode a base64 url string.\r\n *\r\n * @param data the string to decode.\r\n * @return string the decoded string.\r\n */\r\n public static base64urlDecode(data: string): string {\r\n while (data.length % 4 !== 0) {\r\n data += '=';\r\n }\r\n\r\n data = data.replaceAll('-', '+').replaceAll('_', '/');\r\n return window.atob(data);\r\n }\r\n\r\n /**\r\n * Encode utf8 string.\r\n *\r\n * @param data the unencoded string.\r\n */\r\n public static utf8Encode(data: string): string {\r\n return unescape(encodeURIComponent(data));\r\n }\r\n\r\n /**\r\n * Decode utf8 string.\r\n *\r\n * @param data the encoded UTF8 string.\r\n */\r\n public static utf8Decode(data: string): string {\r\n return decodeURIComponent(escape(data));\r\n }\r\n\r\n /**\r\n * Encode with utf8 (first) and base64url (second).\r\n *\r\n * @param data data the original string to encode. The string can be full unicode character string.\r\n * @return string the encoded string used on a part of URL.\r\n */\r\n public static utf8Base64UrlEncode(data: string): string {\r\n const utf8: string = Net.utf8Encode(data);\r\n return Net.base64urlEncode(utf8);\r\n }\r\n\r\n /**\r\n * Decode with utf8 (second) and base64url (first).\r\n *\r\n * @param data data the encoded URL string to decode.\r\n * @return string the decoded unicode string.\r\n */\r\n public static utf8Base64UrlDecode(data: string): string {\r\n const utf8: string = Net.base64urlDecode(data);\r\n return Net.utf8Decode(utf8);\r\n }\r\n\r\n /**\r\n * Create a key name from key value pairs.\r\n *\r\n * @param properties the key value pairs.\r\n * @return string the key name.\r\n */\r\n public static cimCreateName(properties: any): string {\r\n const data: string = JSON.stringify(properties);\r\n const utf8: string = Net.utf8Encode(data);\r\n return Net.base64urlEncode(utf8);\r\n }\r\n\r\n /**\r\n * Get properties of the item from the response.\r\n *\r\n * @param data the item in the response object.\r\n * @return any the properties.\r\n */\r\n public static getItemProperties(data: any): any {\r\n if (data && data.properties) {\r\n return data.properties;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Get properties of first item from the response.\r\n *\r\n * @param data the response object.\r\n * @return any the properties.\r\n */\r\n public static getFirstProperties(data: any): any {\r\n if (data && data.value && data.value.length) {\r\n if (data.value[0].properties) {\r\n return data.value[0].properties;\r\n }\r\n } else if (data && data.length) {\r\n return data[0];\r\n }\r\n\r\n return Net.getItemProperties(data);\r\n }\r\n\r\n /**\r\n * Get array of items from the response.\r\n *\r\n * @param data the response object.\r\n * @return any the item array.\r\n */\r\n public static getItemArray(data: any): any {\r\n if (data && data.value) {\r\n return data.value;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Create JSON string with properties.\r\n *\r\n * @param data the input data.\r\n * @return string the JSON string with properties.\r\n */\r\n public static createPropertiesJSONString(data: any): string {\r\n return JSON.stringify({\r\n properties: data\r\n });\r\n }\r\n\r\n /**\r\n * Creates an encoded authentication header.\r\n *\r\n * @param usersName name of user.\r\n * @param password the password.\r\n * @return the token string.\r\n */\r\n public static createEncodedAuthenticationHeader(userNames: string[], password: string, passwordEncryptedWith: string = null): string {\r\n const credentials: any = {\r\n ...Net.toUsernameAndDomain(userNames),\r\n password: password\r\n };\r\n if (!MsftSme.isNullOrWhiteSpace(passwordEncryptedWith)) {\r\n credentials.passwordEncryptedWith = passwordEncryptedWith;\r\n }\r\n return window.btoa(Net.utf8Encode(JSON.stringify(credentials)));\r\n }\r\n\r\n public static toUsernameAndDomain(value: string): { domain: string, username: string };\r\n public static toUsernameAndDomain(value: string[]): { domain: string, username: string };\r\n public static toUsernameAndDomain(value: string | string[]): { domain: string, username: string } {\r\n let username: string[];\r\n if (Array.isArray(value)) {\r\n username = value;\r\n } else if (value.indexOf('@') >= 0) {\r\n // domain is empty if UPN is used.\r\n username = [\"\", value];\r\n } else {\r\n username = value.split('\\\\');\r\n }\r\n\r\n return {\r\n // if only a username was provided, use '.' (shorthand for the locale machine hostname)\r\n domain: username.length === 1 ? '.' : username[0],\r\n username: username.length === 1 ? username[0] : username[1]\r\n };\r\n }\r\n\r\n /**\r\n * Creates an encrypted authentication header value.\r\n *\r\n * @param jwk the JWK (Json Web Key)\r\n * @param usersName name of user.\r\n * @param password the password.\r\n * @param logonUser the gateway user\r\n * @param expirationTimeInMs manage as token expiration time in milliseconds\r\n * @return the token string.\r\n */\r\n public static createEncryptedAuthenticationHeader(\r\n jwk: string,\r\n userNames: string[],\r\n password: string,\r\n logonUser: string,\r\n expirationTimeInMs: number\r\n ): Observable<string> {\r\n const credentials: Credentials = {\r\n ...Net.toUsernameAndDomain(userNames),\r\n password: password,\r\n passwordEncryptedWith: undefined\r\n };\r\n const passwordData = Net.createPasswordData(credentials, logonUser, expirationTimeInMs);\r\n return Crypto.encryptRsaSha1(jwk, passwordData)\r\n .pipe(\r\n map(encryptedPassword => {\r\n credentials.password = encryptedPassword;\r\n credentials.passwordEncryptedWith = 'JWK2';\r\n return window.btoa(Net.utf8Encode(JSON.stringify(credentials)));\r\n }),\r\n catchError(() => of(\r\n window.btoa(Net.utf8Encode(JSON.stringify(credentials)))\r\n ))\r\n );\r\n }\r\n\r\n private static createPasswordData(\r\n credentials: Credentials,\r\n logOnUser: string,\r\n expirationTimeInMs: number\r\n ): string {\r\n const millisecondsInHour = 60 * 60 * 1000;\r\n const hoursInYear = 365 * 24;\r\n\r\n const currentTimeStamp = Date.now();\r\n const expirationOffsetInMilliseconds = expirationTimeInMs || (hoursInYear * millisecondsInHour);\r\n\r\n const passwordData = {\r\n p: credentials.password,\r\n l: logOnUser,\r\n t: currentTimeStamp,\r\n e: currentTimeStamp + expirationOffsetInMilliseconds\r\n };\r\n\r\n return JSON.stringify(passwordData);\r\n }\r\n\r\n /**\r\n * Creates encrypted data for auth header\r\n * @param jwk the JSON web key to be used to encrypt data\r\n * @param data the data to be encrypted\r\n * @returns an encrypted string\r\n */\r\n public static createEncryptedExtensionDataHeader(jwk: string, data: string) {\r\n return Crypto.encryptRsaSha1(jwk, data)\r\n .pipe(map(encryptedData => window.btoa(Net.utf8Encode(encryptedData))));\r\n }\r\n\r\n /**\r\n * Create /api/nodes URL with relativeUrl.\r\n *\r\n * @param gatewayName The name of gateway.\r\n * @param nodeName The name of node.\r\n * @param relativeUrl The relative Url.\r\n */\r\n public static gatewayNodeApi(gatewayName: string, nodeName: string, relativeUrl?: string): string {\r\n\r\n if (!relativeUrl) {\r\n relativeUrl = '';\r\n }\r\n\r\n if (!relativeUrl.startsWith('/')) {\r\n relativeUrl = '/' + relativeUrl;\r\n }\r\n\r\n if (!nodeName) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n throw new Error(message.format('Net/gatewayNodeApi', 'nodeName'));\r\n }\r\n\r\n return Net.gatewayApi(gatewayName, `/nodes/${nodeName}${relativeUrl}`);\r\n }\r\n\r\n /**\r\n * Create /api URL with relativeUrl.\r\n *\r\n * @param gatewayName The name of gateway.\r\n * @param nodeName The name of node.\r\n * @param relativeUrl The relative Url.\r\n */\r\n public static gatewayApi(gatewayName: string, relativeUrl?: string): string {\r\n if (!gatewayName) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n throw new Error(message.format('Net/gatewayApi', 'gatewayName'));\r\n }\r\n\r\n if (!relativeUrl) {\r\n relativeUrl = '';\r\n }\r\n\r\n if (!relativeUrl.startsWith('/')) {\r\n relativeUrl = '/' + relativeUrl;\r\n }\r\n\r\n gatewayName = gatewayName.toLowerCase();\r\n if (!gatewayName.startsWith('http://') && !gatewayName.startsWith('https://')) {\r\n gatewayName = 'https://' + gatewayName;\r\n }\r\n\r\n return `${gatewayName}/api${relativeUrl}`;\r\n }\r\n\r\n /**\r\n * Get error message from ajax result or any other error result and optionally includes native error message.\r\n *\r\n * @param error the error context from Net.ajax.\r\n * @param options add additional optional error message: such as native error messages if possible\r\n * @return string the error message.\r\n */\r\n public static getErrorMessage(error: any, options?: ErrorMessageOptions): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const prefixFormat = strings.Error.PrefixFormat.message;\r\n const errorPrefix = options && options.errorPrefix;\r\n const xhr = error && error.xhr;\r\n const exception = error && error.exception;\r\n\r\n if (typeof error === 'string') {\r\n return errorPrefix ? prefixFormat.format(error) : error;\r\n }\r\n\r\n if (xhr && xhr.response) {\r\n const message = Net.parseErrorResponse(xhr.response, options);\r\n if (message) {\r\n return errorPrefix ? prefixFormat.format(message) : message;\r\n }\r\n }\r\n\r\n if (error && error.message) {\r\n return errorPrefix ? prefixFormat.format(error.message) : error.message;\r\n }\r\n\r\n if (exception && exception.message) {\r\n return errorPrefix ? prefixFormat.format(exception.message) : exception.message;\r\n }\r\n\r\n const statusText = xhr && xhr.statusText;\r\n if (statusText) {\r\n return errorPrefix ? prefixFormat.format(statusText) : statusText;\r\n }\r\n\r\n throw new Error(strings.Error.NoResponseError.message);\r\n }\r\n\r\n /**\r\n * Get error message from PowerShell ajax response.\r\n * Can be used by a PowerShell batch consumer to get error message in batch response.\r\n *\r\n * @param response the ajax response.\r\n * @return string the error message.\r\n */\r\n public static getPowerShellErrorMessage(response: any): string {\r\n const message = Net.parseErrorResponse(response);\r\n if (message) {\r\n return message;\r\n }\r\n\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n throw new Error(strings.Error.NoResponseError.message);\r\n }\r\n\r\n /**\r\n * Get error code from ajax result.\r\n *\r\n * @param error the error context from Net.ajax.\r\n * @return string the error code.\r\n */\r\n public static getErrorCode(error: any): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const err = error && error.xhr && error.xhr.response && error.xhr.response.error;\r\n if (!err) {\r\n throw new Error(strings.Error.NoResponseError.message);\r\n }\r\n\r\n if (err.code) {\r\n return err.code;\r\n }\r\n\r\n throw new Error(strings.Error.NoCode.message);\r\n }\r\n\r\n /**\r\n * Get error message from ajax result excluding error stackTrace\r\n *\r\n * @param error the error context from Net.ajax.\r\n * @return string the error.\r\n */\r\n public static getErrorMessageWithoutStacktrace(error: any): string {\r\n let errorMessage: string = Net.getErrorMessage(error);\r\n if (errorMessage) {\r\n const stackTraceIndex: number = errorMessage.toLowerCase().indexOf('stacktrace');\r\n if (stackTraceIndex > 0) {\r\n errorMessage = errorMessage.substring(0, stackTraceIndex);\r\n }\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Translates error code to string\r\n *\r\n * @param code the error code\r\n * @return string the related error string.\r\n */\r\n public static translateErrorCode(code: number): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const message: string = Net.errorCodeMap[code];\r\n if (message) {\r\n return strings.ErrorCode.Translated.message.format(message, code);\r\n }\r\n\r\n return strings.ErrorCode.Generic.message.format(code);\r\n }\r\n\r\n /**\r\n * Determine if this is an authorization login error. This code never work if it uses NTLM or Kerberos.\r\n *\r\n * @param error The ajax error object.\r\n */\r\n public static isUnauthorizedLogin(error: AjaxError): boolean {\r\n // new login 401 handling.\r\n const forbidden = error?.xhr?.response?.error?.forbidden;\r\n return error.status === HttpStatusCode.Unauthorized && forbidden && forbidden === 'UnauthorizedLogin';\r\n }\r\n\r\n /**\r\n * Determine if this is an authorization error.\r\n *\r\n * @param error The ajax error object.\r\n */\r\n public static isUnauthorized(error: AjaxError): boolean {\r\n const errorObject = error?.xhr?.response?.error;\r\n const forbidden = errorObject?.forbidden;\r\n if (forbidden) {\r\n // new 403 handling.\r\n return error.status === HttpStatusCode.Forbidden && forbidden === 'Unauthorized';\r\n } else {\r\n // legacy 401 handling. (this should be obsolete now)\r\n const unauthorized = errorObject?.unauthorized;\r\n return error.status === HttpStatusCode.Unauthorized && !(unauthorized && unauthorized === 'UnauthorizedLogin');\r\n }\r\n }\r\n\r\n /**\r\n * Determine if this is an forbidden error.\r\n *\r\n * @param error The ajax error object.\r\n */\r\n public static isForbidden(error: AjaxError): boolean {\r\n const forbidden = error?.xhr?.response?.error?.forbidden;\r\n if (forbidden) {\r\n // new forbidden.\r\n return error.status === HttpStatusCode.BadRequest && forbidden === 'Forbidden';\r\n } else {\r\n // legacy 403 handling.\r\n return error.status === HttpStatusCode.Forbidden;\r\n }\r\n }\r\n\r\n /**\r\n * Get property from an ErrorExtended error object\r\n *\r\n * @param error The ErrorExtended error object.\r\n * @param sourceName The source of the error.\r\n * @param propertyName The property to get from the error object.\r\n * @return The value of the property or null if the source doesn't match.\r\n */\r\n public static getErrorExtendedProperty<T1, T2>(error: ErrorExtended<T1>, sourceName: string, propertyName: string): T2 {\r\n if (error.extendedSource &&\r\n (error.extendedSource === sourceName || error.extendedSource.includes(sourceName))) {\r\n return <T2>error?.extended[propertyName];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Parse error message from standard ajax error and PowerShell errors.\r\n *\r\n * @param response the ajax response.\r\n * @return string the error message.\r\n */\r\n private static parseErrorResponse(response: any, options?: ErrorMessageOptions): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const err = response && response.error;\r\n if (err && err.message) {\r\n const errorMessage = err.message;\r\n\r\n if (options && options.addNativeError && err.detailRecord) {\r\n return strings.Error.AddNativeErrorCode.message.format(errorMessage, err.detailRecord.nativeErrorCode);\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n const psErrors: any[] = response && response.errors;\r\n if (psErrors && psErrors.length > 0) {\r\n if (psErrors.length === 1) {\r\n if (options && options.addNativeError && psErrors[0].detailRecord) {\r\n\r\n if (options && options.useRemoteExceptionMessage) {\r\n return strings.ErrorFormat.Single.Details.message.format(\r\n psErrors[0].errorType,\r\n psErrors[0].detailRecord.remoteExceptionMessage,\r\n psErrors[0].detailRecord.nativeErrorCode);\r\n }\r\n\r\n return strings.ErrorFormat.Single.Details.message.format(\r\n psErrors[0].errorType,\r\n psErrors[0].message,\r\n psErrors[0].detailRecord.nativeErrorCode);\r\n }\r\n\r\n if (options && options.useRemoteExceptionMessage && psErrors[0].detailRecord) {\r\n return strings.ErrorFormat.Single.message.format(\r\n psErrors[0].errorType,\r\n psErrors[0].detailRecord.remoteExceptionMessage);\r\n }\r\n return strings.ErrorFormat.Single.message.format(psErrors[0].errorType, psErrors[0].message);\r\n }\r\n\r\n let joinedMessage = '';\r\n for (let i = 0; i < psErrors.length; i++) {\r\n if (options && options.addNativeError && psErrors[i].detailRecord) {\r\n joinedMessage += strings.ErrorFormat.Multiple.Details.message.format(\r\n i + 1,\r\n psErrors[i].errorType,\r\n psErrors[i].message,\r\n psErrors[i].detailRecord.nativeErrorCode);\r\n } else if (options && options.useRemoteExceptionMessage && psErrors[i].detailRecord) {\r\n joinedMessage += strings.ErrorFormat.Multiple.message.format(\r\n i + 1,\r\n psErrors[i].errorType,\r\n psErrors[i].detailRecord.remoteExceptionMessage);\r\n } else {\r\n joinedMessage += strings.ErrorFormat.Multiple.message.format(i + 1, psErrors[i].errorType, psErrors[i].message);\r\n }\r\n }\r\n\r\n return joinedMessage;\r\n }\r\n\r\n if (response && response.exception) {\r\n return response.exception;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static splitByLength(text: string, length: number): string[] {\r\n const parts = new Array<string>();\r\n\r\n if (text === null) {\r\n return parts;\r\n }\r\n\r\n const totalLength = text.length;\r\n const count = Math.ceil(totalLength / length);\r\n\r\n if (count < 2) {\r\n parts.push(text);\r\n return parts;\r\n }\r\n\r\n const lastPart = count - 1;\r\n let position = 0;\r\n\r\n for (let i = 0; i < lastPart; i++, position += length) {\r\n parts.push(text.substring(position, length));\r\n }\r\n\r\n parts.push(text.substring(position));\r\n\r\n return parts;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/data/net.ts"],"names":[],"mappings":"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","file":"net.js","sourcesContent":["import { Observable, of } from 'rxjs';\r\nimport { AjaxError } from 'rxjs/ajax';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { Strings } from '../generated/strings';\r\nimport { Crypto } from './crypto';\r\nimport { ErrorExtended } from './error-extended';\r\nimport { HttpStatusCode } from './http-constants';\r\n\r\n/**\r\n * Escape binary string code\r\n * @param data A value representing original binary string code\r\n */\r\ndeclare function escape(data: string): string;\r\n\r\n/**\r\n * Unescape non-binary string code\r\n * @param data A value representing original non-binary string code\r\n */\r\ndeclare function unescape(data: string): string;\r\n\r\n/**\r\n * The options interface of getErrorMessage function\r\n */\r\nexport interface ErrorMessageOptions {\r\n /**\r\n * adding additional error message\r\n * addNativeError: native error code\r\n */\r\n addNativeError?: boolean;\r\n\r\n /**\r\n * Add error prefix for output string.\r\n *\r\n * \"Error: {error message}\"\r\n */\r\n errorPrefix?: boolean;\r\n\r\n /**\r\n * Use the detailRecordremoteExceptionMessage on the error instead of detailRecord.message\r\n */\r\n useRemoteExceptionMessage?: boolean;\r\n}\r\n\r\ninterface Credentials {\r\n username: string;\r\n password: string;\r\n passwordEncryptedWith: string;\r\n domain: string;\r\n}\r\n\r\n/**\r\n * Net communication class.\r\n * @dynamic\r\n */\r\nexport class Net {\r\n private static cachedErrorCodeMap: { [index: number]: string };\r\n private static get errorCodeMap(): { [index: number]: string } {\r\n if (!Net.cachedErrorCodeMap) {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n Net.cachedErrorCodeMap = {\r\n // added from https://msdn.microsoft.com/en-us/library/aa392154(v=vs.85).aspx\r\n 0: strings.ErrorCode.Code0.message,\r\n 5: strings.ErrorCode.Code5.message,\r\n 50: strings.ErrorCode.Code50.message,\r\n 87: strings.ErrorCode.Code87.message,\r\n 110: strings.ErrorCode.Code110.message,\r\n 1323: strings.ErrorCode.Code1323.message,\r\n 1326: strings.ErrorCode.Code1326.message,\r\n 1355: strings.ErrorCode.Code1355.message,\r\n 2224: strings.ErrorCode.Code2224.message,\r\n 2691: strings.ErrorCode.Code2691.message,\r\n 2692: strings.ErrorCode.Code2692.message,\r\n 0x80041087: strings.ErrorCode.Code8004108.message\r\n };\r\n }\r\n\r\n return Net.cachedErrorCodeMap;\r\n }\r\n\r\n /**\r\n * The static definition of Web API URLs.\r\n */\r\n public static apiVersionParam = 'api-version';\r\n public static apiVersion20190201 = '2019-02-01';\r\n public static apiRoot = '/api/{0}';\r\n public static batch = '/batch';\r\n public static streamSocket = '{0}/api/streams/socket/{1}';\r\n public static downlevel = 'features/downlevelSupport';\r\n public static downlevelInstall = Net.downlevel + '/install';\r\n public static downlevelComponents = Net.downlevel + '/components';\r\n public static extensionsSettings = '/settings/extension';\r\n public static installedExtensions = '/settings/extension/installed';\r\n public static extensions = '/extensions';\r\n public static updatesSettings = '/settings/updates';\r\n public static isExtensionUpdateAvailable = Net.extensions + '/isUpdateAvailable';\r\n public static cimClass = 'features/cim/namespaces/{0}/classes/{1}';\r\n public static cimQuery = 'features/cim/query';\r\n public static cimInvoke = '/methods/{0}/invoke';\r\n public static powerShellApiInvokeCommand = 'features/powershellApi/invokeCommand';\r\n public static powerShellApiSessions = 'features/powershellApi/pssessions/{0}';\r\n public static powerShellApiExecuteCommand: string = Net.powerShellApiSessions + '/invokeCommand';\r\n public static powerShellApiRetrieveOutput: string = Net.powerShellApiSessions + '?$expand=output';\r\n public static powerShellApiCancelCommand: string = Net.powerShellApiSessions + '/cancel';\r\n public static powerShellConsoleSessions = 'features/powershellConsole/pssessions/{0}';\r\n public static powerShellConsoleExecuteCommand: string = Net.powerShellConsoleSessions + '/invokeCommand';\r\n public static powerShellConsoleRetrieveOutput: string = Net.powerShellConsoleSessions + '?$expand=output';\r\n public static stopCommand: string = Net.powerShellConsoleSessions + '/cancel';\r\n public static tabCommand: string = Net.powerShellConsoleSessions + '/tab';\r\n public static userProfile = '/settings/user';\r\n public static applicationSettings = '/settings/all';\r\n public static adminSettings = '/settings/admin';\r\n public static user = '/user';\r\n\r\n public static fileTransferFormat = 'features/fileTransfer/files/{0}';\r\n public static fileTransferDownloadPost: string = Net.fileTransferFormat + '/download';\r\n public static fileTransferUpload: string = Net.fileTransferFormat + '/uploadlink';\r\n\r\n public static jeaFeature = 'features/jea/endpoint';\r\n public static jeaExport = Net.jeaFeature + '/export';\r\n\r\n public static gateway = '/gateway';\r\n public static gatewayAccessCheck = Net.gateway + '/access/check';\r\n public static gatewayStatus = Net.gateway + '/status';\r\n\r\n // {HttpMethod} {relativeNodeUrl} HTTP/1.1\r\n public static multiPartCallBodyUrl = '{0} {1} HTTP/1.1';\r\n\r\n /**\r\n * Gateway version 2.0.0 Node API set.\r\n */\r\n /**\r\n * WinREST service on Windows platform.\r\n */\r\n public static serviceWinRest = 'WinREST';\r\n\r\n /**\r\n * WinStream service on Windows platform.\r\n */\r\n public static serviceWinStream = 'WinStream';\r\n\r\n /**\r\n * LinuxBase on Linux platform.\r\n */\r\n public static serviceLinuxBase = 'LinuxBase';\r\n\r\n /**\r\n * ActiveDirectory on WinREST.\r\n */\r\n public static controllerActiveDirectory = 'ActiveDirectory';\r\n\r\n /**\r\n * CIM on WinREST.\r\n */\r\n public static controllerCim = 'CIM';\r\n\r\n /**\r\n * Extensions on WinREST.\r\n */\r\n public static controllerExtensions = 'Extensions';\r\n\r\n /**\r\n * FileTransfer on WinREST.\r\n */\r\n public static controllerFileTransfer = 'FileTransfer';\r\n\r\n /**\r\n * JEA on WinREST.\r\n */\r\n public static controllerJea = 'JEA';\r\n\r\n /**\r\n * Nuget on WinREST.\r\n */\r\n public static controllerNuget = 'Nuget';\r\n\r\n /**\r\n * PerformanceCounter on WinREST.\r\n */\r\n public static controllerPerformanceCounter = 'PerformanceCounter';\r\n\r\n /**\r\n * PowerShell on WinREST.\r\n */\r\n public static controllerPowerShell = 'PowerShell';\r\n\r\n /**\r\n * PseudoConsole on WinStream.\r\n */\r\n public static controllerPseudoConsole = 'PseudoConsole';\r\n\r\n /**\r\n * Ssh on LinuxBase.\r\n */\r\n public static controllerSsh = 'Ssh';\r\n\r\n /**\r\n * SshFile on LinuxBase.\r\n */\r\n public static controllerSshFile = 'SshFile';\r\n\r\n /**\r\n * State on WinREST.\r\n */\r\n public static controllerState = 'State';\r\n\r\n /**\r\n * Stream on WinStream.\r\n */\r\n public static controllerStream = 'Stream';\r\n\r\n /**\r\n * Stream on LinuxBase.\r\n */\r\n public static controllerStreamSsh = 'StreamSsh';\r\n\r\n /**\r\n * Tcp on WinStream and LinuxBase.\r\n */\r\n public static controllerTcp = 'Tcp';\r\n\r\n /**\r\n * Wdac on WinREST.\r\n */\r\n public static controllerWdac = 'Wdac';\r\n\r\n /**\r\n * Socket URL on WinStream.\r\n */\r\n public static streamSocketV200 = '{0}/api/services/' + Net.serviceWinStream + '/' + Net.controllerStream + '/socket/{1}';\r\n\r\n /**\r\n * Socket URL on LinuxBase.\r\n */\r\n public static sshStreamSocket = '{0}/api/services/' + Net.serviceLinuxBase + '/' + Net.controllerStreamSsh + '/socket';\r\n\r\n /**\r\n * Encodes the specified data as Base64-encoded URL.\r\n *\r\n * If the resultant URL is longer than 260 characters, it is converted to a\r\n * relative path where each segment (e.g. '/') defines the character length boundary.\r\n * The HTTP.SYS subsystem in Windows does now allow a URL segment larger than 260\r\n * characters without changing a Registry key and restarting the OS.\r\n * @param data The data to be encoded.\r\n * @return An encoded Base64 URL, potentially segmented by '/' every 260 characters.\r\n */\r\n public static toSegmentedBase64Url(data: string): string {\r\n const MAX_HTTP_SYS_URL_SEGMENT_LENGTH = 260;\r\n const base64Url = Net.utf8Base64UrlEncode(data);\r\n const parts = Net.splitByLength(base64Url, MAX_HTTP_SYS_URL_SEGMENT_LENGTH);\r\n return parts.join('/');\r\n }\r\n\r\n /**\r\n * Update URL with api-version=20190201.\r\n * @param url the original URL\r\n * @returns new url string added version parameter.\r\n */\r\n public static updateApiVersion20190201(url: string): string {\r\n const index = url.indexOf('?');\r\n const prefix = index > 0 ? '&' : '?';\r\n if (index > 0 && url.indexOf(`${Net.apiVersionParam}=`) > 0) {\r\n return url;\r\n }\r\n\r\n return `${url}${prefix}${Net.apiVersionParam}=${Net.apiVersion20190201}`;\r\n }\r\n\r\n /**\r\n * Convert IPV6 address to literal format.\r\n *\r\n * @param ipv6Address the ipv6 address format.\r\n */\r\n public static convertIPv6ToLiteral(ipv6Address: string): string {\r\n let data = '';\r\n for (let i = 0; i < ipv6Address.length; i++) {\r\n let ch = ipv6Address.charAt(i);\r\n if (ch === ':') {\r\n ch = '-';\r\n } else if (ch === '%') {\r\n ch = 's';\r\n }\r\n\r\n data += ch;\r\n }\r\n\r\n return `${data}.ipv6-literal.net`;\r\n }\r\n\r\n /**\r\n * Convert IPV6 address to literal format.\r\n *\r\n * @param ipv6Address the ipv6 address format.\r\n */\r\n public static convertLiteralToIPv6(literal: string): string {\r\n const firstSegment = literal.split('.ipv6-literal.net')[0];\r\n if (!firstSegment) {\r\n throw new Error('Not recognized as an IPv6 literal format: \\'{0}\\'!'.format(literal || 'null'));\r\n }\r\n\r\n let data = '';\r\n for (let i = 0; i < firstSegment.length; i++) {\r\n let ch = firstSegment.charAt(i);\r\n if (ch === '-') {\r\n ch = ':';\r\n } else if (ch === 's') {\r\n ch = '%';\r\n }\r\n\r\n data += ch;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Encode a string with base64url.\r\n *\r\n * @param data the input string.\r\n * @return string the encoded string.\r\n */\r\n public static base64urlEncode(data: string): string {\r\n // REF: https://tools.ietf.org/html/rfc4648#section-5\r\n const base64 = window.btoa(data);\r\n let base64Url = '';\r\n\r\n for (let i = 0; i < base64.length; i++) {\r\n const ch = base64.charAt(i);\r\n\r\n switch (ch) {\r\n case '+':\r\n base64Url += '-';\r\n break;\r\n case '/':\r\n base64Url += '_';\r\n break;\r\n case '=':\r\n return base64Url;\r\n default:\r\n base64Url += ch;\r\n break;\r\n }\r\n }\r\n\r\n return base64Url;\r\n }\r\n\r\n /**\r\n * Decode a base64 url string.\r\n *\r\n * @param data the string to decode.\r\n * @return string the decoded string.\r\n */\r\n public static base64urlDecode(data: string): string {\r\n while (data.length % 4 !== 0) {\r\n data += '=';\r\n }\r\n\r\n data = data.replaceAll('-', '+').replaceAll('_', '/');\r\n return window.atob(data);\r\n }\r\n\r\n /**\r\n * Encode utf8 string.\r\n *\r\n * @param data the unencoded string.\r\n */\r\n public static utf8Encode(data: string): string {\r\n return unescape(encodeURIComponent(data));\r\n }\r\n\r\n /**\r\n * Decode utf8 string.\r\n *\r\n * @param data the encoded UTF8 string.\r\n */\r\n public static utf8Decode(data: string): string {\r\n return decodeURIComponent(escape(data));\r\n }\r\n\r\n /**\r\n * Encode with utf8 (first) and base64url (second).\r\n *\r\n * @param data data the original string to encode. The string can be full unicode character string.\r\n * @return string the encoded string used on a part of URL.\r\n */\r\n public static utf8Base64UrlEncode(data: string): string {\r\n const utf8: string = Net.utf8Encode(data);\r\n return Net.base64urlEncode(utf8);\r\n }\r\n\r\n /**\r\n * Decode with utf8 (second) and base64url (first).\r\n *\r\n * @param data data the encoded URL string to decode.\r\n * @return string the decoded unicode string.\r\n */\r\n public static utf8Base64UrlDecode(data: string): string {\r\n const utf8: string = Net.base64urlDecode(data);\r\n return Net.utf8Decode(utf8);\r\n }\r\n\r\n /**\r\n * Create a key name from key value pairs.\r\n *\r\n * @param properties the key value pairs.\r\n * @return string the key name.\r\n */\r\n public static cimCreateName(properties: any): string {\r\n const data: string = JSON.stringify(properties);\r\n const utf8: string = Net.utf8Encode(data);\r\n return Net.base64urlEncode(utf8);\r\n }\r\n\r\n /**\r\n * Get properties of the item from the response.\r\n *\r\n * @param data the item in the response object.\r\n * @return any the properties.\r\n */\r\n public static getItemProperties(data: any): any {\r\n if (data && data.properties) {\r\n return data.properties;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Get properties of first item from the response.\r\n *\r\n * @param data the response object.\r\n * @return any the properties.\r\n */\r\n public static getFirstProperties(data: any): any {\r\n if (data && data.value && data.value.length) {\r\n if (data.value[0].properties) {\r\n return data.value[0].properties;\r\n }\r\n } else if (data && data.length) {\r\n return data[0];\r\n }\r\n\r\n return Net.getItemProperties(data);\r\n }\r\n\r\n /**\r\n * Get array of items from the response.\r\n *\r\n * @param data the response object.\r\n * @return any the item array.\r\n */\r\n public static getItemArray(data: any): any {\r\n if (data && data.value) {\r\n return data.value;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Create JSON string with properties.\r\n *\r\n * @param data the input data.\r\n * @return string the JSON string with properties.\r\n */\r\n public static createPropertiesJSONString(data: any): string {\r\n return JSON.stringify({\r\n properties: data\r\n });\r\n }\r\n\r\n /**\r\n * Creates an encoded authentication header.\r\n *\r\n * @param usersName name of user.\r\n * @param password the password.\r\n * @return the token string.\r\n */\r\n public static createEncodedAuthenticationHeader(userNames: string[], password: string, passwordEncryptedWith: string = null): string {\r\n const credentials: any = {\r\n ...Net.toUsernameAndDomain(userNames),\r\n password: password\r\n };\r\n if (!MsftSme.isNullOrWhiteSpace(passwordEncryptedWith)) {\r\n credentials.passwordEncryptedWith = passwordEncryptedWith;\r\n }\r\n return window.btoa(Net.utf8Encode(JSON.stringify(credentials)));\r\n }\r\n\r\n public static toUsernameAndDomain(value: string): { domain: string, username: string };\r\n public static toUsernameAndDomain(value: string[]): { domain: string, username: string };\r\n public static toUsernameAndDomain(value: string | string[]): { domain: string, username: string } {\r\n let username: string[];\r\n if (Array.isArray(value)) {\r\n username = value;\r\n } else if (value.indexOf('@') >= 0) {\r\n // domain is empty if UPN is used.\r\n username = [\"\", value];\r\n } else {\r\n username = value.split('\\\\');\r\n }\r\n\r\n return {\r\n // if only a username was provided, use '.' (shorthand for the locale machine hostname)\r\n domain: username.length === 1 ? '.' : username[0],\r\n username: username.length === 1 ? username[0] : username[1]\r\n };\r\n }\r\n\r\n /**\r\n * Creates an encrypted authentication header value.\r\n *\r\n * @param jwk the JWK (Json Web Key)\r\n * @param usersName name of user.\r\n * @param password the password.\r\n * @param logonUser the gateway user\r\n * @param expirationTimeInMs manage as token expiration time in milliseconds\r\n * @return the token string.\r\n */\r\n public static createEncryptedAuthenticationHeader(\r\n jwk: string,\r\n userNames: string[],\r\n password: string,\r\n logonUser: string,\r\n expirationTimeInMs: number\r\n ): Observable<string> {\r\n const credentials: Credentials = {\r\n ...Net.toUsernameAndDomain(userNames),\r\n password: password,\r\n passwordEncryptedWith: undefined\r\n };\r\n const passwordData = Net.createPasswordData(credentials, logonUser, expirationTimeInMs);\r\n return Crypto.encryptRsaSha1(jwk, passwordData)\r\n .pipe(\r\n map(encryptedPassword => {\r\n credentials.password = encryptedPassword;\r\n credentials.passwordEncryptedWith = 'JWK2';\r\n return window.btoa(Net.utf8Encode(JSON.stringify(credentials)));\r\n }),\r\n catchError(() => of(\r\n window.btoa(Net.utf8Encode(JSON.stringify(credentials)))\r\n ))\r\n );\r\n }\r\n\r\n private static createPasswordData(\r\n credentials: Credentials,\r\n logOnUser: string,\r\n expirationTimeInMs: number\r\n ): string {\r\n const millisecondsInHour = 60 * 60 * 1000;\r\n const hoursInYear = 365 * 24;\r\n\r\n const currentTimeStamp = Date.now();\r\n const expirationOffsetInMilliseconds = expirationTimeInMs || (hoursInYear * millisecondsInHour);\r\n\r\n const passwordData = {\r\n p: credentials.password,\r\n l: logOnUser,\r\n t: currentTimeStamp,\r\n e: currentTimeStamp + expirationOffsetInMilliseconds\r\n };\r\n\r\n return JSON.stringify(passwordData);\r\n }\r\n\r\n /**\r\n * Creates encrypted data for auth header\r\n * @param jwk the JSON web key to be used to encrypt data\r\n * @param data the data to be encrypted\r\n * @returns an encrypted string\r\n */\r\n public static createEncryptedExtensionDataHeader(jwk: string, data: string) {\r\n return Crypto.encryptRsaSha1(jwk, data)\r\n .pipe(map(encryptedData => window.btoa(Net.utf8Encode(encryptedData))));\r\n }\r\n\r\n /**\r\n * Create /api/nodes URL with relativeUrl.\r\n *\r\n * @param gatewayName The name of gateway.\r\n * @param nodeName The name of node.\r\n * @param relativeUrl The relative Url.\r\n */\r\n public static gatewayNodeApi(gatewayName: string, nodeName: string, relativeUrl?: string): string {\r\n\r\n if (!relativeUrl) {\r\n relativeUrl = '';\r\n }\r\n\r\n if (!relativeUrl.startsWith('/')) {\r\n relativeUrl = '/' + relativeUrl;\r\n }\r\n\r\n if (!nodeName) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n throw new Error(message.format('Net/gatewayNodeApi', 'nodeName'));\r\n }\r\n\r\n return Net.gatewayApi(gatewayName, `/nodes/${nodeName}${relativeUrl}`);\r\n }\r\n\r\n /**\r\n * Create /api URL with relativeUrl.\r\n *\r\n * @param gatewayName The name of gateway.\r\n * @param nodeName The name of node.\r\n * @param relativeUrl The relative Url.\r\n */\r\n public static gatewayApi(gatewayName: string, relativeUrl?: string): string {\r\n if (!gatewayName) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n throw new Error(message.format('Net/gatewayApi', 'gatewayName'));\r\n }\r\n\r\n if (!relativeUrl) {\r\n relativeUrl = '';\r\n }\r\n\r\n if (!relativeUrl.startsWith('/')) {\r\n relativeUrl = '/' + relativeUrl;\r\n }\r\n\r\n gatewayName = gatewayName.toLowerCase();\r\n if (!gatewayName.startsWith('http://') && !gatewayName.startsWith('https://')) {\r\n gatewayName = 'https://' + gatewayName;\r\n }\r\n\r\n return `${gatewayName}/api${relativeUrl}`;\r\n }\r\n\r\n /**\r\n * Get error message from ajax result or any other error result and optionally includes native error message.\r\n *\r\n * @param error the error context from Net.ajax.\r\n * @param options add additional optional error message: such as native error messages if possible\r\n * @return string the error message.\r\n */\r\n public static getErrorMessage(error: any, options?: ErrorMessageOptions): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const prefixFormat = strings.Error.PrefixFormat.message;\r\n const errorPrefix = options && options.errorPrefix;\r\n const xhr = error && error.xhr;\r\n const exception = error && error.exception;\r\n\r\n if (typeof error === 'string') {\r\n return errorPrefix ? prefixFormat.format(error) : error;\r\n }\r\n\r\n if (xhr && xhr.response) {\r\n const message = Net.parseErrorResponse(xhr.response, options);\r\n if (message) {\r\n return errorPrefix ? prefixFormat.format(message) : message;\r\n }\r\n }\r\n\r\n if (error && error.message) {\r\n const errorMessage = errorPrefix ? prefixFormat.format(error.message) : error.message;\r\n if(error.details && Array.isArray(error.details)) {\r\n // Add details to error message.\r\n return this.parseErrorDetails(error.details, errorMessage);\r\n }\r\n return errorMessage;\r\n }\r\n\r\n if (exception && exception.message) {\r\n return errorPrefix ? prefixFormat.format(exception.message) : exception.message;\r\n }\r\n\r\n const statusText = xhr && xhr.statusText;\r\n if (statusText) {\r\n return errorPrefix ? prefixFormat.format(statusText) : statusText;\r\n }\r\n\r\n throw new Error(strings.Error.NoResponseError.message);\r\n }\r\n\r\n private static parseErrorDetails(details: any, message: string): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const detailsText = strings.Error.Details.text;\r\n const errorMessages = details.map((detail) => {\r\n try {\r\n const parsedDetail = JSON.parse(detail.message);\r\n if (parsedDetail?.error?.message) {\r\n return parsedDetail.error.message;\r\n }\r\n } catch (error) {\r\n // The message is not valid JSON\r\n return detail.message;\r\n }\r\n });\r\n // Joining the error messages with newline characters\r\n const detailsMessage = `${detailsText}\\n${errorMessages.join('\\n\\n')}`;\r\n // Joining the actual error message with details\r\n return `${message}\\n\\n${detailsMessage}`;\r\n }\r\n\r\n /**\r\n * Get error message from PowerShell ajax response.\r\n * Can be used by a PowerShell batch consumer to get error message in batch response.\r\n *\r\n * @param response the ajax response.\r\n * @return string the error message.\r\n */\r\n public static getPowerShellErrorMessage(response: any): string {\r\n const message = Net.parseErrorResponse(response);\r\n if (message) {\r\n return message;\r\n }\r\n\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n throw new Error(strings.Error.NoResponseError.message);\r\n }\r\n\r\n /**\r\n * Get error code from ajax result.\r\n *\r\n * @param error the error context from Net.ajax.\r\n * @return string the error code.\r\n */\r\n public static getErrorCode(error: any): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const err = error && error.xhr && error.xhr.response && error.xhr.response.error;\r\n if (!err) {\r\n throw new Error(strings.Error.NoResponseError.message);\r\n }\r\n\r\n if (err.code) {\r\n return err.code;\r\n }\r\n\r\n throw new Error(strings.Error.NoCode.message);\r\n }\r\n\r\n /**\r\n * Get error message from ajax result excluding error stackTrace\r\n *\r\n * @param error the error context from Net.ajax.\r\n * @return string the error.\r\n */\r\n public static getErrorMessageWithoutStacktrace(error: any): string {\r\n let errorMessage: string = Net.getErrorMessage(error);\r\n if (errorMessage) {\r\n const stackTraceIndex: number = errorMessage.toLowerCase().indexOf('stacktrace');\r\n if (stackTraceIndex > 0) {\r\n errorMessage = errorMessage.substring(0, stackTraceIndex);\r\n }\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Translates error code to string\r\n *\r\n * @param code the error code\r\n * @return string the related error string.\r\n */\r\n public static translateErrorCode(code: number): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const message: string = Net.errorCodeMap[code];\r\n if (message) {\r\n return strings.ErrorCode.Translated.message.format(message, code);\r\n }\r\n\r\n return strings.ErrorCode.Generic.message.format(code);\r\n }\r\n\r\n /**\r\n * Determine if this is an authorization login error. This code never work if it uses NTLM or Kerberos.\r\n *\r\n * @param error The ajax error object.\r\n */\r\n public static isUnauthorizedLogin(error: AjaxError): boolean {\r\n // new login 401 handling.\r\n const forbidden = error?.xhr?.response?.error?.forbidden;\r\n return error.status === HttpStatusCode.Unauthorized && forbidden && forbidden === 'UnauthorizedLogin';\r\n }\r\n\r\n /**\r\n * Determine if this is an authorization error.\r\n *\r\n * @param error The ajax error object.\r\n */\r\n public static isUnauthorized(error: AjaxError): boolean {\r\n const errorObject = error?.xhr?.response?.error;\r\n const forbidden = errorObject?.forbidden;\r\n if (forbidden) {\r\n // new 403 handling.\r\n return error.status === HttpStatusCode.Forbidden && forbidden === 'Unauthorized';\r\n } else {\r\n // legacy 401 handling. (this should be obsolete now)\r\n const unauthorized = errorObject?.unauthorized;\r\n return error.status === HttpStatusCode.Unauthorized && !(unauthorized && unauthorized === 'UnauthorizedLogin');\r\n }\r\n }\r\n\r\n /**\r\n * Determine if this is an forbidden error.\r\n *\r\n * @param error The ajax error object.\r\n */\r\n public static isForbidden(error: AjaxError): boolean {\r\n const forbidden = error?.xhr?.response?.error?.forbidden;\r\n if (forbidden) {\r\n // new forbidden.\r\n return error.status === HttpStatusCode.BadRequest && forbidden === 'Forbidden';\r\n } else {\r\n // legacy 403 handling.\r\n return error.status === HttpStatusCode.Forbidden;\r\n }\r\n }\r\n\r\n /**\r\n * Get property from an ErrorExtended error object\r\n *\r\n * @param error The ErrorExtended error object.\r\n * @param sourceName The source of the error.\r\n * @param propertyName The property to get from the error object.\r\n * @return The value of the property or null if the source doesn't match.\r\n */\r\n public static getErrorExtendedProperty<T1, T2>(error: ErrorExtended<T1>, sourceName: string, propertyName: string): T2 {\r\n if (error.extendedSource &&\r\n (error.extendedSource === sourceName || error.extendedSource.includes(sourceName))) {\r\n return <T2>error?.extended[propertyName];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Parse error message from standard ajax error and PowerShell errors.\r\n *\r\n * @param response the ajax response.\r\n * @return string the error message.\r\n */\r\n private static parseErrorResponse(response: any, options?: ErrorMessageOptions): string {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core;\r\n const err = response && response.error;\r\n if (err && err.message) {\r\n const errorMessage = err.message;\r\n\r\n if (options && options.addNativeError && err.detailRecord) {\r\n return strings.Error.AddNativeErrorCode.message.format(errorMessage, err.detailRecord.nativeErrorCode);\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n const psErrors: any[] = response && response.errors;\r\n if (psErrors && psErrors.length > 0) {\r\n if (psErrors.length === 1) {\r\n if (options && options.addNativeError && psErrors[0].detailRecord) {\r\n\r\n if (options && options.useRemoteExceptionMessage) {\r\n return strings.ErrorFormat.Single.Details.message.format(\r\n psErrors[0].errorType,\r\n psErrors[0].detailRecord.remoteExceptionMessage,\r\n psErrors[0].detailRecord.nativeErrorCode);\r\n }\r\n\r\n return strings.ErrorFormat.Single.Details.message.format(\r\n psErrors[0].errorType,\r\n psErrors[0].message,\r\n psErrors[0].detailRecord.nativeErrorCode);\r\n }\r\n\r\n if (options && options.useRemoteExceptionMessage && psErrors[0].detailRecord) {\r\n return strings.ErrorFormat.Single.message.format(\r\n psErrors[0].errorType,\r\n psErrors[0].detailRecord.remoteExceptionMessage);\r\n }\r\n return strings.ErrorFormat.Single.message.format(psErrors[0].errorType, psErrors[0].message);\r\n }\r\n\r\n let joinedMessage = '';\r\n for (let i = 0; i < psErrors.length; i++) {\r\n if (options && options.addNativeError && psErrors[i].detailRecord) {\r\n joinedMessage += strings.ErrorFormat.Multiple.Details.message.format(\r\n i + 1,\r\n psErrors[i].errorType,\r\n psErrors[i].message,\r\n psErrors[i].detailRecord.nativeErrorCode);\r\n } else if (options && options.useRemoteExceptionMessage && psErrors[i].detailRecord) {\r\n joinedMessage += strings.ErrorFormat.Multiple.message.format(\r\n i + 1,\r\n psErrors[i].errorType,\r\n psErrors[i].detailRecord.remoteExceptionMessage);\r\n } else {\r\n joinedMessage += strings.ErrorFormat.Multiple.message.format(i + 1, psErrors[i].errorType, psErrors[i].message);\r\n }\r\n }\r\n\r\n return joinedMessage;\r\n }\r\n\r\n if (response && response.exception) {\r\n return response.exception;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static splitByLength(text: string, length: number): string[] {\r\n const parts = new Array<string>();\r\n\r\n if (text === null) {\r\n return parts;\r\n }\r\n\r\n const totalLength = text.length;\r\n const count = Math.ceil(totalLength / length);\r\n\r\n if (count < 2) {\r\n parts.push(text);\r\n return parts;\r\n }\r\n\r\n const lastPart = count - 1;\r\n let position = 0;\r\n\r\n for (let i = 0; i < lastPart; i++, position += length) {\r\n parts.push(text.substring(position, length));\r\n }\r\n\r\n parts.push(text.substring(position));\r\n\r\n return parts;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/data/websocket-stream.ts"],"names":[],"mappings":"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","file":"websocket-stream.d.ts","sourcesContent":["import { Observer, ReplaySubject } from 'rxjs';\r\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { GatewayConnection } from './gateway-connection';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\n\r\n/**\r\n * The state of Websocket connection.\r\n */\r\nexport enum WebsocketStreamConnectionState {\r\n /**\r\n * Initializing.\r\n */\r\n Initializing = 1,\r\n\r\n /**\r\n * Connected.\r\n */\r\n Connected,\r\n\r\n /**\r\n * Disconnected.\r\n */\r\n Disconnected,\r\n\r\n /**\r\n * Failed.\r\n */\r\n Failed,\r\n\r\n /**\r\n * Not configured.\r\n */\r\n NotConfigured\r\n}\r\n\r\n/**\r\n * The state of Websocket stream packet.\r\n */\r\nexport enum WebsocketStreamState {\r\n /**\r\n * Empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error packet. (reserved for socket level error communication if any)\r\n */\r\n Error\r\n}\r\n\r\n/**\r\n * The request state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataRequestState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Normal,\r\n\r\n /**\r\n * Cancel\r\n */\r\n Cancel\r\n}\r\n\r\n/**\r\n * The response state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Completed packet.\r\n */\r\n Completed,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error\r\n */\r\n Error,\r\n\r\n /**\r\n * Cancelled\r\n */\r\n Cancelled\r\n}\r\n\r\n/**\r\n * Websocket Stream data target object.\r\n */\r\nexport interface WebsocketStreamDataTarget {\r\n /**\r\n * The node name.\r\n */\r\n nodeName: string;\r\n\r\n /**\r\n * The headers equivalent to REST API.\r\n */\r\n headers: MsftSme.StringMap<string>;\r\n}\r\n\r\nexport enum WebsocketStreamName {\r\n CimStreamName = 'SME-CIM',\r\n PowerShellStreamName = 'SME-PowerShell',\r\n SshStreamName = 'SME-SSH',\r\n SystemStreamName = 'System'\r\n};\r\n\r\n/**\r\n * The request/response packet of Websocket Stream to the gateway.\r\n */\r\nexport interface WebsocketStreamPacket {\r\n /**\r\n * The identification string of protocol.\r\n *\r\n */\r\n streamName: WebsocketStreamName;\r\n\r\n /**\r\n * The state of packet.\r\n */\r\n state: WebsocketStreamState;\r\n\r\n /**\r\n * The request/response/error data.\r\n */\r\n data: any;\r\n\r\n /**\r\n * The options (reserved)\r\n */\r\n options?: any;\r\n}\r\n\r\n/**\r\n * Websocket stream handler.\r\n */\r\nexport interface WebsocketStreamHandler {\r\n /**\r\n * Call reset() when connection was lost to reset context.\r\n */\r\n reset(): void;\r\n\r\n /**\r\n * Call process() when message was received for the data type.\r\n */\r\n process(message: any): void;\r\n}\r\n\r\n/**\r\n * Websocket Stream Processor class.\r\n */\r\nexport class WebsocketStreamProcessor<TData, TOptions = void> {\r\n /**\r\n * Holding result if waitCompleted option is specified for multiple instances.\r\n */\r\n public response?: any;\r\n\r\n /**\r\n * Track closing state.\r\n */\r\n public closing?: boolean;\r\n\r\n /**\r\n * Track closed state.\r\n */\r\n public closed?: boolean;\r\n\r\n /**\r\n * Track observer end call by unsubscribe or observer completion.\r\n */\r\n public end?: boolean;\r\n\r\n /**\r\n * Sent once.\r\n */\r\n public sendOnce?: boolean;\r\n\r\n /**\r\n * Initializes a new instance of the CimProcessor class.\r\n * @param observer Observer to send back result to caller.\r\n * @param target Stream Target object.\r\n * @param options Options for Cim stream query.\r\n */\r\n constructor(public observer: Observer<TData>, public target: WebsocketStreamDataTarget, public options?: TOptions) {\r\n }\r\n\r\n /**\r\n * Push the result to the observer.\r\n * @param result the result of TData.\r\n */\r\n public next(result: TData): void {\r\n this.observer?.next(result);\r\n this.sendOnce = true;\r\n }\r\n\r\n /**\r\n * Complete the observer.\r\n */\r\n public complete(): void {\r\n this.closing = true;\r\n this.observer?.complete();\r\n\r\n this.closed = true;\r\n }\r\n\r\n /**\r\n * Error the observer.\r\n */\r\n public error(error: any): void {\r\n this.closing = true;\r\n this.observer?.error(error);\r\n this.closed = true;\r\n }\r\n}\r\n\r\n/**\r\n * The Websocket stream class.\r\n */\r\nexport class WebsocketStream {\r\n private static readonly logSourceName = 'WebsocketStream';\r\n private static maxConnectionRetries = 10;\r\n private static reconnectWaitTime = 500;\r\n public socketStateRaw: WebsocketStreamConnectionState = WebsocketStreamConnectionState.Disconnected;\r\n public socketState = new ReplaySubject<WebsocketStreamConnectionState>();\r\n private socket: WebSocketSubject<WebsocketStreamPacket | string>;\r\n private connectionRetries = WebsocketStream.maxConnectionRetries;\r\n private handlers = new Map<string, WebsocketStreamHandler>();\r\n private strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.WebsocketStream;\r\n\r\n /**\r\n * Initializes a new instance of the WebsocketStream class.\r\n *\r\n * @param gateway the gateway connection object.\r\n */\r\n constructor(public gateway: GatewayConnection) {\r\n // initialize only after gateway data was populated via RPC.\r\n this.gateway.initialize().subscribe(() => {\r\n // enable websocket stream only when the module added the options at initialization.\r\n const global = MsftSme.self();\r\n if (!global.Init.websocket && !global.Init.sshWebsocket) {\r\n this.socketState.next(WebsocketStreamConnectionState.NotConfigured);\r\n this.socketStateRaw = WebsocketStreamConnectionState.NotConfigured;\r\n return;\r\n }\r\n this.initialize(true);\r\n });\r\n }\r\n\r\n /**\r\n * Register the processor for the stream name.\r\n * @param name the name of stream.\r\n * @param handler the handler to process packet.\r\n */\r\n public registerProcessor(name: WebsocketStreamName, handler: WebsocketStreamHandler): void {\r\n this.handlers.set(name, handler);\r\n }\r\n\r\n /**\r\n * Send next stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param data the data to send.\r\n * @param options the options.\r\n */\r\n public sendNext(streamName: WebsocketStreamName, data: any, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Data, data, options };\r\n this.debugLog('Socket sending data.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Send error stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param error the error to send.\r\n * @param options the options.\r\n */\r\n public sendError(streamName: WebsocketStreamName, error: string, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Error, data: error, options };\r\n this.debugLog('Socket sending error.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Get target data.\r\n * @param authorizationManager the authorization manager.\r\n * @param nodeName the node Name\r\n * @param endpoint the endpoint data.\r\n * @return WebsocketStreamDataTarget target data.\r\n */\r\n public getTarget(authorizationManager: AuthorizationManager, nodeName: string, endpoint?: string): WebsocketStreamDataTarget {\r\n const headers = authorizationManager.createTokenHeaders(nodeName);\r\n if (endpoint) {\r\n headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n const target = <WebsocketStreamDataTarget>{ nodeName, headers };\r\n return target;\r\n }\r\n\r\n private initialize(firstTime: boolean): void {\r\n // get gateway socket url.\r\n const gatewaySocketUrl = this.gateway.gatewayUrl.replace('http', 'ws');\r\n const moduleName = MsftSme.self().Init.moduleName;\r\n let url = Net.streamSocket.format(gatewaySocketUrl, moduleName);\r\n if (EnvironmentModule.isGatewayV200) {\r\n url = Net.streamSocketV200.format(gatewaySocketUrl, moduleName);\r\n }\r\n const isSsh = MsftSme.self().Init.sshWebsocket;\r\n if (isSsh) {\r\n url = Net.sshStreamSocket.format(gatewaySocketUrl);\r\n }\r\n this.debugLog('Socket initializing...: {0}'.format(url));\r\n if (!firstTime) {\r\n this.handlers.forEach((value) => value.reset());\r\n }\r\n\r\n // create stream socket.\r\n this.socketState.next(WebsocketStreamConnectionState.Initializing);\r\n this.socket = webSocket<WebsocketStreamPacket | string>({\r\n url: url,\r\n openObserver: {\r\n next: () => {\r\n this.debugLog('Socket opened: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Connected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Connected;\r\n this.connectionRetries = WebsocketStream.maxConnectionRetries;\r\n }\r\n },\r\n closeObserver: {\r\n next: () => {\r\n this.debugLog('Socket closed: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Disconnected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Disconnected;\r\n this.reconnect(new Error(this.strings.Common.ConnectionRetiesError.message));\r\n }\r\n },\r\n // for compatibility with older version of rxjs websocket\r\n serializer: (value: string) => value\r\n });\r\n this.socket.subscribe({\r\n next: received => {\r\n const message = <WebsocketStreamPacket>received;\r\n this.debugLog('Socket received data.', message);\r\n if (message.state === WebsocketStreamState.Data) {\r\n const handler = this.handlers.get(message.streamName);\r\n if (handler) {\r\n handler.process(message.data);\r\n } else {\r\n throw new Error(this.strings.Common.HandlerRegistrationError.message.format(message.streamName));\r\n }\r\n } else if (message.state === WebsocketStreamState.Error) {\r\n let errorMessage = this.strings.Common.CommunicationError.message;\r\n if (message.data && message.data.error && message.data.error.message) {\r\n errorMessage = this.strings.Common.CommunicationErrorDetail.message.format(message.data.error.message);\r\n }\r\n\r\n Logging.log({ level: LogLevel.Error, source: WebsocketStream.logSourceName, message: errorMessage });\r\n this.reconnect(new Error(errorMessage));\r\n }\r\n },\r\n error: error => this.reconnect(error)\r\n });\r\n }\r\n\r\n private dispose(): void {\r\n if (this.socket) {\r\n this.socket.unsubscribe();\r\n this.socket = null;\r\n }\r\n }\r\n\r\n private reconnect(error: any): void {\r\n if (this.connectionRetries-- > 0) {\r\n this.dispose();\r\n setTimeout(() => this.initialize(false), WebsocketStream.reconnectWaitTime);\r\n } else {\r\n this.socketState.next(WebsocketStreamConnectionState.Failed);\r\n throw error;\r\n }\r\n }\r\n\r\n private debugLog(message: string, object?: any) {\r\n Logging.log({ level: LogLevel.Debug, source: WebsocketStream.logSourceName, message: message });\r\n if (object) {\r\n Logging.debug(object);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/data/websocket-stream.ts"],"names":[],"mappings":"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","file":"websocket-stream.d.ts","sourcesContent":["import { Observer, ReplaySubject, mergeMap, take } from 'rxjs';\r\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { GatewayConnection } from './gateway-connection';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\n\r\n/**\r\n * The state of Websocket connection.\r\n */\r\nexport enum WebsocketStreamConnectionState {\r\n /**\r\n * Initializing.\r\n */\r\n Initializing = 1,\r\n\r\n /**\r\n * Connected.\r\n */\r\n Connected,\r\n\r\n /**\r\n * Disconnected.\r\n */\r\n Disconnected,\r\n\r\n /**\r\n * Failed.\r\n */\r\n Failed,\r\n\r\n /**\r\n * Not configured.\r\n */\r\n NotConfigured\r\n}\r\n\r\n/**\r\n * The state of Websocket stream packet.\r\n */\r\nexport enum WebsocketStreamState {\r\n /**\r\n * Empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error packet. (reserved for socket level error communication if any)\r\n */\r\n Error\r\n}\r\n\r\n/**\r\n * The request state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataRequestState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Normal,\r\n\r\n /**\r\n * Cancel\r\n */\r\n Cancel\r\n}\r\n\r\n/**\r\n * The response state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Completed packet.\r\n */\r\n Completed,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error\r\n */\r\n Error,\r\n\r\n /**\r\n * Cancelled\r\n */\r\n Cancelled\r\n}\r\n\r\n/**\r\n * Websocket Stream data target object.\r\n */\r\nexport interface WebsocketStreamDataTarget {\r\n /**\r\n * The node name.\r\n */\r\n nodeName: string;\r\n\r\n /**\r\n * The headers equivalent to REST API.\r\n */\r\n headers: MsftSme.StringMap<string>;\r\n}\r\n\r\nexport enum WebsocketStreamName {\r\n CimStreamName = 'SME-CIM',\r\n PowerShellStreamName = 'SME-PowerShell',\r\n SshStreamName = 'SME-SSH',\r\n SystemStreamName = 'System'\r\n};\r\n\r\n/**\r\n * The request/response packet of Websocket Stream to the gateway.\r\n */\r\nexport interface WebsocketStreamPacket {\r\n /**\r\n * The identification string of protocol.\r\n *\r\n */\r\n streamName: WebsocketStreamName;\r\n\r\n /**\r\n * The state of packet.\r\n */\r\n state: WebsocketStreamState;\r\n\r\n /**\r\n * The request/response/error data.\r\n */\r\n data: any;\r\n\r\n /**\r\n * The options (reserved)\r\n */\r\n options?: any;\r\n}\r\n\r\n/**\r\n * Websocket stream handler.\r\n */\r\nexport interface WebsocketStreamHandler {\r\n /**\r\n * Call reset() when connection was lost to reset context.\r\n */\r\n reset(): void;\r\n\r\n /**\r\n * Call process() when message was received for the data type.\r\n */\r\n process(message: any): void;\r\n}\r\n\r\n/**\r\n * Websocket Stream Processor class.\r\n */\r\nexport class WebsocketStreamProcessor<TData, TOptions = void> {\r\n /**\r\n * Holding result if waitCompleted option is specified for multiple instances.\r\n */\r\n public response?: any;\r\n\r\n /**\r\n * Track closing state.\r\n */\r\n public closing?: boolean;\r\n\r\n /**\r\n * Track closed state.\r\n */\r\n public closed?: boolean;\r\n\r\n /**\r\n * Track observer end call by unsubscribe or observer completion.\r\n */\r\n public end?: boolean;\r\n\r\n /**\r\n * Sent once.\r\n */\r\n public sendOnce?: boolean;\r\n\r\n /**\r\n * Initializes a new instance of the CimProcessor class.\r\n * @param observer Observer to send back result to caller.\r\n * @param target Stream Target object.\r\n * @param options Options for Cim stream query.\r\n */\r\n constructor(public observer: Observer<TData>, public target: WebsocketStreamDataTarget, public options?: TOptions) {\r\n }\r\n\r\n /**\r\n * Push the result to the observer.\r\n * @param result the result of TData.\r\n */\r\n public next(result: TData): void {\r\n this.observer?.next(result);\r\n this.sendOnce = true;\r\n }\r\n\r\n /**\r\n * Complete the observer.\r\n */\r\n public complete(): void {\r\n this.closing = true;\r\n this.observer?.complete();\r\n\r\n this.closed = true;\r\n }\r\n\r\n /**\r\n * Error the observer.\r\n */\r\n public error(error: any): void {\r\n this.closing = true;\r\n this.observer?.error(error);\r\n this.closed = true;\r\n }\r\n}\r\n\r\n/**\r\n * The Websocket stream class.\r\n */\r\nexport class WebsocketStream {\r\n private static readonly logSourceName = 'WebsocketStream';\r\n private static maxConnectionRetries = 10;\r\n private static reconnectWaitTime = 500;\r\n public socketStateRaw: WebsocketStreamConnectionState = WebsocketStreamConnectionState.Disconnected;\r\n public socketState = new ReplaySubject<WebsocketStreamConnectionState>();\r\n private socket: WebSocketSubject<WebsocketStreamPacket | string>;\r\n private connectionRetries = WebsocketStream.maxConnectionRetries;\r\n private handlers = new Map<string, WebsocketStreamHandler>();\r\n private strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.WebsocketStream;\r\n\r\n /**\r\n * Initializes a new instance of the WebsocketStream class.\r\n *\r\n * @param gateway the gateway connection object.\r\n */\r\n constructor(public gateway: GatewayConnection) {\r\n // initialize only after gateway data was populated via RPC.\r\n this.gateway.initialize().pipe(\r\n mergeMap(() => this.gateway.navigationReadyObservable),\r\n take(1)\r\n ).subscribe(() => {\r\n // enable websocket stream only when the module added the options at initialization.\r\n const global = MsftSme.self();\r\n if (!global.Init.websocket && !global.Init.sshWebsocket) {\r\n this.socketState.next(WebsocketStreamConnectionState.NotConfigured);\r\n this.socketStateRaw = WebsocketStreamConnectionState.NotConfigured;\r\n return;\r\n }\r\n this.initialize(true);\r\n });\r\n }\r\n\r\n /**\r\n * Register the processor for the stream name.\r\n * @param name the name of stream.\r\n * @param handler the handler to process packet.\r\n */\r\n public registerProcessor(name: WebsocketStreamName, handler: WebsocketStreamHandler): void {\r\n this.handlers.set(name, handler);\r\n }\r\n\r\n /**\r\n * Send next stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param data the data to send.\r\n * @param options the options.\r\n */\r\n public sendNext(streamName: WebsocketStreamName, data: any, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Data, data, options };\r\n this.debugLog('Socket sending data.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Send error stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param error the error to send.\r\n * @param options the options.\r\n */\r\n public sendError(streamName: WebsocketStreamName, error: string, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Error, data: error, options };\r\n this.debugLog('Socket sending error.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Get target data.\r\n * @param authorizationManager the authorization manager.\r\n * @param nodeName the node Name\r\n * @param endpoint the endpoint data.\r\n * @return WebsocketStreamDataTarget target data.\r\n */\r\n public getTarget(authorizationManager: AuthorizationManager, nodeName: string, endpoint?: string): WebsocketStreamDataTarget {\r\n const headers = authorizationManager.createTokenHeaders(nodeName);\r\n if (endpoint) {\r\n headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n const target = <WebsocketStreamDataTarget>{ nodeName, headers };\r\n return target;\r\n }\r\n\r\n private initialize(firstTime: boolean): void {\r\n // get gateway socket url.\r\n const gatewaySocketUrl = this.gateway.gatewayUrl.replace('http', 'ws');\r\n const moduleName = MsftSme.self().Init.moduleName;\r\n let url = Net.streamSocket.format(gatewaySocketUrl, moduleName);\r\n if (EnvironmentModule.isGatewayV200) {\r\n url = Net.streamSocketV200.format(gatewaySocketUrl, moduleName);\r\n }\r\n const isSsh = MsftSme.self().Init.sshWebsocket;\r\n if (isSsh) {\r\n url = Net.sshStreamSocket.format(gatewaySocketUrl);\r\n }\r\n this.debugLog('Socket initializing...: {0}'.format(url));\r\n if (!firstTime) {\r\n this.handlers.forEach((value) => value.reset());\r\n }\r\n\r\n // create stream socket.\r\n this.socketState.next(WebsocketStreamConnectionState.Initializing);\r\n this.socket = webSocket<WebsocketStreamPacket | string>({\r\n url: url,\r\n openObserver: {\r\n next: () => {\r\n this.debugLog('Socket opened: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Connected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Connected;\r\n this.connectionRetries = WebsocketStream.maxConnectionRetries;\r\n }\r\n },\r\n closeObserver: {\r\n next: () => {\r\n this.debugLog('Socket closed: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Disconnected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Disconnected;\r\n this.reconnect(new Error(this.strings.Common.ConnectionRetiesError.message));\r\n }\r\n },\r\n // for compatibility with older version of rxjs websocket\r\n serializer: (value: string) => value\r\n });\r\n this.socket.subscribe({\r\n next: received => {\r\n const message = <WebsocketStreamPacket>received;\r\n this.debugLog('Socket received data.', message);\r\n if (message.state === WebsocketStreamState.Data) {\r\n const handler = this.handlers.get(message.streamName);\r\n if (handler) {\r\n handler.process(message.data);\r\n } else {\r\n throw new Error(this.strings.Common.HandlerRegistrationError.message.format(message.streamName));\r\n }\r\n } else if (message.state === WebsocketStreamState.Error) {\r\n let errorMessage = this.strings.Common.CommunicationError.message;\r\n if (message.data && message.data.error && message.data.error.message) {\r\n errorMessage = this.strings.Common.CommunicationErrorDetail.message.format(message.data.error.message);\r\n }\r\n\r\n Logging.log({ level: LogLevel.Error, source: WebsocketStream.logSourceName, message: errorMessage });\r\n this.reconnect(new Error(errorMessage));\r\n }\r\n },\r\n error: error => this.reconnect(error)\r\n });\r\n }\r\n\r\n private dispose(): void {\r\n if (this.socket) {\r\n this.socket.unsubscribe();\r\n this.socket = null;\r\n }\r\n }\r\n\r\n private reconnect(error: any): void {\r\n if (this.connectionRetries-- > 0) {\r\n this.dispose();\r\n setTimeout(() => this.initialize(false), WebsocketStream.reconnectWaitTime);\r\n } else {\r\n this.socketState.next(WebsocketStreamConnectionState.Failed);\r\n throw error;\r\n }\r\n }\r\n\r\n private debugLog(message: string, object?: any) {\r\n Logging.log({ level: LogLevel.Debug, source: WebsocketStream.logSourceName, message: message });\r\n if (object) {\r\n Logging.debug(object);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ReplaySubject } from 'rxjs';
|
|
1
|
+
import { ReplaySubject, mergeMap, take } from 'rxjs';
|
|
2
2
|
import { webSocket } from 'rxjs/webSocket';
|
|
3
3
|
import { LogLevel } from '../diagnostics/log-level';
|
|
4
4
|
import { Logging } from '../diagnostics/logging';
|
|
@@ -186,7 +186,7 @@ export class WebsocketStream {
|
|
|
186
186
|
constructor(gateway) {
|
|
187
187
|
this.gateway = gateway;
|
|
188
188
|
// initialize only after gateway data was populated via RPC.
|
|
189
|
-
this.gateway.initialize().subscribe(() => {
|
|
189
|
+
this.gateway.initialize().pipe(mergeMap(() => this.gateway.navigationReadyObservable), take(1)).subscribe(() => {
|
|
190
190
|
// enable websocket stream only when the module added the options at initialization.
|
|
191
191
|
const global = MsftSme.self();
|
|
192
192
|
if (!global.Init.websocket && !global.Init.sshWebsocket) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/data/websocket-stream.ts"],"names":[],"mappings":"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","file":"websocket-stream.js","sourcesContent":["import { Observer, ReplaySubject } from 'rxjs';\r\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { GatewayConnection } from './gateway-connection';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\n\r\n/**\r\n * The state of Websocket connection.\r\n */\r\nexport enum WebsocketStreamConnectionState {\r\n /**\r\n * Initializing.\r\n */\r\n Initializing = 1,\r\n\r\n /**\r\n * Connected.\r\n */\r\n Connected,\r\n\r\n /**\r\n * Disconnected.\r\n */\r\n Disconnected,\r\n\r\n /**\r\n * Failed.\r\n */\r\n Failed,\r\n\r\n /**\r\n * Not configured.\r\n */\r\n NotConfigured\r\n}\r\n\r\n/**\r\n * The state of Websocket stream packet.\r\n */\r\nexport enum WebsocketStreamState {\r\n /**\r\n * Empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error packet. (reserved for socket level error communication if any)\r\n */\r\n Error\r\n}\r\n\r\n/**\r\n * The request state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataRequestState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Normal,\r\n\r\n /**\r\n * Cancel\r\n */\r\n Cancel\r\n}\r\n\r\n/**\r\n * The response state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Completed packet.\r\n */\r\n Completed,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error\r\n */\r\n Error,\r\n\r\n /**\r\n * Cancelled\r\n */\r\n Cancelled\r\n}\r\n\r\n/**\r\n * Websocket Stream data target object.\r\n */\r\nexport interface WebsocketStreamDataTarget {\r\n /**\r\n * The node name.\r\n */\r\n nodeName: string;\r\n\r\n /**\r\n * The headers equivalent to REST API.\r\n */\r\n headers: MsftSme.StringMap<string>;\r\n}\r\n\r\nexport enum WebsocketStreamName {\r\n CimStreamName = 'SME-CIM',\r\n PowerShellStreamName = 'SME-PowerShell',\r\n SshStreamName = 'SME-SSH',\r\n SystemStreamName = 'System'\r\n};\r\n\r\n/**\r\n * The request/response packet of Websocket Stream to the gateway.\r\n */\r\nexport interface WebsocketStreamPacket {\r\n /**\r\n * The identification string of protocol.\r\n *\r\n */\r\n streamName: WebsocketStreamName;\r\n\r\n /**\r\n * The state of packet.\r\n */\r\n state: WebsocketStreamState;\r\n\r\n /**\r\n * The request/response/error data.\r\n */\r\n data: any;\r\n\r\n /**\r\n * The options (reserved)\r\n */\r\n options?: any;\r\n}\r\n\r\n/**\r\n * Websocket stream handler.\r\n */\r\nexport interface WebsocketStreamHandler {\r\n /**\r\n * Call reset() when connection was lost to reset context.\r\n */\r\n reset(): void;\r\n\r\n /**\r\n * Call process() when message was received for the data type.\r\n */\r\n process(message: any): void;\r\n}\r\n\r\n/**\r\n * Websocket Stream Processor class.\r\n */\r\nexport class WebsocketStreamProcessor<TData, TOptions = void> {\r\n /**\r\n * Holding result if waitCompleted option is specified for multiple instances.\r\n */\r\n public response?: any;\r\n\r\n /**\r\n * Track closing state.\r\n */\r\n public closing?: boolean;\r\n\r\n /**\r\n * Track closed state.\r\n */\r\n public closed?: boolean;\r\n\r\n /**\r\n * Track observer end call by unsubscribe or observer completion.\r\n */\r\n public end?: boolean;\r\n\r\n /**\r\n * Sent once.\r\n */\r\n public sendOnce?: boolean;\r\n\r\n /**\r\n * Initializes a new instance of the CimProcessor class.\r\n * @param observer Observer to send back result to caller.\r\n * @param target Stream Target object.\r\n * @param options Options for Cim stream query.\r\n */\r\n constructor(public observer: Observer<TData>, public target: WebsocketStreamDataTarget, public options?: TOptions) {\r\n }\r\n\r\n /**\r\n * Push the result to the observer.\r\n * @param result the result of TData.\r\n */\r\n public next(result: TData): void {\r\n this.observer?.next(result);\r\n this.sendOnce = true;\r\n }\r\n\r\n /**\r\n * Complete the observer.\r\n */\r\n public complete(): void {\r\n this.closing = true;\r\n this.observer?.complete();\r\n\r\n this.closed = true;\r\n }\r\n\r\n /**\r\n * Error the observer.\r\n */\r\n public error(error: any): void {\r\n this.closing = true;\r\n this.observer?.error(error);\r\n this.closed = true;\r\n }\r\n}\r\n\r\n/**\r\n * The Websocket stream class.\r\n */\r\nexport class WebsocketStream {\r\n private static readonly logSourceName = 'WebsocketStream';\r\n private static maxConnectionRetries = 10;\r\n private static reconnectWaitTime = 500;\r\n public socketStateRaw: WebsocketStreamConnectionState = WebsocketStreamConnectionState.Disconnected;\r\n public socketState = new ReplaySubject<WebsocketStreamConnectionState>();\r\n private socket: WebSocketSubject<WebsocketStreamPacket | string>;\r\n private connectionRetries = WebsocketStream.maxConnectionRetries;\r\n private handlers = new Map<string, WebsocketStreamHandler>();\r\n private strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.WebsocketStream;\r\n\r\n /**\r\n * Initializes a new instance of the WebsocketStream class.\r\n *\r\n * @param gateway the gateway connection object.\r\n */\r\n constructor(public gateway: GatewayConnection) {\r\n // initialize only after gateway data was populated via RPC.\r\n this.gateway.initialize().subscribe(() => {\r\n // enable websocket stream only when the module added the options at initialization.\r\n const global = MsftSme.self();\r\n if (!global.Init.websocket && !global.Init.sshWebsocket) {\r\n this.socketState.next(WebsocketStreamConnectionState.NotConfigured);\r\n this.socketStateRaw = WebsocketStreamConnectionState.NotConfigured;\r\n return;\r\n }\r\n this.initialize(true);\r\n });\r\n }\r\n\r\n /**\r\n * Register the processor for the stream name.\r\n * @param name the name of stream.\r\n * @param handler the handler to process packet.\r\n */\r\n public registerProcessor(name: WebsocketStreamName, handler: WebsocketStreamHandler): void {\r\n this.handlers.set(name, handler);\r\n }\r\n\r\n /**\r\n * Send next stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param data the data to send.\r\n * @param options the options.\r\n */\r\n public sendNext(streamName: WebsocketStreamName, data: any, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Data, data, options };\r\n this.debugLog('Socket sending data.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Send error stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param error the error to send.\r\n * @param options the options.\r\n */\r\n public sendError(streamName: WebsocketStreamName, error: string, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Error, data: error, options };\r\n this.debugLog('Socket sending error.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Get target data.\r\n * @param authorizationManager the authorization manager.\r\n * @param nodeName the node Name\r\n * @param endpoint the endpoint data.\r\n * @return WebsocketStreamDataTarget target data.\r\n */\r\n public getTarget(authorizationManager: AuthorizationManager, nodeName: string, endpoint?: string): WebsocketStreamDataTarget {\r\n const headers = authorizationManager.createTokenHeaders(nodeName);\r\n if (endpoint) {\r\n headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n const target = <WebsocketStreamDataTarget>{ nodeName, headers };\r\n return target;\r\n }\r\n\r\n private initialize(firstTime: boolean): void {\r\n // get gateway socket url.\r\n const gatewaySocketUrl = this.gateway.gatewayUrl.replace('http', 'ws');\r\n const moduleName = MsftSme.self().Init.moduleName;\r\n let url = Net.streamSocket.format(gatewaySocketUrl, moduleName);\r\n if (EnvironmentModule.isGatewayV200) {\r\n url = Net.streamSocketV200.format(gatewaySocketUrl, moduleName);\r\n }\r\n const isSsh = MsftSme.self().Init.sshWebsocket;\r\n if (isSsh) {\r\n url = Net.sshStreamSocket.format(gatewaySocketUrl);\r\n }\r\n this.debugLog('Socket initializing...: {0}'.format(url));\r\n if (!firstTime) {\r\n this.handlers.forEach((value) => value.reset());\r\n }\r\n\r\n // create stream socket.\r\n this.socketState.next(WebsocketStreamConnectionState.Initializing);\r\n this.socket = webSocket<WebsocketStreamPacket | string>({\r\n url: url,\r\n openObserver: {\r\n next: () => {\r\n this.debugLog('Socket opened: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Connected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Connected;\r\n this.connectionRetries = WebsocketStream.maxConnectionRetries;\r\n }\r\n },\r\n closeObserver: {\r\n next: () => {\r\n this.debugLog('Socket closed: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Disconnected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Disconnected;\r\n this.reconnect(new Error(this.strings.Common.ConnectionRetiesError.message));\r\n }\r\n },\r\n // for compatibility with older version of rxjs websocket\r\n serializer: (value: string) => value\r\n });\r\n this.socket.subscribe({\r\n next: received => {\r\n const message = <WebsocketStreamPacket>received;\r\n this.debugLog('Socket received data.', message);\r\n if (message.state === WebsocketStreamState.Data) {\r\n const handler = this.handlers.get(message.streamName);\r\n if (handler) {\r\n handler.process(message.data);\r\n } else {\r\n throw new Error(this.strings.Common.HandlerRegistrationError.message.format(message.streamName));\r\n }\r\n } else if (message.state === WebsocketStreamState.Error) {\r\n let errorMessage = this.strings.Common.CommunicationError.message;\r\n if (message.data && message.data.error && message.data.error.message) {\r\n errorMessage = this.strings.Common.CommunicationErrorDetail.message.format(message.data.error.message);\r\n }\r\n\r\n Logging.log({ level: LogLevel.Error, source: WebsocketStream.logSourceName, message: errorMessage });\r\n this.reconnect(new Error(errorMessage));\r\n }\r\n },\r\n error: error => this.reconnect(error)\r\n });\r\n }\r\n\r\n private dispose(): void {\r\n if (this.socket) {\r\n this.socket.unsubscribe();\r\n this.socket = null;\r\n }\r\n }\r\n\r\n private reconnect(error: any): void {\r\n if (this.connectionRetries-- > 0) {\r\n this.dispose();\r\n setTimeout(() => this.initialize(false), WebsocketStream.reconnectWaitTime);\r\n } else {\r\n this.socketState.next(WebsocketStreamConnectionState.Failed);\r\n throw error;\r\n }\r\n }\r\n\r\n private debugLog(message: string, object?: any) {\r\n Logging.log({ level: LogLevel.Debug, source: WebsocketStream.logSourceName, message: message });\r\n if (object) {\r\n Logging.debug(object);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/data/websocket-stream.ts"],"names":[],"mappings":"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","file":"websocket-stream.js","sourcesContent":["import { Observer, ReplaySubject, mergeMap, take } from 'rxjs';\r\nimport { webSocket, WebSocketSubject } from 'rxjs/webSocket';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { GatewayConnection } from './gateway-connection';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\n\r\n/**\r\n * The state of Websocket connection.\r\n */\r\nexport enum WebsocketStreamConnectionState {\r\n /**\r\n * Initializing.\r\n */\r\n Initializing = 1,\r\n\r\n /**\r\n * Connected.\r\n */\r\n Connected,\r\n\r\n /**\r\n * Disconnected.\r\n */\r\n Disconnected,\r\n\r\n /**\r\n * Failed.\r\n */\r\n Failed,\r\n\r\n /**\r\n * Not configured.\r\n */\r\n NotConfigured\r\n}\r\n\r\n/**\r\n * The state of Websocket stream packet.\r\n */\r\nexport enum WebsocketStreamState {\r\n /**\r\n * Empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error packet. (reserved for socket level error communication if any)\r\n */\r\n Error\r\n}\r\n\r\n/**\r\n * The request state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataRequestState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Normal,\r\n\r\n /**\r\n * Cancel\r\n */\r\n Cancel\r\n}\r\n\r\n/**\r\n * The response state of data such as CIM and PowerShell stream.\r\n */\r\nexport enum WebsocketStreamDataState {\r\n /**\r\n * empty packet.\r\n */\r\n Noop = 1,\r\n\r\n /**\r\n * Completed packet.\r\n */\r\n Completed,\r\n\r\n /**\r\n * Data packet.\r\n */\r\n Data,\r\n\r\n /**\r\n * Error\r\n */\r\n Error,\r\n\r\n /**\r\n * Cancelled\r\n */\r\n Cancelled\r\n}\r\n\r\n/**\r\n * Websocket Stream data target object.\r\n */\r\nexport interface WebsocketStreamDataTarget {\r\n /**\r\n * The node name.\r\n */\r\n nodeName: string;\r\n\r\n /**\r\n * The headers equivalent to REST API.\r\n */\r\n headers: MsftSme.StringMap<string>;\r\n}\r\n\r\nexport enum WebsocketStreamName {\r\n CimStreamName = 'SME-CIM',\r\n PowerShellStreamName = 'SME-PowerShell',\r\n SshStreamName = 'SME-SSH',\r\n SystemStreamName = 'System'\r\n};\r\n\r\n/**\r\n * The request/response packet of Websocket Stream to the gateway.\r\n */\r\nexport interface WebsocketStreamPacket {\r\n /**\r\n * The identification string of protocol.\r\n *\r\n */\r\n streamName: WebsocketStreamName;\r\n\r\n /**\r\n * The state of packet.\r\n */\r\n state: WebsocketStreamState;\r\n\r\n /**\r\n * The request/response/error data.\r\n */\r\n data: any;\r\n\r\n /**\r\n * The options (reserved)\r\n */\r\n options?: any;\r\n}\r\n\r\n/**\r\n * Websocket stream handler.\r\n */\r\nexport interface WebsocketStreamHandler {\r\n /**\r\n * Call reset() when connection was lost to reset context.\r\n */\r\n reset(): void;\r\n\r\n /**\r\n * Call process() when message was received for the data type.\r\n */\r\n process(message: any): void;\r\n}\r\n\r\n/**\r\n * Websocket Stream Processor class.\r\n */\r\nexport class WebsocketStreamProcessor<TData, TOptions = void> {\r\n /**\r\n * Holding result if waitCompleted option is specified for multiple instances.\r\n */\r\n public response?: any;\r\n\r\n /**\r\n * Track closing state.\r\n */\r\n public closing?: boolean;\r\n\r\n /**\r\n * Track closed state.\r\n */\r\n public closed?: boolean;\r\n\r\n /**\r\n * Track observer end call by unsubscribe or observer completion.\r\n */\r\n public end?: boolean;\r\n\r\n /**\r\n * Sent once.\r\n */\r\n public sendOnce?: boolean;\r\n\r\n /**\r\n * Initializes a new instance of the CimProcessor class.\r\n * @param observer Observer to send back result to caller.\r\n * @param target Stream Target object.\r\n * @param options Options for Cim stream query.\r\n */\r\n constructor(public observer: Observer<TData>, public target: WebsocketStreamDataTarget, public options?: TOptions) {\r\n }\r\n\r\n /**\r\n * Push the result to the observer.\r\n * @param result the result of TData.\r\n */\r\n public next(result: TData): void {\r\n this.observer?.next(result);\r\n this.sendOnce = true;\r\n }\r\n\r\n /**\r\n * Complete the observer.\r\n */\r\n public complete(): void {\r\n this.closing = true;\r\n this.observer?.complete();\r\n\r\n this.closed = true;\r\n }\r\n\r\n /**\r\n * Error the observer.\r\n */\r\n public error(error: any): void {\r\n this.closing = true;\r\n this.observer?.error(error);\r\n this.closed = true;\r\n }\r\n}\r\n\r\n/**\r\n * The Websocket stream class.\r\n */\r\nexport class WebsocketStream {\r\n private static readonly logSourceName = 'WebsocketStream';\r\n private static maxConnectionRetries = 10;\r\n private static reconnectWaitTime = 500;\r\n public socketStateRaw: WebsocketStreamConnectionState = WebsocketStreamConnectionState.Disconnected;\r\n public socketState = new ReplaySubject<WebsocketStreamConnectionState>();\r\n private socket: WebSocketSubject<WebsocketStreamPacket | string>;\r\n private connectionRetries = WebsocketStream.maxConnectionRetries;\r\n private handlers = new Map<string, WebsocketStreamHandler>();\r\n private strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.WebsocketStream;\r\n\r\n /**\r\n * Initializes a new instance of the WebsocketStream class.\r\n *\r\n * @param gateway the gateway connection object.\r\n */\r\n constructor(public gateway: GatewayConnection) {\r\n // initialize only after gateway data was populated via RPC.\r\n this.gateway.initialize().pipe(\r\n mergeMap(() => this.gateway.navigationReadyObservable),\r\n take(1)\r\n ).subscribe(() => {\r\n // enable websocket stream only when the module added the options at initialization.\r\n const global = MsftSme.self();\r\n if (!global.Init.websocket && !global.Init.sshWebsocket) {\r\n this.socketState.next(WebsocketStreamConnectionState.NotConfigured);\r\n this.socketStateRaw = WebsocketStreamConnectionState.NotConfigured;\r\n return;\r\n }\r\n this.initialize(true);\r\n });\r\n }\r\n\r\n /**\r\n * Register the processor for the stream name.\r\n * @param name the name of stream.\r\n * @param handler the handler to process packet.\r\n */\r\n public registerProcessor(name: WebsocketStreamName, handler: WebsocketStreamHandler): void {\r\n this.handlers.set(name, handler);\r\n }\r\n\r\n /**\r\n * Send next stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param data the data to send.\r\n * @param options the options.\r\n */\r\n public sendNext(streamName: WebsocketStreamName, data: any, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Data, data, options };\r\n this.debugLog('Socket sending data.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Send error stream data to websocket.\r\n *\r\n * @param streamName the stream name.\r\n * @param error the error to send.\r\n * @param options the options.\r\n */\r\n public sendError(streamName: WebsocketStreamName, error: string, options?: any): void {\r\n if (!this.socket) {\r\n throw new Error('WebsocketStream: socket is not ready.');\r\n }\r\n\r\n const packet: WebsocketStreamPacket = { streamName, state: WebsocketStreamState.Error, data: error, options };\r\n this.debugLog('Socket sending error.', packet);\r\n this.socket.next(JSON.stringify(packet));\r\n }\r\n\r\n /**\r\n * Get target data.\r\n * @param authorizationManager the authorization manager.\r\n * @param nodeName the node Name\r\n * @param endpoint the endpoint data.\r\n * @return WebsocketStreamDataTarget target data.\r\n */\r\n public getTarget(authorizationManager: AuthorizationManager, nodeName: string, endpoint?: string): WebsocketStreamDataTarget {\r\n const headers = authorizationManager.createTokenHeaders(nodeName);\r\n if (endpoint) {\r\n headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n const target = <WebsocketStreamDataTarget>{ nodeName, headers };\r\n return target;\r\n }\r\n\r\n private initialize(firstTime: boolean): void {\r\n // get gateway socket url.\r\n const gatewaySocketUrl = this.gateway.gatewayUrl.replace('http', 'ws');\r\n const moduleName = MsftSme.self().Init.moduleName;\r\n let url = Net.streamSocket.format(gatewaySocketUrl, moduleName);\r\n if (EnvironmentModule.isGatewayV200) {\r\n url = Net.streamSocketV200.format(gatewaySocketUrl, moduleName);\r\n }\r\n const isSsh = MsftSme.self().Init.sshWebsocket;\r\n if (isSsh) {\r\n url = Net.sshStreamSocket.format(gatewaySocketUrl);\r\n }\r\n this.debugLog('Socket initializing...: {0}'.format(url));\r\n if (!firstTime) {\r\n this.handlers.forEach((value) => value.reset());\r\n }\r\n\r\n // create stream socket.\r\n this.socketState.next(WebsocketStreamConnectionState.Initializing);\r\n this.socket = webSocket<WebsocketStreamPacket | string>({\r\n url: url,\r\n openObserver: {\r\n next: () => {\r\n this.debugLog('Socket opened: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Connected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Connected;\r\n this.connectionRetries = WebsocketStream.maxConnectionRetries;\r\n }\r\n },\r\n closeObserver: {\r\n next: () => {\r\n this.debugLog('Socket closed: {0}'.format(url));\r\n this.socketState.next(WebsocketStreamConnectionState.Disconnected);\r\n this.socketStateRaw = WebsocketStreamConnectionState.Disconnected;\r\n this.reconnect(new Error(this.strings.Common.ConnectionRetiesError.message));\r\n }\r\n },\r\n // for compatibility with older version of rxjs websocket\r\n serializer: (value: string) => value\r\n });\r\n this.socket.subscribe({\r\n next: received => {\r\n const message = <WebsocketStreamPacket>received;\r\n this.debugLog('Socket received data.', message);\r\n if (message.state === WebsocketStreamState.Data) {\r\n const handler = this.handlers.get(message.streamName);\r\n if (handler) {\r\n handler.process(message.data);\r\n } else {\r\n throw new Error(this.strings.Common.HandlerRegistrationError.message.format(message.streamName));\r\n }\r\n } else if (message.state === WebsocketStreamState.Error) {\r\n let errorMessage = this.strings.Common.CommunicationError.message;\r\n if (message.data && message.data.error && message.data.error.message) {\r\n errorMessage = this.strings.Common.CommunicationErrorDetail.message.format(message.data.error.message);\r\n }\r\n\r\n Logging.log({ level: LogLevel.Error, source: WebsocketStream.logSourceName, message: errorMessage });\r\n this.reconnect(new Error(errorMessage));\r\n }\r\n },\r\n error: error => this.reconnect(error)\r\n });\r\n }\r\n\r\n private dispose(): void {\r\n if (this.socket) {\r\n this.socket.unsubscribe();\r\n this.socket = null;\r\n }\r\n }\r\n\r\n private reconnect(error: any): void {\r\n if (this.connectionRetries-- > 0) {\r\n this.dispose();\r\n setTimeout(() => this.initialize(false), WebsocketStream.reconnectWaitTime);\r\n } else {\r\n this.socketState.next(WebsocketStreamConnectionState.Failed);\r\n throw error;\r\n }\r\n }\r\n\r\n private debugLog(message: string, object?: any) {\r\n Logging.log({ level: LogLevel.Debug, source: WebsocketStream.logSourceName, message: message });\r\n if (object) {\r\n Logging.debug(object);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../packages/core/generated/powershell-scripts.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,sBAAc,iBAAiB,CAAC;IAGrB,MAAM,MAAM,wBAAwB,CAAC;IACrC,MAAM,YAAY,iBAAiB,CAAC;IACpC,MAAM,gBAAgB,UAAU,CAAC;IACjC,MAAM,qBAAqB;;;KAGjC,CAAA;IACM,MAAM,WAAW;;;KAGvB,CAAA;IACM,MAAM,yBAAyB;;;KAGrC,CAAA;IACM,MAAM,uBAAuB;;;KAGnC,CAAA;IACM,MAAM,uBAAuB;;;KAGnC,CAAA;IACM,MAAM,0BAA0B;;;KAGtC,CAAA;IACM,MAAM,0BAA0B;;;KAGtC,CAAA;IACM,MAAM,qBAAqB;;;KAGjC,CAAA;IACM,MAAM,oBAAoB;;;KAGhC,CAAA;IACM,MAAM,gBAAgB;;;KAG5B,CAAA;IACM,MAAM,mBAAmB;;;KAG/B,CAAA;CACJ","file":"powershell-scripts.d.ts","sourcesContent":["/* eslint:disable */\r\n/**\r\n * @file Source code generated by gulp-ps-code.\r\n * @version 1.1\r\n */\r\nexport module PowerShellScripts {\r\n 'use strict'\r\n\r\n export const module = 'Microsoft.SME.Shell';\r\n export const resourceName = 'MsftSmeShell';\r\n export const powerShellPrefix = 'WACSH';\r\n export const Start_ScheduledReboot = {\r\n command: 'Start-ScheduledReboot',\r\n script: \"##Start-ScheduledReboot##:Start-ScheduledReboot.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[bool]$restartlater,\\n[Parameter(Mandatory = $false)]\\n[String]$restartTime,\\n[Parameter(Mandatory = $false)]\\n[String]$restartReason,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMajor,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMinor\\n)\\n$waitTime = 5\\nif ($restartlater -and -not($restartTime)) {\\n$waitTime = 30\\n} elseif ($restartTime) {\\n$waitTime = [decimal]::round(((Get-Date $restartTime) - (Get-Date)).TotalSeconds);\\nif ($waitTime -gt (315360000 - 30)) {\\nTHROW \\\"Invalid restart time $restartTime. The valid range is 0-315360000s (10 years), with a default of 30\\\"\\n}\\n}\\nif ($waitTime -lt 5 ) {\\n$waitTime = 5\\n}\\n$command = \\\"Shutdown /r /t $waitTime\\\"\\nif ($restartReason -and ($reasonNumberMajor -ne $null) -and ($reasonNumberMinor -ne $null)) {\\n$command += \\\" /d ${restartReason}:${reasonNumberMajor}:${reasonNumberMinor}\\\"\\n}\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Stop_Reboot = {\r\n command: 'Stop-Reboot',\r\n script: \"##Stop-Reboot##:Stop-Reboot.ps1\\n$command = \\\"Shutdown /a\\\"\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Get_DecryptedDataFromNode = {\r\n command: 'Get-DecryptedDataFromNode',\r\n script: \"##Get-DecryptedDataFromNode##:Get-DecryptedDataFromNode.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[String]\\n$encryptedData\\n)\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction DecryptDataWithJWKOnNode {\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue) {\\n$rsaProvider = (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n$decryptedBytes = $rsaProvider.Decrypt([Convert]::FromBase64String($encryptedData), [System.Security.Cryptography.RSAEncryptionPadding]::OaepSHA1)\\nreturn [System.Text.Encoding]::UTF8.GetString($decryptedBytes)\\n}\\nthrow [System.InvalidOperationException] \\\"Password decryption failed. RSACryptoServiceProvider Instance not found\\\"\\n}\\n\"\r\n }\r\n export const Get_EncryptionJWKOnNode = {\r\n command: 'Get-EncryptionJWKOnNode',\r\n script: \"##Get-EncryptionJWKOnNode##:Get-EncryptionJWKOnNode.ps1\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction Get-RSAProvider\\n{\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue)\\n{\\nreturn (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n}\\n$Global:RSA = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 4096\\nreturn $RSA\\n}\\nfunction Get-JsonWebKey\\n{\\n$rsaProvider = Get-RSAProvider\\n$parameters = $rsaProvider.ExportParameters($false)\\nreturn [PSCustomObject]@{\\nkty = \\u0027RSA\\u0027\\nalg = \\u0027RSA-OAEP\\u0027\\ne = [Convert]::ToBase64String($parameters.Exponent)\\nn = [Convert]::ToBase64String($parameters.Modulus).TrimEnd(\\u0027=\\u0027).Replace(\\u0027+\\u0027, \\u0027-\\u0027).Replace(\\u0027/\\u0027, \\u0027_\\u0027)\\n}\\n}\\n$jwk = Get-JsonWebKey\\nConvertTo-Json $jwk -Compress\\n\"\r\n }\r\n export const Get_CimWin32LogicalDisk = {\r\n command: 'Get-CimWin32LogicalDisk',\r\n script: \"##Get-CimWin32LogicalDisk##:Get-CimWin32LogicalDisk.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_LogicalDisk\\n\"\r\n }\r\n export const Get_CimWin32NetworkAdapter = {\r\n command: 'Get-CimWin32NetworkAdapter',\r\n script: \"##Get-CimWin32NetworkAdapter##:Get-CimWin32NetworkAdapter.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_NetworkAdapter\\n\"\r\n }\r\n export const Get_CimWin32PhysicalMemory = {\r\n command: 'Get-CimWin32PhysicalMemory',\r\n script: \"##Get-CimWin32PhysicalMemory##:Get-CimWin32PhysicalMemory.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_PhysicalMemory\\n\"\r\n }\r\n export const Get_CimWin32Processor = {\r\n command: 'Get-CimWin32Processor',\r\n script: \"##Get-CimWin32Processor##:Get-CimWin32Processor.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_Processor\\n\"\r\n }\r\n export const Get_ClusterInventory = {\r\n command: 'Get-ClusterInventory',\r\n script: \"##Get-ClusterInventory##:Get-ClusterInventory.ps1\\nImport-Module CimCmdlets -ErrorAction SilentlyContinue\\nImport-Module FailoverClusters -ErrorAction SilentlyContinue\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction getComputerName() {\\n$computerSystem = Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object Name, DNSHostName\\nif ($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif ($null -eq $computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn $computerName\\n}\\nreturn $null\\n}\\nfunction getIsClusterCmdletAvailable() {\\n$cmdlet = Get-Command \\\"Get-Cluster\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getClusterCimInstance() {\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Cluster -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object fqdn, S2DEnabled\\n}\\nreturn $null\\n}\\nfunction getClusterPerformanceHistoryPath() {\\n$storageSubsystem = Get-StorageSubSystem clus* -ErrorAction SilentlyContinue\\n$storageHealthSettings = Get-StorageHealthSetting -InputObject $storageSubsystem -Name \\\"System.PerformanceHistory.Path\\\" -ErrorAction SilentlyContinue\\nreturn $null -ne $storageHealthSettings\\n}\\nfunction getClusterInfo() {\\n$returnValues = @{}\\n$returnValues.Fqdn = $null\\n$returnValues.isS2DEnabled = $false\\n$returnValues.isTsdbEnabled = $false\\n$cluster = getClusterCimInstance\\nif ($cluster) {\\n$returnValues.Fqdn = $cluster.fqdn\\n$isS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -eq 1)\\n$returnValues.isS2DEnabled = $isS2dEnabled\\nif ($isS2DEnabled) {\\n$returnValues.isTsdbEnabled = getClusterPerformanceHistoryPath\\n} else {\\n$returnValues.isTsdbEnabled = $false\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getisClusterHealthCmdletAvailable() {\\n$cmdlet = Get-Command -Name \\\"Get-HealthFault\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getIsBritannicaEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualMachineEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualMachine -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualSwitchEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualSwitch -ErrorAction SilentlyContinue)\\n}\\n$clusterInfo = getClusterInfo\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $clusterInfo.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2DEnabled\\u0027 -Value $clusterInfo.isS2DEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsTsdbEnabled\\u0027 -Value $clusterInfo.isTsdbEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterHealthCmdletAvailable\\u0027 -Value (getIsClusterHealthCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value (getIsBritannicaEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualMachineEnabled\\u0027 -Value (getIsBritannicaVirtualMachineEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualSwitchEnabled\\u0027 -Value (getIsBritannicaVirtualSwitchEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterCmdletAvailable\\u0027 -Value (getIsClusterCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027CurrentClusterNode\\u0027 -Value (getComputerName)\\n$result\\n\"\r\n }\r\n export const Get_ClusterNodes = {\r\n command: 'Get-ClusterNodes',\r\n script: \"##Get-ClusterNodes##:Get-ClusterNodes.ps1\\nimport-module CimCmdlets\\nimport-module FailoverClusters -ErrorAction SilentlyContinue\\nSet-Variable -Name LogName -Option Constant -Value \\\"Microsoft-ServerManagementExperience\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name LogSource -Option Constant -Value \\\"SMEScripts\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name ScriptName -Option Constant -Value $MyInvocation.ScriptName -ErrorAction SilentlyContinue\\nfunction getClusterPowerShellSupport() {\\n$cmdletInfo = Get-Command \\u0027Get-ClusterNode\\u0027 -ErrorAction SilentlyContinue\\nreturn $cmdletInfo -and $cmdletInfo.Name -eq \\\"Get-ClusterNode\\\"\\n}\\nfunction getClusterNodeCimInstances() {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Node -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object @{Name=\\\"DrainStatus\\\"; Expression={$_.NodeDrainStatus}}, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodePsInstances() {\\nreturn Get-ClusterNode -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object DrainStatus, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodeFqdn([string]$clusterNodeName) {\\nreturn ([System.Net.Dns]::GetHostEntry($clusterNodeName)).HostName\\n}\\nfunction writeToEventLog([string]$message) {\\nMicrosoft.PowerShell.Management\\\\New-EventLog -LogName $LogName -Source $LogSource -ErrorAction SilentlyContinue\\nMicrosoft.PowerShell.Management\\\\Write-EventLog -LogName $LogName -Source $LogSource -EventId 0 -Category 0 -EntryType Warning `\\n-Message $message -ErrorAction SilentlyContinue\\n}\\nfunction getClusterNodes() {\\n$isClusterCmdletAvailable = getClusterPowerShellSupport\\nif ($isClusterCmdletAvailable) {\\n$clusterNodes = getClusterNodePsInstances\\n} else {\\n$clusterNodes = getClusterNodeCimInstances\\n}\\n$clusterNodeMap = @{}\\nforeach ($clusterNode in $clusterNodes) {\\n$clusterNodeName = $clusterNode.Name.ToLower()\\ntry\\n{\\n$clusterNodeFqdn = getClusterNodeFqdn $clusterNodeName -ErrorAction SilentlyContinue\\n}\\ncatch\\n{\\n$clusterNodeFqdn = $clusterNodeName\\nwriteToEventLog \\\"[$ScriptName]: The fqdn for node \\u0027$clusterNodeName\\u0027 could not be obtained. Defaulting to machine name \\u0027$clusterNodeName\\u0027\\\"\\n}\\n$clusterNodeResult = New-Object PSObject\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FullyQualifiedDomainName\\u0027 -Value $clusterNodeFqdn\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027Name\\u0027 -Value $clusterNodeName\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DynamicWeight\\u0027 -Value $clusterNode.DynamicWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027NodeWeight\\u0027 -Value $clusterNode.NodeWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FaultDomain\\u0027 -Value $clusterNode.FaultDomain\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027State\\u0027 -Value $clusterNode.State\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DrainStatus\\u0027 -Value $clusterNode.DrainStatus\\n$clusterNodeMap.Add($clusterNodeName, $clusterNodeResult)\\n}\\nreturn $clusterNodeMap\\n}\\ngetClusterNodes\\n\"\r\n }\r\n export const Get_ServerInventory = {\r\n command: 'Get-ServerInventory',\r\n script: \"##Get-ServerInventory##:Get-ServerInventory.ps1\\nSet-StrictMode -Version 5.0\\nImport-Module CimCmdlets\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction convertOsVersion([string]$osVersion) {\\n[Ref]$parsedVersion = $null\\nif (![Version]::TryParse($osVersion, $parsedVersion)) {\\nreturn $null\\n}\\n$version = [Version]$parsedVersion.Value\\nreturn New-Object Version -ArgumentList $version.Major, $version.Minor\\n}\\nfunction isCredSSPEnabled() {\\nSet-Variable credSSPServicePath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Service\\\\Auth\\\\CredSSP\\\"\\nSet-Variable credSSPClientPath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Client\\\\Auth\\\\CredSSP\\\"\\n$credSSPServerEnabled = $false;\\n$credSSPClientEnabled = $false;\\n$credSSPServerService = Get-Item $credSSPServicePath -ErrorAction SilentlyContinue\\nif ($credSSPServerService) {\\n$credSSPServerEnabled = [System.Convert]::ToBoolean($credSSPServerService.Value)\\n}\\n$credSSPClientService = Get-Item $credSSPClientPath -ErrorAction SilentlyContinue\\nif ($credSSPClientService) {\\n$credSSPClientEnabled = [System.Convert]::ToBoolean($credSSPClientService.Value)\\n}\\nreturn ($credSSPServerEnabled -or $credSSPClientEnabled)\\n}\\nfunction isHyperVRoleInstalled() {\\n$vmmsService = Get-Service -Name \\\"VMMS\\\" -ErrorAction SilentlyContinue\\nreturn $vmmsService -and $vmmsService.Name -eq \\\"VMMS\\\"\\n}\\nfunction isHyperVPowerShellSupportInstalled() {\\nreturn !!(Get-Module -ListAvailable Hyper-V -ErrorAction SilentlyContinue)\\n}\\nfunction isWMF5Installed([string] $operatingSystemVersion) {\\nSet-Variable Server2016 -Option Constant -Value (New-Object Version \\u002710.0\\u0027) # And Windows 10 client SKUs\\nSet-Variable Server2012 -Option Constant -Value (New-Object Version \\u00276.2\\u0027)\\n$version = convertOsVersion $operatingSystemVersion\\nif (-not $version) {\\nreturn $false\\n}\\nif ($version -ge $Server2016) {\\nreturn $true\\n}\\nelse {\\nif ($version -ge $Server2012) {\\n$registryKey = \\u0027HKLM:\\\\SOFTWARE\\\\Microsoft\\\\PowerShell\\\\3\\\\PowerShellEngine\\u0027\\n$registryKeyValue = Get-ItemProperty -Path $registryKey -Name PowerShellVersion -ErrorAction SilentlyContinue\\nif ($registryKeyValue -and ($registryKeyValue.PowerShellVersion.Length -ne 0)) {\\n$installedWmfVersion = [Version]$registryKeyValue.PowerShellVersion\\nif ($installedWmfVersion -ge [Version]\\u00275.0\\u0027) {\\nreturn $true\\n}\\n}\\n}\\n}\\nreturn $false\\n}\\nfunction isUserAnAdministrator() {\\nreturn ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] \\\"Administrator\\\")\\n}\\nfunction getClusterInformation() {\\n$returnValues = @{ }\\n$returnValues.IsS2dEnabled = $false\\n$returnValues.IsCluster = $false\\n$returnValues.ClusterFqdn = $null\\n$returnValues.IsBritannicaEnabled = $false\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\n$cluster = Get-CimInstance -Namespace root/MSCluster -ClassName MSCluster_Cluster -ErrorAction SilentlyContinue\\nif ($cluster) {\\n$returnValues.IsCluster = $true\\n$returnValues.ClusterFqdn = $cluster.Fqdn\\n$returnValues.IsS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -gt 0)\\n$returnValues.IsBritannicaEnabled = $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getComputerFqdnAndAddress($computerName) {\\n$hostEntry = [System.Net.Dns]::GetHostEntry($computerName)\\n$addressList = @()\\nforeach ($item in $hostEntry.AddressList) {\\n$address = New-Object PSObject\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027IpAddress\\u0027 -Value $item.ToString()\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027AddressFamily\\u0027 -Value $item.AddressFamily.ToString()\\n$addressList += $address\\n}\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $hostEntry.HostName\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $addressList\\nreturn $result\\n}\\nfunction getHostFqdnAndAddress($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif (!$computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn getComputerFqdnAndAddress $computerName\\n}\\nfunction getManagementToolsSupportInformation() {\\n$returnValues = @{ }\\n$returnValues.ManagementToolsAvailable = $false\\n$returnValues.ServerManagerAvailable = $false\\n$namespaces = Get-CimInstance -Namespace root/microsoft/windows -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespaces) {\\n$returnValues.ManagementToolsAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ManagementTools\\\" })\\n$returnValues.ServerManagerAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ServerManager\\\" })\\n}\\nreturn $returnValues\\n}\\nfunction isRemoteAppEnabled() {\\nSet-Variable key -Option Constant -Value \\\"HKLM:\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Windows NT\\\\\\\\CurrentVersion\\\\\\\\Terminal Server\\\\\\\\TSAppAllowList\\\"\\n$registryKeyValue = Get-ItemProperty -Path $key -Name fDisabledAllowList -ErrorAction SilentlyContinue\\nif (-not $registryKeyValue) {\\nreturn $false\\n}\\nreturn $registryKeyValue.fDisabledAllowList -eq 1\\n}\\nfunction getOperatingSystemInfo() {\\n$operatingSystemInfo = Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\\\\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime, SerialNumber\\n$currentVersion = Get-ItemProperty -Path \\\"HKLM:\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\" | Microsoft.PowerShell.Utility\\\\Select-Object CurrentBuild, UBR, DisplayVersion\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name CurrentBuild -Value $currentVersion.CurrentBuild\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name UpdateBuildRevision -Value $currentVersion.UBR\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name DisplayVersion -Value $currentVersion.DisplayVersion\\nreturn $operatingSystemInfo\\n}\\nfunction getComputerSystemInfo() {\\nreturn Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object TotalPhysicalMemory, DomainRole, Manufacturer, Model, NumberOfLogicalProcessors, Domain, Workgroup, DNSHostName, Name, PartOfDomain, SystemFamily, SystemSKUNumber\\n}\\nfunction getSmbiosData($computerSystem) {\\n$ChassisTypes =\\n@{\\n1 = \\u0027Other\\u0027\\n2 = \\u0027Unknown\\u0027\\n3 = \\u0027Desktop\\u0027\\n4 = \\u0027Low Profile Desktop\\u0027\\n5 = \\u0027Pizza Box\\u0027\\n6 = \\u0027Mini Tower\\u0027\\n7 = \\u0027Tower\\u0027\\n8 = \\u0027Portable\\u0027\\n9 = \\u0027Laptop\\u0027\\n10 = \\u0027Notebook\\u0027\\n11 = \\u0027Hand Held\\u0027\\n12 = \\u0027Docking Station\\u0027\\n13 = \\u0027All in One\\u0027\\n14 = \\u0027Sub Notebook\\u0027\\n15 = \\u0027Space-Saving\\u0027\\n16 = \\u0027Lunch Box\\u0027\\n17 = \\u0027Main System Chassis\\u0027\\n18 = \\u0027Expansion Chassis\\u0027\\n19 = \\u0027SubChassis\\u0027\\n20 = \\u0027Bus Expansion Chassis\\u0027\\n21 = \\u0027Peripheral Chassis\\u0027\\n22 = \\u0027Storage Chassis\\u0027\\n23 = \\u0027Rack Mount Chassis\\u0027\\n24 = \\u0027Sealed-Case PC\\u0027\\n25 = \\u0027Multi-system chassis\\u0027\\n26 = \\u0027Compact PCI\\u0027\\n27 = \\u0027Advanced TCA\\u0027\\n28 = \\u0027Blade\\u0027\\n29 = \\u0027Blade Enclosure\\u0027\\n30 = \\u0027Tablet\\u0027\\n31 = \\u0027Convertible\\u0027\\n32 = \\u0027Detachable\\u0027\\n33 = \\u0027IoT Gateway\\u0027\\n34 = \\u0027Embedded PC\\u0027\\n35 = \\u0027Mini PC\\u0027\\n36 = \\u0027Stick PC\\u0027\\n}\\n$list = New-Object System.Collections.ArrayList\\n$win32_Bios = Get-CimInstance -class Win32_Bios\\n$obj = New-Object -Type PSObject | Microsoft.PowerShell.Utility\\\\Select-Object SerialNumber, Manufacturer, UUID, BaseBoardProduct, ChassisTypes, Chassis, SystemFamily, SystemSKUNumber, SMBIOSAssetTag\\n$obj.SerialNumber = $win32_Bios.SerialNumber\\n$obj.Manufacturer = $win32_Bios.Manufacturer\\n$computerSystemProduct = Get-CimInstance Win32_ComputerSystemProduct\\nif ($null -ne $computerSystemProduct) {\\n$obj.UUID = $computerSystemProduct.UUID\\n}\\n$baseboard = Get-CimInstance Win32_BaseBoard\\nif ($null -ne $baseboard) {\\n$obj.BaseBoardProduct = $baseboard.Product\\n}\\n$systemEnclosure = Get-CimInstance Win32_SystemEnclosure\\nif ($null -ne $systemEnclosure) {\\n$obj.SMBIOSAssetTag = $systemEnclosure.SMBIOSAssetTag\\n}\\n$obj.ChassisTypes = Get-CimInstance Win32_SystemEnclosure | Microsoft.PowerShell.Utility\\\\Select-Object -ExpandProperty ChassisTypes\\n$obj.Chassis = New-Object -TypeName \\u0027System.Collections.ArrayList\\u0027\\n$obj.ChassisTypes | ForEach-Object -Process {\\n$obj.Chassis.Add($ChassisTypes[[int]$_])\\n}\\n$obj.SystemFamily = $computerSystem.SystemFamily\\n$obj.SystemSKUNumber = $computerSystem.SystemSKUNumber\\n$list.Add($obj) | Out-Null\\nreturn $list\\n}\\nfunction getAzureArcStatus() {\\n$LogName = \\\"Microsoft-ServerManagementExperience\\\"\\n$LogSource = \\\"SMEScript\\\"\\n$ScriptName = \\\"Get-ServerInventory.ps1 - getAzureArcStatus()\\\"\\nMicrosoft.PowerShell.Management\\\\New-EventLog -LogName $LogName -Source $LogSource -ErrorAction SilentlyContinue\\nGet-Service -Name himds -ErrorVariable Err -ErrorAction SilentlyContinue | Out-Null\\nif (!!$Err) {\\n$Err = \\\"The Azure arc agent is not installed. Details: $Err\\\"\\nMicrosoft.PowerShell.Management\\\\Write-EventLog -LogName $LogName -Source $LogSource -EventId 0 -Category 0 -EntryType Information `\\n-Message \\\"[$ScriptName]: $Err\\\" -ErrorAction SilentlyContinue\\n$status = \\\"NotInstalled\\\"\\n}\\nelse {\\n$status = (azcmagent show --json | ConvertFrom-Json -ErrorAction Stop).status\\n}\\nreturn $status\\n}\\nfunction isSystemLockdownPolicyEnforced() {\\nreturn [System.Management.Automation.Security.SystemPolicy]::GetSystemLockdownPolicy() -eq [System.Management.Automation.Security.SystemEnforcementMode]::Enforce\\n}\\nfunction isServerOsHCI([string] $operatingSystemCaption) {\\nreturn $operatingSystemCaption -eq \\\"Microsoft Azure Stack HCI\\\"\\n}\\n$operatingSystem = getOperatingSystemInfo\\n$computerSystem = getComputerSystemInfo\\n$isAdministrator = isUserAnAdministrator\\n$fqdnAndAddress = getHostFqdnAndAddress $computerSystem\\n$hostname = [Environment]::MachineName\\n$netbios = $env:ComputerName\\n$managementToolsInformation = getManagementToolsSupportInformation\\n$isWmfInstalled = isWMF5Installed $operatingSystem.Version\\n$clusterInformation = getClusterInformation -ErrorAction SilentlyContinue\\n$isHyperVPowershellInstalled = isHyperVPowerShellSupportInstalled\\n$isHyperVRoleInstalled = isHyperVRoleInstalled\\n$isCredSSPEnabled = isCredSSPEnabled\\n$isRemoteAppEnabled = isRemoteAppEnabled\\n$smbiosData = getSmbiosData $computerSystem\\n$azureArcStatus = getAzureArcStatus\\n$isSystemLockdownPolicyEnforced = isSystemLockdownPolicyEnforced\\n$isHciServer = isServerOsHCI $operatingSystem.Caption\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsAdministrator\\u0027 -Value $isAdministrator\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027OperatingSystem\\u0027 -Value $operatingSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ComputerSystem\\u0027 -Value $computerSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $fqdnAndAddress.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $fqdnAndAddress.AddressList\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Hostname\\u0027 -Value $hostname\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027NetBios\\u0027 -Value $netbios\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsManagementToolsAvailable\\u0027 -Value $managementToolsInformation.ManagementToolsAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsServerManagerAvailable\\u0027 -Value $managementToolsInformation.ServerManagerAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsWmfInstalled\\u0027 -Value $isWmfInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCluster\\u0027 -Value $clusterInformation.IsCluster\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ClusterFqdn\\u0027 -Value $clusterInformation.ClusterFqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2dEnabled\\u0027 -Value $clusterInformation.IsS2dEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value $clusterInformation.IsBritannicaEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVRoleInstalled\\u0027 -Value $isHyperVRoleInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVPowershellInstalled\\u0027 -Value $isHyperVPowershellInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCredSSPEnabled\\u0027 -Value $isCredSSPEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsRemoteAppEnabled\\u0027 -Value $isRemoteAppEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027SmbiosData\\u0027 -Value $smbiosData\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AzureArcStatus\\u0027 -Value $azureArcStatus\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsSystemLockdownPolicyEnforced\\u0027 -Value $isSystemLockdownPolicyEnforced\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHciServer\\u0027 -Value $isHciServer\\n$result\\n\"\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../packages/core/generated/powershell-scripts.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,sBAAc,iBAAiB,CAAC;IAGrB,MAAM,MAAM,wBAAwB,CAAC;IACrC,MAAM,YAAY,iBAAiB,CAAC;IACpC,MAAM,gBAAgB,UAAU,CAAC;IACjC,MAAM,qBAAqB;;;KAGjC,CAAA;IACM,MAAM,WAAW;;;KAGvB,CAAA;IACM,MAAM,yBAAyB;;;KAGrC,CAAA;IACM,MAAM,uBAAuB;;;KAGnC,CAAA;IACM,MAAM,uBAAuB;;;KAGnC,CAAA;IACM,MAAM,0BAA0B;;;KAGtC,CAAA;IACM,MAAM,0BAA0B;;;KAGtC,CAAA;IACM,MAAM,qBAAqB;;;KAGjC,CAAA;IACM,MAAM,oBAAoB;;;KAGhC,CAAA;IACM,MAAM,gBAAgB;;;KAG5B,CAAA;IACM,MAAM,mBAAmB;;;KAG/B,CAAA;CACJ","file":"powershell-scripts.d.ts","sourcesContent":["/* eslint:disable */\r\n/**\r\n * @file Source code generated by gulp-ps-code.\r\n * @version 1.1\r\n */\r\nexport module PowerShellScripts {\r\n 'use strict'\r\n\r\n export const module = 'Microsoft.SME.Shell';\r\n export const resourceName = 'MsftSmeShell';\r\n export const powerShellPrefix = 'WACSH';\r\n export const Start_ScheduledReboot = {\r\n command: 'Start-ScheduledReboot',\r\n script: \"##Start-ScheduledReboot##:Start-ScheduledReboot.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[bool]$restartlater,\\n[Parameter(Mandatory = $false)]\\n[String]$restartTime,\\n[Parameter(Mandatory = $false)]\\n[String]$restartReason,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMajor,\\n[Parameter(Mandatory = $false)]\\n[System.Int16]$reasonNumberMinor\\n)\\n$waitTime = 5\\nif ($restartlater -and -not($restartTime)) {\\n$waitTime = 30\\n} elseif ($restartTime) {\\n$waitTime = [decimal]::round(((Get-Date $restartTime) - (Get-Date)).TotalSeconds);\\nif ($waitTime -gt (315360000 - 30)) {\\nTHROW \\\"Invalid restart time $restartTime. The valid range is 0-315360000s (10 years), with a default of 30\\\"\\n}\\n}\\nif ($waitTime -lt 5 ) {\\n$waitTime = 5\\n}\\n$command = \\\"Shutdown /r /t $waitTime\\\"\\nif ($restartReason -and ($reasonNumberMajor -ne $null) -and ($reasonNumberMinor -ne $null)) {\\n$command += \\\" /d ${restartReason}:${reasonNumberMajor}:${reasonNumberMinor}\\\"\\n}\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Stop_Reboot = {\r\n command: 'Stop-Reboot',\r\n script: \"##Stop-Reboot##:Stop-Reboot.ps1\\n$command = \\\"Shutdown /a\\\"\\nInvoke-Expression -Command $command\\n\"\r\n }\r\n export const Get_DecryptedDataFromNode = {\r\n command: 'Get-DecryptedDataFromNode',\r\n script: \"##Get-DecryptedDataFromNode##:Get-DecryptedDataFromNode.ps1\\nparam (\\n[Parameter(Mandatory = $true)]\\n[String]\\n$encryptedData\\n)\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction DecryptDataWithJWKOnNode {\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue) {\\n$rsaProvider = (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n$decryptedBytes = $rsaProvider.Decrypt([Convert]::FromBase64String($encryptedData), [System.Security.Cryptography.RSAEncryptionPadding]::OaepSHA1)\\nreturn [System.Text.Encoding]::UTF8.GetString($decryptedBytes)\\n}\\nthrow [System.InvalidOperationException] \\\"Password decryption failed. RSACryptoServiceProvider Instance not found\\\"\\n}\\n\"\r\n }\r\n export const Get_EncryptionJWKOnNode = {\r\n command: 'Get-EncryptionJWKOnNode',\r\n script: \"##Get-EncryptionJWKOnNode##:Get-EncryptionJWKOnNode.ps1\\nSet-StrictMode -Version 5.0\\nNew-Variable -Name rsaProviderInstanceName -Value \\\"RSA\\\" -Option Constant\\nfunction Get-RSAProvider\\n{\\nif(Get-Variable -Scope Global -Name $rsaProviderInstanceName -EA SilentlyContinue)\\n{\\nreturn (Get-Variable -Scope Global -Name $rsaProviderInstanceName).Value\\n}\\n$Global:RSA = New-Object System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList 4096\\nreturn $RSA\\n}\\nfunction Get-JsonWebKey\\n{\\n$rsaProvider = Get-RSAProvider\\n$parameters = $rsaProvider.ExportParameters($false)\\nreturn [PSCustomObject]@{\\nkty = \\u0027RSA\\u0027\\nalg = \\u0027RSA-OAEP\\u0027\\ne = [Convert]::ToBase64String($parameters.Exponent)\\nn = [Convert]::ToBase64String($parameters.Modulus).TrimEnd(\\u0027=\\u0027).Replace(\\u0027+\\u0027, \\u0027-\\u0027).Replace(\\u0027/\\u0027, \\u0027_\\u0027)\\n}\\n}\\n$jwk = Get-JsonWebKey\\nConvertTo-Json $jwk -Compress\\n\"\r\n }\r\n export const Get_CimWin32LogicalDisk = {\r\n command: 'Get-CimWin32LogicalDisk',\r\n script: \"##Get-CimWin32LogicalDisk##:Get-CimWin32LogicalDisk.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_LogicalDisk\\n\"\r\n }\r\n export const Get_CimWin32NetworkAdapter = {\r\n command: 'Get-CimWin32NetworkAdapter',\r\n script: \"##Get-CimWin32NetworkAdapter##:Get-CimWin32NetworkAdapter.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_NetworkAdapter\\n\"\r\n }\r\n export const Get_CimWin32PhysicalMemory = {\r\n command: 'Get-CimWin32PhysicalMemory',\r\n script: \"##Get-CimWin32PhysicalMemory##:Get-CimWin32PhysicalMemory.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_PhysicalMemory\\n\"\r\n }\r\n export const Get_CimWin32Processor = {\r\n command: 'Get-CimWin32Processor',\r\n script: \"##Get-CimWin32Processor##:Get-CimWin32Processor.ps1\\nimport-module CimCmdlets\\nGet-CimInstance -Namespace root/cimv2 -ClassName Win32_Processor\\n\"\r\n }\r\n export const Get_ClusterInventory = {\r\n command: 'Get-ClusterInventory',\r\n script: \"##Get-ClusterInventory##:Get-ClusterInventory.ps1\\nImport-Module CimCmdlets -ErrorAction SilentlyContinue\\nImport-Module FailoverClusters -ErrorAction SilentlyContinue\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction getComputerName() {\\n$computerSystem = Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object Name, DNSHostName\\nif ($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif ($null -eq $computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn $computerName\\n}\\nreturn $null\\n}\\nfunction getIsClusterCmdletAvailable() {\\n$cmdlet = Get-Command \\\"Get-Cluster\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getClusterCimInstance() {\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Cluster -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object fqdn, S2DEnabled\\n}\\nreturn $null\\n}\\nfunction getClusterPerformanceHistoryPath() {\\n$storageSubsystem = Get-StorageSubSystem clus* -ErrorAction SilentlyContinue\\n$storageHealthSettings = Get-StorageHealthSetting -InputObject $storageSubsystem -Name \\\"System.PerformanceHistory.Path\\\" -ErrorAction SilentlyContinue\\nreturn $null -ne $storageHealthSettings\\n}\\nfunction getClusterInfo() {\\n$returnValues = @{}\\n$returnValues.Fqdn = $null\\n$returnValues.isS2DEnabled = $false\\n$returnValues.isTsdbEnabled = $false\\n$cluster = getClusterCimInstance\\nif ($cluster) {\\n$returnValues.Fqdn = $cluster.fqdn\\n$isS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -eq 1)\\n$returnValues.isS2DEnabled = $isS2dEnabled\\nif ($isS2DEnabled) {\\n$returnValues.isTsdbEnabled = getClusterPerformanceHistoryPath\\n} else {\\n$returnValues.isTsdbEnabled = $false\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getisClusterHealthCmdletAvailable() {\\n$cmdlet = Get-Command -Name \\\"Get-HealthFault\\\" -ErrorAction SilentlyContinue\\nreturn !!$cmdlet\\n}\\nfunction getIsBritannicaEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualMachineEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualMachine -ErrorAction SilentlyContinue)\\n}\\nfunction getIsBritannicaVirtualSwitchEnabled() {\\nreturn $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_VirtualSwitch -ErrorAction SilentlyContinue)\\n}\\n$clusterInfo = getClusterInfo\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $clusterInfo.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2DEnabled\\u0027 -Value $clusterInfo.isS2DEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsTsdbEnabled\\u0027 -Value $clusterInfo.isTsdbEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterHealthCmdletAvailable\\u0027 -Value (getIsClusterHealthCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value (getIsBritannicaEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualMachineEnabled\\u0027 -Value (getIsBritannicaVirtualMachineEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaVirtualSwitchEnabled\\u0027 -Value (getIsBritannicaVirtualSwitchEnabled)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsClusterCmdletAvailable\\u0027 -Value (getIsClusterCmdletAvailable)\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027CurrentClusterNode\\u0027 -Value (getComputerName)\\n$result\\n\"\r\n }\r\n export const Get_ClusterNodes = {\r\n command: 'Get-ClusterNodes',\r\n script: \"##Get-ClusterNodes##:Get-ClusterNodes.ps1\\nimport-module CimCmdlets\\nimport-module FailoverClusters -ErrorAction SilentlyContinue\\nSet-Variable -Name LogName -Option Constant -Value \\\"Microsoft-ServerManagementExperience\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name LogSource -Option Constant -Value \\\"SMEScripts\\\" -ErrorAction SilentlyContinue\\nSet-Variable -Name ScriptName -Option Constant -Value $MyInvocation.ScriptName -ErrorAction SilentlyContinue\\nfunction getClusterPowerShellSupport() {\\n$cmdletInfo = Get-Command \\u0027Get-ClusterNode\\u0027 -ErrorAction SilentlyContinue\\nreturn $cmdletInfo -and $cmdletInfo.Name -eq \\\"Get-ClusterNode\\\"\\n}\\nfunction getClusterNodeCimInstances() {\\nreturn Get-CimInstance -Namespace root/mscluster MSCluster_Node -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object @{Name=\\\"DrainStatus\\\"; Expression={$_.NodeDrainStatus}}, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodePsInstances() {\\nreturn Get-ClusterNode -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\\\\Select-Object DrainStatus, DynamicWeight, Name, NodeWeight, FaultDomain, State\\n}\\nfunction getClusterNodeFqdn([string]$clusterNodeName) {\\nreturn ([System.Net.Dns]::GetHostEntry($clusterNodeName)).HostName\\n}\\nfunction writeToEventLog([string]$message) {\\nMicrosoft.PowerShell.Management\\\\New-EventLog -LogName $LogName -Source $LogSource -ErrorAction SilentlyContinue\\nMicrosoft.PowerShell.Management\\\\Write-EventLog -LogName $LogName -Source $LogSource -EventId 0 -Category 0 -EntryType Warning `\\n-Message $message -ErrorAction SilentlyContinue\\n}\\nfunction getClusterNodes() {\\n$isClusterCmdletAvailable = getClusterPowerShellSupport\\nif ($isClusterCmdletAvailable) {\\n$clusterNodes = getClusterNodePsInstances\\n} else {\\n$clusterNodes = getClusterNodeCimInstances\\n}\\n$clusterNodeMap = @{}\\nforeach ($clusterNode in $clusterNodes) {\\n$clusterNodeName = $clusterNode.Name.ToLower()\\ntry\\n{\\n$clusterNodeFqdn = getClusterNodeFqdn $clusterNodeName -ErrorAction SilentlyContinue\\n}\\ncatch\\n{\\n$clusterNodeFqdn = $clusterNodeName\\nwriteToEventLog \\\"[$ScriptName]: The fqdn for node \\u0027$clusterNodeName\\u0027 could not be obtained. Defaulting to machine name \\u0027$clusterNodeName\\u0027\\\"\\n}\\n$clusterNodeResult = New-Object PSObject\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FullyQualifiedDomainName\\u0027 -Value $clusterNodeFqdn\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027Name\\u0027 -Value $clusterNodeName\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DynamicWeight\\u0027 -Value $clusterNode.DynamicWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027NodeWeight\\u0027 -Value $clusterNode.NodeWeight\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027FaultDomain\\u0027 -Value $clusterNode.FaultDomain\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027State\\u0027 -Value $clusterNode.State\\n$clusterNodeResult | Add-Member -MemberType NoteProperty -Name \\u0027DrainStatus\\u0027 -Value $clusterNode.DrainStatus\\n$clusterNodeMap.Add($clusterNodeName, $clusterNodeResult)\\n}\\nreturn $clusterNodeMap\\n}\\ngetClusterNodes\\n\"\r\n }\r\n export const Get_ServerInventory = {\r\n command: 'Get-ServerInventory',\r\n script: \"##Get-ServerInventory##:Get-ServerInventory.ps1\\nSet-StrictMode -Version 5.0\\nImport-Module CimCmdlets\\nImport-Module Storage -ErrorAction SilentlyContinue\\nfunction convertOsVersion([string]$osVersion) {\\n[Ref]$parsedVersion = $null\\nif (![Version]::TryParse($osVersion, $parsedVersion)) {\\nreturn $null\\n}\\n$version = [Version]$parsedVersion.Value\\nreturn New-Object Version -ArgumentList $version.Major, $version.Minor\\n}\\nfunction isCredSSPEnabled() {\\nSet-Variable credSSPServicePath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Service\\\\Auth\\\\CredSSP\\\"\\nSet-Variable credSSPClientPath -Option Constant -Value \\\"WSMan:\\\\localhost\\\\Client\\\\Auth\\\\CredSSP\\\"\\n$credSSPServerEnabled = $false;\\n$credSSPClientEnabled = $false;\\n$credSSPServerService = Get-Item $credSSPServicePath -ErrorAction SilentlyContinue\\nif ($credSSPServerService) {\\n$credSSPServerEnabled = [System.Convert]::ToBoolean($credSSPServerService.Value)\\n}\\n$credSSPClientService = Get-Item $credSSPClientPath -ErrorAction SilentlyContinue\\nif ($credSSPClientService) {\\n$credSSPClientEnabled = [System.Convert]::ToBoolean($credSSPClientService.Value)\\n}\\nreturn ($credSSPServerEnabled -or $credSSPClientEnabled)\\n}\\nfunction isHyperVRoleInstalled() {\\n$vmmsService = Get-Service -Name \\\"VMMS\\\" -ErrorAction SilentlyContinue\\nreturn $vmmsService -and $vmmsService.Name -eq \\\"VMMS\\\"\\n}\\nfunction isHyperVPowerShellSupportInstalled() {\\nreturn !!(Get-Module -ListAvailable Hyper-V -ErrorAction SilentlyContinue)\\n}\\nfunction isWMF5Installed([string] $operatingSystemVersion) {\\nSet-Variable Server2016 -Option Constant -Value (New-Object Version \\u002710.0\\u0027) # And Windows 10 client SKUs\\nSet-Variable Server2012 -Option Constant -Value (New-Object Version \\u00276.2\\u0027)\\n$version = convertOsVersion $operatingSystemVersion\\nif (-not $version) {\\nreturn $false\\n}\\nif ($version -ge $Server2016) {\\nreturn $true\\n}\\nelse {\\nif ($version -ge $Server2012) {\\n$registryKey = \\u0027HKLM:\\\\SOFTWARE\\\\Microsoft\\\\PowerShell\\\\3\\\\PowerShellEngine\\u0027\\n$registryKeyValue = Get-ItemProperty -Path $registryKey -Name PowerShellVersion -ErrorAction SilentlyContinue\\nif ($registryKeyValue -and ($registryKeyValue.PowerShellVersion.Length -ne 0)) {\\n$installedWmfVersion = [Version]$registryKeyValue.PowerShellVersion\\nif ($installedWmfVersion -ge [Version]\\u00275.0\\u0027) {\\nreturn $true\\n}\\n}\\n}\\n}\\nreturn $false\\n}\\nfunction isUserAnAdministrator() {\\nreturn ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] \\\"Administrator\\\")\\n}\\nfunction getClusterInformation() {\\n$returnValues = @{ }\\n$returnValues.IsS2dEnabled = $false\\n$returnValues.IsCluster = $false\\n$returnValues.ClusterFqdn = $null\\n$returnValues.IsBritannicaEnabled = $false\\n$namespace = Get-CimInstance -Namespace root/MSCluster -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespace) {\\n$cluster = Get-CimInstance -Namespace root/MSCluster -ClassName MSCluster_Cluster -ErrorAction SilentlyContinue\\nif ($cluster) {\\n$returnValues.IsCluster = $true\\n$returnValues.ClusterFqdn = $cluster.Fqdn\\n$returnValues.IsS2dEnabled = !!(Get-Member -InputObject $cluster -Name \\\"S2DEnabled\\\") -and ($cluster.S2DEnabled -gt 0)\\n$returnValues.IsBritannicaEnabled = $null -ne (Get-CimInstance -Namespace root/sddc/management -ClassName SDDC_Cluster -ErrorAction SilentlyContinue)\\n}\\n}\\nreturn $returnValues\\n}\\nfunction getComputerFqdnAndAddress($computerName) {\\n$hostEntry = [System.Net.Dns]::GetHostEntry($computerName)\\n$addressList = @()\\nforeach ($item in $hostEntry.AddressList) {\\n$address = New-Object PSObject\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027IpAddress\\u0027 -Value $item.ToString()\\n$address | Add-Member -MemberType NoteProperty -Name \\u0027AddressFamily\\u0027 -Value $item.AddressFamily.ToString()\\n$addressList += $address\\n}\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $hostEntry.HostName\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $addressList\\nreturn $result\\n}\\nfunction getHostFqdnAndAddress($computerSystem) {\\n$computerName = $computerSystem.DNSHostName\\nif (!$computerName) {\\n$computerName = $computerSystem.Name\\n}\\nreturn getComputerFqdnAndAddress $computerName\\n}\\nfunction getManagementToolsSupportInformation() {\\n$returnValues = @{ }\\n$returnValues.ManagementToolsAvailable = $false\\n$returnValues.ServerManagerAvailable = $false\\n$namespaces = Get-CimInstance -Namespace root/microsoft/windows -ClassName __NAMESPACE -ErrorAction SilentlyContinue\\nif ($namespaces) {\\n$returnValues.ManagementToolsAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ManagementTools\\\" })\\n$returnValues.ServerManagerAvailable = !!($namespaces | Where-Object { $_.Name -ieq \\\"ServerManager\\\" })\\n}\\nreturn $returnValues\\n}\\nfunction isRemoteAppEnabled() {\\nSet-Variable key -Option Constant -Value \\\"HKLM:\\\\\\\\SOFTWARE\\\\\\\\Microsoft\\\\\\\\Windows NT\\\\\\\\CurrentVersion\\\\\\\\Terminal Server\\\\\\\\TSAppAllowList\\\"\\n$registryKeyValue = Get-ItemProperty -Path $key -Name fDisabledAllowList -ErrorAction SilentlyContinue\\nif (-not $registryKeyValue) {\\nreturn $false\\n}\\nreturn $registryKeyValue.fDisabledAllowList -eq 1\\n}\\nfunction getOperatingSystemInfo() {\\n$operatingSystemInfo = Get-CimInstance Win32_OperatingSystem | Microsoft.PowerShell.Utility\\\\Select-Object csName, Caption, OperatingSystemSKU, Version, ProductType, OSType, LastBootUpTime, SerialNumber\\n$currentVersion = Get-ItemProperty -Path \\\"HKLM:\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\" | Microsoft.PowerShell.Utility\\\\Select-Object CurrentBuild, UBR, DisplayVersion\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name CurrentBuild -Value $currentVersion.CurrentBuild\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name UpdateBuildRevision -Value $currentVersion.UBR\\n$operatingSystemInfo | Add-Member -MemberType NoteProperty -Name DisplayVersion -Value $currentVersion.DisplayVersion\\nreturn $operatingSystemInfo\\n}\\nfunction getComputerSystemInfo() {\\nreturn Get-CimInstance Win32_ComputerSystem -ErrorAction SilentlyContinue | `\\nMicrosoft.PowerShell.Utility\\\\Select-Object TotalPhysicalMemory, DomainRole, Manufacturer, Model, NumberOfLogicalProcessors, Domain, Workgroup, DNSHostName, Name, PartOfDomain, SystemFamily, SystemSKUNumber\\n}\\nfunction getSmbiosData($computerSystem) {\\n$ChassisTypes =\\n@{\\n1 = \\u0027Other\\u0027\\n2 = \\u0027Unknown\\u0027\\n3 = \\u0027Desktop\\u0027\\n4 = \\u0027Low Profile Desktop\\u0027\\n5 = \\u0027Pizza Box\\u0027\\n6 = \\u0027Mini Tower\\u0027\\n7 = \\u0027Tower\\u0027\\n8 = \\u0027Portable\\u0027\\n9 = \\u0027Laptop\\u0027\\n10 = \\u0027Notebook\\u0027\\n11 = \\u0027Hand Held\\u0027\\n12 = \\u0027Docking Station\\u0027\\n13 = \\u0027All in One\\u0027\\n14 = \\u0027Sub Notebook\\u0027\\n15 = \\u0027Space-Saving\\u0027\\n16 = \\u0027Lunch Box\\u0027\\n17 = \\u0027Main System Chassis\\u0027\\n18 = \\u0027Expansion Chassis\\u0027\\n19 = \\u0027SubChassis\\u0027\\n20 = \\u0027Bus Expansion Chassis\\u0027\\n21 = \\u0027Peripheral Chassis\\u0027\\n22 = \\u0027Storage Chassis\\u0027\\n23 = \\u0027Rack Mount Chassis\\u0027\\n24 = \\u0027Sealed-Case PC\\u0027\\n25 = \\u0027Multi-system chassis\\u0027\\n26 = \\u0027Compact PCI\\u0027\\n27 = \\u0027Advanced TCA\\u0027\\n28 = \\u0027Blade\\u0027\\n29 = \\u0027Blade Enclosure\\u0027\\n30 = \\u0027Tablet\\u0027\\n31 = \\u0027Convertible\\u0027\\n32 = \\u0027Detachable\\u0027\\n33 = \\u0027IoT Gateway\\u0027\\n34 = \\u0027Embedded PC\\u0027\\n35 = \\u0027Mini PC\\u0027\\n36 = \\u0027Stick PC\\u0027\\n}\\n$list = New-Object System.Collections.ArrayList\\n$win32_Bios = Get-CimInstance -class Win32_Bios\\n$obj = New-Object -Type PSObject | Microsoft.PowerShell.Utility\\\\Select-Object SerialNumber, Manufacturer, UUID, BaseBoardProduct, ChassisTypes, Chassis, SystemFamily, SystemSKUNumber, SMBIOSAssetTag\\n$obj.SerialNumber = $win32_Bios.SerialNumber\\n$obj.Manufacturer = $win32_Bios.Manufacturer\\n$computerSystemProduct = Get-CimInstance Win32_ComputerSystemProduct\\nif ($null -ne $computerSystemProduct) {\\n$obj.UUID = $computerSystemProduct.UUID\\n}\\n$baseboard = Get-CimInstance Win32_BaseBoard\\nif ($null -ne $baseboard) {\\n$obj.BaseBoardProduct = $baseboard.Product\\n}\\n$systemEnclosure = Get-CimInstance Win32_SystemEnclosure\\nif ($null -ne $systemEnclosure) {\\n$obj.SMBIOSAssetTag = $systemEnclosure.SMBIOSAssetTag\\n}\\n$obj.ChassisTypes = Get-CimInstance Win32_SystemEnclosure | Microsoft.PowerShell.Utility\\\\Select-Object -ExpandProperty ChassisTypes\\n$obj.Chassis = New-Object -TypeName \\u0027System.Collections.ArrayList\\u0027\\n$obj.ChassisTypes | ForEach-Object -Process {\\n$obj.Chassis.Add($ChassisTypes[[int]$_])\\n}\\n$obj.SystemFamily = $computerSystem.SystemFamily\\n$obj.SystemSKUNumber = $computerSystem.SystemSKUNumber\\n$list.Add($obj) | Out-Null\\nreturn $list\\n}\\nfunction getAzureArcStatus() {\\n$LogName = \\\"Microsoft-ServerManagementExperience\\\"\\n$LogSource = \\\"SMEScript\\\"\\n$ScriptName = \\\"Get-ServerInventory.ps1 - getAzureArcStatus()\\\"\\nMicrosoft.PowerShell.Management\\\\New-EventLog -LogName $LogName -Source $LogSource -ErrorAction SilentlyContinue\\nGet-Service -Name himds -ErrorVariable Err -ErrorAction SilentlyContinue | Out-Null\\nif (!!$Err) {\\n$Err = \\\"The Azure arc agent is not installed. Details: $Err\\\"\\nMicrosoft.PowerShell.Management\\\\Write-EventLog -LogName $LogName -Source $LogSource -EventId 0 -Category 0 -EntryType Information `\\n-Message \\\"[$ScriptName]: $Err\\\" -ErrorAction SilentlyContinue\\n$status = \\\"NotInstalled\\\"\\n}\\nelse {\\n$status = (azcmagent show --json | ConvertFrom-Json -ErrorAction Stop).status\\n}\\nreturn $status\\n}\\nfunction getSystemLockdownPolicy() {\\nreturn [System.Management.Automation.Security.SystemPolicy]::GetSystemLockdownPolicy().ToString()\\n}\\nfunction isServerOsHCI([string] $operatingSystemCaption) {\\nreturn $operatingSystemCaption -eq \\\"Microsoft Azure Stack HCI\\\"\\n}\\n$operatingSystem = getOperatingSystemInfo\\n$computerSystem = getComputerSystemInfo\\n$isAdministrator = isUserAnAdministrator\\n$fqdnAndAddress = getHostFqdnAndAddress $computerSystem\\n$hostname = [Environment]::MachineName\\n$netbios = $env:ComputerName\\n$managementToolsInformation = getManagementToolsSupportInformation\\n$isWmfInstalled = isWMF5Installed $operatingSystem.Version\\n$clusterInformation = getClusterInformation -ErrorAction SilentlyContinue\\n$isHyperVPowershellInstalled = isHyperVPowerShellSupportInstalled\\n$isHyperVRoleInstalled = isHyperVRoleInstalled\\n$isCredSSPEnabled = isCredSSPEnabled\\n$isRemoteAppEnabled = isRemoteAppEnabled\\n$smbiosData = getSmbiosData $computerSystem\\n$azureArcStatus = getAzureArcStatus\\n$systemLockdownPolicy = getSystemLockdownPolicy\\n$isHciServer = isServerOsHCI $operatingSystem.Caption\\n$result = New-Object PSObject\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsAdministrator\\u0027 -Value $isAdministrator\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027OperatingSystem\\u0027 -Value $operatingSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ComputerSystem\\u0027 -Value $computerSystem\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Fqdn\\u0027 -Value $fqdnAndAddress.Fqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AddressList\\u0027 -Value $fqdnAndAddress.AddressList\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027Hostname\\u0027 -Value $hostname\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027NetBios\\u0027 -Value $netbios\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsManagementToolsAvailable\\u0027 -Value $managementToolsInformation.ManagementToolsAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsServerManagerAvailable\\u0027 -Value $managementToolsInformation.ServerManagerAvailable\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsWmfInstalled\\u0027 -Value $isWmfInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCluster\\u0027 -Value $clusterInformation.IsCluster\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027ClusterFqdn\\u0027 -Value $clusterInformation.ClusterFqdn\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsS2dEnabled\\u0027 -Value $clusterInformation.IsS2dEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsBritannicaEnabled\\u0027 -Value $clusterInformation.IsBritannicaEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVRoleInstalled\\u0027 -Value $isHyperVRoleInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHyperVPowershellInstalled\\u0027 -Value $isHyperVPowershellInstalled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsCredSSPEnabled\\u0027 -Value $isCredSSPEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsRemoteAppEnabled\\u0027 -Value $isRemoteAppEnabled\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027SmbiosData\\u0027 -Value $smbiosData\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027AzureArcStatus\\u0027 -Value $azureArcStatus\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027SystemLockdownPolicy\\u0027 -Value $systemLockdownPolicy\\n$result | Add-Member -MemberType NoteProperty -Name \\u0027IsHciServer\\u0027 -Value $isHciServer\\n$result\\n\"\r\n }\r\n}\r\n"]}
|