@microsoft/windows-admin-center-sdk 2.186.0 → 2.296.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 (236) 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 +1103 -1209
  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/actions.module.js +2 -2
  24. package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -2
  25. package/angular/esm2015/src/controls/actions/items/action-button/action-button-renderer.component.js +5 -5
  26. package/angular/esm2015/src/controls/actions/items/action-dropdown/action-dropdown.component.js +31 -13
  27. package/angular/esm2015/src/controls/actions/items/action-item.component.js +7 -3
  28. package/angular/esm2015/src/controls/badge/badge-base.component.js +2 -13
  29. package/angular/esm2015/src/controls/badge/bugfixes-feature-badge.component.js +42 -70
  30. package/angular/esm2015/src/controls/badge/coming-soon-badge.component.js +42 -70
  31. package/angular/esm2015/src/controls/badge/credssp-enabled-badge.component.js +42 -70
  32. package/angular/esm2015/src/controls/badge/critical-badge.component.js +42 -70
  33. package/angular/esm2015/src/controls/badge/custom-badge.component.js +42 -70
  34. package/angular/esm2015/src/controls/badge/feedback-badge.component.js +42 -70
  35. package/angular/esm2015/src/controls/badge/improvement-feature-badge.component.js +42 -70
  36. package/angular/esm2015/src/controls/badge/new-badge.component.js +42 -70
  37. package/angular/esm2015/src/controls/badge/new-feature-badge.component.js +42 -70
  38. package/angular/esm2015/src/controls/badge/preview-badge.component.js +42 -70
  39. package/angular/esm2015/src/controls/badge/warning-badge.component.js +42 -70
  40. package/angular/esm2015/src/controls/breadcrumb/breadcrumb.component.js +6 -6
  41. package/angular/esm2015/src/controls/breadcrumb-header/breadcrumb-header.component.js +2 -2
  42. package/angular/esm2015/src/controls/data-table/data-table-column.component.js +5 -3
  43. package/angular/esm2015/src/controls/data-table/data-table.component.js +20 -26
  44. package/angular/esm2015/src/controls/data-table/extensions/data-table-column-picker-extension.js +2 -1
  45. package/angular/esm2015/src/controls/details/details.component.js +2 -2
  46. package/angular/esm2015/src/controls/dialog/base-dialog.component.js +1 -1
  47. package/angular/esm2015/src/controls/dialog/confirmation-dialog/confirmation-dialog.component.js +20 -30
  48. package/angular/esm2015/src/controls/dialog/dialog.service.js +7 -3
  49. package/angular/esm2015/src/controls/dropdown/dropdown.component.js +2 -2
  50. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +50 -40
  51. package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +3 -3
  52. package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +14 -13
  53. package/angular/esm2015/src/controls/form/form-field/datetime/datetime-form-field.component.js +2 -2
  54. package/angular/esm2015/src/controls/form/form-field/form-field.component.js +16 -4
  55. package/angular/esm2015/src/controls/form/form-field/options-form-field/form-field-option.component.js +5 -3
  56. package/angular/esm2015/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.js +25 -21
  57. package/angular/esm2015/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.js +5 -5
  58. package/angular/esm2015/src/controls/form/form-field/search/search-form-field.component.js +2 -2
  59. package/angular/esm2015/src/controls/form/form-field/tags/tags-form-field.component.js +2 -2
  60. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +4 -10
  61. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.js +1 -1
  62. package/angular/esm2015/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.js +17 -1
  63. package/angular/esm2015/src/controls/icon/layered-icon/layered-icon.component.js +12 -1
  64. package/angular/esm2015/src/controls/icon/layered-icon/status/status-icon.component.js +53 -9
  65. package/angular/esm2015/src/controls/loading-wheel/loading-wheel.component.js +17 -1
  66. package/angular/esm2015/src/controls/master-view/master-view.component.js +34 -30
  67. package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
  68. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  69. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +13 -29
  70. package/angular/esm2015/src/controls/schema-form/schema-form-content.component.js +7 -4
  71. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +23 -35
  72. package/angular/esm2015/src/controls/settings/settings.component.js +28 -1
  73. package/angular/esm2015/src/controls/settings/settings.module.js +8 -3
  74. package/angular/esm2015/src/controls/tooltip/tooltip-host.component.js +16 -5
  75. package/angular/esm2015/src/controls/wizard/wizard.component.js +38 -6
  76. package/angular/esm2015/src/directives/clamp/clamp.directive.js +26 -7
  77. package/angular/esm2015/src/directives/discard/discard.directive.js +2 -2
  78. package/angular/esm2015/src/directives/markdown/markdown.directive.js +5 -18
  79. package/angular/esm2015/src/generated/strings.js +1 -1
  80. package/angular/esm2015/src/guards/experiment.guard.service.js +14 -1
  81. package/angular/esm2015/src/pipes/boolean-converter-pipe.js +11 -1
  82. package/angular/esm2015/src/pipes/byte-unit-converter-pipe.js +11 -1
  83. package/angular/esm2015/src/pipes/enum-converter-pipe.js +16 -1
  84. package/angular/esm2015/src/pipes/format-pipe.js +11 -1
  85. package/angular/esm2015/src/pipes/highlight-pipe.js +11 -1
  86. package/angular/esm2015/src/pipes/yesno-converter-pipe.js +11 -1
  87. package/angular/esm2015/src/service/gateway.service.js +8 -5
  88. package/angular/esm2015/src/service/notification.service.js +23 -1
  89. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1042 -1069
  90. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  91. package/angular/package.json +0 -1
  92. package/angular/src/controls/actions/items/action-dropdown/action-dropdown.component.d.ts +2 -0
  93. package/angular/src/controls/actions/items/action-item.component.d.ts +11 -1
  94. package/angular/src/controls/badge/badge-base.component.d.ts +0 -4
  95. package/angular/src/controls/data-table/data-table-column.component.d.ts +2 -1
  96. package/angular/src/controls/data-table/data-table.component.d.ts +4 -0
  97. package/angular/src/controls/dialog/base-dialog.component.d.ts +1 -1
  98. package/angular/src/controls/form/form-field/form-field.component.d.ts +10 -1
  99. package/angular/src/controls/form/form-field/options-form-field/form-field-option.component.d.ts +5 -1
  100. package/angular/src/controls/form/validation-alert/validation-alert.component.d.ts +0 -4
  101. package/angular/src/controls/form/validation-alert/validation-alert.d.ts +0 -1
  102. package/angular/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.d.ts +16 -0
  103. package/angular/src/controls/icon/layered-icon/layered-icon.component.d.ts +11 -0
  104. package/angular/src/controls/icon/layered-icon/status/status-icon.component.d.ts +13 -2
  105. package/angular/src/controls/loading-wheel/loading-wheel.component.d.ts +16 -0
  106. package/angular/src/controls/master-view/master-view.component.d.ts +1 -0
  107. package/angular/src/controls/pivot/pivot-tab.component.d.ts +0 -1
  108. package/angular/src/controls/pivot/pivot.component.d.ts +4 -0
  109. package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +6 -5
  110. package/angular/src/controls/settings/settings.component.d.ts +27 -0
  111. package/angular/src/controls/settings/settings.module.d.ts +7 -6
  112. package/angular/src/controls/tooltip/tooltip-host.component.d.ts +1 -1
  113. package/angular/src/controls/wizard/wizard.component.d.ts +23 -0
  114. package/angular/src/directives/clamp/clamp.directive.d.ts +5 -0
  115. package/angular/src/directives/markdown/markdown.directive.d.ts +2 -3
  116. package/angular/src/generated/strings.d.ts +9 -0
  117. package/angular/src/guards/experiment.guard.service.d.ts +13 -0
  118. package/angular/src/pipes/boolean-converter-pipe.d.ts +10 -0
  119. package/angular/src/pipes/byte-unit-converter-pipe.d.ts +10 -0
  120. package/angular/src/pipes/enum-converter-pipe.d.ts +15 -0
  121. package/angular/src/pipes/format-pipe.d.ts +10 -0
  122. package/angular/src/pipes/highlight-pipe.d.ts +10 -0
  123. package/angular/src/pipes/yesno-converter-pipe.d.ts +10 -0
  124. package/angular/src/service/gateway.service.d.ts +3 -1
  125. package/angular/src/service/notification.service.d.ts +22 -0
  126. package/core/base/environment.d.ts +7 -0
  127. package/core/base/environment.js.map +1 -1
  128. package/core/base/versioned-object.js +2 -2
  129. package/core/base/versioned-object.js.map +1 -1
  130. package/core/data/cim-stream.js +8 -1
  131. package/core/data/cim-stream.js.map +1 -1
  132. package/core/data/core-environment.d.ts +4 -0
  133. package/core/data/core-environment.js +1 -0
  134. package/core/data/core-environment.js.map +1 -1
  135. package/core/data/crypto.js +10 -9
  136. package/core/data/crypto.js.map +1 -1
  137. package/core/data/file-transfer.js +5 -1
  138. package/core/data/file-transfer.js.map +1 -1
  139. package/core/data/gateway-connection.d.ts +11 -1
  140. package/core/data/gateway-connection.js +51 -9
  141. package/core/data/gateway-connection.js.map +1 -1
  142. package/core/data/http-constants.d.ts +5 -1
  143. package/core/data/http-constants.js +5 -1
  144. package/core/data/http-constants.js.map +1 -1
  145. package/core/data/net.d.ts +15 -11
  146. package/core/data/net.js +44 -41
  147. package/core/data/net.js.map +1 -1
  148. package/core/data/node-connection.d.ts +2 -2
  149. package/core/data/node-connection.js.map +1 -1
  150. package/core/data/powershell-stream.js +11 -3
  151. package/core/data/powershell-stream.js.map +1 -1
  152. package/core/data/powershell.d.ts +17 -1
  153. package/core/data/powershell.js +35 -9
  154. package/core/data/powershell.js.map +1 -1
  155. package/core/data/settings-manager.d.ts +9 -0
  156. package/core/data/settings-manager.js +18 -1
  157. package/core/data/settings-manager.js.map +1 -1
  158. package/core/generated/powershell-scripts.d.ts +5 -4
  159. package/core/generated/powershell-scripts.js +5 -4
  160. package/core/generated/powershell-scripts.js.map +1 -1
  161. package/core/host/host-core-manager.d.ts +36 -0
  162. package/core/host/host-core-manager.js +134 -0
  163. package/core/host/host-core-manager.js.map +1 -0
  164. package/core/host/host-core-message-type.d.ts +12 -0
  165. package/core/host/host-core-message-type.js +17 -0
  166. package/core/host/host-core-message-type.js.map +1 -0
  167. package/core/host/host-core-messages.d.ts +14 -0
  168. package/core/host/host-core-messages.js +3 -0
  169. package/core/host/host-core-messages.js.map +1 -0
  170. package/core/manifest/manifest-loader.d.ts +2 -1
  171. package/core/manifest/manifest-loader.js +27 -18
  172. package/core/manifest/manifest-loader.js.map +1 -1
  173. package/core/notification/notification.js +4 -0
  174. package/core/notification/notification.js.map +1 -1
  175. package/core/security/authorization-manager.d.ts +44 -0
  176. package/core/security/authorization-manager.js +111 -5
  177. package/core/security/authorization-manager.js.map +1 -1
  178. package/core/security/sign-on-manager.d.ts +109 -0
  179. package/core/security/sign-on-manager.js +119 -0
  180. package/core/security/sign-on-manager.js.map +1 -0
  181. package/core/security/tag-manager.js.map +1 -1
  182. package/core/shared/cluster-inventory/cluster-inventory-cache.js +3 -2
  183. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  184. package/core/shared/gateway-inventory/gateway-inventory-cache.d.ts +1 -1
  185. package/core/shared/gateway-inventory/gateway-inventory-cache.js +1 -1
  186. package/core/shared/gateway-inventory/gateway-inventory-cache.js.map +1 -1
  187. package/core/shared/server-inventory/server-inventory-cache.js +2 -1
  188. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  189. package/core/shared/tool-inventory/tool-inventory-cache.js +1 -1
  190. package/core/shared/tool-inventory/tool-inventory-cache.js.map +1 -1
  191. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  192. package/e2e/assets/strings/de-DE/strings.json +1 -1
  193. package/e2e/assets/strings/es-ES/strings.json +1 -1
  194. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  195. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  196. package/e2e/assets/strings/it-IT/strings.json +1 -1
  197. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  198. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  199. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  200. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  201. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  202. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  203. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  204. package/e2e/assets/strings/strings.json +1 -1
  205. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  206. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  207. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  208. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  209. package/package.json +5 -5
  210. package/styles/css/fonts.css +2 -2
  211. package/styles/css/main.css +1 -1
  212. package/styles/fonts/ServMDL2/ServMDL2-4.62.woff +0 -0
  213. package/styles/fonts/ServMDL2/ServMDL2.json +238 -2039
  214. package/styles/fonts/ServMDL2/ServMDL2.scss +238 -2039
  215. package/tools/gulp-manifest-resource/index.js +3 -1
  216. package/tools/gulp-manifest-resource/index.js.map +1 -1
  217. package/tools/gulp-ps-cim/index.js +1 -1
  218. package/tools/gulp-ps-cim/index.js.map +1 -1
  219. package/tools/gulp-ps-cim/powershell-cim-config-schema.json +1 -1
  220. package/tools/gulp-ps-code/index.js +36 -2
  221. package/tools/gulp-ps-code/index.js.map +1 -1
  222. package/tools/gulp-ps-code/ps-code-convert.js +4 -8
  223. package/tools/gulp-ps-code/ps-code-convert.js.map +1 -1
  224. package/tools/gulp-ps-resjson/index.js +79 -74
  225. package/tools/gulp-ps-resjson/index.js.map +1 -1
  226. package/tools/module-template/build/pipelines/codeinspector.yml +27 -0
  227. package/tools/module-template/gulpfile.ts/common/lint.ts +3 -3
  228. package/tools/module-template/gulpfile.ts/common/pack.ts +14 -14
  229. package/tools/module-template/gulpfile.ts/common/ui-test-automation.ts +40 -0
  230. package/tools/module-template/gulpfile.ts/common/utilities.ts +10 -10
  231. package/tools/module-template/gulpfile.ts/common/validate.ts +14 -4
  232. package/tools/module-template/gulpfile.ts/index.ts +20 -8
  233. package/tools/wac-cli/src/upgrade/file-updater.d.ts +1 -0
  234. package/tools/wac-cli/src/upgrade/file-updater.js +7 -1
  235. package/tools/wac-cli/src/upgrade/file-updater.js.map +1 -1
  236. package/styles/fonts/ServMDL2/ServMDL2-4.33.woff +0 -0
@@ -0,0 +1,14 @@
1
+ import { HostCoreMessageType } from './host-core-message-type';
2
+ export interface HostCoreMessage {
3
+ requestId?: string;
4
+ type: HostCoreMessageType;
5
+ }
6
+ export declare type HostCoreRequest = HostCoreMessage;
7
+ export interface HostCoreResponse<T> extends HostCoreMessage {
8
+ type: HostCoreMessageType.Response;
9
+ data?: T;
10
+ }
11
+ export interface HostCoreErrorResponse extends HostCoreRequest {
12
+ type: HostCoreMessageType.Error;
13
+ error: string;
14
+ }
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=host-core-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/core/host/host-core-messages.ts"],"names":[],"mappings":"","file":"host-core-messages.js","sourcesContent":["import { HostCoreMessageType } from './host-core-message-type';\r\n\r\nexport interface HostCoreMessage {\r\n requestId?: string;\r\n type: HostCoreMessageType;\r\n}\r\n\r\nexport type HostCoreRequest = HostCoreMessage;\r\n\r\nexport interface HostCoreResponse<T> extends HostCoreMessage {\r\n type: HostCoreMessageType.Response;\r\n data?: T;\r\n}\r\n\r\nexport interface HostCoreErrorResponse extends HostCoreRequest {\r\n type: HostCoreMessageType.Error;\r\n error: string;\r\n}\r\n"]}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export declare class ManifestLoader {
6
6
  private static readonly logSourceName;
7
+ private static gatewayUrl;
7
8
  private static manifestFile;
8
9
  private static deferred;
9
10
  private static internalLoaded;
@@ -18,7 +19,7 @@ export declare class ManifestLoader {
18
19
  /**
19
20
  * Load the manifest into the MsftSme.Environment.
20
21
  *
21
- * @param http the http object to load the manifest.
22
+ * @param hostCoreManager the hostCoreManager object to load the manifest.
22
23
  * @param manifest the self loading manifest.
23
24
  * @return Promise<any> the promise object.
24
25
  */
@@ -1,9 +1,9 @@
1
1
  import { forkJoin, of } from 'rxjs';
2
2
  import { catchError, map, mergeMap } from 'rxjs/operators';
3
- import { Http } from '../data/http';
4
3
  import { NativeQ } from '../data/native-q';
5
4
  import { LogLevel } from '../diagnostics/log-level';
6
5
  import { Logging } from '../diagnostics/logging';
6
+ import { HostCoreManager } from '../host/host-core-manager';
7
7
  import { EnvironmentModule } from './environment-modules';
8
8
  /**
9
9
  * The Manifest service class.
@@ -22,7 +22,7 @@ export class ManifestLoader {
22
22
  static loadManifest() {
23
23
  const self = MsftSme.self();
24
24
  const mode = self.Init ? self.Init.mode : 0 /* NotUse */;
25
- const http = new Http();
25
+ const hostCoreManager = new HostCoreManager();
26
26
  switch (mode) {
27
27
  case 0 /* NotUse */:
28
28
  // Turn OFF iframe feature.
@@ -40,11 +40,11 @@ export class ManifestLoader {
40
40
  }
41
41
  };
42
42
  // Turn ON module self-loading.
43
- ManifestLoader.load(http, manifest);
43
+ ManifestLoader.load(hostCoreManager, manifest);
44
44
  break;
45
45
  case 2 /* Load */:
46
46
  // Turn ON iframe feature by Shell and Module.
47
- ManifestLoader.load(http);
47
+ ManifestLoader.load(hostCoreManager);
48
48
  break;
49
49
  }
50
50
  return ManifestLoader.internalLoaded;
@@ -52,26 +52,26 @@ export class ManifestLoader {
52
52
  /**
53
53
  * Load the manifest into the MsftSme.Environment.
54
54
  *
55
- * @param http the http object to load the manifest.
55
+ * @param hostCoreManager the hostCoreManager object to load the manifest.
56
56
  * @param manifest the self loading manifest.
57
57
  * @return Promise<any> the promise object.
58
58
  */
59
- static load(http, manifest) {
59
+ static load(hostCoreManager, manifest) {
60
60
  if (manifest) {
61
- ManifestLoader.update(manifest);
61
+ ManifestLoader.update(manifest, null);
62
62
  return ManifestLoader.internalLoaded;
63
63
  }
64
- const gatewayUrlParam = MsftSme.getLocationSearchParameter('gatewayUrl');
64
+ const gatewayUrlParam = MsftSme.getLocationSearchParameter(ManifestLoader.gatewayUrl);
65
65
  let manifestUrl = ManifestLoader.manifestFile;
66
66
  if (gatewayUrlParam && MsftSme.self().Init.isProduction && Object.keys(MsftSme.sideLoad()).length === 0) {
67
67
  // use the gateway endpoint for manifest source.
68
68
  manifestUrl = `${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`;
69
69
  }
70
- http.getNoCache(manifestUrl, true, 'json')
71
- .pipe(mergeMap(result => ManifestLoader.mergeGatewayManifest(http, result.response)), mergeMap(shellManifest => {
70
+ hostCoreManager.httpGet(manifestUrl)
71
+ .pipe(mergeMap(result => ManifestLoader.mergeGatewayManifest(hostCoreManager, result.response)), mergeMap(shellManifest => {
72
72
  const response = shellManifest;
73
73
  if (response.modules) {
74
- return ManifestLoader.fetchSideloadManifests(http)
74
+ return ManifestLoader.fetchSideloadManifests(hostCoreManager)
75
75
  .pipe(map(sideLoads => {
76
76
  const sideloadShellOrigins = [];
77
77
  sideLoads = sideLoads.filter(s => {
@@ -114,7 +114,7 @@ export class ManifestLoader {
114
114
  }
115
115
  }
116
116
  });
117
- ManifestLoader.update(result.manifest);
117
+ ManifestLoader.update(result.manifest, hostCoreManager.token);
118
118
  }, error => {
119
119
  ManifestLoader.deferred.reject(error);
120
120
  });
@@ -124,16 +124,16 @@ export class ManifestLoader {
124
124
  * Merges the GatewayUrl manifest with the passed in shell manifest
125
125
  * Merges modules only at this time with a preference for modules included in the shell
126
126
  */
127
- static mergeGatewayManifest(http, shellManifest) {
127
+ static mergeGatewayManifest(hostCoreManager, shellManifest) {
128
128
  // it's production mode and no side-loading omits calling manifest.json again.
129
129
  if (MsftSme.self().Init.isProduction && Object.keys(MsftSme.sideLoad()).length === 0) {
130
130
  return of(shellManifest);
131
131
  }
132
- const gatewayUrlParam = MsftSme.getLocationSearchParameter('gatewayUrl');
132
+ const gatewayUrlParam = MsftSme.getLocationSearchParameter(ManifestLoader.gatewayUrl);
133
133
  if (!gatewayUrlParam) {
134
134
  return of(shellManifest);
135
135
  }
136
- return http.getNoCache(`${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`, false, 'json')
136
+ return hostCoreManager.getNoCache(`${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`, false, 'json')
137
137
  .pipe(map(result => {
138
138
  const gatewayManifest = result.response;
139
139
  if (Array.isArray(gatewayManifest.modules)) {
@@ -167,7 +167,7 @@ export class ManifestLoader {
167
167
  *
168
168
  * @return Observable<any[]> the manifests.
169
169
  */
170
- static fetchSideloadManifests(http) {
170
+ static fetchSideloadManifests(hostCoreManager) {
171
171
  const sideLoadList = MsftSme.sideLoad();
172
172
  if (Object.keys(sideLoadList).length === 0) {
173
173
  return of([]);
@@ -176,7 +176,7 @@ export class ManifestLoader {
176
176
  MsftSme.forEachKey(sideLoadList, (key, sideLoad) => {
177
177
  sideLoadManifestAwaiters.push(
178
178
  // don't send credentials when debugging a side-loading module.
179
- http.getNoCache(`${sideLoad.origin}/${ManifestLoader.manifestFile}`, false, 'json', false)
179
+ hostCoreManager.getNoCache(`${sideLoad.origin}/${ManifestLoader.manifestFile}`, false, 'json', false)
180
180
  .pipe(map(result => {
181
181
  const manifest = result.response;
182
182
  manifest.origin = sideLoad.origin;
@@ -197,9 +197,17 @@ export class ManifestLoader {
197
197
  /**
198
198
  * Update the environment by the manifest.
199
199
  */
200
- static update(manifest) {
200
+ static update(manifest, token) {
201
201
  try {
202
202
  const self = MsftSme.self();
203
+ if (token) {
204
+ // store the last token if exists.
205
+ if (!manifest.configuration) {
206
+ manifest.configuration = {};
207
+ }
208
+ // passed the signOn objec to GatewayConnection object to configure into the SignOnManager.
209
+ manifest.configuration.signOn = { signedHttpRequestToken: token };
210
+ }
203
211
  self.Environment = EnvironmentModule.createEnvironment(manifest, self.Resources.localeId);
204
212
  ManifestLoader.deferred.resolve();
205
213
  }
@@ -212,6 +220,7 @@ export class ManifestLoader {
212
220
  }
213
221
  }
214
222
  ManifestLoader.logSourceName = 'ManifestLoader';
223
+ ManifestLoader.gatewayUrl = 'gatewayUrl';
215
224
  ManifestLoader.manifestFile = 'manifest.json';
216
225
  ManifestLoader.deferred = NativeQ.defer();
217
226
  ManifestLoader.internalLoaded = ManifestLoader.deferred.promise;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/manifest/manifest-loader.ts"],"names":[],"mappings":"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","file":"manifest-loader.js","sourcesContent":["import { forkJoin, Observable, of } from 'rxjs';\r\nimport { catchError, map, mergeMap } from 'rxjs/operators';\r\nimport { Http } from '../data/http';\r\nimport { NativeQ } from '../data/native-q';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { LogRecord } from '../diagnostics/log-record';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { EnvironmentModule } from './environment-modules';\r\n\r\n/**\r\n * The Manifest service class.\r\n * (Localized string cannot be used in this class due to initialization phase when the strings are not ready yet.)\r\n */\r\nexport class ManifestLoader {\r\n private static readonly logSourceName = 'ManifestLoader';\r\n private static manifestFile = 'manifest.json';\r\n private static deferred = NativeQ.defer<any>();\r\n private static internalLoaded: Promise<void> = ManifestLoader.deferred.promise;\r\n\r\n /**\r\n * Manifest loading promise.\r\n */\r\n public get loaded(): Promise<void> {\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n /**\r\n * Load the manifest.\r\n */\r\n public static loadManifest(): Promise<void> {\r\n const self = MsftSme.self();\r\n const mode: MsftSme.EnvironmentMode = self.Init ? self.Init.mode : MsftSme.EnvironmentMode.NotUse;\r\n const http = new Http();\r\n switch (mode) {\r\n case MsftSme.EnvironmentMode.NotUse:\r\n // Turn OFF iframe feature.\r\n ManifestLoader.deferred.reject('no iFrame');\r\n break;\r\n case MsftSme.EnvironmentMode.LoadEmbedded:\r\n // JSON file posting by module iframe.\r\n const manifest: any = {\r\n name: self.Init.moduleName,\r\n version: self.Init.moduleVersion,\r\n signature: EnvironmentModule.defaultSignature,\r\n shell: {\r\n name: EnvironmentModule.nameOfShell,\r\n origin: self.Init.shellOrigin\r\n }\r\n };\r\n\r\n // Turn ON module self-loading.\r\n ManifestLoader.load(http, manifest);\r\n break;\r\n case MsftSme.EnvironmentMode.Load:\r\n // Turn ON iframe feature by Shell and Module.\r\n ManifestLoader.load(http);\r\n break;\r\n }\r\n\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n /**\r\n * Load the manifest into the MsftSme.Environment.\r\n *\r\n * @param http the http object to load the manifest.\r\n * @param manifest the self loading manifest.\r\n * @return Promise<any> the promise object.\r\n */\r\n private static load(http: Http, manifest?: any): Promise<any> {\r\n if (manifest) {\r\n ManifestLoader.update(manifest);\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n const gatewayUrlParam = MsftSme.getLocationSearchParameter('gatewayUrl');\r\n let manifestUrl = ManifestLoader.manifestFile;\r\n if (gatewayUrlParam && MsftSme.self().Init.isProduction && Object.keys(MsftSme.sideLoad()).length === 0) {\r\n // use the gateway endpoint for manifest source.\r\n manifestUrl = `${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`;\r\n }\r\n\r\n http.getNoCache(manifestUrl, true, 'json')\r\n .pipe(\r\n mergeMap(result => ManifestLoader.mergeGatewayManifest(http, result.response)),\r\n mergeMap(\r\n shellManifest => {\r\n const response = shellManifest;\r\n if (response.modules) {\r\n return ManifestLoader.fetchSideloadManifests(http)\r\n .pipe(\r\n map(sideLoads => {\r\n const sideloadShellOrigins: string[] = [];\r\n\r\n sideLoads = sideLoads.filter(s => {\r\n if (MsftSme.isNullOrUndefined(s)) {\r\n return false;\r\n }\r\n\r\n const isShell = s.name === EnvironmentModule.nameOfShell;\r\n if (isShell) {\r\n sideloadShellOrigins.push(s.origin);\r\n }\r\n return !isShell;\r\n });\r\n\r\n if (sideloadShellOrigins.length > 0) {\r\n Logging.log(<LogRecord>{\r\n source: ManifestLoader.logSourceName,\r\n level: LogLevel.Warning,\r\n consoleGroupHeader: `Unable to sideload: \"${sideloadShellOrigins}\".`,\r\n // tslint:disable-next-line:max-line-length\r\n message: `Cannot sideload ${EnvironmentModule.nameOfShell} from ${sideloadShellOrigins}. Did you mean to run ${EnvironmentModule.nameOfShell} locally?`\r\n });\r\n }\r\n return { manifest: response, sideLoads: sideLoads };\r\n }));\r\n }\r\n\r\n return of({ manifest: response, sideLoads: [] });\r\n })\r\n )\r\n .subscribe(\r\n result => {\r\n const manifestResult = <MsftSme.MsftSmeEnvironment>result.manifest;\r\n const modules = manifestResult.modules;\r\n MsftSme.self().Init.shellVersion = manifestResult.version;\r\n result.sideLoads.forEach(sideLoad => {\r\n if (sideLoad) {\r\n sideLoad.isSideLoaded = true;\r\n const foundIndex = modules.findIndex((item, index, items) => item.name === sideLoad.name);\r\n if (foundIndex >= 0) {\r\n modules.splice(foundIndex, 1, sideLoad);\r\n } else {\r\n modules.push(sideLoad);\r\n }\r\n }\r\n });\r\n\r\n ManifestLoader.update(result.manifest);\r\n },\r\n error => {\r\n ManifestLoader.deferred.reject(error);\r\n });\r\n\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n /**\r\n * Merges the GatewayUrl manifest with the passed in shell manifest\r\n * Merges modules only at this time with a preference for modules included in the shell\r\n */\r\n private static mergeGatewayManifest(http: Http, shellManifest: any): Observable<any> {\r\n // it's production mode and no side-loading omits calling manifest.json again.\r\n if (MsftSme.self().Init.isProduction && Object.keys(MsftSme.sideLoad()).length === 0) {\r\n return of(shellManifest);\r\n }\r\n\r\n const gatewayUrlParam = MsftSme.getLocationSearchParameter('gatewayUrl');\r\n if (!gatewayUrlParam) {\r\n return of(shellManifest);\r\n }\r\n\r\n return http.getNoCache(`${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`, false, 'json')\r\n .pipe(\r\n map(result => {\r\n const gatewayManifest = result.response;\r\n if (Array.isArray(gatewayManifest.modules)) {\r\n if (!Array.isArray(shellManifest.modules)) {\r\n shellManifest.modules = gatewayManifest.modules;\r\n } else {\r\n gatewayManifest.modules.forEach(mod => {\r\n mod.origin = gatewayUrlParam.value;\r\n const foundIndex = shellManifest.modules.findIndex((item, index, items) => item.name === mod.name);\r\n if (foundIndex === -1) {\r\n shellManifest.modules.push(mod);\r\n }\r\n });\r\n }\r\n }\r\n return shellManifest;\r\n }),\r\n catchError(error => {\r\n // no localization\r\n Logging.log(<LogRecord>{\r\n source: ManifestLoader.logSourceName,\r\n level: LogLevel.Warning,\r\n consoleGroupHeader: `Unable to load gateway manifest: \"${gatewayUrlParam.value}\".`,\r\n message: `Cannot load ${gatewayUrlParam.value}. Please make sure that a manifest.json is available at this location.`\r\n });\r\n return of(shellManifest);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * retrieves all of the side loaded manifests.\r\n *\r\n * @return Observable<any[]> the manifests.\r\n */\r\n private static fetchSideloadManifests(http: Http): Observable<any[]> {\r\n const sideLoadList = MsftSme.sideLoad();\r\n if (Object.keys(sideLoadList).length === 0) {\r\n return of([]);\r\n }\r\n\r\n const sideLoadManifestAwaiters: Observable<any>[] = [];\r\n MsftSme.forEachKey<MsftSme.SideLoad>(sideLoadList, (key, sideLoad) => {\r\n sideLoadManifestAwaiters.push(\r\n // don't send credentials when debugging a side-loading module.\r\n http.getNoCache(`${sideLoad.origin}/${ManifestLoader.manifestFile}`, false, 'json', false)\r\n .pipe(\r\n map(result => {\r\n const manifest = result.response;\r\n manifest.origin = sideLoad.origin;\r\n return manifest;\r\n }),\r\n catchError(error => {\r\n // no localization\r\n Logging.log(<LogRecord>{\r\n source: ManifestLoader.logSourceName,\r\n level: LogLevel.Warning,\r\n consoleGroupHeader: `Unable to sideload: \"${sideLoad.origin}\".`,\r\n message: `Cannot sideload ${sideLoad.origin}. Please make sure that an extension is running at this origin.`\r\n });\r\n return of(null);\r\n })\r\n )\r\n );\r\n });\r\n\r\n return forkJoin(...sideLoadManifestAwaiters);\r\n }\r\n\r\n /**\r\n * Update the environment by the manifest.\r\n */\r\n private static update(manifest: any): void {\r\n try {\r\n const self = MsftSme.self();\r\n self.Environment = EnvironmentModule.createEnvironment(manifest, self.Resources.localeId);\r\n ManifestLoader.deferred.resolve();\r\n } catch (e) {\r\n // no localization\r\n const message = 'Unable to load the manifest: {0}'.format(e);\r\n ManifestLoader.deferred.reject(message);\r\n throw new Error(message);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/manifest/manifest-loader.ts"],"names":[],"mappings":"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","file":"manifest-loader.js","sourcesContent":["import { forkJoin, Observable, of } from 'rxjs';\r\nimport { catchError, map, mergeMap } from 'rxjs/operators';\r\nimport { NativeQ } from '../data/native-q';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { LogRecord } from '../diagnostics/log-record';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { HostCoreManager } from '../host/host-core-manager';\r\nimport { SignedHttpRequestToken } from '../security/sign-on-manager';\r\nimport { EnvironmentModule } from './environment-modules';\r\n\r\n/**\r\n * The Manifest service class.\r\n * (Localized string cannot be used in this class due to initialization phase when the strings are not ready yet.)\r\n */\r\nexport class ManifestLoader {\r\n private static readonly logSourceName = 'ManifestLoader';\r\n private static gatewayUrl = 'gatewayUrl';\r\n private static manifestFile = 'manifest.json';\r\n private static deferred = NativeQ.defer<any>();\r\n private static internalLoaded: Promise<void> = ManifestLoader.deferred.promise;\r\n\r\n /**\r\n * Manifest loading promise.\r\n */\r\n public get loaded(): Promise<void> {\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n /**\r\n * Load the manifest.\r\n */\r\n public static loadManifest(): Promise<void> {\r\n const self = MsftSme.self();\r\n const mode: MsftSme.EnvironmentMode = self.Init ? self.Init.mode : MsftSme.EnvironmentMode.NotUse;\r\n const hostCoreManager = new HostCoreManager();\r\n switch (mode) {\r\n case MsftSme.EnvironmentMode.NotUse:\r\n // Turn OFF iframe feature.\r\n ManifestLoader.deferred.reject('no iFrame');\r\n break;\r\n case MsftSme.EnvironmentMode.LoadEmbedded:\r\n // JSON file posting by module iframe.\r\n const manifest: any = {\r\n name: self.Init.moduleName,\r\n version: self.Init.moduleVersion,\r\n signature: EnvironmentModule.defaultSignature,\r\n shell: {\r\n name: EnvironmentModule.nameOfShell,\r\n origin: self.Init.shellOrigin\r\n }\r\n };\r\n\r\n // Turn ON module self-loading.\r\n ManifestLoader.load(hostCoreManager, manifest);\r\n break;\r\n case MsftSme.EnvironmentMode.Load:\r\n // Turn ON iframe feature by Shell and Module.\r\n ManifestLoader.load(hostCoreManager);\r\n break;\r\n }\r\n\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n /**\r\n * Load the manifest into the MsftSme.Environment.\r\n *\r\n * @param hostCoreManager the hostCoreManager object to load the manifest.\r\n * @param manifest the self loading manifest.\r\n * @return Promise<any> the promise object.\r\n */\r\n private static load(hostCoreManager: HostCoreManager, manifest?: any): Promise<any> {\r\n if (manifest) {\r\n ManifestLoader.update(manifest, null);\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n const gatewayUrlParam = MsftSme.getLocationSearchParameter(ManifestLoader.gatewayUrl);\r\n let manifestUrl = ManifestLoader.manifestFile;\r\n if (gatewayUrlParam && MsftSme.self().Init.isProduction && Object.keys(MsftSme.sideLoad()).length === 0) {\r\n // use the gateway endpoint for manifest source.\r\n manifestUrl = `${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`;\r\n }\r\n\r\n hostCoreManager.httpGet(manifestUrl)\r\n .pipe(\r\n mergeMap(result => ManifestLoader.mergeGatewayManifest(hostCoreManager, result.response)),\r\n mergeMap(\r\n shellManifest => {\r\n const response = shellManifest;\r\n if (response.modules) {\r\n return ManifestLoader.fetchSideloadManifests(hostCoreManager)\r\n .pipe(\r\n map(sideLoads => {\r\n const sideloadShellOrigins: string[] = [];\r\n\r\n sideLoads = sideLoads.filter(s => {\r\n if (MsftSme.isNullOrUndefined(s)) {\r\n return false;\r\n }\r\n\r\n const isShell = s.name === EnvironmentModule.nameOfShell;\r\n if (isShell) {\r\n sideloadShellOrigins.push(s.origin);\r\n }\r\n return !isShell;\r\n });\r\n\r\n if (sideloadShellOrigins.length > 0) {\r\n Logging.log(<LogRecord>{\r\n source: ManifestLoader.logSourceName,\r\n level: LogLevel.Warning,\r\n consoleGroupHeader: `Unable to sideload: \"${sideloadShellOrigins}\".`,\r\n // tslint:disable-next-line:max-line-length\r\n message: `Cannot sideload ${EnvironmentModule.nameOfShell} from ${sideloadShellOrigins}. Did you mean to run ${EnvironmentModule.nameOfShell} locally?`\r\n });\r\n }\r\n return { manifest: response, sideLoads: sideLoads };\r\n }));\r\n }\r\n\r\n return of({ manifest: response, sideLoads: [] });\r\n })\r\n )\r\n .subscribe(\r\n result => {\r\n const manifestResult = <MsftSme.MsftSmeEnvironment>result.manifest;\r\n const modules = manifestResult.modules;\r\n MsftSme.self().Init.shellVersion = manifestResult.version;\r\n result.sideLoads.forEach(sideLoad => {\r\n if (sideLoad) {\r\n sideLoad.isSideLoaded = true;\r\n const foundIndex = modules.findIndex((item, index, items) => item.name === sideLoad.name);\r\n if (foundIndex >= 0) {\r\n modules.splice(foundIndex, 1, sideLoad);\r\n } else {\r\n modules.push(sideLoad);\r\n }\r\n }\r\n });\r\n\r\n ManifestLoader.update(result.manifest, hostCoreManager.token);\r\n },\r\n error => {\r\n ManifestLoader.deferred.reject(error);\r\n });\r\n\r\n return ManifestLoader.internalLoaded;\r\n }\r\n\r\n /**\r\n * Merges the GatewayUrl manifest with the passed in shell manifest\r\n * Merges modules only at this time with a preference for modules included in the shell\r\n */\r\n private static mergeGatewayManifest(hostCoreManager: HostCoreManager, shellManifest: any): Observable<any> {\r\n // it's production mode and no side-loading omits calling manifest.json again.\r\n if (MsftSme.self().Init.isProduction && Object.keys(MsftSme.sideLoad()).length === 0) {\r\n return of(shellManifest);\r\n }\r\n\r\n const gatewayUrlParam = MsftSme.getLocationSearchParameter(ManifestLoader.gatewayUrl);\r\n if (!gatewayUrlParam) {\r\n return of(shellManifest);\r\n }\r\n\r\n return hostCoreManager.getNoCache(`${gatewayUrlParam.value}/${ManifestLoader.manifestFile}`, false, 'json')\r\n .pipe(\r\n map(result => {\r\n const gatewayManifest = result.response;\r\n if (Array.isArray(gatewayManifest.modules)) {\r\n if (!Array.isArray(shellManifest.modules)) {\r\n shellManifest.modules = gatewayManifest.modules;\r\n } else {\r\n gatewayManifest.modules.forEach(mod => {\r\n mod.origin = gatewayUrlParam.value;\r\n const foundIndex = shellManifest.modules.findIndex((item, index, items) => item.name === mod.name);\r\n if (foundIndex === -1) {\r\n shellManifest.modules.push(mod);\r\n }\r\n });\r\n }\r\n }\r\n return shellManifest;\r\n }),\r\n catchError(error => {\r\n // no localization\r\n Logging.log(<LogRecord>{\r\n source: ManifestLoader.logSourceName,\r\n level: LogLevel.Warning,\r\n consoleGroupHeader: `Unable to load gateway manifest: \"${gatewayUrlParam.value}\".`,\r\n message: `Cannot load ${gatewayUrlParam.value}. Please make sure that a manifest.json is available at this location.`\r\n });\r\n return of(shellManifest);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * retrieves all of the side loaded manifests.\r\n *\r\n * @return Observable<any[]> the manifests.\r\n */\r\n private static fetchSideloadManifests(hostCoreManager: HostCoreManager): Observable<any[]> {\r\n const sideLoadList = MsftSme.sideLoad();\r\n if (Object.keys(sideLoadList).length === 0) {\r\n return of([]);\r\n }\r\n\r\n const sideLoadManifestAwaiters: Observable<any>[] = [];\r\n MsftSme.forEachKey<MsftSme.SideLoad>(sideLoadList, (key, sideLoad) => {\r\n sideLoadManifestAwaiters.push(\r\n // don't send credentials when debugging a side-loading module.\r\n hostCoreManager.getNoCache(`${sideLoad.origin}/${ManifestLoader.manifestFile}`, false, 'json', false)\r\n .pipe(\r\n map(result => {\r\n const manifest = result.response;\r\n manifest.origin = sideLoad.origin;\r\n return manifest;\r\n }),\r\n catchError(error => {\r\n // no localization\r\n Logging.log(<LogRecord>{\r\n source: ManifestLoader.logSourceName,\r\n level: LogLevel.Warning,\r\n consoleGroupHeader: `Unable to sideload: \"${sideLoad.origin}\".`,\r\n message: `Cannot sideload ${sideLoad.origin}. Please make sure that an extension is running at this origin.`\r\n });\r\n return of(null);\r\n })\r\n )\r\n );\r\n });\r\n\r\n return forkJoin(...sideLoadManifestAwaiters);\r\n }\r\n\r\n /**\r\n * Update the environment by the manifest.\r\n */\r\n private static update(manifest: any, token: SignedHttpRequestToken): void {\r\n try {\r\n const self = MsftSme.self();\r\n if (token) {\r\n // store the last token if exists.\r\n if (!manifest.configuration) {\r\n manifest.configuration = {};\r\n }\r\n\r\n // passed the signOn objec to GatewayConnection object to configure into the SignOnManager.\r\n manifest.configuration.signOn = { signedHttpRequestToken: token };\r\n }\r\n\r\n self.Environment = EnvironmentModule.createEnvironment(manifest, self.Resources.localeId);\r\n ManifestLoader.deferred.resolve();\r\n } catch (e) {\r\n // no localization\r\n const message = 'Unable to load the manifest: {0}'.format(e);\r\n ManifestLoader.deferred.reject(message);\r\n throw new Error(message);\r\n }\r\n }\r\n}\r\n"]}
@@ -246,6 +246,10 @@ export class Notification {
246
246
  changed = true;
247
247
  this.message = client.message;
248
248
  }
249
+ if (this.solutionMessage !== client.solutionMessage) {
250
+ changed = true;
251
+ this.solutionMessage = client.solutionMessage;
252
+ }
249
253
  return changed;
250
254
  }
251
255
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/notification/notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAKjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAA6B,MAAM,2BAA2B,CAAC;AAI9F;;GAEG;AACH,MAAM,CAAN,IAAY,uBAMX;AAND,WAAY,uBAAuB;IAC/B,mFAAW,CAAA;IACX,qGAAoB,CAAA;IACpB,mEAAG,CAAA;IACH,yEAAM,CAAA;IACN,yEAAM,CAAA;AACV,CAAC,EANW,uBAAuB,KAAvB,uBAAuB,QAMlC;AAUD;;;GAGG;AACH,MAAM,OAAO,YAAY;IAoMrB;;;;OAIG;IACH,YAAmB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;QAxMrB,YAAO,GAAY,OAAO,CAAC,UAAU,EAAW,CAAC;QA8DzD;;WAEG;QACI,kBAAa,GAAG,KAAK,CAAC;QAE7B;;WAEG;QACI,eAAU,GAAG,KAAK,CAAC;QAsC1B;;;WAGG;QACI,oBAAe,GAAG,KAAK,CAAC;QAE/B;;WAEG;QACI,cAAS,GAAG,KAAK,CAAC;QAYzB;;;WAGG;QACI,aAAQ,GAAG,IAAI,CAAC;IAmEU,CAAC;IAjElC;;;;;;;;OAQG;IACI,MAAM,CAAC,kBAAkB,CAC5B,EAAU,EAAE,QAAqB,EAAE,KAAwB,EAAE,aAA4B,EAAE,MAAY;QACvG,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1C,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEjC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7B,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC7D,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,iBAAoC,EAAE,aAA4B;QAC9F,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC5D,YAAY,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QACnD,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC;QAElC,IAAI,iBAAiB,CAAC,MAAM,EAAE;YAC1B,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAC7C,YAAY,CAAC,MAAM,GAAG;gBAClB,SAAS,EAAE,iBAAiB;gBAC5B,OAAO,EAAE,iBAAiB,CAAC,YAAY;aAC1C,CAAC;SACL;aAAM;YACH,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC;YAClD,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;SAC5B;QAED,YAAY,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC/E,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,MAAuB,EAAE,aAA4B;QAChF,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,YAAY,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzD,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrD,YAAY,CAAC,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1D,OAAO,YAAY,CAAC;IACxB,CAAC;IASD;;;;;;OAMG;IACI,kBAAkB,CAAC,EAAU,EAAE,QAAqB,EAAE,KAAwB,EAAE,MAAY;QAC/F,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;SAChF;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACxB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;QAED,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,IAA8C;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACvC,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aAChF,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC3C,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAChF;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxE,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B;QAED,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;aACvE,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC3C,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAChF;YAED,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAClD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B;QAED,IAAI,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1C,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aACrF,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;gBAChD,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAC5D;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBACtD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;aAC7D;YAED,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;mBACvD,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC/F,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAChF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;gBAC7C,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAChF;YAED,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,MAAuB;QAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAAE;YACzC,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;SACzC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACzD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,UAAU,EAAE;gBAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;aAC7C;SACJ;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE;YACjC,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;SACjC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,aAA4B,EAAE,UAAkB,EAAE,aAAqB;QAChG,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,IAAI,YAAY,IAAI,YAAY,CAAC,UAAU,EAAE;YACzC,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;YAEtC,IAAI,UAAU,CAAC,YAAY,EAAE;gBACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;aAClD;SACJ;aAAM;YACH,+CAA+C;YAC/C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACjE;SACJ;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;QAE/C,sGAAsG;QACtG,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,EAAE;YACzD,MAAM,MAAM,GAAsB,OAAO,CAAC,IAAI,CACrB,WAAW,CAAC,OAAO,EACxC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE;gBACR,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC3F,IAAI,UAAU,EAAE;wBACZ,OAAO,UAAU,CAAC,WAAW,CAAC;qBACjC;iBACJ;gBAED,OAAO,MAAM,CAAC,WAAW,CAAC;aAC7B;YAED,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,KAAwB;QACxC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,IAAiB,EAAE,aAA4B;QAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,4BAA4B,CAAC,IAAiB;QAClD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,uBAAuB,CAAC;QACtE,QAAQ,IAAI,CAAC,KAAK,EAAE;YAChB,KAAK,iBAAiB,CAAC,SAAS;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,iBAAiB,CAAC,OAAO;gBAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,iBAAiB,CAAC,KAAK;gBACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC3C,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,wBAAwB,CAAC;gBACvE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;gBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACtE,MAAM;YACV,KAAK,iBAAiB,CAAC,UAAU;gBAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;gBAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,iBAAiB,CAAC,OAAO;gBAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;gBACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACxE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACV;gBACI,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,CAAC;gBAC3G,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEO,qBAAqB,CAAC,MAAuB,EAAE,aAA4B;QAC/E,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ;YACf,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACxF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,UAAU,EAAE;YACzF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACrE;IACL,CAAC;IAEO,sBAAsB,CAAC,SAAiB;QAC5C,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,QAA+B;QAC5D,2CAA2C;QAC3C,gBAAgB;QAChB,2CAA2C;QAC3C,gJAAgJ;QAEhJ,IAAI,QAAQ,KAAK,oBAAoB,CAAC,QAAQ,EAAE;YAC5C,OAAO,IAAI,CAAC;SACf;QAED,iEAAiE;QACjE,MAAM,QAAQ,GAAG,QAAQ,KAAK,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAC/D,GAAG;YACH,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAE/E,IAAI,IAAI,IAAI,QAAQ,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC9E;QAED,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,aAAa,CAAC,QAAgB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,QAAgB;QACnC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC;SAClB;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YACxB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;aACtC;SACJ;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,iBAAiB,CAAC,OAAe,EAAE,UAAoB;QAC3D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;oBAC1C,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;iBAC1E;aACJ;iBAAM,IAAI,KAAK,KAAK,YAAY,EAAE;gBAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBAC3C,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;iBAC5E;aACJ;iBAAM;gBACH,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;wBACxB,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;4BACb,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;yBACxB;6BAAM;4BACH,MAAM,GAAG,IAAI,CAAC;4BACd,MAAM;yBACT;qBACJ;oBAED,IAAI,MAAM,EAAE;wBACR,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;qBAClE;iBACJ;aACJ;SACJ;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ","file":"notification.js","sourcesContent":["import { Globalization } from '../data/globalization';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { RpcNotification } from '../rpc/notification/rpc-notification-model';\r\nimport { RpcWorkItem } from '../rpc/work-item/rpc-work-item-model';\r\nimport { NotificationLinkType } from './notification-link-type';\r\nimport { IFrameService } from './notification-manager';\r\nimport { NotificationState } from './notification-state';\r\nimport { PowerShellNotification, PowerShellWorkItemMessage } from './powershell-notification';\r\nimport { SocketMessage } from './socket-signalr';\r\nimport { RecoveredWorkItem } from './work-item-request';\r\n\r\n/**\r\n * Notification changed event type.\r\n */\r\nexport enum NotificationChangeEvent {\r\n Initialized,\r\n InitializationFailed,\r\n Add,\r\n Remove,\r\n Change\r\n}\r\n\r\n/**\r\n * Notification changed event packet.\r\n */\r\nexport interface NotificationEvent {\r\n changeEvent: NotificationChangeEvent;\r\n notification?: Notification;\r\n}\r\n\r\n/**\r\n * Internal notification object converted from ClientNotification object.\r\n * Contains data to track notifications.\r\n */\r\nexport class Notification {\r\n private strings: Strings = MsftSme.getStrings<Strings>();\r\n\r\n /**\r\n * Work item passed from RPC or client on shell.\r\n */\r\n private workItem: RpcWorkItem;\r\n\r\n /**\r\n * The type ID of work item.\r\n */\r\n public typeId: string;\r\n\r\n /**\r\n * The node name.\r\n */\r\n public nodeName: string;\r\n\r\n /**\r\n * The module name.\r\n */\r\n public moduleName: string;\r\n\r\n /**\r\n * The entry point name within the module\r\n */\r\n public entryPointName: string;\r\n\r\n /**\r\n * The module display name.\r\n */\r\n public moduleDisplayName: string;\r\n\r\n /**\r\n * Object included last response.\r\n */\r\n public object: any;\r\n\r\n /**\r\n * The state of notification.\r\n */\r\n public state: NotificationState;\r\n\r\n /**\r\n * The title of work item to display user. (localized)\r\n */\r\n public title: string;\r\n\r\n /**\r\n * The description of work item to display user. (localized)\r\n */\r\n public description: string;\r\n\r\n /**\r\n * The message. (localized)\r\n */\r\n public message: string;\r\n\r\n /**\r\n * Possible solution message to address error. (localized)\r\n */\r\n public solutionMessage: string;\r\n\r\n /**\r\n * True if the notification was created from recover, updates from messages should be taken\r\n */\r\n public isFromRecover = false;\r\n\r\n /**\r\n * True if the notification is disabled and should not be shown to the user\r\n */\r\n public isDisabled = false;\r\n\r\n /**\r\n * The start timestamp as a formatted globalized string\r\n */\r\n public startTimestamp: string;\r\n\r\n /**\r\n * The last changed timestamp as a formatted globalized string\r\n */\r\n public changedTimestamp: string;\r\n\r\n /**\r\n * The last changed timestamp as a number\r\n */\r\n public changedTimestampValue: number;\r\n\r\n /**\r\n * The end timestamp as a formatted globalized string\r\n */\r\n public endTimestamp: string;\r\n\r\n /**\r\n * The progress percent.\r\n */\r\n public progressPercent: number;\r\n\r\n /**\r\n * The success link to navigate to the object view. (optional)\r\n * At default, it brings to the home page of the module.\r\n */\r\n public link: string;\r\n\r\n /**\r\n * the notification link type of the link\r\n */\r\n public linkType: NotificationLinkType;\r\n\r\n /**\r\n * True if we should show the link in the notification's alert\r\n * We will show the link if there is a custom link or it is a long running request\r\n */\r\n public showLinkInAlert = false;\r\n\r\n /**\r\n * Marked it's no longer display to include list of notifications.\r\n */\r\n public dismissed = false;\r\n\r\n /**\r\n * The parent URI window.location.pathname.\r\n */\r\n public locationPathname: string;\r\n\r\n /**\r\n * The parent URI window.location.search\r\n */\r\n public locationSearch: string;\r\n\r\n /**\r\n *\r\n * Tracks if the notification has been read.\r\n */\r\n public isUnread = true;\r\n\r\n /**\r\n * Create notification from WorkItem.\r\n *\r\n * @param id the notification ID.\r\n * @param workItem the RPC work item.\r\n * @param state the initial state.\r\n * @param object the object from query result.\r\n * @return notification the notification object.\r\n */\r\n public static createFromWorkItem(\r\n id: string, workItem: RpcWorkItem, state: NotificationState, iFrameService: IFrameService, object?: any): Notification {\r\n const notification = new Notification(id);\r\n notification.workItem = workItem;\r\n\r\n notification.state = state;\r\n notification.object = object;\r\n notification.initializeFromWorkItem(workItem, iFrameService);\r\n return notification;\r\n }\r\n\r\n /**\r\n * Create notification from recovered work item.\r\n *\r\n * @param recoveredWorkItem the recovered work item.\r\n * @return notification the notification object.\r\n */\r\n public static createFromRecover(recoveredWorkItem: RecoveredWorkItem, iFrameService: IFrameService): Notification {\r\n const notification = new Notification(recoveredWorkItem.id);\r\n notification.workItem = recoveredWorkItem.metadata;\r\n notification.isFromRecover = true;\r\n\r\n if (recoveredWorkItem.failed) {\r\n notification.state = NotificationState.Error;\r\n notification.object = {\r\n errorType: 'WorkItemRecover',\r\n message: recoveredWorkItem.errorMessage\r\n };\r\n } else {\r\n notification.state = NotificationState.InProgress;\r\n notification.object = {};\r\n }\r\n\r\n notification.initializeFromWorkItem(recoveredWorkItem.metadata, iFrameService);\r\n return notification;\r\n }\r\n\r\n /**\r\n * Create notification from instant request.\r\n *\r\n * @param client the RPC notication request.\r\n * @return notification the notification object.\r\n */\r\n public static createFromClient(client: RpcNotification, iFrameService: IFrameService): Notification {\r\n const notification = new Notification(client.id);\r\n notification.locationPathname = window.location.pathname;\r\n notification.locationSearch = window.location.search;\r\n notification.initializeFromInstant(client, iFrameService);\r\n return notification;\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the Notification class.\r\n *\r\n * @param id the notification ID.\r\n */\r\n constructor(public id: string) { }\r\n\r\n /**\r\n * Update a notification by work item from RPC.\r\n * @param id the notification id.\r\n * @param workItem the work item.\r\n * @param state the state of the notification.\r\n * @param object the object from query result.\r\n */\r\n public updateFromWorkItem(id: string, workItem: RpcWorkItem, state: NotificationState, object?: any) {\r\n let changed = false;\r\n\r\n if (this.updateState(state)) {\r\n changed = true;\r\n const now = Date.now();\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n if (this.object !== object) {\r\n changed = true;\r\n this.object = object;\r\n }\r\n\r\n this.updateMessageAndLinkAndTitle(workItem);\r\n return !this.isDisabled && changed;\r\n }\r\n\r\n /**\r\n * Update the notification by socket message from the gateway.\r\n *\r\n * @param item the socket message.\r\n * @return boolean the changed status.\r\n */\r\n public updateFromMessage(item: SocketMessage<PowerShellWorkItemMessage>): boolean {\r\n let changed = false;\r\n const now = Date.now();\r\n if (PowerShellNotification.hasError(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Error/{1}'.format(this.id, JSON.stringify(item.message.errors))\r\n });\r\n if (this.updateState(NotificationState.Error)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n this.object = item.message.errors && MsftSme.first(item.message.errors);\r\n changed = true;\r\n this.updateMessageAndLinkAndTitle(this.workItem);\r\n return !this.isDisabled;\r\n }\r\n\r\n if (PowerShellNotification.hasException(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Exception/{1}'.format(this.id, item.message.exception)\r\n });\r\n if (this.updateState(NotificationState.Error)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n this.object = { message: item.message.exception };\r\n changed = true;\r\n this.updateMessageAndLinkAndTitle(this.workItem);\r\n return !this.isDisabled;\r\n }\r\n\r\n if (PowerShellNotification.hasProgress(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Progress/{1}'.format(this.id, JSON.stringify(item.message.progress))\r\n });\r\n if (this.updateState(NotificationState.InProgress)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n this.object = item.message.progress && MsftSme.last(item.message.progress);\r\n if (this.object && this.object.hasOwnProperty('percent')) {\r\n this.progressPercent = this.object && this.object.percent;\r\n }\r\n\r\n if ((this.progressPercent == null || this.progressPercent < 0)\r\n && this.workItem.progressMessage && this.workItem.progressMessage.indexOf('{{percent}}') >= 0) {\r\n return false;\r\n }\r\n\r\n changed = true;\r\n }\r\n\r\n if (PowerShellNotification.hasData(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Data/{1}'.format(this.id, JSON.stringify(item.message.results))\r\n });\r\n this.object = item.message.results && MsftSme.last(item.message.results);\r\n changed = true;\r\n }\r\n\r\n if (PowerShellNotification.hasCompleted(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Completed'.format(this.id)\r\n });\r\n if (this.updateState(NotificationState.Success)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n changed = true;\r\n }\r\n\r\n this.updateMessageAndLinkAndTitle(this.workItem);\r\n return !this.isDisabled && changed;\r\n }\r\n\r\n /**\r\n * Update the notification by instant notification message from the client.\r\n *\r\n * @param client the instant notification object.\r\n * @param boolean the changed status.\r\n */\r\n public updateFromClient(client: RpcNotification): boolean {\r\n let changed = false;\r\n const title = client.title;\r\n if (this.title !== title) {\r\n changed = true;\r\n this.title = title;\r\n }\r\n\r\n if (this.description !== client.description) {\r\n changed = true;\r\n this.description = client.description;\r\n }\r\n\r\n if (this.updateState(client.state)) {\r\n const now = Date.now();\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.getGlobalizedTimestamp(now);\r\n changed = true;\r\n if (this.state !== NotificationState.InProgress) {\r\n this.endTimestamp = this.changedTimestamp;\r\n }\r\n }\r\n\r\n const link = this.formatLink(client.link, client.linkType);\r\n if (this.link !== link) {\r\n changed = true;\r\n this.link = link;\r\n this.linkType = client.linkType;\r\n }\r\n\r\n if (this.message !== client.message) {\r\n changed = true;\r\n this.message = client.message;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Gets the module display name.\r\n */\r\n private getModuleDisplayName(iFrameService: IFrameService, sourceName: string, sourceSubName: string): string {\r\n const activeIFrame = iFrameService ? iFrameService.getActiveToolIFrameData() : null;\r\n if (activeIFrame && activeIFrame.entryPoint) {\r\n const entryPoint = activeIFrame.entryPoint;\r\n this.entryPointName = entryPoint.name;\r\n\r\n if (entryPoint.parentModule) {\r\n this.moduleName = entryPoint.parentModule.name;\r\n }\r\n } else {\r\n // fallback see if we can get any info from RPC\r\n this.moduleName = sourceName;\r\n if (sourceSubName) {\r\n this.entryPointName = MsftSme.first(sourceSubName.split('#'));\r\n }\r\n }\r\n\r\n const environment = MsftSme.self().Environment;\r\n\r\n // if moduleName === environment.name then the source is Shell. Return null to use generic module name\r\n if (this.moduleName && this.moduleName !== environment.name) {\r\n const module: EnvironmentModule = MsftSme.find(\r\n <EnvironmentModule[]>environment.modules,\r\n value => value.name === this.moduleName);\r\n if (module) {\r\n if (this.entryPointName) {\r\n const entryPoint = MsftSme.find(module.entryPoints, ep => ep.name === this.entryPointName);\r\n if (entryPoint) {\r\n return entryPoint.displayName;\r\n }\r\n }\r\n\r\n return module.displayName;\r\n }\r\n\r\n return this.moduleName;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Update the state.\r\n *\r\n * @param state the new state.\r\n * @return boolean the changed state.\r\n */\r\n private updateState(state: NotificationState): boolean {\r\n if (this.state !== state) {\r\n this.state = state;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private initializeFromWorkItem(item: RpcWorkItem, iFrameService: IFrameService): void {\r\n this.nodeName = item.nodeName;\r\n this.moduleDisplayName = this.getModuleDisplayName(iFrameService, item.sourceName, item.sourceSubName);\r\n this.startTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n this.changedTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n this.changedTimestampValue = item.timestamp;\r\n this.description = item.description;\r\n this.typeId = item.typeId;\r\n this.updateMessageAndLinkAndTitle(item);\r\n }\r\n\r\n private updateMessageAndLinkAndTitle(item: RpcWorkItem): void {\r\n let template: string;\r\n this.isDisabled = !this.isFromRecover && item.disableAllNotifications;\r\n switch (this.state) {\r\n case NotificationState.Submitted:\r\n this.title = item.inProgressTitle || item.title;\r\n template = item.submittedMessage;\r\n this.link = this.formatLink(null);\r\n break;\r\n case NotificationState.Started:\r\n this.title = item.inProgressTitle || item.title;\r\n template = item.startedMessage;\r\n this.link = this.formatLink(null);\r\n break;\r\n case NotificationState.Error:\r\n this.title = item.errorTitle || item.title;\r\n this.isDisabled = !this.isFromRecover && item.disableErrorNotification;\r\n this.endTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n template = item.errorMessage;\r\n this.link = this.formatLink(item.errorLink, item.errorLinkType);\r\n this.linkType = item.errorLinkType;\r\n this.showLinkInAlert = true;\r\n this.moduleDisplayName = item.errorLinkText || this.moduleDisplayName;\r\n break;\r\n case NotificationState.InProgress:\r\n this.title = item.inProgressTitle || item.title;\r\n template = item.progressMessage;\r\n this.link = this.formatLink(null);\r\n break;\r\n case NotificationState.Success:\r\n this.title = item.successTitle || item.title;\r\n this.endTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n template = item.successMessage;\r\n this.link = this.formatLink(item.successLink, item.successLinkType);\r\n this.linkType = item.successLinkType;\r\n this.moduleDisplayName = item.successLinkText || this.moduleDisplayName;\r\n this.showLinkInAlert = true;\r\n break;\r\n default:\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.NotificationUnsupportedState.message;\r\n throw new Error(message);\r\n }\r\n\r\n this.message = this.formatMessage(template);\r\n }\r\n\r\n private initializeFromInstant(client: RpcNotification, iFrameService: IFrameService): void {\r\n this.nodeName = client.nodeName;\r\n this.moduleDisplayName = client.linkText ?\r\n client.linkText\r\n : this.getModuleDisplayName(iFrameService, client.sourceName, client.sourceSubName);\r\n this.startTimestamp = this.getGlobalizedTimestamp(client.timestamp);\r\n this.changedTimestamp = this.getGlobalizedTimestamp(client.timestamp);\r\n this.changedTimestampValue = client.timestamp;\r\n this.title = client.title;\r\n this.description = client.description;\r\n this.state = client.state;\r\n this.link = this.formatLink(client.link, client.linkType);\r\n this.linkType = client.linkType;\r\n this.message = client.message;\r\n this.solutionMessage = client.solutionMessage;\r\n if (this.state !== NotificationState.Started && this.state !== NotificationState.InProgress) {\r\n this.endTimestamp = this.getGlobalizedTimestamp(client.timestamp);\r\n }\r\n }\r\n\r\n private getGlobalizedTimestamp(timestamp: number): string {\r\n return Globalization.timeOnly(new Date(timestamp));\r\n }\r\n\r\n private formatLink(link: string, linkType?: NotificationLinkType): string {\r\n // tslint:disable-next-line:max-line-length\r\n // href example:\r\n // tslint:disable-next-line:max-line-length\r\n // \"http://localhost:4400/apps/msft.sme.server-manager!servers/tools/msft.sme.module-seed!main?connection=sme-full1.redmond.corp.microsoft.com\"\r\n\r\n if (linkType === NotificationLinkType.Absolute) {\r\n return link;\r\n }\r\n\r\n // null linkType behaves like NotificationLinkType.RelativeToTool\r\n const pathname = linkType === NotificationLinkType.RelativeToRoot ?\r\n '/'\r\n : this.locationPathname || this.workItem && this.workItem.locationPathname;\r\n\r\n if (link && pathname) {\r\n this.showLinkInAlert = true;\r\n return MsftSme.trimEnd(pathname, '/') + '/' + MsftSme.trimStart(link, '/');\r\n }\r\n\r\n this.showLinkInAlert = false;\r\n return pathname;\r\n }\r\n\r\n private formatMessage(template: string): string {\r\n const parameters = this.findParameters(template);\r\n const message = this.replaceParameters(template, parameters);\r\n return message;\r\n }\r\n\r\n private findParameters(template: string): string[] {\r\n const results: string[] = [];\r\n if (!template) {\r\n return results;\r\n }\r\n\r\n const segments = template.split('{{');\r\n for (const seg of segments) {\r\n const index = seg.indexOf('}}');\r\n if (index > 0) {\r\n results.push(seg.substr(0, index));\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n private replaceParameters(message: string, parameters: string[]): string {\r\n for (const param of parameters) {\r\n if (param === 'percent') {\r\n if (typeof this.progressPercent === 'number') {\r\n message = message.replaceAll('{{percent}}', '' + this.progressPercent);\r\n }\r\n } else if (param === 'objectName') {\r\n if (this.workItem && this.workItem.objectName) {\r\n message = message.replaceAll('{{objectName}}', this.workItem.objectName);\r\n }\r\n } else {\r\n if (this.object) {\r\n const segments = param.split('.');\r\n let target = this.object;\r\n for (const seg of segments) {\r\n if (target[seg]) {\r\n target = target[seg];\r\n } else {\r\n target = null;\r\n break;\r\n }\r\n }\r\n\r\n if (target) {\r\n message = message.replaceAll('{{' + param + '}}', '' + target);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return message;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/notification/notification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAKjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAA6B,MAAM,2BAA2B,CAAC;AAI9F;;GAEG;AACH,MAAM,CAAN,IAAY,uBAMX;AAND,WAAY,uBAAuB;IAC/B,mFAAW,CAAA;IACX,qGAAoB,CAAA;IACpB,mEAAG,CAAA;IACH,yEAAM,CAAA;IACN,yEAAM,CAAA;AACV,CAAC,EANW,uBAAuB,KAAvB,uBAAuB,QAMlC;AAUD;;;GAGG;AACH,MAAM,OAAO,YAAY;IAoMrB;;;;OAIG;IACH,YAAmB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;QAxMrB,YAAO,GAAY,OAAO,CAAC,UAAU,EAAW,CAAC;QA8DzD;;WAEG;QACI,kBAAa,GAAG,KAAK,CAAC;QAE7B;;WAEG;QACI,eAAU,GAAG,KAAK,CAAC;QAsC1B;;;WAGG;QACI,oBAAe,GAAG,KAAK,CAAC;QAE/B;;WAEG;QACI,cAAS,GAAG,KAAK,CAAC;QAYzB;;;WAGG;QACI,aAAQ,GAAG,IAAI,CAAC;IAmEU,CAAC;IAjElC;;;;;;;;OAQG;IACI,MAAM,CAAC,kBAAkB,CAC5B,EAAU,EAAE,QAAqB,EAAE,KAAwB,EAAE,aAA4B,EAAE,MAAY;QACvG,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1C,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEjC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7B,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC7D,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,iBAAoC,EAAE,aAA4B;QAC9F,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC5D,YAAY,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QACnD,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC;QAElC,IAAI,iBAAiB,CAAC,MAAM,EAAE;YAC1B,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;YAC7C,YAAY,CAAC,MAAM,GAAG;gBAClB,SAAS,EAAE,iBAAiB;gBAC5B,OAAO,EAAE,iBAAiB,CAAC,YAAY;aAC1C,CAAC;SACL;aAAM;YACH,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC;YAClD,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;SAC5B;QAED,YAAY,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC/E,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,MAAuB,EAAE,aAA4B;QAChF,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,YAAY,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzD,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrD,YAAY,CAAC,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1D,OAAO,YAAY,CAAC;IACxB,CAAC;IASD;;;;;;OAMG;IACI,kBAAkB,CAAC,EAAU,EAAE,QAAqB,EAAE,KAAwB,EAAE,MAAY;QAC/F,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;SAChF;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACxB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACxB;QAED,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,IAA8C;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACvC,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aAChF,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC3C,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAChF;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxE,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B;QAED,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;aACvE,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC3C,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAChF;YAED,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAClD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B;QAED,IAAI,sBAAsB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1C,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aACrF,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;gBAChD,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAC5D;YAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBACtD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;aAC7D;YAED,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;mBACvD,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBAC/F,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAChF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YAC3C,OAAO,CAAC,GAAG,CAAC;gBACR,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;gBAC7C,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;aAChF;YAED,OAAO,GAAG,IAAI,CAAC;SAClB;QAED,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,MAAuB;QAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAAE;YACzC,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;SACzC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACzD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,UAAU,EAAE;gBAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;aAC7C;SACJ;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE;YACjC,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe,EAAE;YACjD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;SACjD;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,aAA4B,EAAE,UAAkB,EAAE,aAAqB;QAChG,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,IAAI,YAAY,IAAI,YAAY,CAAC,UAAU,EAAE;YACzC,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC;YAEtC,IAAI,UAAU,CAAC,YAAY,EAAE;gBACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;aAClD;SACJ;aAAM;YACH,+CAA+C;YAC/C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACjE;SACJ;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;QAE/C,sGAAsG;QACtG,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,IAAI,EAAE;YACzD,MAAM,MAAM,GAAsB,OAAO,CAAC,IAAI,CACrB,WAAW,CAAC,OAAO,EACxC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE;gBACR,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC3F,IAAI,UAAU,EAAE;wBACZ,OAAO,UAAU,CAAC,WAAW,CAAC;qBACjC;iBACJ;gBAED,OAAO,MAAM,CAAC,WAAW,CAAC;aAC7B;YAED,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,KAAwB;QACxC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,IAAiB,EAAE,aAA4B;QAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,4BAA4B,CAAC,IAAiB;QAClD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,uBAAuB,CAAC;QACtE,QAAQ,IAAI,CAAC,KAAK,EAAE;YAChB,KAAK,iBAAiB,CAAC,SAAS;gBAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,iBAAiB,CAAC,OAAO;gBAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,iBAAiB,CAAC,KAAK;gBACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC3C,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,wBAAwB,CAAC;gBACvE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;gBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACtE,MAAM;YACV,KAAK,iBAAiB,CAAC,UAAU;gBAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC;gBAChD,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;gBAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM;YACV,KAAK,iBAAiB,CAAC,OAAO;gBAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC;gBAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChE,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;gBACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,CAAC;gBACxE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,MAAM;YACV;gBACI,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,CAAC;gBAC3G,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAEO,qBAAqB,CAAC,MAAuB,EAAE,aAA4B;QAC/E,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ;YACf,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACxF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,UAAU,EAAE;YACzF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACrE;IACL,CAAC;IAEO,sBAAsB,CAAC,SAAiB;QAC5C,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,QAA+B;QAC5D,2CAA2C;QAC3C,gBAAgB;QAChB,2CAA2C;QAC3C,gJAAgJ;QAEhJ,IAAI,QAAQ,KAAK,oBAAoB,CAAC,QAAQ,EAAE;YAC5C,OAAO,IAAI,CAAC;SACf;QAED,iEAAiE;QACjE,MAAM,QAAQ,GAAG,QAAQ,KAAK,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAC/D,GAAG;YACH,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAE/E,IAAI,IAAI,IAAI,QAAQ,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC9E;QAED,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,aAAa,CAAC,QAAgB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7D,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,QAAgB;QACnC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,OAAO,CAAC;SAClB;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YACxB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;aACtC;SACJ;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,iBAAiB,CAAC,OAAe,EAAE,UAAoB;QAC3D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;oBAC1C,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;iBAC1E;aACJ;iBAAM,IAAI,KAAK,KAAK,YAAY,EAAE;gBAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBAC3C,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;iBAC5E;aACJ;iBAAM;gBACH,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;wBACxB,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;4BACb,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;yBACxB;6BAAM;4BACH,MAAM,GAAG,IAAI,CAAC;4BACd,MAAM;yBACT;qBACJ;oBAED,IAAI,MAAM,EAAE;wBACR,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;qBAClE;iBACJ;aACJ;SACJ;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ","file":"notification.js","sourcesContent":["import { Globalization } from '../data/globalization';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { RpcNotification } from '../rpc/notification/rpc-notification-model';\r\nimport { RpcWorkItem } from '../rpc/work-item/rpc-work-item-model';\r\nimport { NotificationLinkType } from './notification-link-type';\r\nimport { IFrameService } from './notification-manager';\r\nimport { NotificationState } from './notification-state';\r\nimport { PowerShellNotification, PowerShellWorkItemMessage } from './powershell-notification';\r\nimport { SocketMessage } from './socket-signalr';\r\nimport { RecoveredWorkItem } from './work-item-request';\r\n\r\n/**\r\n * Notification changed event type.\r\n */\r\nexport enum NotificationChangeEvent {\r\n Initialized,\r\n InitializationFailed,\r\n Add,\r\n Remove,\r\n Change\r\n}\r\n\r\n/**\r\n * Notification changed event packet.\r\n */\r\nexport interface NotificationEvent {\r\n changeEvent: NotificationChangeEvent;\r\n notification?: Notification;\r\n}\r\n\r\n/**\r\n * Internal notification object converted from ClientNotification object.\r\n * Contains data to track notifications.\r\n */\r\nexport class Notification {\r\n private strings: Strings = MsftSme.getStrings<Strings>();\r\n\r\n /**\r\n * Work item passed from RPC or client on shell.\r\n */\r\n private workItem: RpcWorkItem;\r\n\r\n /**\r\n * The type ID of work item.\r\n */\r\n public typeId: string;\r\n\r\n /**\r\n * The node name.\r\n */\r\n public nodeName: string;\r\n\r\n /**\r\n * The module name.\r\n */\r\n public moduleName: string;\r\n\r\n /**\r\n * The entry point name within the module\r\n */\r\n public entryPointName: string;\r\n\r\n /**\r\n * The module display name.\r\n */\r\n public moduleDisplayName: string;\r\n\r\n /**\r\n * Object included last response.\r\n */\r\n public object: any;\r\n\r\n /**\r\n * The state of notification.\r\n */\r\n public state: NotificationState;\r\n\r\n /**\r\n * The title of work item to display user. (localized)\r\n */\r\n public title: string;\r\n\r\n /**\r\n * The description of work item to display user. (localized)\r\n */\r\n public description: string;\r\n\r\n /**\r\n * The message. (localized)\r\n */\r\n public message: string;\r\n\r\n /**\r\n * Possible solution message to address error. (localized)\r\n */\r\n public solutionMessage: string;\r\n\r\n /**\r\n * True if the notification was created from recover, updates from messages should be taken\r\n */\r\n public isFromRecover = false;\r\n\r\n /**\r\n * True if the notification is disabled and should not be shown to the user\r\n */\r\n public isDisabled = false;\r\n\r\n /**\r\n * The start timestamp as a formatted globalized string\r\n */\r\n public startTimestamp: string;\r\n\r\n /**\r\n * The last changed timestamp as a formatted globalized string\r\n */\r\n public changedTimestamp: string;\r\n\r\n /**\r\n * The last changed timestamp as a number\r\n */\r\n public changedTimestampValue: number;\r\n\r\n /**\r\n * The end timestamp as a formatted globalized string\r\n */\r\n public endTimestamp: string;\r\n\r\n /**\r\n * The progress percent.\r\n */\r\n public progressPercent: number;\r\n\r\n /**\r\n * The success link to navigate to the object view. (optional)\r\n * At default, it brings to the home page of the module.\r\n */\r\n public link: string;\r\n\r\n /**\r\n * the notification link type of the link\r\n */\r\n public linkType: NotificationLinkType;\r\n\r\n /**\r\n * True if we should show the link in the notification's alert\r\n * We will show the link if there is a custom link or it is a long running request\r\n */\r\n public showLinkInAlert = false;\r\n\r\n /**\r\n * Marked it's no longer display to include list of notifications.\r\n */\r\n public dismissed = false;\r\n\r\n /**\r\n * The parent URI window.location.pathname.\r\n */\r\n public locationPathname: string;\r\n\r\n /**\r\n * The parent URI window.location.search\r\n */\r\n public locationSearch: string;\r\n\r\n /**\r\n *\r\n * Tracks if the notification has been read.\r\n */\r\n public isUnread = true;\r\n\r\n /**\r\n * Create notification from WorkItem.\r\n *\r\n * @param id the notification ID.\r\n * @param workItem the RPC work item.\r\n * @param state the initial state.\r\n * @param object the object from query result.\r\n * @return notification the notification object.\r\n */\r\n public static createFromWorkItem(\r\n id: string, workItem: RpcWorkItem, state: NotificationState, iFrameService: IFrameService, object?: any): Notification {\r\n const notification = new Notification(id);\r\n notification.workItem = workItem;\r\n\r\n notification.state = state;\r\n notification.object = object;\r\n notification.initializeFromWorkItem(workItem, iFrameService);\r\n return notification;\r\n }\r\n\r\n /**\r\n * Create notification from recovered work item.\r\n *\r\n * @param recoveredWorkItem the recovered work item.\r\n * @return notification the notification object.\r\n */\r\n public static createFromRecover(recoveredWorkItem: RecoveredWorkItem, iFrameService: IFrameService): Notification {\r\n const notification = new Notification(recoveredWorkItem.id);\r\n notification.workItem = recoveredWorkItem.metadata;\r\n notification.isFromRecover = true;\r\n\r\n if (recoveredWorkItem.failed) {\r\n notification.state = NotificationState.Error;\r\n notification.object = {\r\n errorType: 'WorkItemRecover',\r\n message: recoveredWorkItem.errorMessage\r\n };\r\n } else {\r\n notification.state = NotificationState.InProgress;\r\n notification.object = {};\r\n }\r\n\r\n notification.initializeFromWorkItem(recoveredWorkItem.metadata, iFrameService);\r\n return notification;\r\n }\r\n\r\n /**\r\n * Create notification from instant request.\r\n *\r\n * @param client the RPC notication request.\r\n * @return notification the notification object.\r\n */\r\n public static createFromClient(client: RpcNotification, iFrameService: IFrameService): Notification {\r\n const notification = new Notification(client.id);\r\n notification.locationPathname = window.location.pathname;\r\n notification.locationSearch = window.location.search;\r\n notification.initializeFromInstant(client, iFrameService);\r\n return notification;\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the Notification class.\r\n *\r\n * @param id the notification ID.\r\n */\r\n constructor(public id: string) { }\r\n\r\n /**\r\n * Update a notification by work item from RPC.\r\n * @param id the notification id.\r\n * @param workItem the work item.\r\n * @param state the state of the notification.\r\n * @param object the object from query result.\r\n */\r\n public updateFromWorkItem(id: string, workItem: RpcWorkItem, state: NotificationState, object?: any) {\r\n let changed = false;\r\n\r\n if (this.updateState(state)) {\r\n changed = true;\r\n const now = Date.now();\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n if (this.object !== object) {\r\n changed = true;\r\n this.object = object;\r\n }\r\n\r\n this.updateMessageAndLinkAndTitle(workItem);\r\n return !this.isDisabled && changed;\r\n }\r\n\r\n /**\r\n * Update the notification by socket message from the gateway.\r\n *\r\n * @param item the socket message.\r\n * @return boolean the changed status.\r\n */\r\n public updateFromMessage(item: SocketMessage<PowerShellWorkItemMessage>): boolean {\r\n let changed = false;\r\n const now = Date.now();\r\n if (PowerShellNotification.hasError(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Error/{1}'.format(this.id, JSON.stringify(item.message.errors))\r\n });\r\n if (this.updateState(NotificationState.Error)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n this.object = item.message.errors && MsftSme.first(item.message.errors);\r\n changed = true;\r\n this.updateMessageAndLinkAndTitle(this.workItem);\r\n return !this.isDisabled;\r\n }\r\n\r\n if (PowerShellNotification.hasException(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Exception/{1}'.format(this.id, item.message.exception)\r\n });\r\n if (this.updateState(NotificationState.Error)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n this.object = { message: item.message.exception };\r\n changed = true;\r\n this.updateMessageAndLinkAndTitle(this.workItem);\r\n return !this.isDisabled;\r\n }\r\n\r\n if (PowerShellNotification.hasProgress(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Progress/{1}'.format(this.id, JSON.stringify(item.message.progress))\r\n });\r\n if (this.updateState(NotificationState.InProgress)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n this.object = item.message.progress && MsftSme.last(item.message.progress);\r\n if (this.object && this.object.hasOwnProperty('percent')) {\r\n this.progressPercent = this.object && this.object.percent;\r\n }\r\n\r\n if ((this.progressPercent == null || this.progressPercent < 0)\r\n && this.workItem.progressMessage && this.workItem.progressMessage.indexOf('{{percent}}') >= 0) {\r\n return false;\r\n }\r\n\r\n changed = true;\r\n }\r\n\r\n if (PowerShellNotification.hasData(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Data/{1}'.format(this.id, JSON.stringify(item.message.results))\r\n });\r\n this.object = item.message.results && MsftSme.last(item.message.results);\r\n changed = true;\r\n }\r\n\r\n if (PowerShellNotification.hasCompleted(item)) {\r\n Logging.log({\r\n source: 'Notification',\r\n level: LogLevel.Debug,\r\n message: '{0}/Completed'.format(this.id)\r\n });\r\n if (this.updateState(NotificationState.Success)) {\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.endTimestamp = this.getGlobalizedTimestamp(now);\r\n }\r\n\r\n changed = true;\r\n }\r\n\r\n this.updateMessageAndLinkAndTitle(this.workItem);\r\n return !this.isDisabled && changed;\r\n }\r\n\r\n /**\r\n * Update the notification by instant notification message from the client.\r\n *\r\n * @param client the instant notification object.\r\n * @param boolean the changed status.\r\n */\r\n public updateFromClient(client: RpcNotification): boolean {\r\n let changed = false;\r\n const title = client.title;\r\n if (this.title !== title) {\r\n changed = true;\r\n this.title = title;\r\n }\r\n\r\n if (this.description !== client.description) {\r\n changed = true;\r\n this.description = client.description;\r\n }\r\n\r\n if (this.updateState(client.state)) {\r\n const now = Date.now();\r\n this.changedTimestampValue = now;\r\n this.changedTimestamp = this.getGlobalizedTimestamp(now);\r\n changed = true;\r\n if (this.state !== NotificationState.InProgress) {\r\n this.endTimestamp = this.changedTimestamp;\r\n }\r\n }\r\n\r\n const link = this.formatLink(client.link, client.linkType);\r\n if (this.link !== link) {\r\n changed = true;\r\n this.link = link;\r\n this.linkType = client.linkType;\r\n }\r\n\r\n if (this.message !== client.message) {\r\n changed = true;\r\n this.message = client.message;\r\n }\r\n\r\n if (this.solutionMessage !== client.solutionMessage) {\r\n changed = true;\r\n this.solutionMessage = client.solutionMessage;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Gets the module display name.\r\n */\r\n private getModuleDisplayName(iFrameService: IFrameService, sourceName: string, sourceSubName: string): string {\r\n const activeIFrame = iFrameService ? iFrameService.getActiveToolIFrameData() : null;\r\n if (activeIFrame && activeIFrame.entryPoint) {\r\n const entryPoint = activeIFrame.entryPoint;\r\n this.entryPointName = entryPoint.name;\r\n\r\n if (entryPoint.parentModule) {\r\n this.moduleName = entryPoint.parentModule.name;\r\n }\r\n } else {\r\n // fallback see if we can get any info from RPC\r\n this.moduleName = sourceName;\r\n if (sourceSubName) {\r\n this.entryPointName = MsftSme.first(sourceSubName.split('#'));\r\n }\r\n }\r\n\r\n const environment = MsftSme.self().Environment;\r\n\r\n // if moduleName === environment.name then the source is Shell. Return null to use generic module name\r\n if (this.moduleName && this.moduleName !== environment.name) {\r\n const module: EnvironmentModule = MsftSme.find(\r\n <EnvironmentModule[]>environment.modules,\r\n value => value.name === this.moduleName);\r\n if (module) {\r\n if (this.entryPointName) {\r\n const entryPoint = MsftSme.find(module.entryPoints, ep => ep.name === this.entryPointName);\r\n if (entryPoint) {\r\n return entryPoint.displayName;\r\n }\r\n }\r\n\r\n return module.displayName;\r\n }\r\n\r\n return this.moduleName;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Update the state.\r\n *\r\n * @param state the new state.\r\n * @return boolean the changed state.\r\n */\r\n private updateState(state: NotificationState): boolean {\r\n if (this.state !== state) {\r\n this.state = state;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private initializeFromWorkItem(item: RpcWorkItem, iFrameService: IFrameService): void {\r\n this.nodeName = item.nodeName;\r\n this.moduleDisplayName = this.getModuleDisplayName(iFrameService, item.sourceName, item.sourceSubName);\r\n this.startTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n this.changedTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n this.changedTimestampValue = item.timestamp;\r\n this.description = item.description;\r\n this.typeId = item.typeId;\r\n this.updateMessageAndLinkAndTitle(item);\r\n }\r\n\r\n private updateMessageAndLinkAndTitle(item: RpcWorkItem): void {\r\n let template: string;\r\n this.isDisabled = !this.isFromRecover && item.disableAllNotifications;\r\n switch (this.state) {\r\n case NotificationState.Submitted:\r\n this.title = item.inProgressTitle || item.title;\r\n template = item.submittedMessage;\r\n this.link = this.formatLink(null);\r\n break;\r\n case NotificationState.Started:\r\n this.title = item.inProgressTitle || item.title;\r\n template = item.startedMessage;\r\n this.link = this.formatLink(null);\r\n break;\r\n case NotificationState.Error:\r\n this.title = item.errorTitle || item.title;\r\n this.isDisabled = !this.isFromRecover && item.disableErrorNotification;\r\n this.endTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n template = item.errorMessage;\r\n this.link = this.formatLink(item.errorLink, item.errorLinkType);\r\n this.linkType = item.errorLinkType;\r\n this.showLinkInAlert = true;\r\n this.moduleDisplayName = item.errorLinkText || this.moduleDisplayName;\r\n break;\r\n case NotificationState.InProgress:\r\n this.title = item.inProgressTitle || item.title;\r\n template = item.progressMessage;\r\n this.link = this.formatLink(null);\r\n break;\r\n case NotificationState.Success:\r\n this.title = item.successTitle || item.title;\r\n this.endTimestamp = this.getGlobalizedTimestamp(item.timestamp);\r\n template = item.successMessage;\r\n this.link = this.formatLink(item.successLink, item.successLinkType);\r\n this.linkType = item.successLinkType;\r\n this.moduleDisplayName = item.successLinkText || this.moduleDisplayName;\r\n this.showLinkInAlert = true;\r\n break;\r\n default:\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.NotificationUnsupportedState.message;\r\n throw new Error(message);\r\n }\r\n\r\n this.message = this.formatMessage(template);\r\n }\r\n\r\n private initializeFromInstant(client: RpcNotification, iFrameService: IFrameService): void {\r\n this.nodeName = client.nodeName;\r\n this.moduleDisplayName = client.linkText ?\r\n client.linkText\r\n : this.getModuleDisplayName(iFrameService, client.sourceName, client.sourceSubName);\r\n this.startTimestamp = this.getGlobalizedTimestamp(client.timestamp);\r\n this.changedTimestamp = this.getGlobalizedTimestamp(client.timestamp);\r\n this.changedTimestampValue = client.timestamp;\r\n this.title = client.title;\r\n this.description = client.description;\r\n this.state = client.state;\r\n this.link = this.formatLink(client.link, client.linkType);\r\n this.linkType = client.linkType;\r\n this.message = client.message;\r\n this.solutionMessage = client.solutionMessage;\r\n if (this.state !== NotificationState.Started && this.state !== NotificationState.InProgress) {\r\n this.endTimestamp = this.getGlobalizedTimestamp(client.timestamp);\r\n }\r\n }\r\n\r\n private getGlobalizedTimestamp(timestamp: number): string {\r\n return Globalization.timeOnly(new Date(timestamp));\r\n }\r\n\r\n private formatLink(link: string, linkType?: NotificationLinkType): string {\r\n // tslint:disable-next-line:max-line-length\r\n // href example:\r\n // tslint:disable-next-line:max-line-length\r\n // \"http://localhost:4400/apps/msft.sme.server-manager!servers/tools/msft.sme.module-seed!main?connection=sme-full1.redmond.corp.microsoft.com\"\r\n\r\n if (linkType === NotificationLinkType.Absolute) {\r\n return link;\r\n }\r\n\r\n // null linkType behaves like NotificationLinkType.RelativeToTool\r\n const pathname = linkType === NotificationLinkType.RelativeToRoot ?\r\n '/'\r\n : this.locationPathname || this.workItem && this.workItem.locationPathname;\r\n\r\n if (link && pathname) {\r\n this.showLinkInAlert = true;\r\n return MsftSme.trimEnd(pathname, '/') + '/' + MsftSme.trimStart(link, '/');\r\n }\r\n\r\n this.showLinkInAlert = false;\r\n return pathname;\r\n }\r\n\r\n private formatMessage(template: string): string {\r\n const parameters = this.findParameters(template);\r\n const message = this.replaceParameters(template, parameters);\r\n return message;\r\n }\r\n\r\n private findParameters(template: string): string[] {\r\n const results: string[] = [];\r\n if (!template) {\r\n return results;\r\n }\r\n\r\n const segments = template.split('{{');\r\n for (const seg of segments) {\r\n const index = seg.indexOf('}}');\r\n if (index > 0) {\r\n results.push(seg.substr(0, index));\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n private replaceParameters(message: string, parameters: string[]): string {\r\n for (const param of parameters) {\r\n if (param === 'percent') {\r\n if (typeof this.progressPercent === 'number') {\r\n message = message.replaceAll('{{percent}}', '' + this.progressPercent);\r\n }\r\n } else if (param === 'objectName') {\r\n if (this.workItem && this.workItem.objectName) {\r\n message = message.replaceAll('{{objectName}}', this.workItem.objectName);\r\n }\r\n } else {\r\n if (this.object) {\r\n const segments = param.split('.');\r\n let target = this.object;\r\n for (const seg of segments) {\r\n if (target[seg]) {\r\n target = target[seg];\r\n } else {\r\n target = null;\r\n break;\r\n }\r\n }\r\n\r\n if (target) {\r\n message = message.replaceAll('{{' + param + '}}', '' + target);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return message;\r\n }\r\n}\r\n"]}
@@ -7,6 +7,7 @@ import { RpcForwardResponse } from '../rpc/forward/rpc-forward-model';
7
7
  import { Rpc } from '../rpc/rpc';
8
8
  import { RpcRelationshipType } from '../rpc/rpc-base';
9
9
  import { RpcServiceForwarder } from '../rpc/rpc-forwarder';
10
+ import { SignedHttpRequestToken, SignOnManager, SignOnTokenResponse } from './sign-on-manager';
10
11
  /**
11
12
  * Defines the response from an Authorization Handler
12
13
  */
@@ -61,6 +62,7 @@ export interface AuthorizationManagerInitProperties {
61
62
  manageAsToken: AuthorizationToken;
62
63
  nodeTokens: MsftSme.StringMap<AuthorizationToken>;
63
64
  nodePowershellEndpoints: MsftSme.StringMap<string>;
65
+ signOnToken: SignedHttpRequestToken;
64
66
  }
65
67
  /**
66
68
  * Authorization Manager class. Handles SME authentication for service requests.
@@ -80,6 +82,10 @@ export declare class AuthorizationManager extends RpcServiceForwarder {
80
82
  * Create a map of nodeNames to token objects to hold node specific tokens.
81
83
  */
82
84
  nodeTokens: MsftSme.StringMap<AuthorizationToken>;
85
+ /**
86
+ * The sign on operation manager.
87
+ */
88
+ signOnManager: SignOnManager;
83
89
  /**
84
90
  * The backing store fro the manageAsToken
85
91
  */
@@ -88,6 +94,31 @@ export declare class AuthorizationManager extends RpcServiceForwarder {
88
94
  * The JSON Web Key. Single string with JSON.stringify format.
89
95
  */
90
96
  private jwk;
97
+ /**
98
+ * Credentials expiration time, used to determine the lifetime of new tokens. Value in milliseconds.
99
+ */
100
+ private credentialsExpirationTimeInMs;
101
+ /**
102
+ * Underlying implementation subject for credentialExpiration observable
103
+ */
104
+ private credentialExpirationChangedSubject;
105
+ /**
106
+ * Observable that emits whenever the credentials expiration has changed
107
+ */
108
+ credentialExpirationChanged: Observable<number>;
109
+ /**
110
+ * Set the admin configured expiration time in milliseconds
111
+ * If this is not set it will be defaulted to 365 days.
112
+ */
113
+ set authExpirationInMs(expirationTimeInMs: number);
114
+ /**
115
+ * The logon user returned by gateway's api/user
116
+ */
117
+ private logOnUser;
118
+ /**
119
+ * Sets logon user and caches the value
120
+ */
121
+ set shellLogOnUser(username: string);
91
122
  /**
92
123
  * The mapping of connections to PowershellEndpoints
93
124
  */
@@ -96,6 +127,10 @@ export declare class AuthorizationManager extends RpcServiceForwarder {
96
127
  * The token awaiter subject.
97
128
  */
98
129
  private tokenAwaiter;
130
+ /**
131
+ * The subject observable of sign on token awaiter.
132
+ */
133
+ private signOnTokenAwaiter;
99
134
  /**
100
135
  * Sets the current manage as token
101
136
  * If running with an Rpc child, notify of the change
@@ -164,6 +199,11 @@ export declare class AuthorizationManager extends RpcServiceForwarder {
164
199
  getNewToken(nodeNames: string[]): Observable<AuthorizationTokenResponse>;
165
200
  getNewToken(nodeName: string, errorData: NodeAuthorizationErrorData): Observable<AuthorizationTokenResponse>;
166
201
  getNewToken(nodeNames: string[], errorData: NodeAuthorizationErrorData): Observable<AuthorizationTokenResponse>;
202
+ refreshSignOnToken(): Observable<SignOnTokenResponse>;
203
+ /**
204
+ * Forward Sign On Token to child frame.
205
+ */
206
+ forwardSignOnToken(): void;
167
207
  /**
168
208
  * @deprecated use createSecureToken() after configured gatewayJwk property.
169
209
  *
@@ -250,6 +290,10 @@ export declare class AuthorizationManager extends RpcServiceForwarder {
250
290
  * Completes the token awaiter
251
291
  */
252
292
  private completeTokenAwaiter;
293
+ /**
294
+ * Completes the sign on token awaiter
295
+ */
296
+ private completeSignOnTokenAwaiter;
253
297
  /**
254
298
  * Gets the error data.
255
299
  * @param code the http status code.