@microsoft/windows-admin-center-sdk 2.298.0 → 2.301.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 (149) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/strings.json +1 -1
  15. package/angular/assets/strings/sv-SE/strings.json +1 -1
  16. package/angular/assets/strings/tr-TR/strings.json +1 -1
  17. package/angular/assets/strings/zh-CN/strings.json +1 -1
  18. package/angular/assets/strings/zh-TW/strings.json +1 -1
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +239 -568
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
  22. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  23. package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -7
  24. package/angular/esm2015/src/controls/alert-bar/alert-bar.component.js +5 -5
  25. package/angular/esm2015/src/controls/common/base.component.js +1 -8
  26. package/angular/esm2015/src/controls/data-table/data-table.component.js +9 -39
  27. package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +8 -11
  28. package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +9 -8
  29. package/angular/esm2015/src/controls/form/form-field/file/file-form-field.component.js +2 -14
  30. package/angular/esm2015/src/controls/form/form-field/form-field.component.js +2 -9
  31. package/angular/esm2015/src/controls/layout/layout-definition.component.js +2 -9
  32. package/angular/esm2015/src/controls/layout/layout.component.js +2 -11
  33. package/angular/esm2015/src/controls/master-view/master-view.component.js +5 -32
  34. package/angular/esm2015/src/controls/page-alert-bar/models/index.js +1 -1
  35. package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
  36. package/angular/esm2015/src/controls/pivot/pivot.component.js +4 -21
  37. package/angular/esm2015/src/controls/property-grid/property-grid-item.component.js +2 -50
  38. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +60 -73
  39. package/angular/esm2015/src/controls/property-grid/property-grid.module.js +1 -5
  40. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +70 -151
  41. package/angular/esm2015/src/controls/settings/settings.component.js +8 -48
  42. package/angular/esm2015/src/controls/settings/settings.module.js +9 -21
  43. package/angular/esm2015/src/controls/wizard/wizard.component.js +65 -55
  44. package/angular/esm2015/src/generated/strings.js +1 -1
  45. package/angular/esm2015/src/service/app-context.service.js +1 -3
  46. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +239 -545
  47. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  48. package/angular/package.json +0 -2
  49. package/angular/src/controls/common/base.component.d.ts +0 -5
  50. package/angular/src/controls/data-table/data-table.component.d.ts +0 -15
  51. package/angular/src/controls/form/form-field/checklist/checklist-form-field.component.d.ts +0 -1
  52. package/angular/src/controls/form/form-field/file/file-form-field.component.d.ts +0 -4
  53. package/angular/src/controls/layout/layout-definition.component.d.ts +1 -6
  54. package/angular/src/controls/master-view/master-view.component.d.ts +2 -118
  55. package/angular/src/controls/page-alert-bar/models/index.d.ts +1 -1
  56. package/angular/src/controls/pivot/pivot-tab.component.d.ts +1 -0
  57. package/angular/src/controls/pivot/pivot.component.d.ts +0 -7
  58. package/angular/src/controls/property-grid/property-grid-item.component.d.ts +3 -53
  59. package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -1
  60. package/angular/src/controls/property-grid/property-grid.module.d.ts +3 -4
  61. package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +1 -32
  62. package/angular/src/controls/settings/settings.component.d.ts +1 -18
  63. package/angular/src/controls/settings/settings.module.d.ts +1 -3
  64. package/angular/src/generated/strings.d.ts +0 -3
  65. package/core/base/environment.d.ts +0 -10
  66. package/core/base/environment.js.map +1 -1
  67. package/core/data/gateway-connection.d.ts +0 -34
  68. package/core/data/gateway-connection.js +2 -59
  69. package/core/data/gateway-connection.js.map +1 -1
  70. package/core/data/node-connection.d.ts +0 -4
  71. package/core/data/node-connection.js.map +1 -1
  72. package/core/data/powershell.d.ts +0 -4
  73. package/core/data/powershell.js +0 -1
  74. package/core/data/powershell.js.map +1 -1
  75. package/core/diagnostics/sme-web-telemetry-models.d.ts +3 -20
  76. package/core/diagnostics/sme-web-telemetry-models.js +2 -6
  77. package/core/diagnostics/sme-web-telemetry-models.js.map +1 -1
  78. package/core/diagnostics/sme-web-telemetry.d.ts +1 -13
  79. package/core/diagnostics/sme-web-telemetry.js +11 -51
  80. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  81. package/core/generated/powershell-scripts.d.ts +0 -4
  82. package/core/generated/powershell-scripts.js +0 -4
  83. package/core/generated/powershell-scripts.js.map +1 -1
  84. package/core/index.d.ts +0 -2
  85. package/core/index.js +0 -1
  86. package/core/index.js.map +1 -1
  87. package/core/manifest/environment-modules.js +0 -10
  88. package/core/manifest/environment-modules.js.map +1 -1
  89. package/core/notification/powershell-notification.js +1 -1
  90. package/core/notification/powershell-notification.js.map +1 -1
  91. package/core/performance/performance-tracker.d.ts +0 -67
  92. package/core/performance/performance-tracker.js +4 -211
  93. package/core/performance/performance-tracker.js.map +1 -1
  94. package/core/rpc/credssp/rpc-credssp-model.d.ts +2 -27
  95. package/core/rpc/credssp/rpc-credssp-model.js +0 -10
  96. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  97. package/core/security/credssp-manager.d.ts +1 -15
  98. package/core/security/credssp-manager.js +0 -28
  99. package/core/security/credssp-manager.js.map +1 -1
  100. package/core/shared/gateway-inventory/gateway-inventory.d.ts +0 -10
  101. package/core/shared/gateway-inventory/gateway-inventory.js +0 -11
  102. package/core/shared/gateway-inventory/gateway-inventory.js.map +1 -1
  103. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  104. package/e2e/assets/strings/de-DE/strings.json +1 -1
  105. package/e2e/assets/strings/es-ES/strings.json +1 -1
  106. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  107. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  108. package/e2e/assets/strings/it-IT/strings.json +1 -1
  109. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  110. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  111. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  112. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  113. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  114. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  115. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  116. package/e2e/assets/strings/strings.json +1 -1
  117. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  118. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  119. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  120. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  121. package/package.json +3 -5
  122. package/styles/css/main.css +1 -1
  123. package/tools/module-template/gulpfile.ts/index.ts +1 -1
  124. package/tools/package-lock.json +975 -14946
  125. package/tools/wac-cli/src/create/main.d.ts +3 -6
  126. package/tools/wac-cli/src/create/main.js +35 -87
  127. package/tools/wac-cli/src/create/main.js.map +1 -1
  128. package/tools/wac-cli/src/index.js +2 -2
  129. package/tools/wac-cli/src/index.js.map +1 -1
  130. package/tools/wac-cli/templates/{solution/manifest.json → manifest/solution-manifest.json} +0 -19
  131. package/tools/wac-cli/templates/{wac-template/src/manifest.json → manifest/tool-manifest.json} +0 -0
  132. package/tools/wac-cli/templates/wac-template/angular.json +2 -2
  133. package/tools/wac-cli/templates/wac-template/gulpfile.ts/config-data.ts +1 -1
  134. package/tools/wac-cli/templates/wac-template/package.json +8 -0
  135. package/tools/wac-cli/templates/wac-template/src/app/app-routing.module.ts +1 -1
  136. package/tools/wac-cli/templates/wac-template/src/main.ts +0 -2
  137. package/tools/wac-cli/templates/wac-template/src/polyfills.ts +1 -1
  138. package/tools/wac-cli/templates/wac-template/src/test.ts +2 -2
  139. package/core/data/gateway-status.d.ts +0 -24
  140. package/core/data/gateway-status.js +0 -3
  141. package/core/data/gateway-status.js.map +0 -1
  142. package/core/data/wdac-operations.d.ts +0 -123
  143. package/core/data/wdac-operations.js +0 -144
  144. package/core/data/wdac-operations.js.map +0 -1
  145. package/tools/wac-cli/templates/internal/npmrc.txt +0 -6
  146. package/tools/wac-cli/templates/internal/package.json +0 -101
  147. package/tools/wac-cli/templates/solution/strings.resjson +0 -16
  148. package/tools/wac-cli/templates/wac-template/src/version.ts +0 -3
  149. package/tools/wac-cli/templates/wac-template/version.json +0 -5
@@ -1,5 +1,5 @@
1
1
  import { Observable, of, ReplaySubject, throwError } from 'rxjs';
2
- import { catchError, expand, filter, map, mergeMap, switchMap, take, tap } from 'rxjs/operators';
2
+ import { catchError, expand, filter, map, mergeMap, switchMap, take } from 'rxjs/operators';
3
3
  import { EnvironmentModule } from '../manifest/environment-modules';
4
4
  import { RpcObservableElevateClient } from '../rpc/elevate/rpc-observable-elevate-client';
5
5
  import { RpcObservableElevateServer } from '../rpc/elevate/rpc-observable-elevate-server';
@@ -25,22 +25,6 @@ export class GatewayConnection extends RpcServiceForwarder {
25
25
  super('gateway-connection', rpc);
26
26
  this.http = http;
27
27
  this.authorizationManager = authorizationManager;
28
- /**
29
- * The IPv4 address for localhost
30
- */
31
- this.localhostIpV4 = '127.0.0.1';
32
- /**
33
- * The IPv6 address for localhost
34
- */
35
- this.localhostIpV6 = '::1';
36
- /**
37
- * The localhost name
38
- */
39
- this.localhost = 'localhost';
40
- /**
41
- * Time interval to check for internalGatewayStatus refresh.
42
- */
43
- this.lastUpdatedInternalGatewayStatusInterval = 1000 * 60 * 10; // 10 minutes
44
28
  /**
45
29
  * The replay subject for gateway url to settle.
46
30
  */
@@ -135,16 +119,6 @@ export class GatewayConnection extends RpcServiceForwarder {
135
119
  // localhost will be used to locally query gateway node. if this causes any access problem, need to be replaced.
136
120
  return 'localhost';
137
121
  }
138
- /**
139
- * Gets gateway status from cache or sets cache if it doesn't exist.
140
- */
141
- get gatewayStatus() {
142
- if (!this.internalGatewayStatus
143
- || Date.now() - this.lastUpdatedInternalGatewayStatus > this.lastUpdatedInternalGatewayStatusInterval) {
144
- return this.getStatus();
145
- }
146
- return of(this.internalGatewayStatus);
147
- }
148
122
  /**
149
123
  * Configure the gateway URL to connect to.
150
124
  */
@@ -448,34 +422,6 @@ export class GatewayConnection extends RpcServiceForwarder {
448
422
  });
449
423
  });
450
424
  }
451
- /**
452
- * Gets gateway machine if found in list of given nodes
453
- * @param nodes Node names or IPs to check
454
- * @returns Node name of gateway if found, null otherwise
455
- */
456
- getGateway(nodes) {
457
- return this.gatewayStatus.pipe(map(status => {
458
- var _a, _b, _c, _d;
459
- for (const node of nodes) {
460
- if (MsftSme.isNullOrUndefined(node)) {
461
- continue;
462
- }
463
- switch (node.toLocaleLowerCase()) {
464
- case this.localhostIpV4:
465
- case this.localhostIpV6:
466
- case this.localhost:
467
- case (_a = status.fullyQualifiedDNSName) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase():
468
- case (_b = status.name) === null || _b === void 0 ? void 0 : _b.toLocaleLowerCase():
469
- case (_c = status.machineName) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase():
470
- return node;
471
- }
472
- if ((_d = status.addressList) === null || _d === void 0 ? void 0 : _d.find((address) => address === node)) {
473
- return node;
474
- }
475
- }
476
- return null;
477
- }));
478
- }
479
425
  /**
480
426
  * Check gateway condition.
481
427
  */
@@ -500,10 +446,7 @@ export class GatewayConnection extends RpcServiceForwarder {
500
446
  * Get gateway status.
501
447
  */
502
448
  getStatus() {
503
- return this.get('gateway/status').pipe(tap(status => {
504
- this.lastUpdatedInternalGatewayStatus = Date.now();
505
- this.internalGatewayStatus = status;
506
- }));
449
+ return this.get('gateway/status');
507
450
  }
508
451
  /**
509
452
  * Get user access check.
@@ -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 { 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.substr(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 || {};\r\n request.headers = request.headers || {};\r\n request.headers[headerConstants.MODULE_NAME] = EnvironmentModule.getModuleName();\r\n request.headers[headerConstants.MODULE_VERSION] = EnvironmentModule.getModuleVersion();\r\n request.headers[headerConstants.ACCEPT_LANGUAGE] = CoreEnvironment.localizationManager.getLocaleId().neutral;\r\n if (this.staticVersion) {\r\n 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>{\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\r\n // create observable for our request\r\n const requestObservable = this.http.request(request, retryOptions)\r\n .pipe(map((response: AjaxResponse) => 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 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 () => {\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 * 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('gateway/access/check');\r\n }\r\n\r\n /**\r\n * Called on a child service instance when onForwardInit returns from the parent\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 * 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, args: any[]): 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, value: any): 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 } 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 { GatewayUrlBuilder } from './gateway-url-builder';\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 * 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 * 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 * 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.substr(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 || {};\r\n request.headers = request.headers || {};\r\n request.headers[headerConstants.MODULE_NAME] = EnvironmentModule.getModuleName();\r\n request.headers[headerConstants.MODULE_VERSION] = EnvironmentModule.getModuleVersion();\r\n request.headers[headerConstants.ACCEPT_LANGUAGE] = CoreEnvironment.localizationManager.getLocaleId().neutral;\r\n if (this.staticVersion) {\r\n 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>{\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\r\n // create observable for our request\r\n const requestObservable = this.http.request(request, retryOptions)\r\n .pipe(map((response: AjaxResponse) => 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 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 () => {\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 * 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');\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('gateway/access/check');\r\n }\r\n\r\n /**\r\n * Called on a child service instance when onForwardInit returns from the parent\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 * 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, args: any[]): 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, value: any): 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"]}
@@ -39,10 +39,6 @@ export interface NodeRequestOptions {
39
39
  * Authentication mechanism.
40
40
  */
41
41
  authenticationMechanism?: 'Credssp' | 'NotSpecified';
42
- /**
43
- * Indicates if command should run in local runspace instead of remote runspace.
44
- */
45
- useInProcRunspace?: boolean;
46
42
  /**
47
43
  * Indicates that audit logging for this request should be made. Default is false.
48
44
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/node-connection.ts"],"names":[],"mappings":"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","file":"node-connection.js","sourcesContent":["import { Observable, of } from 'rxjs';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { AuthorizationManager, AuthorizationToken } from '../security/authorization-manager';\r\nimport { GatewayConnection, GatewayRequest } from './gateway-connection';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\nimport { PowerShellCommandWithoutState } from './powershell';\r\n\r\n/**\r\n * Node Cim output type.\r\n */\r\nexport enum NodeCimOutput {\r\n /**\r\n * Single instance.\r\n */\r\n Single,\r\n\r\n /**\r\n * Multiple instances.\r\n */\r\n Multiple,\r\n\r\n /**\r\n * Invoke result.\r\n */\r\n Result,\r\n\r\n /**\r\n * WQL query result.\r\n */\r\n Query\r\n}\r\n\r\n/**\r\n * Node Request options that we use to extend the GatewayRequest interface\r\n */\r\nexport interface NodeRequestOptions {\r\n /**\r\n * Indicates that no auth failure handling should take place, however, any auth headers for this node will still be added.\r\n */\r\n noAuth?: boolean;\r\n\r\n /**\r\n * Provides an alternative token to use for just this request\r\n */\r\n authToken?: AuthorizationToken;\r\n\r\n /**\r\n * Authentication mechanism.\r\n */\r\n authenticationMechanism?: 'Credssp' | 'NotSpecified';\r\n\r\n /**\r\n * Indicates if command should run in local runspace instead of remote runspace.\r\n */\r\n useInProcRunspace?: boolean;\r\n\r\n /**\r\n * Indicates that audit logging for this request should be made. Default is false.\r\n */\r\n logAudit?: boolean;\r\n\r\n /**\r\n * Indicates that telemetry logging for this request should be made. Default is false.\r\n */\r\n logTelemetry?: boolean;\r\n\r\n /**\r\n * Indicates targeting to specific PowerShell endpoint.\r\n * The endpoint data is inserted to the endpoint header.\r\n */\r\n powerShellEndpoint?: string;\r\n\r\n /**\r\n * The PowerShell command resource on JEA PowerShell endpoint.\r\n * The command object is used for auto fallback time on a CIM query.\r\n * (Only CIM query uses this property)\r\n */\r\n powerShell?: PowerShellCommandWithoutState;\r\n\r\n /**\r\n * The parameters for instance query powershell alternative.\r\n * (Only CIM query uses this property)\r\n */\r\n powerShellParameters?: any;\r\n\r\n /**\r\n * The PowerShell context to replace CIM call.\r\n * (Only CIM query uses this property)\r\n */\r\n powerShellContext?: {\r\n /**\r\n * CIM output data type.\r\n */\r\n cimOutput: NodeCimOutput;\r\n\r\n /**\r\n * CIM input parameters.\r\n */\r\n parameters?: any;\r\n };\r\n}\r\n\r\n/**\r\n * Extension of GatewayRequest interface for calling the Gateway Node API\r\n */\r\nexport interface NodeRequest extends GatewayRequest, NodeRequestOptions {\r\n}\r\n\r\n/**\r\n * The Node Connection class for creating requests and calling the Gateway's Node API\r\n */\r\nexport class NodeConnection {\r\n /**\r\n * Initializes a new instance of the GatewayService class.\r\n *\r\n * @param gateway the gateway Connection\r\n * @param authorizationManager the authorization manager.\r\n */\r\n constructor(private gateway: GatewayConnection, private authorizationManager: AuthorizationManager) { }\r\n\r\n /**\r\n * Makes a POST call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public post(nodeName: string, relativeUrl: string, body?: any, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.post(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a GET call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param request the node request object.\r\n */\r\n public get(nodeName: string, relativeUrl: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.get(relativeUrl, request);\r\n }\r\n\r\n /**\r\n * Makes a PUT call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public put(nodeName: string, relativeUrl: string, body?: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.put(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a PATCH call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public patch(nodeName: string, relativeUrl: string, body?: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.patch(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public delete(nodeName: string, relativeUrl: string, body?: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.delete(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway node api without waiting for the response.\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param request the node request object.\r\n */\r\n public deleteQuick(nodeName: string, relativeUrl: string, request?: NodeRequest): void {\r\n request.headers = request.headers || {};\r\n if (!request.authToken) {\r\n // if we dont have an authToken, then make sure we are not waiting on one.\r\n this.authorizationManager.addAuthorizationRequestHeader(request, nodeName);\r\n } else {\r\n this.authorizationManager.addAuthorizationRequestHeader(request, nodeName, request.authToken);\r\n }\r\n\r\n const endpoint = this.authorizationManager.getJeaEndpoint(nodeName);\r\n if (request.powerShellEndpoint) {\r\n // Override JEA fallback if endpoint is explicitly set for debugging purposes\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = request.powerShellEndpoint;\r\n } else if (endpoint) {\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n if (request.authenticationMechanism === 'Credssp') {\r\n request.headers[headerConstants.AUTHENTICATION_MECHANISM] = request.authenticationMechanism;\r\n }\r\n\r\n const url = this.getNodeUrl(nodeName, relativeUrl);\r\n return this.gateway.deleteQuick(url, request.headers);\r\n }\r\n\r\n /**\r\n * Persists the JEA powershell endpoint context\r\n * @param nodeName The node name\r\n * @param endpoint The powershell endpoint\r\n */\r\n public saveJeaContext(nodeName: string, endpoint: string) {\r\n this.authorizationManager.saveJeaContext(nodeName, endpoint);\r\n }\r\n\r\n /**\r\n * Gets the JEA powershell endpoint, if it exists\r\n * @param nodeName The node name\r\n */\r\n public getJeaEndpoint(nodeName: string) {\r\n return this.authorizationManager.getJeaEndpoint(nodeName);\r\n }\r\n\r\n /**\r\n * Adds default parameters to a NodeRequest\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 node request object to extend.\r\n */\r\n private createNodeRequest(request: NodeRequest, nodeName: string): GatewayRequest {\r\n // if we did not specify no auth, and we are not using a custom token...\r\n request = MsftSme.deepAssign({}, request);\r\n if (!request.noAuth && !request.authToken) {\r\n // ...then add node specific authorization handlers\r\n request.retryHandlers = (request.retryHandlers || []).concat([{\r\n canHandle: (code, error) => this.authorizationManager.canHandleAjaxFailure(code, error),\r\n handle: (code, originalRequest, error) =>\r\n this.authorizationManager.handleAjaxFailure(code, originalRequest, error, nodeName)\r\n }]);\r\n }\r\n\r\n const oldBeforeCall = request.beforeCall;\r\n\r\n // Add before call handler to wait for any pending node authorization\r\n request.beforeCall = pendingRequest => {\r\n let observable: Observable<void> = null;\r\n if (!request.authToken) {\r\n // if we dont have an authToken, then make sure we are not waiting on one.\r\n observable = this.authorizationManager.authAwaiter\r\n .pipe(map(() =>\r\n this.authorizationManager.addAuthorizationRequestHeader(pendingRequest, nodeName)));\r\n } else {\r\n observable = of(\r\n this.authorizationManager.addAuthorizationRequestHeader(pendingRequest, nodeName, request.authToken)\r\n );\r\n }\r\n\r\n if (oldBeforeCall) {\r\n return oldBeforeCall(request).pipe(mergeMap(() => observable));\r\n }\r\n\r\n return observable;\r\n };\r\n\r\n request.headers = request.headers || {};\r\n if (request.logAudit === true || request.logAudit === false) {\r\n request.headers[headerConstants.LOG_AUDIT] = request.logAudit ? 'true' : 'false';\r\n }\r\n\r\n if (request.logTelemetry === true || request.logTelemetry === false) {\r\n request.headers[headerConstants.LOG_TELEMETRY] = request.logTelemetry ? 'true' : 'false';\r\n }\r\n\r\n const endpoint = this.authorizationManager.getJeaEndpoint(nodeName);\r\n if (request.powerShellEndpoint) {\r\n // Override JEA fallback if endpoint is explicitly set for debugging purposes\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = request.powerShellEndpoint;\r\n } else if (endpoint) {\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n if (request.authenticationMechanism === 'Credssp') {\r\n request.headers[headerConstants.AUTHENTICATION_MECHANISM] = request.authenticationMechanism;\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Creates a Node url\r\n *\r\n * @param nodeName the name of the node to make a call against\r\n * @param relativeUrl the relative Url after \"/nodes/<nodeName>/\"\r\n */\r\n public getNodeUrl(nodeName: string, relativeUrl: string): string {\r\n // create node url from current url\r\n if (!relativeUrl.startsWith('/')) {\r\n relativeUrl = `/${relativeUrl}`;\r\n }\r\n\r\n relativeUrl = Net.updateApiVersion20190201(relativeUrl);\r\n return `/nodes/${nodeName}${relativeUrl}`;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/data/node-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B;;GAEG;AACH,MAAM,CAAN,IAAY,aAoBX;AApBD,WAAY,aAAa;IACrB;;OAEG;IACH,qDAAM,CAAA;IAEN;;OAEG;IACH,yDAAQ,CAAA;IAER;;OAEG;IACH,qDAAM,CAAA;IAEN;;OAEG;IACH,mDAAK,CAAA;AACT,CAAC,EApBW,aAAa,KAAb,aAAa,QAoBxB;AAyED;;GAEG;AACH,MAAM,OAAO,cAAc;IACvB;;;;;OAKG;IACH,YAAoB,OAA0B,EAAU,oBAA0C;QAA9E,YAAO,GAAP,OAAO,CAAmB;QAAU,yBAAoB,GAApB,oBAAoB,CAAsB;IAAI,CAAC;IAEvG;;;;;;;OAOG;IACI,IAAI,CAAC,QAAgB,EAAE,WAAmB,EAAE,IAAU,EAAE,OAAqB;QAChF,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACI,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAAqB;QACnE,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;OAOG;IACI,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAAE,IAAa,EAAE,OAAqB;QAClF,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,QAAgB,EAAE,WAAmB,EAAE,IAAa,EAAE,OAAqB;QACpF,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,QAAgB,EAAE,WAAmB,EAAE,IAAa,EAAE,OAAqB;QACrF,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;OAMG;IACI,WAAW,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAAqB;QAC3E,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACpB,0EAA0E;YAC1E,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SAC9E;aAAM;YACH,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;SACjG;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,kBAAkB,EAAE;YAC5B,6EAA6E;YAC7E,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;SACrF;aAAM,IAAI,QAAQ,EAAE;YACjB,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;SACnE;QAED,IAAI,OAAO,CAAC,uBAAuB,KAAK,SAAS,EAAE;YAC/C,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC;SAC/F;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,QAAgB,EAAE,QAAgB;QACpD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;OAOG;IACK,iBAAiB,CAAC,OAAoB,EAAE,QAAgB;QAC5D,wEAAwE;QACxE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3C,mDAAmD;YAC/C,OAAO,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC1D,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;oBACvF,MAAM,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,CACrC,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC;iBAC1F,CAAC,CAAC,CAAC;SACP;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;QAEzC,qEAAqE;QACrE,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE;YAClC,IAAI,UAAU,GAAqB,IAAI,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACpB,0EAA0E;gBAC1E,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW;qBAC7C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CACX,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC/F;iBAAM;gBACH,UAAU,GAAG,EAAE,CACX,IAAI,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CACvG,CAAC;aACL;YAED,IAAI,aAAa,EAAE;gBACf,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;aAClE;YAED,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC;QAEF,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;YACzD,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;SACpF;QAED,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE;YACjE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;SAC5F;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,kBAAkB,EAAE;YAC5B,6EAA6E;YAC7E,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;SACrF;aAAM,IAAI,QAAQ,EAAE;YACjB,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;SACnE;QAED,IAAI,OAAO,CAAC,uBAAuB,KAAK,SAAS,EAAE;YAC/C,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC;SAC/F;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,UAAU,CAAC,QAAgB,EAAE,WAAmB;QACnD,mCAAmC;QACnC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9B,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;SACnC;QAED,WAAW,GAAG,GAAG,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACxD,OAAO,UAAU,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC9C,CAAC;CACJ","file":"node-connection.js","sourcesContent":["import { Observable, of } from 'rxjs';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { AuthorizationManager, AuthorizationToken } from '../security/authorization-manager';\r\nimport { GatewayConnection, GatewayRequest } from './gateway-connection';\r\nimport { headerConstants } from './http-constants';\r\nimport { Net } from './net';\r\nimport { PowerShellCommandWithoutState } from './powershell';\r\n\r\n/**\r\n * Node Cim output type.\r\n */\r\nexport enum NodeCimOutput {\r\n /**\r\n * Single instance.\r\n */\r\n Single,\r\n\r\n /**\r\n * Multiple instances.\r\n */\r\n Multiple,\r\n\r\n /**\r\n * Invoke result.\r\n */\r\n Result,\r\n\r\n /**\r\n * WQL query result.\r\n */\r\n Query\r\n}\r\n\r\n/**\r\n * Node Request options that we use to extend the GatewayRequest interface\r\n */\r\nexport interface NodeRequestOptions {\r\n /**\r\n * Indicates that no auth failure handling should take place, however, any auth headers for this node will still be added.\r\n */\r\n noAuth?: boolean;\r\n\r\n /**\r\n * Provides an alternative token to use for just this request\r\n */\r\n authToken?: AuthorizationToken;\r\n\r\n /**\r\n * Authentication mechanism.\r\n */\r\n authenticationMechanism?: 'Credssp' | 'NotSpecified';\r\n\r\n /**\r\n * Indicates that audit logging for this request should be made. Default is false.\r\n */\r\n logAudit?: boolean;\r\n\r\n /**\r\n * Indicates that telemetry logging for this request should be made. Default is false.\r\n */\r\n logTelemetry?: boolean;\r\n\r\n /**\r\n * Indicates targeting to specific PowerShell endpoint.\r\n * The endpoint data is inserted to the endpoint header.\r\n */\r\n powerShellEndpoint?: string;\r\n\r\n /**\r\n * The PowerShell command resource on JEA PowerShell endpoint.\r\n * The command object is used for auto fallback time on a CIM query.\r\n * (Only CIM query uses this property)\r\n */\r\n powerShell?: PowerShellCommandWithoutState;\r\n\r\n /**\r\n * The parameters for instance query powershell alternative.\r\n * (Only CIM query uses this property)\r\n */\r\n powerShellParameters?: any;\r\n\r\n /**\r\n * The PowerShell context to replace CIM call.\r\n * (Only CIM query uses this property)\r\n */\r\n powerShellContext?: {\r\n /**\r\n * CIM output data type.\r\n */\r\n cimOutput: NodeCimOutput;\r\n\r\n /**\r\n * CIM input parameters.\r\n */\r\n parameters?: any;\r\n };\r\n}\r\n\r\n/**\r\n * Extension of GatewayRequest interface for calling the Gateway Node API\r\n */\r\nexport interface NodeRequest extends GatewayRequest, NodeRequestOptions {\r\n}\r\n\r\n/**\r\n * The Node Connection class for creating requests and calling the Gateway's Node API\r\n */\r\nexport class NodeConnection {\r\n /**\r\n * Initializes a new instance of the GatewayService class.\r\n *\r\n * @param gateway the gateway Connection\r\n * @param authorizationManager the authorization manager.\r\n */\r\n constructor(private gateway: GatewayConnection, private authorizationManager: AuthorizationManager) { }\r\n\r\n /**\r\n * Makes a POST call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public post(nodeName: string, relativeUrl: string, body?: any, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.post(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a GET call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param request the node request object.\r\n */\r\n public get(nodeName: string, relativeUrl: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.get(relativeUrl, request);\r\n }\r\n\r\n /**\r\n * Makes a PUT call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public put(nodeName: string, relativeUrl: string, body?: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.put(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a PATCH call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public patch(nodeName: string, relativeUrl: string, body?: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.patch(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway node api\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param body the body string JSON.stringfy'ed\r\n * @param request the node request object.\r\n */\r\n public delete(nodeName: string, relativeUrl: string, body?: string, request?: NodeRequest): Observable<any> {\r\n relativeUrl = this.getNodeUrl(nodeName, relativeUrl);\r\n request = this.createNodeRequest(request || {}, nodeName);\r\n return this.gateway.delete(relativeUrl, body, request);\r\n }\r\n\r\n /**\r\n * Makes a DELETE call to the gateway node api without waiting for the response.\r\n *\r\n * @param nodeName the name of the node to call the API for\r\n * @param relativeUrl the relative Url after \"/api/nodes/<nodeName>\"\r\n * @param request the node request object.\r\n */\r\n public deleteQuick(nodeName: string, relativeUrl: string, request?: NodeRequest): void {\r\n request.headers = request.headers || {};\r\n if (!request.authToken) {\r\n // if we dont have an authToken, then make sure we are not waiting on one.\r\n this.authorizationManager.addAuthorizationRequestHeader(request, nodeName);\r\n } else {\r\n this.authorizationManager.addAuthorizationRequestHeader(request, nodeName, request.authToken);\r\n }\r\n\r\n const endpoint = this.authorizationManager.getJeaEndpoint(nodeName);\r\n if (request.powerShellEndpoint) {\r\n // Override JEA fallback if endpoint is explicitly set for debugging purposes\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = request.powerShellEndpoint;\r\n } else if (endpoint) {\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n if (request.authenticationMechanism === 'Credssp') {\r\n request.headers[headerConstants.AUTHENTICATION_MECHANISM] = request.authenticationMechanism;\r\n }\r\n\r\n const url = this.getNodeUrl(nodeName, relativeUrl);\r\n return this.gateway.deleteQuick(url, request.headers);\r\n }\r\n\r\n /**\r\n * Persists the JEA powershell endpoint context\r\n * @param nodeName The node name\r\n * @param endpoint The powershell endpoint\r\n */\r\n public saveJeaContext(nodeName: string, endpoint: string) {\r\n this.authorizationManager.saveJeaContext(nodeName, endpoint);\r\n }\r\n\r\n /**\r\n * Gets the JEA powershell endpoint, if it exists\r\n * @param nodeName The node name\r\n */\r\n public getJeaEndpoint(nodeName: string) {\r\n return this.authorizationManager.getJeaEndpoint(nodeName);\r\n }\r\n\r\n /**\r\n * Adds default parameters to a NodeRequest\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 node request object to extend.\r\n */\r\n private createNodeRequest(request: NodeRequest, nodeName: string): GatewayRequest {\r\n // if we did not specify no auth, and we are not using a custom token...\r\n request = MsftSme.deepAssign({}, request);\r\n if (!request.noAuth && !request.authToken) {\r\n // ...then add node specific authorization handlers\r\n request.retryHandlers = (request.retryHandlers || []).concat([{\r\n canHandle: (code, error) => this.authorizationManager.canHandleAjaxFailure(code, error),\r\n handle: (code, originalRequest, error) =>\r\n this.authorizationManager.handleAjaxFailure(code, originalRequest, error, nodeName)\r\n }]);\r\n }\r\n\r\n const oldBeforeCall = request.beforeCall;\r\n\r\n // Add before call handler to wait for any pending node authorization\r\n request.beforeCall = pendingRequest => {\r\n let observable: Observable<void> = null;\r\n if (!request.authToken) {\r\n // if we dont have an authToken, then make sure we are not waiting on one.\r\n observable = this.authorizationManager.authAwaiter\r\n .pipe(map(() =>\r\n this.authorizationManager.addAuthorizationRequestHeader(pendingRequest, nodeName)));\r\n } else {\r\n observable = of(\r\n this.authorizationManager.addAuthorizationRequestHeader(pendingRequest, nodeName, request.authToken)\r\n );\r\n }\r\n\r\n if (oldBeforeCall) {\r\n return oldBeforeCall(request).pipe(mergeMap(() => observable));\r\n }\r\n\r\n return observable;\r\n };\r\n\r\n request.headers = request.headers || {};\r\n if (request.logAudit === true || request.logAudit === false) {\r\n request.headers[headerConstants.LOG_AUDIT] = request.logAudit ? 'true' : 'false';\r\n }\r\n\r\n if (request.logTelemetry === true || request.logTelemetry === false) {\r\n request.headers[headerConstants.LOG_TELEMETRY] = request.logTelemetry ? 'true' : 'false';\r\n }\r\n\r\n const endpoint = this.authorizationManager.getJeaEndpoint(nodeName);\r\n if (request.powerShellEndpoint) {\r\n // Override JEA fallback if endpoint is explicitly set for debugging purposes\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = request.powerShellEndpoint;\r\n } else if (endpoint) {\r\n request.headers[headerConstants.POWERSHELL_ENDPOINT] = endpoint;\r\n }\r\n\r\n if (request.authenticationMechanism === 'Credssp') {\r\n request.headers[headerConstants.AUTHENTICATION_MECHANISM] = request.authenticationMechanism;\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Creates a Node url\r\n *\r\n * @param nodeName the name of the node to make a call against\r\n * @param relativeUrl the relative Url after \"/nodes/<nodeName>/\"\r\n */\r\n public getNodeUrl(nodeName: string, relativeUrl: string): string {\r\n // create node url from current url\r\n if (!relativeUrl.startsWith('/')) {\r\n relativeUrl = `/${relativeUrl}`;\r\n }\r\n\r\n relativeUrl = Net.updateApiVersion20190201(relativeUrl);\r\n return `/nodes/${nodeName}${relativeUrl}`;\r\n }\r\n}\r\n"]}
@@ -75,10 +75,6 @@ export interface PowerShellCommandWithoutState {
75
75
  * The parameters (arguments).
76
76
  */
77
77
  parameters?: any;
78
- /**
79
- * Set if the command should be run in a local runspace.
80
- */
81
- useInProcRunspace?: boolean;
82
78
  /**
83
79
  * The script string.
84
80
  */
@@ -197,7 +197,6 @@ export class PowerShellRaw {
197
197
  */
198
198
  command(command, options) {
199
199
  const commandPacket = Object.assign({}, command);
200
- commandPacket.useInProcRunspace = !!(options === null || options === void 0 ? void 0 : options.useInProcRunspace);
201
200
  const polling = !!this.context.requestOptions.automatic;
202
201
  if (polling) {
203
202
  commandPacket.invokeMode = 'Polling';