@microsoft/windows-admin-center-sdk 4.52.0 → 4.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/angular/esm2020/src/controls/master-view/master-view.component.mjs +8 -6
  2. 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
  3. package/angular/esm2020/src/service/navigation.service.mjs +3 -1
  4. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +64 -5
  5. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  6. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +64 -5
  7. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  8. package/angular/src/controls/master-view/master-view.component.d.ts +6 -2
  9. 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
  10. package/core/assets/strings/cs-CZ/strings.json +1 -1
  11. package/core/assets/strings/de-DE/strings.json +1 -1
  12. package/core/assets/strings/es-ES/strings.json +1 -1
  13. package/core/assets/strings/fr-FR/strings.json +1 -1
  14. package/core/assets/strings/hu-HU/strings.json +1 -1
  15. package/core/assets/strings/id-ID/strings.json +1 -1
  16. package/core/assets/strings/it-IT/strings.json +1 -1
  17. package/core/assets/strings/ja-JP/strings.json +1 -1
  18. package/core/assets/strings/ko-KR/strings.json +1 -1
  19. package/core/assets/strings/nl-NL/strings.json +1 -1
  20. package/core/assets/strings/pl-PL/strings.json +1 -1
  21. package/core/assets/strings/pt-BR/strings.json +1 -1
  22. package/core/assets/strings/pt-PT/strings.json +1 -1
  23. package/core/assets/strings/ru-RU/strings.json +1 -1
  24. package/core/assets/strings/strings.json +1 -1
  25. package/core/assets/strings/sv-SE/strings.json +1 -1
  26. package/core/assets/strings/tr-TR/strings.json +1 -1
  27. package/core/assets/strings/zh-CN/strings.json +1 -1
  28. package/core/assets/strings/zh-TW/strings.json +1 -1
  29. package/core/azure/azure-constants.d.ts +6 -3
  30. package/core/azure/azure-constants.d.ts.map +1 -1
  31. package/core/azure/azure-constants.js +7 -4
  32. package/core/azure/azure-constants.js.map +1 -1
  33. package/core/azure/models/azureArcStatusEnum.d.ts +4 -2
  34. package/core/azure/models/azureArcStatusEnum.d.ts.map +1 -1
  35. package/core/azure/models/azureArcStatusEnum.js +3 -1
  36. package/core/azure/models/azureArcStatusEnum.js.map +1 -1
  37. package/core/data/gateway-connection.d.ts +12 -0
  38. package/core/data/gateway-connection.d.ts.map +1 -1
  39. package/core/data/gateway-connection.js +16 -0
  40. package/core/data/gateway-connection.js.map +1 -1
  41. package/core/data/gateway-url-translator.d.ts +1 -0
  42. package/core/data/gateway-url-translator.d.ts.map +1 -1
  43. package/core/data/gateway-url-translator.js +15 -0
  44. package/core/data/gateway-url-translator.js.map +1 -1
  45. package/core/data/net.d.ts +1 -0
  46. package/core/data/net.d.ts.map +1 -1
  47. package/core/data/net.js +26 -1
  48. package/core/data/net.js.map +1 -1
  49. package/core/data/websocket-stream.d.ts.map +1 -1
  50. package/core/data/websocket-stream.js +2 -2
  51. package/core/data/websocket-stream.js.map +1 -1
  52. package/core/generated/strings.d.ts +3 -0
  53. package/core/generated/strings.d.ts.map +1 -1
  54. package/core/generated/strings.js.map +1 -1
  55. package/core/notification/notification.d.ts.map +1 -1
  56. package/core/notification/notification.js +1 -3
  57. package/core/notification/notification.js.map +1 -1
  58. package/core/shared/server-inventory/server-inventory-cache.d.ts.map +1 -1
  59. package/core/shared/server-inventory/server-inventory-cache.js +0 -1
  60. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  61. package/package.json +3 -3
  62. package/styles/css/main-v2.css +1 -1
  63. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.d.ts +14 -0
  64. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.d.ts.map +1 -0
  65. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +21 -0
  66. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js.map +1 -0
  67. package/tools/wac-cli/src/angular15/main.d.ts +32 -2
  68. package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
  69. package/tools/wac-cli/src/angular15/main.js +66 -6
  70. package/tools/wac-cli/src/angular15/main.js.map +1 -1
  71. package/tools/wac-cli/src/angular15/test/ui-test-automation-package.json/after.json +14 -0
  72. package/tools/wac-cli/src/angular15/test/ui-test-automation-package.json/before.json +13 -0
  73. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.d.ts +15 -0
  74. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.d.ts.map +1 -0
  75. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +48 -0
  76. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js.map +1 -0
  77. package/tools/wac-cli/src/angular15/utils/main-debugger.d.ts.map +1 -1
  78. package/tools/wac-cli/src/angular15/utils/main-debugger.js +3 -0
  79. package/tools/wac-cli/src/angular15/utils/main-debugger.js.map +1 -1
  80. package/tools/wac-cli/src/angular15/utils/update-shell-references.d.ts +2 -0
  81. package/tools/wac-cli/src/angular15/utils/update-shell-references.d.ts.map +1 -0
  82. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +69 -0
  83. package/tools/wac-cli/src/angular15/utils/update-shell-references.js.map +1 -0
  84. package/tools/wac-cli/src/common.d.ts +6 -0
  85. package/tools/wac-cli/src/common.d.ts.map +1 -1
  86. package/tools/wac-cli/src/common.js +13 -0
  87. package/tools/wac-cli/src/common.js.map +1 -1
  88. package/tools/wac-cli/src/create/main.d.ts.map +1 -1
  89. package/tools/wac-cli/src/create/main.js +3 -51
  90. package/tools/wac-cli/src/create/main.js.map +1 -1
  91. package/tools/wac-cli/src/eslint/main.d.ts +5 -1
  92. package/tools/wac-cli/src/eslint/main.d.ts.map +1 -1
  93. package/tools/wac-cli/src/eslint/main.js +17 -2
  94. package/tools/wac-cli/src/eslint/main.js.map +1 -1
  95. package/tools/wac-cli/src/index.d.ts.map +1 -1
  96. package/tools/wac-cli/src/index.js +2 -2
  97. package/tools/wac-cli/src/index.js.map +1 -1
@@ -71,6 +71,10 @@ export class GatewayConnection extends RpcServiceForwarder {
71
71
  * The elevate callback observable.
72
72
  */
73
73
  elevateCallbackInternal = () => of(false);
74
+ /**
75
+ * The replay subject for navigation ready state.
76
+ */
77
+ navigationReady = new ReplaySubject(1);
74
78
  /**
75
79
  * Sets the elevate callback observable.
76
80
  */
@@ -115,6 +119,18 @@ export class GatewayConnection extends RpcServiceForwarder {
115
119
  get gatewayUrlObservable() {
116
120
  return this.gatewayUrlAwaiter.asObservable();
117
121
  }
122
+ /**
123
+ * Gets the navigation ready observable.
124
+ */
125
+ get navigationReadyObservable() {
126
+ return this.navigationReady.asObservable();
127
+ }
128
+ /**
129
+ * Sets the navigation ready status.
130
+ */
131
+ set navigationReadyStatus(ready) {
132
+ this.navigationReady.next(ready);
133
+ }
118
134
  /**
119
135
  * Gets the gateway information.
120
136
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/gateway-connection.ts"],"names":[],"mappings":"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","file":"gateway-connection.js","sourcesContent":["import { Observable, of, ReplaySubject, Subscription, throwError } from 'rxjs';\r\nimport { AjaxError, AjaxRequest, AjaxResponse } from 'rxjs/ajax';\r\nimport { catchError, expand, filter, map, mergeMap, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { RpcObservableElevateClient } from '../rpc/elevate/rpc-observable-elevate-client';\r\nimport {\r\n RpcObservableElevateError, RpcObservableElevateRequest, RpcObservableElevateResult\r\n} from '../rpc/elevate/rpc-observable-elevate-model';\r\nimport { RpcObservableElevateServer } from '../rpc/elevate/rpc-observable-elevate-server';\r\nimport { RpcForwardResponse } from '../rpc/forward/rpc-forward-model';\r\nimport { Rpc } from '../rpc/rpc';\r\nimport { RpcRelationshipType } from '../rpc/rpc-base';\r\nimport { RpcServiceForwarder } from '../rpc/rpc-forwarder';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { SignedHttpRequestToken } from '../security/sign-on-manager';\r\nimport { CoreEnvironment } from './core-environment';\r\nimport { GatewayStatus } from './gateway-status';\r\nimport { GatewayUrlBuilder } from './gateway-url-builder';\r\nimport { GatewayUrls } from './gateway-urls';\r\nimport { Http, HttpMethod, HttpResponseRetryHandler, HttpRetryOptions } from './http';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\n\r\n/**\r\n * Gateway Request options that we use to extend the AjaxRequest interface\r\n */\r\nexport interface GatewayRequestOptions {\r\n /**\r\n * Retry handler implementation for a request.\r\n * These handlers are used to invoke specific functionality for non-200 status codes in the http response.\r\n */\r\n retryHandlers?: HttpResponseRetryHandler[];\r\n\r\n /**\r\n * Determines the maximum number of times that any of the retry handlers will be tried.\r\n * before giving up and surfacing the error to the original caller\r\n */\r\n maxRetryCount?: number;\r\n\r\n /**\r\n * Observable handler to insert asynchronous logic before the actual http response is sent.\r\n * For Example: Waiting for pending authentication to complete before adding an authentication header\r\n */\r\n beforeCall?: (request: GatewayRequest) => Observable<void>;\r\n}\r\n\r\n/**\r\n * Extension of AjaxRequest interface for calling the Gateway API\r\n */\r\nexport interface GatewayRequest extends AjaxRequest, GatewayRequestOptions {\r\n}\r\n\r\n/**\r\n * Initialization object data for the Gateway's base class.\r\n */\r\nexport interface GatewayRPCForwardedProperties {\r\n /**\r\n * The gateway URL.\r\n */\r\n gatewayName: string;\r\n\r\n /**\r\n * Indicate whether gatewayUrl option was specified. (default to be false)\r\n */\r\n gatewayUrlSpecified: boolean;\r\n\r\n /**\r\n * The stative version. (default to be null)\r\n */\r\n staticVersion: string;\r\n}\r\n\r\n/**\r\n * The gateway information on current gateway URL.\r\n */\r\nexport interface GatewayInformation {\r\n /**\r\n * The name of gateway node.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Indicating if https is used.\r\n */\r\n secure: boolean;\r\n\r\n /**\r\n * The port number of gateway.\r\n */\r\n port: number;\r\n}\r\n\r\n/**\r\n * Condition of gateway.\r\n */\r\nexport interface GatewayCondition {\r\n /**\r\n * the gateway is running as service mode (installed on server operating system).\r\n */\r\n isServiceMode: boolean;\r\n\r\n /**\r\n * the gateway is elevated on the desktop mode.\r\n */\r\n isGatewayProcessElevated: boolean;\r\n\r\n /**\r\n * the user account is a member of the gateway administrators.\r\n */\r\n isGatewayAdmin: boolean;\r\n}\r\n\r\n/**\r\n * The Gateway Connection class for creating requests and calling the Gateway's REST API\r\n */\r\nexport class GatewayConnection extends RpcServiceForwarder {\r\n private static rpcCommands = {\r\n forbiddenReceived: 'forbiddenRecieved'\r\n };\r\n\r\n /**\r\n * The IPv4 address for localhost\r\n */\r\n private readonly localhostIpV4 = '127.0.0.1';\r\n\r\n /**\r\n * The IPv6 address for localhost\r\n */\r\n private readonly localhostIpV6 = '::1';\r\n\r\n /**\r\n * The localhost name\r\n */\r\n private readonly localhost = 'localhost';\r\n\r\n /**\r\n * Time interval to check for internalGatewayStatus refresh.\r\n */\r\n private readonly lastUpdatedInternalGatewayStatusInterval = 1000 * 60 * 10; // 10 minutes\r\n\r\n /**\r\n * internally maintained gateway URL.\r\n */\r\n private internalGatewayUrl: string;\r\n\r\n /**\r\n * internally maintained static version.\r\n */\r\n private internalStaticVersion: string;\r\n\r\n /**\r\n * gatewayUrl param is specified.\r\n */\r\n private internalGatewayUrlSpecified: boolean;\r\n\r\n /**\r\n * Last time internal gateway status was updated in milliseconds\r\n */\r\n private lastUpdatedInternalGatewayStatus: number;\r\n\r\n /**\r\n * Internally maintained gateway status.\r\n */\r\n private internalGatewayStatus: Observable<GatewayStatus>;\r\n\r\n /**\r\n * The replay subject for gateway url to settle.\r\n */\r\n private gatewayUrlAwaiter = new ReplaySubject<string>(1);\r\n\r\n /**\r\n * The RPC observable elevate client.\r\n */\r\n private elevateClient: RpcObservableElevateClient = null;\r\n\r\n /**\r\n * The RPC observable elevate server.\r\n */\r\n private elevateServer: RpcObservableElevateServer = null;\r\n\r\n /**\r\n * The elevate callback observable.\r\n */\r\n private elevateCallbackInternal: () => Observable<boolean> = () => of(false);\r\n\r\n /**\r\n * Sets the elevate callback observable.\r\n */\r\n public set elevateCallback(value: () => Observable<boolean>) {\r\n this.elevateCallbackInternal = value;\r\n if (!this.elevateServer) {\r\n this.elevateServer = new RpcObservableElevateServer(this.rpc);\r\n this.elevateServer.register((_context: RpcObservableElevateRequest) => {\r\n return this.elevateCallbackInternal()\r\n .pipe(\r\n catchError((error, _caught) =>\r\n throwError(() => <RpcObservableElevateError>{error: Net.getErrorMessage(error) })),\r\n map(result =>\r\n <RpcObservableElevateResult>{ elevated: result })\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Indicates that the gateway is disabled and therefore should not be called.\r\n */\r\n public get disabled(): boolean {\r\n const environment = MsftSme.self().Environment;\r\n return environment && environment.configuration.gateway.disabled;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL to connect to.\r\n */\r\n public get gatewayUrl(): string {\r\n return this.internalGatewayUrl;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL specified state.\r\n */\r\n public get staticVersion() {\r\n return this.internalStaticVersion;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL specified state.\r\n */\r\n public get gatewayUrlSpecified(): boolean {\r\n return this.internalGatewayUrlSpecified;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL observable while setting up.\r\n */\r\n public get gatewayUrlObservable(): Observable<string> {\r\n return this.gatewayUrlAwaiter.asObservable();\r\n }\r\n\r\n /**\r\n * Gets the gateway information.\r\n */\r\n public get gatewayInfo(): GatewayInformation {\r\n if (!this.internalGatewayUrl) {\r\n throw new Error(MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.GatewayUrlNotConfigured.message);\r\n }\r\n\r\n // RegEx: ('http' or 'https') '://' (('<gatewayName1>'):('<port>') or ('<gatewayName2>'))\r\n // 0: url\r\n // 1: https or http\r\n // 2: <gatewayName1>:<port> or <gatewayName2>\r\n // 3: <gatewayName1> or undefined\r\n // 4: <port> or undefined\r\n // 5: <gatewayName2>\r\n const url = MsftSme.trimEnd(this.internalGatewayUrl.toLowerCase(), '/');\r\n const match = url.match(/(http|https):\\/\\/((.+):(\\d+)|(.+))/);\r\n if (!match) {\r\n throw new Error(MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.GatewayUrlMalformed.message);\r\n }\r\n\r\n const secure = (match[1] === 'https');\r\n const name = match[3] || match[2];\r\n const port = parseInt(match[4], 10) || (secure ? 443 : 80);\r\n return { name, secure, port };\r\n }\r\n\r\n /**\r\n * Gets the gateway node name to make a CIM/PowerShell query to the gateway node.\r\n */\r\n public get gatewayName(): string {\r\n // localhost will be used to locally query gateway node. if this causes any access problem, need to be replaced.\r\n return 'localhost';\r\n }\r\n\r\n /**\r\n * Gets gateway status from cache or sets cache if it doesn't exist.\r\n */\r\n private get gatewayStatus(): Observable<any> {\r\n if (!this.internalGatewayStatus\r\n || Date.now() - this.lastUpdatedInternalGatewayStatus > this.lastUpdatedInternalGatewayStatusInterval) {\r\n return this.getStatus();\r\n }\r\n\r\n return of(this.internalGatewayStatus);\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the Gateway class.\r\n *\r\n * @param http the Http object.\r\n * @param rpc the Rpc class.\r\n * @patam authorizationManager the authorization manager class object.\r\n */\r\n constructor(public http: Http, rpc: Rpc, private authorizationManager: AuthorizationManager) {\r\n super('gateway-connection', rpc);\r\n\r\n // restore the AAD token if exist becase ealier access of token is required for gateway calls.\r\n authorizationManager.signOnManager.applySignedHttpRequestToken(\r\n <SignedHttpRequestToken>MsftSme.self().Environment.configuration?.signOn?.signedHttpRequestToken);\r\n }\r\n\r\n /**\r\n * Configure the gateway URL to connect to.\r\n */\r\n public configureGatewayEnvironment(url: string, urlSpecified: boolean, staticVersion: string): void {\r\n // trim last \"/\"\r\n if (url[url.length - 1] === '/') {\r\n url = url.substring(0, url.length - 1);\r\n }\r\n\r\n this.internalGatewayUrl = url;\r\n this.internalGatewayUrlSpecified = urlSpecified,\r\n this.internalStaticVersion = staticVersion;\r\n this.gatewayUrlAwaiter.next(url);\r\n }\r\n\r\n /**\r\n * Update the url with static version option.\r\n * @param url the original URL including options.\r\n * @returns updated url with \"version=\" option if staticVersion present.\r\n */\r\n public addStaticVersion(url: string): string {\r\n if (MsftSme.isNullOrWhiteSpace(this.staticVersion) || this.staticVersion.indexOf('staticVersion=') < 0) {\r\n return url;\r\n }\r\n\r\n const splitter = url.indexOf('?') > 0 ? '&' : '?';\r\n return `${url}${splitter}staticVersion=${this.staticVersion}`;\r\n }\r\n\r\n /**\r\n * Makes a POST call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public post(relativeUrl: string, body?: any, request?: GatewayRequest): Observable<any> {\r\n const postRequest = this.createRequest(HttpMethod.Post, relativeUrl, body, request);\r\n return this.call(postRequest);\r\n }\r\n\r\n /**\r\n * Makes a GET call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param request the gateway request object.\r\n */\r\n public get(relativeUrl: string, request?: GatewayRequest): Observable<any> {\r\n const getRequest = this.createRequest(HttpMethod.Get, relativeUrl, null, request);\r\n return this.call(getRequest);\r\n }\r\n\r\n /**\r\n * Makes a PUT call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public put(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any> {\r\n const putRequest = this.createRequest(HttpMethod.Put, relativeUrl, body, request);\r\n return this.call(putRequest);\r\n }\r\n\r\n /**\r\n * Makes a PATCH call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public patch(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any> {\r\n const patchRequest = this.createRequest(HttpMethod.Patch, relativeUrl, body, request);\r\n return this.call(patchRequest);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public delete(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any> {\r\n const deleteRequest = this.createRequest(HttpMethod.Delete, relativeUrl, body, request);\r\n return this.call(deleteRequest);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway without waiting for the response.\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param request the gateway request object.\r\n */\r\n public deleteQuick(relativeUrl: string, headers?: any): void {\r\n headers[headerConstants.MODULE_NAME] = EnvironmentModule.getModuleName();\r\n headers[headerConstants.MODULE_VERSION] = EnvironmentModule.getModuleVersion();\r\n headers[headerConstants.ACCEPT_LANGUAGE] = CoreEnvironment.localizationManager.getLocaleId().neutral;\r\n if (this.staticVersion) {\r\n headers[headerConstants.STATIC_VERSION] = this.staticVersion;\r\n }\r\n\r\n if (this.authorizationManager.signOnManager.isSignOnTokenEnabled) {\r\n this.authorizationManager.signOnManager.SetAadAuthorizationHeader(headers);\r\n }\r\n\r\n const url = Net.gatewayApi(this.gatewayUrl, relativeUrl);\r\n this.http.deleteQuick(url, headers);\r\n }\r\n\r\n /**\r\n * Creates a GatewayRequest.\r\n *\r\n * @param method the http method to use\r\n * @param relativeUrl the relative Url after \"/api/\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object to extend.\r\n */\r\n public createRequest(\r\n method: string,\r\n relativeUrl: string,\r\n body?: any,\r\n request?: GatewayRequest): GatewayRequest {\r\n\r\n const defaultMaxRetry = 3;\r\n request = MsftSme.deepAssign({}, request);\r\n\r\n // if request is undefined, default to empty object\r\n request = request || <GatewayRequest>{};\r\n request.headers = request.headers || {};\r\n (<any>request).headers[headerConstants.MODULE_NAME] = EnvironmentModule.getModuleName();\r\n (<any>request).headers[headerConstants.MODULE_VERSION] = EnvironmentModule.getModuleVersion();\r\n (<any>request).headers[headerConstants.ACCEPT_LANGUAGE] = CoreEnvironment.localizationManager.getLocaleId().neutral;\r\n if (this.staticVersion) {\r\n (<any>request).headers[headerConstants.STATIC_VERSION] = this.staticVersion;\r\n }\r\n\r\n // use default retry options if none are provided\r\n const retryHandlers: HttpResponseRetryHandler[] = [];\r\n if (this.authorizationManager.signOnManager.isSignOnTokenEnabled) {\r\n this.authorizationManager.signOnManager.SetAadAuthorizationHeader(request.headers);\r\n retryHandlers.push({\r\n canHandle: (code, error) => this.authorizationManager.signOnManager.canHandleUnauthorizedLogin(code, error),\r\n handle: (code, originalRequest, error) =>\r\n this.authorizationManager.signOnManager.handleUnauthorizedLogin(code, originalRequest, error)\r\n });\r\n }\r\n\r\n if (request.retryHandlers != null && request.retryHandlers.length > 0) {\r\n retryHandlers.push(...request.retryHandlers);\r\n }\r\n\r\n return Object.assign(request, <GatewayRequest><unknown>{\r\n method: method,\r\n url: relativeUrl,\r\n\r\n // default to the passed in body, the request body, or an empty string\r\n body: body || request.body || '',\r\n\r\n // default to the request headers, or an empty object\r\n headers: request.headers,\r\n\r\n // for the next 2 props, default to true unless explicitly set to false\r\n withCredentials: request.withCredentials === false ? false : true,\r\n crossDomain: request.crossDomain === false ? false : true,\r\n createXHR: () => new XMLHttpRequest(),\r\n\r\n retryHandlers,\r\n maxRetryCount: request.maxRetryCount === 0 ? 0 : request.maxRetryCount || defaultMaxRetry\r\n });\r\n }\r\n\r\n /**\r\n * Make a request.\r\n *\r\n * @param request the request to execute against the gateway.\r\n * @return Observable<any> the query result observable.\r\n */\r\n public call(request: GatewayRequest): Observable<any> {\r\n if (!this.gatewayUrl) {\r\n return this.gatewayUrlAwaiter.pipe(mergeMap(() => this.call(request)));\r\n }\r\n\r\n // create gateway url from current url if not set yet.\r\n if (!request.url || (!request.url.startsWith('http://') && !request.url.startsWith('https://'))) {\r\n request.url = Net.gatewayApi(this.gatewayUrl, request.url);\r\n }\r\n\r\n // create retry options from request\r\n const retryOptions: HttpRetryOptions = {\r\n handlers: (request.retryHandlers || []),\r\n maxRetry: request.maxRetryCount\r\n };\r\n // create observable for our request\r\n const requestObservable = this.http.request(request, retryOptions)\r\n .pipe(map((response: AjaxResponse<any>) => response ? response.response : {}));\r\n\r\n if (request.beforeCall) {\r\n return request.beforeCall(request).pipe(mergeMap(() => requestObservable));\r\n }\r\n\r\n return requestObservable;\r\n }\r\n\r\n /**\r\n * Gets default secure request options.\r\n *\r\n * @returns updated request object.\r\n */\r\n public get defaultHttpSecureOptions(): AjaxRequest {\r\n const request = { ...{ headers: {} }, ...Http.defaultHttpOptions };\r\n if (this.authorizationManager.signOnManager.isSignOnTokenEnabled) {\r\n this.authorizationManager.signOnManager.SetAadAuthorizationHeader(request.headers);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Check if elevation is required from the error object.\r\n *\r\n * @param error the ajax error object.\r\n */\r\n public isElevationRequired(error: AjaxError): boolean {\r\n const code = error.xhr && error.xhr.response && error.xhr.response.error && error.xhr.response.error.code;\r\n return code === 'ElevationRequired';\r\n }\r\n\r\n /**\r\n * Elevate the gateway if it's desktop mode running.\r\n */\r\n public elevate(): Observable<boolean> {\r\n if (!this.elevateClient) {\r\n this.elevateClient = new RpcObservableElevateClient(this.rpc);\r\n }\r\n\r\n return this.elevateClient.elevate().pipe(map(result => result.elevated));\r\n }\r\n\r\n /**\r\n * Creates and returns a new URL builder for the current connection.\r\n */\r\n public url(): GatewayUrlBuilder {\r\n return new GatewayUrlBuilder(this.gatewayUrl);\r\n }\r\n\r\n /**\r\n * Clear the DNS cache.\r\n */\r\n public clearDnsCache(): Observable<void> {\r\n const dnsCacheClearUrl = 'gateway/dnsCacheClear';\r\n return this.delete(dnsCacheClearUrl)\r\n .pipe(map(_ => null));\r\n }\r\n\r\n /**\r\n * Polling to check if the gateway is elevated.\r\n */\r\n public pollingGatewayElevated(): Observable<boolean> {\r\n // user might not respond for elevation prompt, maximum waiting time is 2.5 min.\r\n // getElevatedStatus() takes 5000ms when the gateway is not responding.\r\n // 2.5 min = count [30] * 5000 msec.\r\n const uniQueId = MsftSme.getUniqueId();\r\n const maxWaitingCount = 30;\r\n let count = maxWaitingCount;\r\n return this.getElevatedStatus()\r\n .pipe(\r\n expand(status => {\r\n // user accepted.\r\n // adds 5 calls for the gateway dead period.\r\n // < Restart Requested from UI >\r\n // 1st query: it shows success on slow performed system, the gateway is even not shutdown yet.\r\n // 2nd query: It could success still.\r\n // 3rd query: Maybe timeout because the gateway is not started yet.\r\n // 4rd query: Maybe timeout because the gateway is not started yet.\r\n // 5rd query: Maybe timeout because the gateway is down.\r\n // 25 = 30 - 5\r\n const pollingStartCount = 25;\r\n if (\r\n (\r\n (count <= pollingStartCount\r\n && (!status.error || status.isGatewayProcessElevated))\r\n || status.completed\r\n )\r\n && (status.id === uniQueId)\r\n ) {\r\n return of({\r\n completed: true,\r\n id: uniQueId,\r\n isGatewayProcessElevated: status.isGatewayProcessElevated\r\n });\r\n }\r\n\r\n // no response for more than 2.5 minutes.\r\n // gateway was stopped for long or user never responded to UAC prompt.\r\n if (count-- <= 0 && status.id === uniQueId) {\r\n return of({\r\n completed: true,\r\n id: uniQueId,\r\n isGatewayProcessElevated: status.isGatewayProcessElevated\r\n });\r\n }\r\n\r\n return this.getElevatedStatus();\r\n }),\r\n filter(result => result.isGatewayProcessElevated || result.completed),\r\n take(1),\r\n map(result => result.isGatewayProcessElevated)\r\n );\r\n }\r\n\r\n /**\r\n * Perform gateway status query but cut off if it exceeds 2.5 seconds.\r\n */\r\n public getElevatedStatus(): Observable<{ error: boolean, isGatewayProcessElevated: boolean, completed: boolean, id: string }> {\r\n // if the gateway is not responding for 5000ms, cancel the call.\r\n const callCancelTime = 5000;\r\n return new Observable(observer => {\r\n let subscription: Subscription = null;\r\n let timer = setTimeout(\r\n () => {\r\n // handle pending timeout of the query when the gateway doesn't respond.\r\n if (subscription) {\r\n observer.next({ error: true, isGatewayProcessElevated: false, completed: undefined, id: undefined });\r\n observer.complete();\r\n subscription.unsubscribe();\r\n subscription = null;\r\n timer = null;\r\n }\r\n },\r\n callCancelTime);\r\n subscription = this.getStatus()\r\n .subscribe({\r\n next: data => {\r\n observer.next({\r\n error: false,\r\n isGatewayProcessElevated: data.isGatewayProcessElevated,\r\n completed: undefined,\r\n id: undefined\r\n });\r\n observer.complete();\r\n subscription.unsubscribe();\r\n subscription = null;\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n },\r\n error: () => {\r\n observer.next({ error: true, isGatewayProcessElevated: false, completed: undefined, id: undefined });\r\n observer.complete();\r\n subscription.unsubscribe();\r\n subscription = null;\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Gets gateway machine if found in list of given nodes\r\n * @param nodes Node names or IPs to check\r\n * @returns Node name of gateway if found, null otherwise\r\n */\r\n public getGateway(nodes: string[]): Observable<string> {\r\n return this.gatewayStatus.pipe(map(status => {\r\n for (const node of nodes) {\r\n if (MsftSme.isNullOrUndefined(node)) {\r\n continue;\r\n }\r\n\r\n switch (node.toLocaleLowerCase()) {\r\n case this.localhostIpV4:\r\n case this.localhostIpV6:\r\n case this.localhost:\r\n case status.fullyQualifiedDNSName?.toLocaleLowerCase():\r\n case status.name?.toLocaleLowerCase():\r\n case status.machineName?.toLocaleLowerCase():\r\n return node;\r\n }\r\n\r\n if (status.addressList?.find((address: string) => address === node)) {\r\n return node;\r\n }\r\n }\r\n\r\n return null;\r\n }));\r\n }\r\n\r\n /**\r\n * Check gateway condition.\r\n */\r\n public checkCondition(): Observable<GatewayCondition> {\r\n const result = <GatewayCondition>{};\r\n return this.getStatus()\r\n .pipe(\r\n switchMap(gateway => {\r\n if (gateway.gatewayMode === 'Service') {\r\n result.isServiceMode = true;\r\n result.isGatewayProcessElevated = false;\r\n return this.getAccessCheck();\r\n }\r\n\r\n result.isServiceMode = false;\r\n result.isGatewayProcessElevated = gateway.isGatewayProcessElevated;\r\n return of(true);\r\n }),\r\n map((isAdmin) => {\r\n result.isGatewayAdmin = !!isAdmin;\r\n return result;\r\n }),\r\n take(1)\r\n );\r\n }\r\n\r\n /**\r\n * Get gateway status.\r\n */\r\n public getStatus(): Observable<any> {\r\n return this.get('gateway/status').pipe(tap(status => {\r\n this.lastUpdatedInternalGatewayStatus = Date.now();\r\n this.internalGatewayStatus = status;\r\n }));\r\n }\r\n\r\n /**\r\n * Get user access check.\r\n */\r\n public getAccessCheck(): Observable<any> {\r\n return this.get(GatewayUrls.accessCheck);\r\n }\r\n\r\n /**\r\n * Called on a child service instance when onForwardInit returns from the parent\r\n * Initialize telemetry from within here so we can leverage gateway status for telemetry metadata.\r\n * @param data The response from the forwardInit call\r\n */\r\n protected onForwardInitResponse(data: RpcForwardResponse<GatewayRPCForwardedProperties>): void {\r\n if (data.error) {\r\n // if there is an error, we cannot continue, so throw its\r\n throw data.error;\r\n }\r\n\r\n if (!MsftSme.self().Environment.configuration.gateway.disabled) {\r\n this.internalGatewayUrl = data.result.gatewayName;\r\n this.internalGatewayUrlSpecified = data.result.gatewayUrlSpecified;\r\n this.internalStaticVersion = data.result.staticVersion;\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Called when a new instance of the service in another window is initialized and needs to synchronize with its parent\r\n * @param from The RpcRelationshipType that this request is from\r\n * @returns an observable for the all the values needed to initialize the service\r\n */\r\n protected onForwardInit(): Observable<GatewayRPCForwardedProperties> {\r\n if (this.gatewayUrl) {\r\n return of({\r\n gatewayName: this.gatewayUrl,\r\n gatewayUrlSpecified: this.gatewayUrlSpecified,\r\n staticVersion: this.staticVersion\r\n });\r\n } else {\r\n // if gateway value hasn't been set yet, then wait for it.\r\n if (MsftSme.self().Environment.configuration.gateway.disabled) {\r\n return of(null);\r\n }\r\n\r\n return this.gatewayUrlAwaiter\r\n .pipe(map(url => ({\r\n gatewayName: url,\r\n gatewayUrlSpecified: this.gatewayUrlSpecified,\r\n staticVersion: this.staticVersion\r\n })));\r\n }\r\n }\r\n\r\n /**\r\n * Called when the forwarded services counterpart wants to get data from the parent\r\n * @param from The RpcRelationshipType that this request is from\r\n * @param name The name of the method to forward to\r\n * @param args The arguments of the method\r\n * @returns an observable for the result of the method call\r\n */\r\n protected onForwardExecute(from: RpcRelationshipType, name: string): Observable<any> {\r\n // gatewayConnection does not allow any method calls at this time\r\n return this.nameNotFound(name);\r\n }\r\n\r\n /**\r\n * Called when the forwarded services counterpart sends a notify message\r\n * @param from The RpcRelationshipType that this request is from\r\n * @param name The name of the property to change\r\n * @param value The new value of the property\r\n * @returns an observable that completes when the property has been changed.\r\n */\r\n protected onForwardNotify(from: RpcRelationshipType, name: string): Observable<void> {\r\n if (from === RpcRelationshipType.Child && name === GatewayConnection.rpcCommands.forbiddenReceived) {\r\n // Deprecated noop version 1.1100.0 at 10/1/2020. Using ErrorMonitor.\r\n return of(null);\r\n }\r\n // gatewayConnection does not allow any other notifications at this time\r\n return this.nameNotFound(name);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/data/gateway-connection.ts"],"names":[],"mappings":"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","file":"gateway-connection.js","sourcesContent":["import { Observable, of, ReplaySubject, Subscription, throwError } from 'rxjs';\r\nimport { AjaxError, AjaxRequest, AjaxResponse } from 'rxjs/ajax';\r\nimport { catchError, expand, filter, map, mergeMap, switchMap, take, tap } from 'rxjs/operators';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { RpcObservableElevateClient } from '../rpc/elevate/rpc-observable-elevate-client';\r\nimport {\r\n RpcObservableElevateError, RpcObservableElevateRequest, RpcObservableElevateResult\r\n} from '../rpc/elevate/rpc-observable-elevate-model';\r\nimport { RpcObservableElevateServer } from '../rpc/elevate/rpc-observable-elevate-server';\r\nimport { RpcForwardResponse } from '../rpc/forward/rpc-forward-model';\r\nimport { Rpc } from '../rpc/rpc';\r\nimport { RpcRelationshipType } from '../rpc/rpc-base';\r\nimport { RpcServiceForwarder } from '../rpc/rpc-forwarder';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { SignedHttpRequestToken } from '../security/sign-on-manager';\r\nimport { CoreEnvironment } from './core-environment';\r\nimport { GatewayStatus } from './gateway-status';\r\nimport { GatewayUrlBuilder } from './gateway-url-builder';\r\nimport { GatewayUrls } from './gateway-urls';\r\nimport { Http, HttpMethod, HttpResponseRetryHandler, HttpRetryOptions } from './http';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\n\r\n/**\r\n * Gateway Request options that we use to extend the AjaxRequest interface\r\n */\r\nexport interface GatewayRequestOptions {\r\n /**\r\n * Retry handler implementation for a request.\r\n * These handlers are used to invoke specific functionality for non-200 status codes in the http response.\r\n */\r\n retryHandlers?: HttpResponseRetryHandler[];\r\n\r\n /**\r\n * Determines the maximum number of times that any of the retry handlers will be tried.\r\n * before giving up and surfacing the error to the original caller\r\n */\r\n maxRetryCount?: number;\r\n\r\n /**\r\n * Observable handler to insert asynchronous logic before the actual http response is sent.\r\n * For Example: Waiting for pending authentication to complete before adding an authentication header\r\n */\r\n beforeCall?: (request: GatewayRequest) => Observable<void>;\r\n}\r\n\r\n/**\r\n * Extension of AjaxRequest interface for calling the Gateway API\r\n */\r\nexport interface GatewayRequest extends AjaxRequest, GatewayRequestOptions {\r\n}\r\n\r\n/**\r\n * Initialization object data for the Gateway's base class.\r\n */\r\nexport interface GatewayRPCForwardedProperties {\r\n /**\r\n * The gateway URL.\r\n */\r\n gatewayName: string;\r\n\r\n /**\r\n * Indicate whether gatewayUrl option was specified. (default to be false)\r\n */\r\n gatewayUrlSpecified: boolean;\r\n\r\n /**\r\n * The stative version. (default to be null)\r\n */\r\n staticVersion: string;\r\n}\r\n\r\n/**\r\n * The gateway information on current gateway URL.\r\n */\r\nexport interface GatewayInformation {\r\n /**\r\n * The name of gateway node.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Indicating if https is used.\r\n */\r\n secure: boolean;\r\n\r\n /**\r\n * The port number of gateway.\r\n */\r\n port: number;\r\n}\r\n\r\n/**\r\n * Condition of gateway.\r\n */\r\nexport interface GatewayCondition {\r\n /**\r\n * the gateway is running as service mode (installed on server operating system).\r\n */\r\n isServiceMode: boolean;\r\n\r\n /**\r\n * the gateway is elevated on the desktop mode.\r\n */\r\n isGatewayProcessElevated: boolean;\r\n\r\n /**\r\n * the user account is a member of the gateway administrators.\r\n */\r\n isGatewayAdmin: boolean;\r\n}\r\n\r\n/**\r\n * The Gateway Connection class for creating requests and calling the Gateway's REST API\r\n */\r\nexport class GatewayConnection extends RpcServiceForwarder {\r\n private static rpcCommands = {\r\n forbiddenReceived: 'forbiddenRecieved'\r\n };\r\n\r\n /**\r\n * The IPv4 address for localhost\r\n */\r\n private readonly localhostIpV4 = '127.0.0.1';\r\n\r\n /**\r\n * The IPv6 address for localhost\r\n */\r\n private readonly localhostIpV6 = '::1';\r\n\r\n /**\r\n * The localhost name\r\n */\r\n private readonly localhost = 'localhost';\r\n\r\n /**\r\n * Time interval to check for internalGatewayStatus refresh.\r\n */\r\n private readonly lastUpdatedInternalGatewayStatusInterval = 1000 * 60 * 10; // 10 minutes\r\n\r\n /**\r\n * internally maintained gateway URL.\r\n */\r\n private internalGatewayUrl: string;\r\n\r\n /**\r\n * internally maintained static version.\r\n */\r\n private internalStaticVersion: string;\r\n\r\n /**\r\n * gatewayUrl param is specified.\r\n */\r\n private internalGatewayUrlSpecified: boolean;\r\n\r\n /**\r\n * Last time internal gateway status was updated in milliseconds\r\n */\r\n private lastUpdatedInternalGatewayStatus: number;\r\n\r\n /**\r\n * Internally maintained gateway status.\r\n */\r\n private internalGatewayStatus: Observable<GatewayStatus>;\r\n\r\n /**\r\n * The replay subject for gateway url to settle.\r\n */\r\n private gatewayUrlAwaiter = new ReplaySubject<string>(1);\r\n\r\n /**\r\n * The RPC observable elevate client.\r\n */\r\n private elevateClient: RpcObservableElevateClient = null;\r\n\r\n /**\r\n * The RPC observable elevate server.\r\n */\r\n private elevateServer: RpcObservableElevateServer = null;\r\n\r\n /**\r\n * The elevate callback observable.\r\n */\r\n private elevateCallbackInternal: () => Observable<boolean> = () => of(false);\r\n\r\n /**\r\n * The replay subject for navigation ready state.\r\n */\r\n private navigationReady = new ReplaySubject<boolean>(1);\r\n\r\n /**\r\n * Sets the elevate callback observable.\r\n */\r\n public set elevateCallback(value: () => Observable<boolean>) {\r\n this.elevateCallbackInternal = value;\r\n if (!this.elevateServer) {\r\n this.elevateServer = new RpcObservableElevateServer(this.rpc);\r\n this.elevateServer.register((_context: RpcObservableElevateRequest) => {\r\n return this.elevateCallbackInternal()\r\n .pipe(\r\n catchError((error, _caught) =>\r\n throwError(() => <RpcObservableElevateError>{error: Net.getErrorMessage(error) })),\r\n map(result =>\r\n <RpcObservableElevateResult>{ elevated: result })\r\n );\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Indicates that the gateway is disabled and therefore should not be called.\r\n */\r\n public get disabled(): boolean {\r\n const environment = MsftSme.self().Environment;\r\n return environment && environment.configuration.gateway.disabled;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL to connect to.\r\n */\r\n public get gatewayUrl(): string {\r\n return this.internalGatewayUrl;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL specified state.\r\n */\r\n public get staticVersion() {\r\n return this.internalStaticVersion;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL specified state.\r\n */\r\n public get gatewayUrlSpecified(): boolean {\r\n return this.internalGatewayUrlSpecified;\r\n }\r\n\r\n /**\r\n * Gets the gateway URL observable while setting up.\r\n */\r\n public get gatewayUrlObservable(): Observable<string> {\r\n return this.gatewayUrlAwaiter.asObservable();\r\n }\r\n\r\n /**\r\n * Gets the navigation ready observable.\r\n */\r\n public get navigationReadyObservable(): Observable<boolean> {\r\n return this.navigationReady.asObservable();\r\n }\r\n\r\n /**\r\n * Sets the navigation ready status.\r\n */\r\n public set navigationReadyStatus(ready: boolean) {\r\n this.navigationReady.next(ready);\r\n }\r\n\r\n /**\r\n * Gets the gateway information.\r\n */\r\n public get gatewayInfo(): GatewayInformation {\r\n if (!this.internalGatewayUrl) {\r\n throw new Error(MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.GatewayUrlNotConfigured.message);\r\n }\r\n\r\n // RegEx: ('http' or 'https') '://' (('<gatewayName1>'):('<port>') or ('<gatewayName2>'))\r\n // 0: url\r\n // 1: https or http\r\n // 2: <gatewayName1>:<port> or <gatewayName2>\r\n // 3: <gatewayName1> or undefined\r\n // 4: <port> or undefined\r\n // 5: <gatewayName2>\r\n const url = MsftSme.trimEnd(this.internalGatewayUrl.toLowerCase(), '/');\r\n const match = url.match(/(http|https):\\/\\/((.+):(\\d+)|(.+))/);\r\n if (!match) {\r\n throw new Error(MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.GatewayUrlMalformed.message);\r\n }\r\n\r\n const secure = (match[1] === 'https');\r\n const name = match[3] || match[2];\r\n const port = parseInt(match[4], 10) || (secure ? 443 : 80);\r\n return { name, secure, port };\r\n }\r\n\r\n /**\r\n * Gets the gateway node name to make a CIM/PowerShell query to the gateway node.\r\n */\r\n public get gatewayName(): string {\r\n // localhost will be used to locally query gateway node. if this causes any access problem, need to be replaced.\r\n return 'localhost';\r\n }\r\n\r\n /**\r\n * Gets gateway status from cache or sets cache if it doesn't exist.\r\n */\r\n private get gatewayStatus(): Observable<any> {\r\n if (!this.internalGatewayStatus\r\n || Date.now() - this.lastUpdatedInternalGatewayStatus > this.lastUpdatedInternalGatewayStatusInterval) {\r\n return this.getStatus();\r\n }\r\n\r\n return of(this.internalGatewayStatus);\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the Gateway class.\r\n *\r\n * @param http the Http object.\r\n * @param rpc the Rpc class.\r\n * @patam authorizationManager the authorization manager class object.\r\n */\r\n constructor(public http: Http, rpc: Rpc, private authorizationManager: AuthorizationManager) {\r\n super('gateway-connection', rpc);\r\n\r\n // restore the AAD token if exist becase ealier access of token is required for gateway calls.\r\n authorizationManager.signOnManager.applySignedHttpRequestToken(\r\n <SignedHttpRequestToken>MsftSme.self().Environment.configuration?.signOn?.signedHttpRequestToken);\r\n }\r\n\r\n /**\r\n * Configure the gateway URL to connect to.\r\n */\r\n public configureGatewayEnvironment(url: string, urlSpecified: boolean, staticVersion: string): void {\r\n // trim last \"/\"\r\n if (url[url.length - 1] === '/') {\r\n url = url.substring(0, url.length - 1);\r\n }\r\n\r\n this.internalGatewayUrl = url;\r\n this.internalGatewayUrlSpecified = urlSpecified,\r\n this.internalStaticVersion = staticVersion;\r\n this.gatewayUrlAwaiter.next(url);\r\n }\r\n\r\n /**\r\n * Update the url with static version option.\r\n * @param url the original URL including options.\r\n * @returns updated url with \"version=\" option if staticVersion present.\r\n */\r\n public addStaticVersion(url: string): string {\r\n if (MsftSme.isNullOrWhiteSpace(this.staticVersion) || this.staticVersion.indexOf('staticVersion=') < 0) {\r\n return url;\r\n }\r\n\r\n const splitter = url.indexOf('?') > 0 ? '&' : '?';\r\n return `${url}${splitter}staticVersion=${this.staticVersion}`;\r\n }\r\n\r\n /**\r\n * Makes a POST call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public post(relativeUrl: string, body?: any, request?: GatewayRequest): Observable<any> {\r\n const postRequest = this.createRequest(HttpMethod.Post, relativeUrl, body, request);\r\n return this.call(postRequest);\r\n }\r\n\r\n /**\r\n * Makes a GET call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param request the gateway request object.\r\n */\r\n public get(relativeUrl: string, request?: GatewayRequest): Observable<any> {\r\n const getRequest = this.createRequest(HttpMethod.Get, relativeUrl, null, request);\r\n return this.call(getRequest);\r\n }\r\n\r\n /**\r\n * Makes a PUT call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public put(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any> {\r\n const putRequest = this.createRequest(HttpMethod.Put, relativeUrl, body, request);\r\n return this.call(putRequest);\r\n }\r\n\r\n /**\r\n * Makes a PATCH call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public patch(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any> {\r\n const patchRequest = this.createRequest(HttpMethod.Patch, relativeUrl, body, request);\r\n return this.call(patchRequest);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object.\r\n */\r\n public delete(relativeUrl: string, body?: string, request?: GatewayRequest): Observable<any> {\r\n const deleteRequest = this.createRequest(HttpMethod.Delete, relativeUrl, body, request);\r\n return this.call(deleteRequest);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway without waiting for the response.\r\n *\r\n * @param relativeUrl the relative Url after \"/api\"\r\n * @param request the gateway request object.\r\n */\r\n public deleteQuick(relativeUrl: string, headers?: any): void {\r\n headers[headerConstants.MODULE_NAME] = EnvironmentModule.getModuleName();\r\n headers[headerConstants.MODULE_VERSION] = EnvironmentModule.getModuleVersion();\r\n headers[headerConstants.ACCEPT_LANGUAGE] = CoreEnvironment.localizationManager.getLocaleId().neutral;\r\n if (this.staticVersion) {\r\n headers[headerConstants.STATIC_VERSION] = this.staticVersion;\r\n }\r\n\r\n if (this.authorizationManager.signOnManager.isSignOnTokenEnabled) {\r\n this.authorizationManager.signOnManager.SetAadAuthorizationHeader(headers);\r\n }\r\n\r\n const url = Net.gatewayApi(this.gatewayUrl, relativeUrl);\r\n this.http.deleteQuick(url, headers);\r\n }\r\n\r\n /**\r\n * Creates a GatewayRequest.\r\n *\r\n * @param method the http method to use\r\n * @param relativeUrl the relative Url after \"/api/\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the gateway request object to extend.\r\n */\r\n public createRequest(\r\n method: string,\r\n relativeUrl: string,\r\n body?: any,\r\n request?: GatewayRequest): GatewayRequest {\r\n\r\n const defaultMaxRetry = 3;\r\n request = MsftSme.deepAssign({}, request);\r\n\r\n // if request is undefined, default to empty object\r\n request = request || <GatewayRequest>{};\r\n request.headers = request.headers || {};\r\n (<any>request).headers[headerConstants.MODULE_NAME] = EnvironmentModule.getModuleName();\r\n (<any>request).headers[headerConstants.MODULE_VERSION] = EnvironmentModule.getModuleVersion();\r\n (<any>request).headers[headerConstants.ACCEPT_LANGUAGE] = CoreEnvironment.localizationManager.getLocaleId().neutral;\r\n if (this.staticVersion) {\r\n (<any>request).headers[headerConstants.STATIC_VERSION] = this.staticVersion;\r\n }\r\n\r\n // use default retry options if none are provided\r\n const retryHandlers: HttpResponseRetryHandler[] = [];\r\n if (this.authorizationManager.signOnManager.isSignOnTokenEnabled) {\r\n this.authorizationManager.signOnManager.SetAadAuthorizationHeader(request.headers);\r\n retryHandlers.push({\r\n canHandle: (code, error) => this.authorizationManager.signOnManager.canHandleUnauthorizedLogin(code, error),\r\n handle: (code, originalRequest, error) =>\r\n this.authorizationManager.signOnManager.handleUnauthorizedLogin(code, originalRequest, error)\r\n });\r\n }\r\n\r\n if (request.retryHandlers != null && request.retryHandlers.length > 0) {\r\n retryHandlers.push(...request.retryHandlers);\r\n }\r\n\r\n return Object.assign(request, <GatewayRequest><unknown>{\r\n method: method,\r\n url: relativeUrl,\r\n\r\n // default to the passed in body, the request body, or an empty string\r\n body: body || request.body || '',\r\n\r\n // default to the request headers, or an empty object\r\n headers: request.headers,\r\n\r\n // for the next 2 props, default to true unless explicitly set to false\r\n withCredentials: request.withCredentials === false ? false : true,\r\n crossDomain: request.crossDomain === false ? false : true,\r\n createXHR: () => new XMLHttpRequest(),\r\n\r\n retryHandlers,\r\n maxRetryCount: request.maxRetryCount === 0 ? 0 : request.maxRetryCount || defaultMaxRetry\r\n });\r\n }\r\n\r\n /**\r\n * Make a request.\r\n *\r\n * @param request the request to execute against the gateway.\r\n * @return Observable<any> the query result observable.\r\n */\r\n public call(request: GatewayRequest): Observable<any> {\r\n if (!this.gatewayUrl) {\r\n return this.gatewayUrlAwaiter.pipe(mergeMap(() => this.call(request)));\r\n }\r\n\r\n // create gateway url from current url if not set yet.\r\n if (!request.url || (!request.url.startsWith('http://') && !request.url.startsWith('https://'))) {\r\n request.url = Net.gatewayApi(this.gatewayUrl, request.url);\r\n }\r\n\r\n // create retry options from request\r\n const retryOptions: HttpRetryOptions = {\r\n handlers: (request.retryHandlers || []),\r\n maxRetry: request.maxRetryCount\r\n };\r\n // create observable for our request\r\n const requestObservable = this.http.request(request, retryOptions)\r\n .pipe(map((response: AjaxResponse<any>) => response ? response.response : {}));\r\n\r\n if (request.beforeCall) {\r\n return request.beforeCall(request).pipe(mergeMap(() => requestObservable));\r\n }\r\n\r\n return requestObservable;\r\n }\r\n\r\n /**\r\n * Gets default secure request options.\r\n *\r\n * @returns updated request object.\r\n */\r\n public get defaultHttpSecureOptions(): AjaxRequest {\r\n const request = { ...{ headers: {} }, ...Http.defaultHttpOptions };\r\n if (this.authorizationManager.signOnManager.isSignOnTokenEnabled) {\r\n this.authorizationManager.signOnManager.SetAadAuthorizationHeader(request.headers);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Check if elevation is required from the error object.\r\n *\r\n * @param error the ajax error object.\r\n */\r\n public isElevationRequired(error: AjaxError): boolean {\r\n const code = error.xhr && error.xhr.response && error.xhr.response.error && error.xhr.response.error.code;\r\n return code === 'ElevationRequired';\r\n }\r\n\r\n /**\r\n * Elevate the gateway if it's desktop mode running.\r\n */\r\n public elevate(): Observable<boolean> {\r\n if (!this.elevateClient) {\r\n this.elevateClient = new RpcObservableElevateClient(this.rpc);\r\n }\r\n\r\n return this.elevateClient.elevate().pipe(map(result => result.elevated));\r\n }\r\n\r\n /**\r\n * Creates and returns a new URL builder for the current connection.\r\n */\r\n public url(): GatewayUrlBuilder {\r\n return new GatewayUrlBuilder(this.gatewayUrl);\r\n }\r\n\r\n /**\r\n * Clear the DNS cache.\r\n */\r\n public clearDnsCache(): Observable<void> {\r\n const dnsCacheClearUrl = 'gateway/dnsCacheClear';\r\n return this.delete(dnsCacheClearUrl)\r\n .pipe(map(_ => null));\r\n }\r\n\r\n /**\r\n * Polling to check if the gateway is elevated.\r\n */\r\n public pollingGatewayElevated(): Observable<boolean> {\r\n // user might not respond for elevation prompt, maximum waiting time is 2.5 min.\r\n // getElevatedStatus() takes 5000ms when the gateway is not responding.\r\n // 2.5 min = count [30] * 5000 msec.\r\n const uniQueId = MsftSme.getUniqueId();\r\n const maxWaitingCount = 30;\r\n let count = maxWaitingCount;\r\n return this.getElevatedStatus()\r\n .pipe(\r\n expand(status => {\r\n // user accepted.\r\n // adds 5 calls for the gateway dead period.\r\n // < Restart Requested from UI >\r\n // 1st query: it shows success on slow performed system, the gateway is even not shutdown yet.\r\n // 2nd query: It could success still.\r\n // 3rd query: Maybe timeout because the gateway is not started yet.\r\n // 4rd query: Maybe timeout because the gateway is not started yet.\r\n // 5rd query: Maybe timeout because the gateway is down.\r\n // 25 = 30 - 5\r\n const pollingStartCount = 25;\r\n if (\r\n (\r\n (count <= pollingStartCount\r\n && (!status.error || status.isGatewayProcessElevated))\r\n || status.completed\r\n )\r\n && (status.id === uniQueId)\r\n ) {\r\n return of({\r\n completed: true,\r\n id: uniQueId,\r\n isGatewayProcessElevated: status.isGatewayProcessElevated\r\n });\r\n }\r\n\r\n // no response for more than 2.5 minutes.\r\n // gateway was stopped for long or user never responded to UAC prompt.\r\n if (count-- <= 0 && status.id === uniQueId) {\r\n return of({\r\n completed: true,\r\n id: uniQueId,\r\n isGatewayProcessElevated: status.isGatewayProcessElevated\r\n });\r\n }\r\n\r\n return this.getElevatedStatus();\r\n }),\r\n filter(result => result.isGatewayProcessElevated || result.completed),\r\n take(1),\r\n map(result => result.isGatewayProcessElevated)\r\n );\r\n }\r\n\r\n /**\r\n * Perform gateway status query but cut off if it exceeds 2.5 seconds.\r\n */\r\n public getElevatedStatus(): Observable<{ error: boolean, isGatewayProcessElevated: boolean, completed: boolean, id: string }> {\r\n // if the gateway is not responding for 5000ms, cancel the call.\r\n const callCancelTime = 5000;\r\n return new Observable(observer => {\r\n let subscription: Subscription = null;\r\n let timer = setTimeout(\r\n () => {\r\n // handle pending timeout of the query when the gateway doesn't respond.\r\n if (subscription) {\r\n observer.next({ error: true, isGatewayProcessElevated: false, completed: undefined, id: undefined });\r\n observer.complete();\r\n subscription.unsubscribe();\r\n subscription = null;\r\n timer = null;\r\n }\r\n },\r\n callCancelTime);\r\n subscription = this.getStatus()\r\n .subscribe({\r\n next: data => {\r\n observer.next({\r\n error: false,\r\n isGatewayProcessElevated: data.isGatewayProcessElevated,\r\n completed: undefined,\r\n id: undefined\r\n });\r\n observer.complete();\r\n subscription.unsubscribe();\r\n subscription = null;\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n },\r\n error: () => {\r\n observer.next({ error: true, isGatewayProcessElevated: false, completed: undefined, id: undefined });\r\n observer.complete();\r\n subscription.unsubscribe();\r\n subscription = null;\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Gets gateway machine if found in list of given nodes\r\n * @param nodes Node names or IPs to check\r\n * @returns Node name of gateway if found, null otherwise\r\n */\r\n public getGateway(nodes: string[]): Observable<string> {\r\n return this.gatewayStatus.pipe(map(status => {\r\n for (const node of nodes) {\r\n if (MsftSme.isNullOrUndefined(node)) {\r\n continue;\r\n }\r\n\r\n switch (node.toLocaleLowerCase()) {\r\n case this.localhostIpV4:\r\n case this.localhostIpV6:\r\n case this.localhost:\r\n case status.fullyQualifiedDNSName?.toLocaleLowerCase():\r\n case status.name?.toLocaleLowerCase():\r\n case status.machineName?.toLocaleLowerCase():\r\n return node;\r\n }\r\n\r\n if (status.addressList?.find((address: string) => address === node)) {\r\n return node;\r\n }\r\n }\r\n\r\n return null;\r\n }));\r\n }\r\n\r\n /**\r\n * Check gateway condition.\r\n */\r\n public checkCondition(): Observable<GatewayCondition> {\r\n const result = <GatewayCondition>{};\r\n return this.getStatus()\r\n .pipe(\r\n switchMap(gateway => {\r\n if (gateway.gatewayMode === 'Service') {\r\n result.isServiceMode = true;\r\n result.isGatewayProcessElevated = false;\r\n return this.getAccessCheck();\r\n }\r\n\r\n result.isServiceMode = false;\r\n result.isGatewayProcessElevated = gateway.isGatewayProcessElevated;\r\n return of(true);\r\n }),\r\n map((isAdmin) => {\r\n result.isGatewayAdmin = !!isAdmin;\r\n return result;\r\n }),\r\n take(1)\r\n );\r\n }\r\n\r\n /**\r\n * Get gateway status.\r\n */\r\n public getStatus(): Observable<any> {\r\n return this.get('gateway/status').pipe(tap(status => {\r\n this.lastUpdatedInternalGatewayStatus = Date.now();\r\n this.internalGatewayStatus = status;\r\n }));\r\n }\r\n\r\n /**\r\n * Get user access check.\r\n */\r\n public getAccessCheck(): Observable<any> {\r\n return this.get(GatewayUrls.accessCheck);\r\n }\r\n\r\n /**\r\n * Called on a child service instance when onForwardInit returns from the parent\r\n * Initialize telemetry from within here so we can leverage gateway status for telemetry metadata.\r\n * @param data The response from the forwardInit call\r\n */\r\n protected onForwardInitResponse(data: RpcForwardResponse<GatewayRPCForwardedProperties>): void {\r\n if (data.error) {\r\n // if there is an error, we cannot continue, so throw its\r\n throw data.error;\r\n }\r\n\r\n if (!MsftSme.self().Environment.configuration.gateway.disabled) {\r\n this.internalGatewayUrl = data.result.gatewayName;\r\n this.internalGatewayUrlSpecified = data.result.gatewayUrlSpecified;\r\n this.internalStaticVersion = data.result.staticVersion;\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Called when a new instance of the service in another window is initialized and needs to synchronize with its parent\r\n * @param from The RpcRelationshipType that this request is from\r\n * @returns an observable for the all the values needed to initialize the service\r\n */\r\n protected onForwardInit(): Observable<GatewayRPCForwardedProperties> {\r\n if (this.gatewayUrl) {\r\n return of({\r\n gatewayName: this.gatewayUrl,\r\n gatewayUrlSpecified: this.gatewayUrlSpecified,\r\n staticVersion: this.staticVersion\r\n });\r\n } else {\r\n // if gateway value hasn't been set yet, then wait for it.\r\n if (MsftSme.self().Environment.configuration.gateway.disabled) {\r\n return of(null);\r\n }\r\n\r\n return this.gatewayUrlAwaiter\r\n .pipe(map(url => ({\r\n gatewayName: url,\r\n gatewayUrlSpecified: this.gatewayUrlSpecified,\r\n staticVersion: this.staticVersion\r\n })));\r\n }\r\n }\r\n\r\n /**\r\n * Called when the forwarded services counterpart wants to get data from the parent\r\n * @param from The RpcRelationshipType that this request is from\r\n * @param name The name of the method to forward to\r\n * @param args The arguments of the method\r\n * @returns an observable for the result of the method call\r\n */\r\n protected onForwardExecute(from: RpcRelationshipType, name: string): Observable<any> {\r\n // gatewayConnection does not allow any method calls at this time\r\n return this.nameNotFound(name);\r\n }\r\n\r\n /**\r\n * Called when the forwarded services counterpart sends a notify message\r\n * @param from The RpcRelationshipType that this request is from\r\n * @param name The name of the property to change\r\n * @param value The new value of the property\r\n * @returns an observable that completes when the property has been changed.\r\n */\r\n protected onForwardNotify(from: RpcRelationshipType, name: string): Observable<void> {\r\n if (from === RpcRelationshipType.Child && name === GatewayConnection.rpcCommands.forbiddenReceived) {\r\n // Deprecated noop version 1.1100.0 at 10/1/2020. Using ErrorMonitor.\r\n return of(null);\r\n }\r\n // gatewayConnection does not allow any other notifications at this time\r\n return this.nameNotFound(name);\r\n }\r\n}\r\n"]}
@@ -15,6 +15,7 @@ export declare class GatewayUrlTranslator {
15
15
  private static translatePowerShellRequest;
16
16
  private static translateCimRequest;
17
17
  private static translateJeaRequest;
18
+ private static translateFileTransferRequest;
18
19
  private static translateWdacRequest;
19
20
  private static translateCounterRequest;
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/gateway-url-translator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,MAAM,CAAC,YAAY,CAMzB;IACF;;;;;;OAMG;WACW,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc;IAwBpD,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAalC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAalC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAanC,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAYzC","file":"gateway-url-translator.d.ts","sourcesContent":["import { Net } from './net';\r\n\r\nexport interface UrlTranslation {\r\n newUrl: string;\r\n startUrl: string;\r\n}\r\n\r\nexport class GatewayUrlTranslator {\r\n private static translations = {\r\n powerShellTranslationMatcher: /features\\/powershellApi\\/(.*)/,\r\n cimTranslationMatcher: /features\\/cim\\/(.*)/,\r\n wdacMatcher: /features\\/wdac\\/(.*)/,\r\n jeaMatcher: /features\\/jea\\/(.*)/,\r\n counterMatcher: /counter\\/(.*)/\r\n };\r\n /**\r\n * Given url return a gateway v2 translation object that will work well with\r\n * nodes/node api.\r\n *\r\n * @param url a gateway v1 url\r\n * @returns\r\n */\r\n public static translate(url: string): UrlTranslation {\r\n if (this.translations.powerShellTranslationMatcher.test(url)) {\r\n return this.translatePowerShellRequest(url);\r\n }\r\n\r\n if (this.translations.cimTranslationMatcher.test(url)) {\r\n return this.translateCimRequest(url);\r\n }\r\n\r\n if (this.translations.jeaMatcher.test(url)) {\r\n return this.translateJeaRequest(url);\r\n }\r\n\r\n if (this.translations.wdacMatcher.test(url)) {\r\n return this.translateWdacRequest(url);\r\n }\r\n\r\n if (this.translations.counterMatcher.test(url)) {\r\n return this.translateCounterRequest(url);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translatePowerShellRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.powerShellTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPowerShell}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCimRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.cimTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerCim}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateJeaRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.jeaMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerJea}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateWdacRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.wdacMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerWdac}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCounterRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.counterMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPerformanceCounter}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/data/gateway-url-translator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,MAAM,CAAC,YAAY,CAOzB;IACF;;;;;;OAMG;WACW,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc;IA4BpD,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAalC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAalC,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAa3C,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAanC,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAYzC","file":"gateway-url-translator.d.ts","sourcesContent":["import { Net } from './net';\r\n\r\nexport interface UrlTranslation {\r\n newUrl: string;\r\n startUrl: string;\r\n}\r\n\r\nexport class GatewayUrlTranslator {\r\n private static translations = {\r\n powerShellTranslationMatcher: /features\\/powershellApi\\/(.*)/,\r\n cimTranslationMatcher: /features\\/cim\\/(.*)/,\r\n wdacMatcher: /features\\/wdac\\/(.*)/,\r\n jeaMatcher: /features\\/jea\\/(.*)/,\r\n fileTransferMatcher: /features\\/fileTransfer\\/(.*)/,\r\n counterMatcher: /counter\\/(.*)/\r\n };\r\n /**\r\n * Given url return a gateway v2 translation object that will work well with\r\n * nodes/node api.\r\n *\r\n * @param url a gateway v1 url\r\n * @returns\r\n */\r\n public static translate(url: string): UrlTranslation {\r\n if (this.translations.powerShellTranslationMatcher.test(url)) {\r\n return this.translatePowerShellRequest(url);\r\n }\r\n\r\n if (this.translations.cimTranslationMatcher.test(url)) {\r\n return this.translateCimRequest(url);\r\n }\r\n\r\n if (this.translations.jeaMatcher.test(url)) {\r\n return this.translateJeaRequest(url);\r\n }\r\n\r\n if (this.translations.wdacMatcher.test(url)) {\r\n return this.translateWdacRequest(url);\r\n }\r\n\r\n if (this.translations.fileTransferMatcher.test(url)) {\r\n return this.translateFileTransferRequest(url);\r\n }\r\n\r\n if (this.translations.counterMatcher.test(url)) {\r\n return this.translateCounterRequest(url);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translatePowerShellRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.powerShellTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPowerShell}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCimRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.cimTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerCim}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateJeaRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.jeaMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerJea}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateFileTransferRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.fileTransferMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerFileTransfer}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateWdacRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.wdacMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerWdac}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCounterRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.counterMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPerformanceCounter}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n"]}
@@ -5,6 +5,7 @@ export class GatewayUrlTranslator {
5
5
  cimTranslationMatcher: /features\/cim\/(.*)/,
6
6
  wdacMatcher: /features\/wdac\/(.*)/,
7
7
  jeaMatcher: /features\/jea\/(.*)/,
8
+ fileTransferMatcher: /features\/fileTransfer\/(.*)/,
8
9
  counterMatcher: /counter\/(.*)/
9
10
  };
10
11
  /**
@@ -27,6 +28,9 @@ export class GatewayUrlTranslator {
27
28
  if (this.translations.wdacMatcher.test(url)) {
28
29
  return this.translateWdacRequest(url);
29
30
  }
31
+ if (this.translations.fileTransferMatcher.test(url)) {
32
+ return this.translateFileTransferRequest(url);
33
+ }
30
34
  if (this.translations.counterMatcher.test(url)) {
31
35
  return this.translateCounterRequest(url);
32
36
  }
@@ -65,6 +69,17 @@ export class GatewayUrlTranslator {
65
69
  }
66
70
  return null;
67
71
  }
72
+ static translateFileTransferRequest(url) {
73
+ const matches = url.match(this.translations.fileTransferMatcher);
74
+ if (matches) {
75
+ const restOfString = matches[1];
76
+ return {
77
+ newUrl: restOfString,
78
+ startUrl: `services/${Net.serviceWinRest}/${Net.controllerFileTransfer}`
79
+ };
80
+ }
81
+ return null;
82
+ }
68
83
  static translateWdacRequest(url) {
69
84
  const matches = url.match(this.translations.wdacMatcher);
70
85
  if (matches) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/gateway-url-translator.ts"],"names":[],"mappings":"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","file":"gateway-url-translator.js","sourcesContent":["import { Net } from './net';\r\n\r\nexport interface UrlTranslation {\r\n newUrl: string;\r\n startUrl: string;\r\n}\r\n\r\nexport class GatewayUrlTranslator {\r\n private static translations = {\r\n powerShellTranslationMatcher: /features\\/powershellApi\\/(.*)/,\r\n cimTranslationMatcher: /features\\/cim\\/(.*)/,\r\n wdacMatcher: /features\\/wdac\\/(.*)/,\r\n jeaMatcher: /features\\/jea\\/(.*)/,\r\n counterMatcher: /counter\\/(.*)/\r\n };\r\n /**\r\n * Given url return a gateway v2 translation object that will work well with\r\n * nodes/node api.\r\n *\r\n * @param url a gateway v1 url\r\n * @returns\r\n */\r\n public static translate(url: string): UrlTranslation {\r\n if (this.translations.powerShellTranslationMatcher.test(url)) {\r\n return this.translatePowerShellRequest(url);\r\n }\r\n\r\n if (this.translations.cimTranslationMatcher.test(url)) {\r\n return this.translateCimRequest(url);\r\n }\r\n\r\n if (this.translations.jeaMatcher.test(url)) {\r\n return this.translateJeaRequest(url);\r\n }\r\n\r\n if (this.translations.wdacMatcher.test(url)) {\r\n return this.translateWdacRequest(url);\r\n }\r\n\r\n if (this.translations.counterMatcher.test(url)) {\r\n return this.translateCounterRequest(url);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translatePowerShellRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.powerShellTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPowerShell}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCimRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.cimTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerCim}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateJeaRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.jeaMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerJea}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateWdacRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.wdacMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerWdac}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCounterRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.counterMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPerformanceCounter}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/data/gateway-url-translator.ts"],"names":[],"mappings":"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","file":"gateway-url-translator.js","sourcesContent":["import { Net } from './net';\r\n\r\nexport interface UrlTranslation {\r\n newUrl: string;\r\n startUrl: string;\r\n}\r\n\r\nexport class GatewayUrlTranslator {\r\n private static translations = {\r\n powerShellTranslationMatcher: /features\\/powershellApi\\/(.*)/,\r\n cimTranslationMatcher: /features\\/cim\\/(.*)/,\r\n wdacMatcher: /features\\/wdac\\/(.*)/,\r\n jeaMatcher: /features\\/jea\\/(.*)/,\r\n fileTransferMatcher: /features\\/fileTransfer\\/(.*)/,\r\n counterMatcher: /counter\\/(.*)/\r\n };\r\n /**\r\n * Given url return a gateway v2 translation object that will work well with\r\n * nodes/node api.\r\n *\r\n * @param url a gateway v1 url\r\n * @returns\r\n */\r\n public static translate(url: string): UrlTranslation {\r\n if (this.translations.powerShellTranslationMatcher.test(url)) {\r\n return this.translatePowerShellRequest(url);\r\n }\r\n\r\n if (this.translations.cimTranslationMatcher.test(url)) {\r\n return this.translateCimRequest(url);\r\n }\r\n\r\n if (this.translations.jeaMatcher.test(url)) {\r\n return this.translateJeaRequest(url);\r\n }\r\n\r\n if (this.translations.wdacMatcher.test(url)) {\r\n return this.translateWdacRequest(url);\r\n }\r\n\r\n if (this.translations.fileTransferMatcher.test(url)) {\r\n return this.translateFileTransferRequest(url);\r\n }\r\n\r\n if (this.translations.counterMatcher.test(url)) {\r\n return this.translateCounterRequest(url);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translatePowerShellRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.powerShellTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPowerShell}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCimRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.cimTranslationMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerCim}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateJeaRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.jeaMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerJea}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateFileTransferRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.fileTransferMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerFileTransfer}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateWdacRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.wdacMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerWdac}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static translateCounterRequest(url: string): UrlTranslation {\r\n const matches = url.match(this.translations.counterMatcher);\r\n if (matches) {\r\n const restOfString = matches[1];\r\n return {\r\n newUrl: restOfString,\r\n startUrl: `services/${Net.serviceWinRest}/${Net.controllerPerformanceCounter}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n"]}
@@ -320,6 +320,7 @@ export declare class Net {
320
320
  * @return string the error message.
321
321
  */
322
322
  static getErrorMessage(error: any, options?: ErrorMessageOptions): string;
323
+ private static parseErrorDetails;
323
324
  /**
324
325
  * Get error message from PowerShell ajax response.
325
326
  * Can be used by a PowerShell batch consumer to get error message in batch response.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/net.ts"],"names":[],"mappings":"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","file":"net.d.ts","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.d.ts","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"]}