@microsoft/windows-admin-center-sdk 2.154.1 → 2.165.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 (73) hide show
  1. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +150 -142
  2. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  3. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
  4. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  5. package/angular/esm2015/src/controls/data-table/data-table.component.js +133 -127
  6. package/angular/esm2015/src/controls/dialog/dialog.component.js +10 -4
  7. package/angular/esm2015/src/controls/dialog/dialog.service.js +6 -13
  8. package/angular/esm2015/src/service/connectivity-enforcer.js +5 -2
  9. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +150 -142
  10. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  11. package/core/azure/azure-constants.d.ts +8 -0
  12. package/core/azure/azure-constants.js +8 -0
  13. package/core/azure/azure-constants.js.map +1 -1
  14. package/core/azure/azure-manager.d.ts +1 -0
  15. package/core/azure/azure-manager.js +7 -1
  16. package/core/azure/azure-manager.js.map +1 -1
  17. package/core/base/environment.d.ts +3 -0
  18. package/core/base/environment.js.map +1 -1
  19. package/core/base/msft-sme.mock.js +3 -0
  20. package/core/base/msft-sme.mock.js.map +1 -1
  21. package/core/base/utilities.d.ts +0 -3
  22. package/core/base/utilities.js +0 -34
  23. package/core/base/utilities.js.map +1 -1
  24. package/core/data/settings-manager.d.ts +3 -0
  25. package/core/data/settings-manager.js +14 -1
  26. package/core/data/settings-manager.js.map +1 -1
  27. package/core/dom/dom.d.ts +5 -0
  28. package/core/dom/dom.js +20 -0
  29. package/core/dom/dom.js.map +1 -1
  30. package/core/manifest/environment-modules.js +3 -0
  31. package/core/manifest/environment-modules.js.map +1 -1
  32. package/core/notification/client-notification-instance.d.ts +5 -2
  33. package/core/notification/client-notification-instance.js +9 -5
  34. package/core/notification/client-notification-instance.js.map +1 -1
  35. package/core/notification/client-notification.d.ts +4 -0
  36. package/core/notification/client-notification.js.map +1 -1
  37. package/core/notification/notification.d.ts +6 -1
  38. package/core/notification/notification.js +3 -1
  39. package/core/notification/notification.js.map +1 -1
  40. package/core/rpc/credssp/rpc-credssp-model.d.ts +4 -0
  41. package/core/rpc/credssp/rpc-credssp-model.js.map +1 -1
  42. package/core/rpc/dialog/rpc-dialog-client.js +11 -5
  43. package/core/rpc/dialog/rpc-dialog-client.js.map +1 -1
  44. package/core/rpc/rpc.d.ts +6 -6
  45. package/core/rpc/rpc.js +7 -7
  46. package/core/rpc/rpc.js.map +1 -1
  47. package/core/security/credssp-manager.d.ts +13 -6
  48. package/core/security/credssp-manager.js +37 -21
  49. package/core/security/credssp-manager.js.map +1 -1
  50. package/core/shared/cluster-inventory/cluster-inventory-cache.js +2 -1
  51. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  52. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  53. package/e2e/assets/strings/de-DE/strings.json +1 -1
  54. package/e2e/assets/strings/es-ES/strings.json +1 -1
  55. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  56. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  57. package/e2e/assets/strings/it-IT/strings.json +1 -1
  58. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  59. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  60. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  61. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  62. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  63. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  64. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  65. package/e2e/assets/strings/strings.json +1 -1
  66. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  67. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  68. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  69. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  70. package/package.json +7 -2
  71. package/angular/assets/strings/en-US/strings.json +0 -1
  72. package/core/assets/strings/en-US/strings.json +0 -1
  73. package/e2e/assets/strings/en-US/strings.json +0 -1
@@ -16,7 +16,8 @@ export var NotificationChangeEvent;
16
16
  NotificationChangeEvent[NotificationChangeEvent["Change"] = 4] = "Change";
17
17
  })(NotificationChangeEvent || (NotificationChangeEvent = {}));
18
18
  /**
19
- * Notification object.
19
+ * Internal notification object converted from ClientNotification object.
20
+ * Contains data to track notifications.
20
21
  */
21
22
  export class Notification {
22
23
  /**
@@ -364,6 +365,7 @@ export class Notification {
364
365
  this.link = this.formatLink(client.link, client.linkType);
365
366
  this.linkType = client.linkType;
366
367
  this.message = client.message;
368
+ this.solutionMessage = client.solutionMessage;
367
369
  if (this.state !== NotificationState.Started && this.state !== NotificationState.InProgress) {
368
370
  this.endTimestamp = this.getGlobalizedTimestamp(client.timestamp);
369
371
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/notification/notification.ts"],"names":[],"mappings":"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","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 * Notification object.\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 * 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 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":"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","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"]}
@@ -100,4 +100,8 @@ export interface RpcCredSSPOperationResult {
100
100
  * Error message if any.
101
101
  */
102
102
  error?: string;
103
+ /**
104
+ * Solution to error if any.
105
+ */
106
+ solutionMessage?: string;
103
107
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/rpc/credssp/rpc-credssp-model.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,oBAAoB;;AACf,4BAAO,GAAG,gBAAgB,CAAC;AAC3B,4BAAO,GAAG,OAAO,CAAC;AAGpC;;GAEG;AACH,MAAM,OAAO,qBAAqB;;AAChB,6BAAO,GAAG,SAAS,CAAC;AACpB,6BAAO,GAAG,OAAO,CAAC;AAGpC;;GAEG;AACH,MAAM,CAAN,IAAY,uBAgCX;AAhCD,WAAY,uBAAuB;IAC/B;;OAEG;IACH,mGAAuB,CAAA;IAEvB;;OAEG;IACH,qGAAwB,CAAA;IAExB;;OAEG;IACH,6FAAoB,CAAA;IAEpB;;OAEG;IACH,+FAAqB,CAAA;IAErB;;;OAGG;IACH,6FAAoB,CAAA;IAEpB;;;OAGG;IACH,mFAAe,CAAA;AACnB,CAAC,EAhCW,uBAAuB,KAAvB,uBAAuB,QAgClC","file":"rpc-credssp-model.js","sourcesContent":["import { RpcBaseData } from '../rpc-base';\r\n\r\n/**\r\n * CredSSP request Rpc call name and version.\r\n */\r\nexport class RpcCredSspRequestKey {\r\n public static command = 'CredSspRequest';\r\n public static version = '0.1.0';\r\n}\r\n\r\n/**\r\n * CredSSP response Rpc call name and version\r\n */\r\nexport class RpcCredSspResponseKey {\r\n public static command = 'CredSsp';\r\n public static version = '0.1.0';\r\n}\r\n\r\n/**\r\n * Identifies the CredSSP operation type to preform\r\n */\r\nexport enum RpcCredSSPOperationType {\r\n /**\r\n * Enable CredSSP Server role on the managed server.\r\n */\r\n EnableManagedServer = 0,\r\n\r\n /**\r\n * Disable CredSSP Server role on the managed server.\r\n */\r\n DisableManagedServer = 1,\r\n\r\n /**\r\n * Enable CredSSP client role on the gateway and delegate to the list ot servers.\r\n */\r\n EnableClientRole = 2,\r\n\r\n /**\r\n * Disable CredSSP client role on the gateway and remove all delegated servers.\r\n */\r\n DisableClientRole = 3,\r\n\r\n /**\r\n * Enable CredSSP Server role on the managed server, and enable the gateway to\r\n * delegate to the managed server.\r\n */\r\n EnableDelegation = 4,\r\n\r\n /**\r\n * Test that CredSSP connection from gateway to server(s) is enabled. To function as verification mechanism\r\n * that CredSSP is bound to work.\r\n */\r\n TestCredSSP = 5\r\n}\r\n\r\n/**\r\n * Explicit credentials i.e username andd password\r\n */\r\nexport interface Credentials {\r\n username: string;\r\n password: string;\r\n}\r\n\r\n/**\r\n * CredSSP Manager operation/action RPC message.\r\n */\r\nexport interface RpcCredSSPOperation extends RpcBaseData {\r\n /**\r\n * Request specific Id to track completion.\r\n */\r\n requestId: string;\r\n\r\n /**\r\n * Type of CredSSP operation to perform\r\n */\r\n operation: RpcCredSSPOperationType;\r\n\r\n /**\r\n * @deprecated\r\n * The contextual scenario title to be used when showing notifications.\r\n */\r\n notificationTitle: string;\r\n\r\n /**\r\n * The server names to use in this request. Can be a single server for role server\r\n * or a list of servers for role client.\r\n */\r\n serverNames: string[];\r\n\r\n /***\r\n * Authentication options, need the username and password here\r\n */\r\n credentials?: Credentials;\r\n\r\n /**\r\n * @deprecated\r\n * Optional notification Id to be used when showing notifications. This will allow notifications\r\n * from the caller and from CredSSP to be merged in the notification center.\r\n */\r\n notificationId?: string;\r\n}\r\n\r\n/**\r\n * CredSSP Manager operation/action RPC message result.\r\n */\r\nexport interface RpcCredSSPOperationResult {\r\n /**\r\n * Request specific Id to track completion.\r\n */\r\n requestId: string;\r\n\r\n /**\r\n * Did the requested operation succeed or not?\r\n */\r\n succeeded: boolean;\r\n\r\n /**\r\n * Error message if any.\r\n */\r\n error?: string;\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/rpc/credssp/rpc-credssp-model.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,oBAAoB;;AACf,4BAAO,GAAG,gBAAgB,CAAC;AAC3B,4BAAO,GAAG,OAAO,CAAC;AAGpC;;GAEG;AACH,MAAM,OAAO,qBAAqB;;AAChB,6BAAO,GAAG,SAAS,CAAC;AACpB,6BAAO,GAAG,OAAO,CAAC;AAGpC;;GAEG;AACH,MAAM,CAAN,IAAY,uBAgCX;AAhCD,WAAY,uBAAuB;IAC/B;;OAEG;IACH,mGAAuB,CAAA;IAEvB;;OAEG;IACH,qGAAwB,CAAA;IAExB;;OAEG;IACH,6FAAoB,CAAA;IAEpB;;OAEG;IACH,+FAAqB,CAAA;IAErB;;;OAGG;IACH,6FAAoB,CAAA;IAEpB;;;OAGG;IACH,mFAAe,CAAA;AACnB,CAAC,EAhCW,uBAAuB,KAAvB,uBAAuB,QAgClC","file":"rpc-credssp-model.js","sourcesContent":["import { RpcBaseData } from '../rpc-base';\r\n\r\n/**\r\n * CredSSP request Rpc call name and version.\r\n */\r\nexport class RpcCredSspRequestKey {\r\n public static command = 'CredSspRequest';\r\n public static version = '0.1.0';\r\n}\r\n\r\n/**\r\n * CredSSP response Rpc call name and version\r\n */\r\nexport class RpcCredSspResponseKey {\r\n public static command = 'CredSsp';\r\n public static version = '0.1.0';\r\n}\r\n\r\n/**\r\n * Identifies the CredSSP operation type to preform\r\n */\r\nexport enum RpcCredSSPOperationType {\r\n /**\r\n * Enable CredSSP Server role on the managed server.\r\n */\r\n EnableManagedServer = 0,\r\n\r\n /**\r\n * Disable CredSSP Server role on the managed server.\r\n */\r\n DisableManagedServer = 1,\r\n\r\n /**\r\n * Enable CredSSP client role on the gateway and delegate to the list ot servers.\r\n */\r\n EnableClientRole = 2,\r\n\r\n /**\r\n * Disable CredSSP client role on the gateway and remove all delegated servers.\r\n */\r\n DisableClientRole = 3,\r\n\r\n /**\r\n * Enable CredSSP Server role on the managed server, and enable the gateway to\r\n * delegate to the managed server.\r\n */\r\n EnableDelegation = 4,\r\n\r\n /**\r\n * Test that CredSSP connection from gateway to server(s) is enabled. To function as verification mechanism\r\n * that CredSSP is bound to work.\r\n */\r\n TestCredSSP = 5\r\n}\r\n\r\n/**\r\n * Explicit credentials i.e username andd password\r\n */\r\nexport interface Credentials {\r\n username: string;\r\n password: string;\r\n}\r\n\r\n/**\r\n * CredSSP Manager operation/action RPC message.\r\n */\r\nexport interface RpcCredSSPOperation extends RpcBaseData {\r\n /**\r\n * Request specific Id to track completion.\r\n */\r\n requestId: string;\r\n\r\n /**\r\n * Type of CredSSP operation to perform\r\n */\r\n operation: RpcCredSSPOperationType;\r\n\r\n /**\r\n * @deprecated\r\n * The contextual scenario title to be used when showing notifications.\r\n */\r\n notificationTitle: string;\r\n\r\n /**\r\n * The server names to use in this request. Can be a single server for role server\r\n * or a list of servers for role client.\r\n */\r\n serverNames: string[];\r\n\r\n /***\r\n * Authentication options, need the username and password here\r\n */\r\n credentials?: Credentials;\r\n\r\n /**\r\n * @deprecated\r\n * Optional notification Id to be used when showing notifications. This will allow notifications\r\n * from the caller and from CredSSP to be merged in the notification center.\r\n */\r\n notificationId?: string;\r\n}\r\n\r\n/**\r\n * CredSSP Manager operation/action RPC message result.\r\n */\r\nexport interface RpcCredSSPOperationResult {\r\n /**\r\n * Request specific Id to track completion.\r\n */\r\n requestId: string;\r\n\r\n /**\r\n * Did the requested operation succeed or not?\r\n */\r\n succeeded: boolean;\r\n\r\n /**\r\n * Error message if any.\r\n */\r\n error?: string;\r\n\r\n /**\r\n * Solution to error if any.\r\n */\r\n solutionMessage?: string;\r\n}\r\n"]}
@@ -1,3 +1,4 @@
1
+ import { Dom } from '../../dom/dom';
1
2
  import { RpcInboundClient } from '../rpc-inbound-client';
2
3
  import { RpcDialogType } from './rpc-dialog-model';
3
4
  import { RpcDialogKey } from './rpc-dialog-model';
@@ -33,12 +34,17 @@ export class RpcDialogClient {
33
34
  * @param id The id of dialog
34
35
  */
35
36
  static resumeFocus(id) {
36
- if (this.dialogOrigins[id]) {
37
- setTimeout(() => {
38
- RpcDialogClient.dialogOrigins[id].focus();
39
- delete RpcDialogClient.dialogOrigins[id];
40
- });
37
+ if (!RpcDialogClient.dialogOrigins[id]) {
38
+ return;
41
39
  }
40
+ const element = RpcDialogClient.dialogOrigins[id];
41
+ setTimeout(() => {
42
+ const focusOn = Dom.getFocusOrigin(element);
43
+ if (focusOn) {
44
+ focusOn.focus();
45
+ }
46
+ delete RpcDialogClient.dialogOrigins[id];
47
+ });
42
48
  }
43
49
  }
44
50
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/rpc/dialog/rpc-dialog-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAkC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,eAAe;IAMxB;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAC,GAAQ,EAAE,IAAmB;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,iBAAiB;eAC1C,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,sBAAsB;eAClD,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,0BAA0B;eACtD,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,gBAAgB,EAAE;YACjD,6CAA6C;YAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAA4B,CAAC;YACrD,IAAI,MAAM,EAAE;gBACR,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;aACzD;SACJ;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;aAC9E,IAAI,CAAC,CAAC,MAAuB,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE;gBACnC,4CAA4C;gBAC5C,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9C;YAED,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,WAAW,CAAC,EAAU;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;YACxB,UAAU,CACN,GAAG,EAAE;gBACD,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC1C,OAAO,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;SACV;IACL,CAAC;;AA9CD;;GAEG;AACY,6BAAa,GAAqC,EAAE,CAAC","file":"rpc-dialog-client.js","sourcesContent":["import { Rpc } from '../rpc';\r\nimport { RpcInboundClient } from '../rpc-inbound-client';\r\nimport { RpcDialogData, RpcDialogResult, RpcDialogType } from './rpc-dialog-model';\r\nimport { RpcDialogKey } from './rpc-dialog-model';\r\n\r\nexport class RpcDialogClient {\r\n /**\r\n * Elements that open a dialog, used for resuming focus\r\n */\r\n private static dialogOrigins: { [index: string]: HTMLElement } = {};\r\n\r\n /**\r\n * The dialog command.\r\n *\r\n * @param data the dialog data object.\r\n * @return Promise<RpcDialogResult> the promise object of dialog result.\r\n */\r\n public static dialog(rpc: Rpc, data: RpcDialogData): Promise<RpcDialogResult> {\r\n if (data.type === RpcDialogType.OpenMessageDialog\r\n || data.type === RpcDialogType.OpenConfirmationDialog\r\n || data.type === RpcDialogType.OpenConfirmationListDialog\r\n || data.type === RpcDialogType.OpenChoiceDialog) {\r\n // open a dialog, store element that opens it\r\n const origin = document.activeElement as HTMLElement;\r\n if (origin) {\r\n RpcDialogClient.dialogOrigins[data.dialogId] = origin;\r\n }\r\n }\r\n\r\n return RpcInboundClient.call(rpc, RpcDialogKey.command, RpcDialogKey.version, data)\r\n .then((result: RpcDialogResult) => {\r\n if (data.type === RpcDialogType.Close) {\r\n // successfully close a dialog, resume focus\r\n RpcDialogClient.resumeFocus(data.dialogId);\r\n }\r\n\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * Resume focus back to the original element that shows the dialog.\r\n * @param id The id of dialog\r\n */\r\n private static resumeFocus(id: string): void {\r\n if (this.dialogOrigins[id]) {\r\n setTimeout(\r\n () => {\r\n RpcDialogClient.dialogOrigins[id].focus();\r\n delete RpcDialogClient.dialogOrigins[id];\r\n });\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/rpc/dialog/rpc-dialog-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAkC,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,eAAe;IAMxB;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAC,GAAQ,EAAE,IAAmB;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,iBAAiB;eAC1C,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,sBAAsB;eAClD,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,0BAA0B;eACtD,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,gBAAgB,EAAE;YACjD,6CAA6C;YAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAA4B,CAAC;YACrD,IAAI,MAAM,EAAE;gBACR,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;aACzD;SACJ;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;aAC9E,IAAI,CAAC,CAAC,MAAuB,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE;gBACnC,4CAA4C;gBAC5C,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9C;YAED,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,WAAW,CAAC,EAAU;QACjC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;YACpC,OAAO;SACV;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAClD,UAAU,CAAC,GAAG,EAAE;YACZ,MAAM,OAAO,GAAgB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACzD,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,KAAK,EAAE,CAAC;aACnB;YACD,OAAO,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC;;AAnDD;;GAEG;AACY,6BAAa,GAAqC,EAAE,CAAC","file":"rpc-dialog-client.js","sourcesContent":["import { Dom } from '../../dom/dom';\r\nimport { Rpc } from '../rpc';\r\nimport { RpcInboundClient } from '../rpc-inbound-client';\r\nimport { RpcDialogData, RpcDialogResult, RpcDialogType } from './rpc-dialog-model';\r\nimport { RpcDialogKey } from './rpc-dialog-model';\r\n\r\nexport class RpcDialogClient {\r\n /**\r\n * Elements that open a dialog, used for resuming focus\r\n */\r\n private static dialogOrigins: { [index: string]: HTMLElement } = {};\r\n\r\n /**\r\n * The dialog command.\r\n *\r\n * @param data the dialog data object.\r\n * @return Promise<RpcDialogResult> the promise object of dialog result.\r\n */\r\n public static dialog(rpc: Rpc, data: RpcDialogData): Promise<RpcDialogResult> {\r\n if (data.type === RpcDialogType.OpenMessageDialog\r\n || data.type === RpcDialogType.OpenConfirmationDialog\r\n || data.type === RpcDialogType.OpenConfirmationListDialog\r\n || data.type === RpcDialogType.OpenChoiceDialog) {\r\n // open a dialog, store element that opens it\r\n const origin = document.activeElement as HTMLElement;\r\n if (origin) {\r\n RpcDialogClient.dialogOrigins[data.dialogId] = origin;\r\n }\r\n }\r\n\r\n return RpcInboundClient.call(rpc, RpcDialogKey.command, RpcDialogKey.version, data)\r\n .then((result: RpcDialogResult) => {\r\n if (data.type === RpcDialogType.Close) {\r\n // successfully close a dialog, resume focus\r\n RpcDialogClient.resumeFocus(data.dialogId);\r\n }\r\n\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * Resume focus back to the original element that shows the dialog.\r\n * @param id The id of dialog\r\n */\r\n private static resumeFocus(id: string): void {\r\n if (!RpcDialogClient.dialogOrigins[id]) {\r\n return;\r\n }\r\n\r\n const element = RpcDialogClient.dialogOrigins[id];\r\n setTimeout(() => {\r\n const focusOn: HTMLElement = Dom.getFocusOrigin(element);\r\n if (focusOn) {\r\n focusOn.focus();\r\n }\r\n delete RpcDialogClient.dialogOrigins[id];\r\n });\r\n }\r\n}\r\n"]}
package/core/rpc/rpc.d.ts CHANGED
@@ -211,12 +211,12 @@ export declare class Rpc {
211
211
  */
212
212
  private createTimerPromise;
213
213
  /**
214
- * Create promise that does not timeout.
215
- *
216
- * @param command the outbound type.
217
- * @param data the data context.
218
- * @return Promise<any> the promise.
219
- */
214
+ * Create promise that does not timeout.
215
+ *
216
+ * @param command the outbound type.
217
+ * @param data the data context.
218
+ * @return Promise<any> the promise.
219
+ */
220
220
  private createPromise;
221
221
  /**
222
222
  * Process data pushing into next call of subject with deferred data type.
package/core/rpc/rpc.js CHANGED
@@ -166,7 +166,7 @@ export class Rpc {
166
166
  sessionId: self.Init.sessionId,
167
167
  modules: self.Environment.modules,
168
168
  accessibilityMode: self.Resources.accessibilityMode,
169
- sessionExpiration: MsftSme.getSessionExpiration(),
169
+ sessionExpiration: self.Init.sessionExpiration,
170
170
  performanceProfile: MsftSme.getPerformanceProfile(),
171
171
  connectivityLevel: self.Init.connectivityLevel,
172
172
  consoleDebug: MsftSme.consoleDebug(),
@@ -418,12 +418,12 @@ export class Rpc {
418
418
  return deferred.promise;
419
419
  }
420
420
  /**
421
- * Create promise that does not timeout.
422
- *
423
- * @param command the outbound type.
424
- * @param data the data context.
425
- * @return Promise<any> the promise.
426
- */
421
+ * Create promise that does not timeout.
422
+ *
423
+ * @param command the outbound type.
424
+ * @param data the data context.
425
+ * @return Promise<any> the promise.
426
+ */
427
427
  createPromise(command, data) {
428
428
  const deferred = NativeQ.defer();
429
429
  this.deferredCollection[command] = { deferred: deferred, data: data };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/rpc/rpc.ts"],"names":[],"mappings":"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","file":"rpc.js","sourcesContent":["import { Observable, Subject } from 'rxjs';\r\nimport { CoreEnvironment } from '../data/core-environment';\r\nimport { NativeDeferred, NativeQ } from '../data/native-q';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { SmeWebTelemetry } from '../diagnostics/sme-web-telemetry';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModuleEntryPoint } from '../manifest/environment-modules';\r\nimport {\r\n CommandCallBackType,\r\n RpcActivateDataInternal,\r\n RpcBase,\r\n RpcBaseData,\r\n RpcDeactivateResult,\r\n RpcInboundCommands,\r\n RpcInboundHandlers,\r\n RpcInitData,\r\n RpcInitDataInternal,\r\n RpcInitResult,\r\n RpcMode,\r\n RpcOpenDataInternal,\r\n RpcOpenResult,\r\n RpcOutboundCommands,\r\n RpcOutboundHandlers,\r\n RpcPingData,\r\n RpcPingResult,\r\n RpcShutdownData,\r\n RpcShutdownResult,\r\n RpcType,\r\n rpcVersion\r\n} from './rpc-base';\r\nimport { RpcManager } from './rpc-manager';\r\nimport { RpcOutbound } from './rpc-outbound';\r\nimport { RpcSeek, RpcSeekMode, RpcSeekResult } from './seek/rpc-seek-model';\r\n\r\n/**\r\n * Deferred data object.\r\n */\r\nexport interface DeferredData<TData, TResult> {\r\n deferred: NativeDeferred<TResult>;\r\n data: TData;\r\n}\r\n\r\n/**\r\n * The Rpc class.\r\n */\r\nexport class Rpc {\r\n // RPC timeout 10 seconds.\r\n private static rpcTimeout = 10 * 1000;\r\n\r\n /**\r\n * This subject is updated whenever there's new reported data\r\n */\r\n private rpcSubjects: { [index: string]: Subject<DeferredData<any, any>> };\r\n\r\n /**\r\n * Deferred response collection.\r\n */\r\n private deferredCollection = new Map<RpcOutboundCommands, DeferredData<any, any>>();\r\n\r\n /**\r\n * Active status of rpc by Observable.\r\n */\r\n private stateChangedInternal: Subject<boolean> = new Subject<boolean>();\r\n\r\n /**\r\n * Active status of rpc.\r\n */\r\n private stateActiveInternal = false;\r\n\r\n /**\r\n * Inbound module handlers to process when rpc is called.\r\n * - called from Module to Shell.\r\n */\r\n private rpcInboundHandlers: RpcInboundHandlers = {\r\n FailedHandler: (data: RpcBaseData) => {\r\n return this.processNextForSubject<RpcBaseData, void>(RpcInboundCommands.Failed, data);\r\n },\r\n SeekHandler: (data: RpcSeek) => {\r\n return Promise.resolve(<RpcSeekResult>{ name: data.sourceName, subName: data.sourceSubName });\r\n }\r\n };\r\n\r\n /**\r\n * Outbound shell handlers to process when rpc is called.\r\n * - called from Shell to Module.\r\n * - if code reached a handler, module is not ready yet.\r\n * set timeout for RPC call.\r\n */\r\n private rpcOutboundHandlers: RpcOutboundHandlers = {\r\n InitHandler: (data: RpcInitDataInternal) =>\r\n this.createTimerPromise<RpcInitDataInternal, RpcInitResult>(\r\n RpcOutboundCommands.Init, Rpc.rpcTimeout,\r\n <RpcInitDataInternal>{ locale: data.locale }),\r\n OpenHandler: (rpcOpenData: RpcOpenDataInternal) =>\r\n this.createTimerPromise<RpcOpenDataInternal, RpcOpenResult>(RpcOutboundCommands.Open, Rpc.rpcTimeout, rpcOpenData),\r\n ActivateHandler: (data: RpcActivateDataInternal) =>\r\n this.createTimerPromise<RpcBaseData, void>(RpcOutboundCommands.Activate, Rpc.rpcTimeout, data),\r\n Deactivate2Handler: (data: RpcBaseData) =>\r\n this.createTimerPromise<RpcBaseData, RpcDeactivateResult>(RpcOutboundCommands.Deactivate2, Rpc.rpcTimeout, data),\r\n ShutdownHandler: (data: RpcShutdownData) =>\r\n this.createTimerPromise<RpcShutdownData, RpcShutdownResult>(RpcOutboundCommands.Shutdown, Rpc.rpcTimeout, data),\r\n PingHandler: (data: RpcPingData) => {\r\n this.changeActiveState(true);\r\n return Promise.resolve(<RpcPingResult>{ name: 'pong' });\r\n }\r\n };\r\n\r\n /**\r\n * Rpc manager object.\r\n */\r\n public rpcManager: RpcManager = new RpcManager();\r\n\r\n /**\r\n * Initializes a new instance of the Rpc class.\r\n *\r\n * @param http the Http class instance injected.\r\n */\r\n constructor() {\r\n this.rpcSubjects = {};\r\n const commands = Object.keys(RpcInboundCommands);\r\n commands.forEach((value, index, array) => {\r\n this.rpcSubjects[RpcInboundCommands[value]] = new Subject<any>();\r\n });\r\n }\r\n\r\n /**\r\n * Gets observable to watch the state change.\r\n */\r\n public get stateChanged(): Observable<boolean> {\r\n this.stateChangedInternal.next(this.stateActiveInternal);\r\n return this.stateChangedInternal.asObservable();\r\n }\r\n\r\n /**\r\n * Gets the state of rpc.\r\n */\r\n public get stateActive(): boolean {\r\n return this.stateActiveInternal;\r\n }\r\n\r\n /**\r\n * Gets whether rpc is running on the shell.\r\n */\r\n public get isShell(): boolean {\r\n if (this.rpcManager.rpcChannel == null) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcNotInitialized.message;\r\n throw new Error(message);\r\n }\r\n\r\n return this.rpcManager.rpcChannel.rpcMode === RpcMode.Shell;\r\n }\r\n\r\n /**\r\n * Register inbound command handler.\r\n *\r\n * @param command The command name.\r\n * @param handler The command handler.\r\n */\r\n public registerInboundHandler(command: string, handler: CommandCallBackType): void {\r\n const handlerName = RpcBase.commandToHandlerName(command);\r\n this.rpcInboundHandlers[handlerName] = handler;\r\n this.rpcManager.registerInboundHandler(command, handler);\r\n }\r\n\r\n /**\r\n * Register outbound command handler.\r\n *\r\n * @param command The command name.\r\n * @param handler The command handler.\r\n */\r\n public registerOutboundHandler(command: string, handler: CommandCallBackType): void {\r\n const handlerName = RpcBase.commandToHandlerName(command);\r\n this.rpcOutboundHandlers[handlerName] = handler;\r\n }\r\n\r\n /**\r\n * Initializes Rpc configuration\r\n */\r\n public init(): void {\r\n this.rpcManager.init(this.rpcInboundHandlers, this.rpcOutboundHandlers);\r\n if (this.isShell) {\r\n this.changeActiveState(true);\r\n }\r\n }\r\n\r\n /***************************************************************\r\n * Section for Shell usage.\r\n ***************************************************************/\r\n\r\n /**\r\n * This updates its value every time there's a reported data from the rpc channel\r\n */\r\n public moduleSubjects<T>(commandType: RpcInboundCommands): Observable<DeferredData<T, any>> {\r\n return <Observable<DeferredData<T, any>>>this.rpcSubjects[RpcInboundCommands[commandType]];\r\n }\r\n\r\n /**\r\n * Connect a module with name and iframe.\r\n * - start pinging to iframe to wait for response.\r\n *\r\n * @param name the name of the module.\r\n * @param path the path to open the module the module name.\r\n * @param iframe the iframe window object.\r\n * @param primary the primary window to affect router url.\r\n * @return Promise<string> the promise with subName created for the window.\r\n */\r\n public moduleConnect(name: string, path: string, iframe: Window, primary: boolean): Promise<string> {\r\n return this.rpcManager.connectRpcOutbound(name, path, iframe, primary);\r\n }\r\n\r\n /**\r\n * Init the module.\r\n *\r\n * @param name the name of module.\r\n * @param subName the sub name of rpc channel.\r\n * @param entryPointType the entry point type.\r\n * @return Promise<void> the promise object of init result.\r\n */\r\n public moduleInit(name: string, subName: string, entryPoint: EnvironmentModuleEntryPoint): Promise<RpcInitResult> {\r\n const rpc = this.rpcManager.rpcChannel.getRpc<RpcOutbound>(name, subName, RpcType.Outbound);\r\n const self = MsftSme.self();\r\n const data: RpcInitData = {\r\n entryPointType: entryPoint.entryPointType,\r\n entryPointName: entryPoint.name,\r\n theme: self.Resources.theme,\r\n assets: self.Resources.assets,\r\n moduleAssets: self.Resources.moduleAssets,\r\n locale: self.Resources.localeId,\r\n localeRegional: self.Resources.localeRegionalId,\r\n lib: self.Resources.lib,\r\n sessionId: self.Init.sessionId,\r\n modules: self.Environment.modules,\r\n accessibilityMode: self.Resources.accessibilityMode,\r\n sessionExpiration: MsftSme.getSessionExpiration(),\r\n performanceProfile: MsftSme.getPerformanceProfile(),\r\n connectivityLevel: self.Init.connectivityLevel,\r\n consoleDebug: MsftSme.consoleDebug(),\r\n sideLoad: MsftSme.sideLoad(),\r\n experiments: MsftSme.experiments(),\r\n shellVersion: self.Init.shellVersion\r\n };\r\n return rpc.init(data).then(result => {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Rpc;\r\n // copy the version string of remote module.\r\n if (result && result.version) {\r\n rpc.version = result.version;\r\n Logging.log({\r\n level: LogLevel.Verbose,\r\n message: strings.Version.message.format(rpcVersion, name, rpc.version),\r\n source: 'rpc.moduleInit'\r\n });\r\n } else {\r\n const message = strings.MissingVersion.message.format(name);\r\n Logging.log({\r\n level: LogLevel.Critical,\r\n message,\r\n source: 'rpc.moduleInit'\r\n });\r\n throw new Error(message);\r\n }\r\n\r\n this.changeActiveState(true);\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * Open the module by specifying the path and parameters.\r\n *\r\n * @param name the name of module.\r\n * @param subName the sub name of rpc channel.\r\n * @param path the open path.\r\n * @return Promise<RpcOpenResult> the promise object of RpcOpenResult.\r\n */\r\n public moduleOpen(name: string, subName: string, path: string): Promise<RpcOpenResult> {\r\n const rpc = <RpcOutbound>this.rpcManager.rpcChannel.getRpc(name, subName, RpcType.Outbound);\r\n return rpc.open({ path }).then(result => {\r\n this.changeActiveState(true);\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * Activate the module to start receiving data.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n * @param primary the primary window to affect router url.\r\n * @param url the inner url to open.\r\n * @return Promise<void> the promise of activation result.\r\n */\r\n public moduleActivate(name: string, subName: string, primary: boolean, url: string): Promise<void> {\r\n const rpc = this.rpcManager.reconnectRpcOutbound(name, subName, primary);\r\n return rpc.activate({ url })\r\n .then(data => {\r\n this.changeActiveState(true);\r\n return data;\r\n });\r\n }\r\n\r\n /**\r\n * Deactivate 2 the module to stop receiving data.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n * @param primary the primary window to affect router url.\r\n * @return Promise<void> the promise of deactivation result.\r\n */\r\n public moduleDeactivate2(name: string, subName: string, primary: boolean): Promise<RpcDeactivateResult> {\r\n this.changeActiveState(false);\r\n const rpc = this.rpcManager.rpcChannel.getRpc<RpcOutbound>(name, subName, RpcType.Outbound);\r\n return rpc.deactivate2({});\r\n }\r\n\r\n /**\r\n * Request to shutdown the module.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n * @param primary the primary window to affect router url.\r\n * @param force the forcible state.\r\n * @return Promise<RpcShutdownResult> the promise object of result.\r\n */\r\n public moduleShutdown(name: string, subName: string, primary: boolean, force: boolean): Promise<RpcShutdownResult> {\r\n const rpc = this.rpcManager.reconnectRpcOutbound(name, subName, primary);\r\n return rpc.shutdown({ force: force });\r\n }\r\n\r\n /**\r\n * Remove the module from the rpc channel.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n */\r\n public moduleRemove(name: string, subName: string): void {\r\n this.rpcManager.removeRpcOutbound(name, subName);\r\n }\r\n\r\n /**\r\n * Get module version string.\r\n *\r\n * @param name the name of module.\r\n * @param subName the sub name of rpc channel.\r\n * @return string the RPC version of module.\r\n */\r\n public moduleVersion(name: string, subName: string): string {\r\n const rpc = <RpcOutbound>this.rpcManager.rpcChannel.getRpc(name, subName, RpcType.Outbound);\r\n return rpc && rpc.version;\r\n }\r\n\r\n /***************************************************************\r\n * Section for Module usage.\r\n ***************************************************************/\r\n\r\n /**\r\n * Register outbound handler. It accepts delay register in case of loading/initialization took a time for module.\r\n *\r\n * @param command the name of RPC Shell command.\r\n * @param handler the handler to handle Shell request.\r\n */\r\n public register(command: string, handler: (data: any) => Promise<any>): void;\r\n\r\n /**\r\n * Register outbound handler. It accepts delay register in case of loading/initialization took a time for module.\r\n *\r\n * @param command the enum ID of RPC Shell command.\r\n * @param handler the handler to handle Shell request.\r\n */\r\n // tslint:disable-next-line:unified-signatures\r\n public register(command: RpcOutboundCommands, handler: (data: any) => Promise<any>): void;\r\n public register(command: RpcOutboundCommands | string, handler: (data: any) => Promise<any>): void {\r\n if (typeof command === 'string') {\r\n const commandName: string = command;\r\n this.rpcManager.rpcInbound.register(commandName, handler);\r\n return;\r\n }\r\n\r\n const deferredData = <DeferredData<any, any>>this.deferredCollection[command];\r\n if (deferredData) {\r\n delete this.deferredCollection[command];\r\n handler(deferredData.data).then(deferredData.deferred.resolve, deferredData.deferred.reject);\r\n return;\r\n }\r\n\r\n if (command === RpcOutboundCommands.Init) {\r\n const modifiedHandler = (data: RpcInitDataInternal) => {\r\n // node context is used before passing request to handler.\r\n this.changeActiveState(true);\r\n const self = MsftSme.self();\r\n self.Init.entryPointType = data.entryPointType;\r\n self.Init.entryPointName = data.entryPointName;\r\n self.Init.sessionId = data.sessionId;\r\n self.Init.sessionExpiration = data.sessionExpiration;\r\n self.Init.performanceProfile = data.performanceProfile;\r\n self.Init.shellVersion = data.shellVersion;\r\n self.Environment.modules = data.modules;\r\n self.Init.connectivityLevel = data.connectivityLevel;\r\n self.Resources.lib = data.lib;\r\n self.Resources.moduleAssets = data.moduleAssets;\r\n\r\n if (!MsftSme.isNullOrUndefined(self.Resources.accessibilityMode)\r\n && !MsftSme.isNullOrUndefined(data.accessibilityMode)\r\n && CoreEnvironment.accessibilityManager) {\r\n self.Resources.accessibilityMode = data.accessibilityMode;\r\n CoreEnvironment.accessibilityManager.changeAccessibilityMode(self.Resources.accessibilityMode);\r\n }\r\n\r\n // ensure that global environment settings persist across origins\r\n if (!MsftSme.isNullOrUndefined(data.consoleDebug) && MsftSme.consoleDebug() !== data.consoleDebug) {\r\n MsftSme.consoleDebug(data.consoleDebug);\r\n }\r\n\r\n if (!MsftSme.isNullOrUndefined(data.sideLoad)) {\r\n const sideLoadKeys = Object.keys(MsftSme.sideLoad() || {});\r\n const dataSideLoadKeys = Object.keys(data.sideLoad || {});\r\n\r\n if (sideLoadKeys.length !== dataSideLoadKeys.length || sideLoadKeys.some(key => !!data.sideLoad[key])) {\r\n MsftSme.sideLoadReset();\r\n dataSideLoadKeys.forEach(k => MsftSme.sideLoad(k));\r\n }\r\n }\r\n\r\n if (!MsftSme.isNullOrUndefined(data.experiments)) {\r\n const experiments = MsftSme.experiments();\r\n if (experiments.length !== data.experiments.length || experiments.some((v, i) => v !== data.experiments[i])) {\r\n MsftSme.experiments(data.experiments);\r\n }\r\n }\r\n\r\n if (CoreEnvironment.assetManager && data.theme && data.assets) {\r\n CoreEnvironment.assetManager.loadAssets(data.theme, data.assets);\r\n }\r\n\r\n for (const item of data.modules) {\r\n // NOTES: the next 'if' block code can be removed only if all extensions adapted newer shell. (after 1.1114.0)\r\n if (!self.Init.shellVersion && item.name === 'msft.sme.shell-extensions') {\r\n // look for shell version if missing from older MSI/ShellUI.\r\n self.Init.shellVersion = item.version;\r\n }\r\n\r\n if (item.name === self.Init.moduleName) {\r\n self.Environment.version = item.version || self.Environment.version;\r\n }\r\n }\r\n\r\n const localeLoader = CoreEnvironment.moduleLoadLocale({ id: data.localeRegional || data.locale, neutral: data.locale });\r\n const passingData = <RpcInitData>{\r\n locale: data.locale,\r\n localeRegional: data.localeRegional,\r\n sessionId: data.sessionId\r\n };\r\n\r\n // update metaTags so sessionId is properly updated in telemetry\r\n SmeWebTelemetry.updateFromRpcInit( {'wac-session-id': data.sessionId, 'wac-extension-version': self.Environment.version });\r\n\r\n return localeLoader\r\n .then(() => this.seekShell(RpcSeekMode.Create))\r\n .then(() => handler(passingData))\r\n .then(() => ({ version: rpcVersion }));\r\n };\r\n this.rpcManager.rpcInbound.register(RpcOutboundCommands[command], modifiedHandler);\r\n } else {\r\n this.rpcManager.rpcInbound.register(RpcOutboundCommands[command], handler);\r\n }\r\n }\r\n\r\n /**\r\n * Module report a failure.\r\n */\r\n public failed(data: any): Promise<void> {\r\n const rpc = this.rpcManager.rpcInbound;\r\n return rpc.failed(data);\r\n }\r\n\r\n /**\r\n * Seek shell frame.\r\n *\r\n * @param Promise<any> the promise object.\r\n */\r\n public seekShell(mode: RpcSeekMode): Promise<RpcSeekResult> {\r\n return this.rpcManager.seekShell(mode);\r\n }\r\n\r\n /**\r\n * Validate existing outbound connection and remove if it doesn't live anymore.\r\n *\r\n * @return number the count of removed outbound.\r\n */\r\n public validate(): number {\r\n let count = 0;\r\n const collection = this.rpcManager.getCurrentRpcOutbound();\r\n collection.forEach((rpc, index, array) => {\r\n if (!this.rpcManager.rpcChannel.validate(rpc)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n /**\r\n * Change the active status of rpc.\r\n */\r\n public changeActiveState(state: boolean): void {\r\n this.stateActiveInternal = state;\r\n this.stateChangedInternal.next(state);\r\n }\r\n\r\n /**\r\n * Create auto-failed timer promise.\r\n *\r\n * @param command the outbound command type.\r\n * @param timeoutMs the timeout milliseconds.\r\n * @param data the data context.\r\n * @return Promise<any> the promise.\r\n */\r\n private createTimerPromise<TData, TResult>(command: RpcOutboundCommands, timeoutMs: number, data: TData): Promise<TResult> {\r\n const deferred = NativeQ.defer<TResult>();\r\n this.deferredCollection[command] = <DeferredData<TData, TResult>>{ deferred: deferred, data: data };\r\n setTimeout(\r\n () => {\r\n const deferredData: DeferredData<TData, TResult> = this.deferredCollection[command];\r\n if (deferredData) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcTimeout.message;\r\n deferredData.deferred.reject(message);\r\n delete this.deferredCollection[command];\r\n }\r\n },\r\n timeoutMs);\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Create promise that does not timeout.\r\n *\r\n * @param command the outbound type.\r\n * @param data the data context.\r\n * @return Promise<any> the promise.\r\n */\r\n private createPromise<TData, TResult>(command: RpcOutboundCommands, data: TData): Promise<any> {\r\n const deferred = NativeQ.defer<TResult>();\r\n this.deferredCollection[command] = <DeferredData<TData, TResult>>{ deferred: deferred, data: data };\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Process data pushing into next call of subject with deferred data type.\r\n *\r\n * @param command the inbound command type.\r\n * @param data the rpc data came from a module/iframe.\r\n * @return Promise the promise which receiver must settle within fixed waiting time (10 seconds)\r\n */\r\n private processNextForSubject<TData, TResult>(command: RpcInboundCommands, data: TData): Promise<TResult> {\r\n const subject = this.rpcSubjects[RpcInboundCommands[command]];\r\n if (subject.closed || subject.hasError) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcSubjectClosed.message;\r\n throw new Error(message.format(RpcInboundCommands[command]));\r\n }\r\n\r\n const deferredData = <DeferredData<TData, TResult>>{\r\n data: data,\r\n deferred: NativeQ.defer<TResult>()\r\n };\r\n subject.next(deferredData);\r\n return deferredData.deferred.promise;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/rpc/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAkB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE,OAAO,EAGH,OAAO,EAGP,kBAAkB,EAQlB,mBAAmB,EAMnB,OAAO,EACP,UAAU,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAW,WAAW,EAAiB,MAAM,uBAAuB,CAAC;AAU5E;;GAEG;AACH,MAAM,OAAO,GAAG;IAmEZ;;;;OAIG;IACH;QA/DA;;WAEG;QACK,uBAAkB,GAAG,IAAI,GAAG,EAA+C,CAAC;QAEpF;;WAEG;QACK,yBAAoB,GAAqB,IAAI,OAAO,EAAW,CAAC;QAExE;;WAEG;QACK,wBAAmB,GAAG,KAAK,CAAC;QAEpC;;;WAGG;QACK,uBAAkB,GAAuB;YAC7C,aAAa,EAAE,CAAC,IAAiB,EAAE,EAAE;gBACjC,OAAO,IAAI,CAAC,qBAAqB,CAAoB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1F,CAAC;YACD,WAAW,EAAE,CAAC,IAAa,EAAE,EAAE;gBAC3B,OAAO,OAAO,CAAC,OAAO,CAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAClG,CAAC;SACJ,CAAC;QAEF;;;;;WAKG;QACK,wBAAmB,GAAwB;YAC/C,WAAW,EAAE,CAAC,IAAyB,EAAE,EAAE,CACvC,IAAI,CAAC,kBAAkB,CACnB,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EACnB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACrD,WAAW,EAAE,CAAC,WAAgC,EAAE,EAAE,CAC9C,IAAI,CAAC,kBAAkB,CAAqC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC;YACtH,eAAe,EAAE,CAAC,IAA6B,EAAE,EAAE,CAC/C,IAAI,CAAC,kBAAkB,CAAoB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;YAClG,kBAAkB,EAAE,CAAC,IAAiB,EAAE,EAAE,CACtC,IAAI,CAAC,kBAAkB,CAAmC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;YACpH,eAAe,EAAE,CAAC,IAAqB,EAAE,EAAE,CACvC,IAAI,CAAC,kBAAkB,CAAqC,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;YACnH,WAAW,EAAE,CAAC,IAAiB,EAAE,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,OAAO,CAAC,OAAO,CAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5D,CAAC;SACJ,CAAC;QAEF;;WAEG;QACI,eAAU,GAAe,IAAI,UAAU,EAAE,CAAC;QAQ7C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjD,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,OAAO,EAAO,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,EAAE;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAChG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACI,sBAAsB,CAAC,OAAe,EAAE,OAA4B;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;OAKG;IACI,uBAAuB,CAAC,OAAe,EAAE,OAA4B;QACxE,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;IACpD,CAAC;IAED;;OAEG;IACI,IAAI;QACP,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAChC;IACL,CAAC;IAED;;qEAEiE;IAEjE;;OAEG;IACI,cAAc,CAAI,WAA+B;QACpD,OAAyC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;;;;;OASG;IACI,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc,EAAE,OAAgB;QAC7E,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;;OAOG;IACI,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,UAAuC;QACpF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAc,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAgB;YACtB,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,cAAc,EAAE,UAAU,CAAC,IAAI;YAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;YAC3B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAC7B,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY;YACzC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;YAC/B,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB;YAC/C,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG;YACvB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YAC9B,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;YACjC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB;YACnD,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAC9C,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,EAAE;YACnD,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAC9C,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;YAClC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;SACvC,CAAC;QACF,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YACpE,4CAA4C;YAC5C,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;gBAC1B,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC;oBACR,KAAK,EAAE,QAAQ,CAAC,OAAO;oBACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;oBACtE,MAAM,EAAE,gBAAgB;iBAC3B,CAAC,CAAC;aACN;iBAAM;gBACH,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC;oBACR,KAAK,EAAE,QAAQ,CAAC,QAAQ;oBACxB,OAAO;oBACP,MAAM,EAAE,gBAAgB;iBAC3B,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;aAC5B;YAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACI,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;QACzD,MAAM,GAAG,GAAgB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5F,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACI,cAAc,CAAC,IAAY,EAAE,OAAe,EAAE,OAAgB,EAAE,GAAW;QAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;aACvB,IAAI,CAAC,IAAI,CAAC,EAAE;YACT,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;;;;;OAOG;IACI,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,OAAgB;QACpE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAc,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5F,OAAO,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;OAQG;IACI,cAAc,CAAC,IAAY,EAAE,OAAe,EAAE,OAAgB,EAAE,KAAc;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,IAAY,EAAE,OAAe;QAC7C,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;OAMG;IACI,aAAa,CAAC,IAAY,EAAE,OAAe;QAC9C,MAAM,GAAG,GAAgB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5F,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;IAC9B,CAAC;IAsBM,QAAQ,CAAC,OAAqC,EAAE,OAAoC;QACvF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC7B,MAAM,WAAW,GAAW,OAAO,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1D,OAAO;SACV;QAED,MAAM,YAAY,GAA2B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,YAAY,EAAE;YACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7F,OAAO;SACV;QAED,IAAI,OAAO,KAAK,mBAAmB,CAAC,IAAI,EAAE;YACtC,MAAM,eAAe,GAAG,CAAC,IAAyB,EAAE,EAAE;gBAClD,0DAA0D;gBAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBAC9B,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBAEhD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;uBACzD,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;uBAClD,eAAe,CAAC,oBAAoB,EAAE;oBACzC,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;oBAC1D,eAAe,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;iBAClG;gBAED,iEAAiE;gBACjE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE;oBAC/F,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC3C;gBAED,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC3D,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;oBAE1D,IAAI,YAAY,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;wBACnG,OAAO,CAAC,aAAa,EAAE,CAAC;wBACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;qBACtD;iBACJ;gBAED,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;oBAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC1C,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;wBACzG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBACzC;iBACJ;gBAED,IAAI,eAAe,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC3D,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;iBACpE;gBAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;oBAC7B,8GAA8G;oBAC9G,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,2BAA2B,EAAE;wBACtE,4DAA4D;wBAC5D,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;qBACzC;oBAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;wBACpC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;qBACvE;iBACJ;gBAED,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxH,MAAM,WAAW,GAAgB;oBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC5B,CAAC;gBAEF,gEAAgE;gBAChE,eAAe,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,uBAAuB,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE3H,OAAO,YAAY;qBACd,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;qBAC9C,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;qBAChC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;SACtF;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;SAC9E;IACL,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,IAAS;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACvC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,IAAiB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACX,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;QAC3D,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC3C,KAAK,EAAE,CAAC;aACX;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,KAAc;QACnC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACK,kBAAkB,CAAiB,OAA4B,EAAE,SAAiB,EAAE,IAAW;QACnG,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAW,CAAC;QAC1C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAiC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpG,UAAU,CACN,GAAG,EAAE;YACD,MAAM,YAAY,GAAiC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACpF,IAAI,YAAY,EAAE;gBACd,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzF,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;aAC3C;QACL,CAAC,EACD,SAAS,CAAC,CAAC;QACf,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED;;;;;;MAME;IACM,aAAa,CAAiB,OAA4B,EAAE,IAAW;QAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAW,CAAC;QAC1C,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAiC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpG,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACK,qBAAqB,CAAiB,OAA2B,EAAE,IAAW;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC/F,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAChE;QAED,MAAM,YAAY,GAAiC;YAC/C,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAW;SACrC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzC,CAAC;;AAvgBD,0BAA0B;AACX,cAAU,GAAG,EAAE,GAAG,IAAI,CAAC","file":"rpc.js","sourcesContent":["import { Observable, Subject } from 'rxjs';\r\nimport { CoreEnvironment } from '../data/core-environment';\r\nimport { NativeDeferred, NativeQ } from '../data/native-q';\r\nimport { LogLevel } from '../diagnostics/log-level';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { SmeWebTelemetry } from '../diagnostics/sme-web-telemetry';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModuleEntryPoint } from '../manifest/environment-modules';\r\nimport {\r\n CommandCallBackType,\r\n RpcActivateDataInternal,\r\n RpcBase,\r\n RpcBaseData,\r\n RpcDeactivateResult,\r\n RpcInboundCommands,\r\n RpcInboundHandlers,\r\n RpcInitData,\r\n RpcInitDataInternal,\r\n RpcInitResult,\r\n RpcMode,\r\n RpcOpenDataInternal,\r\n RpcOpenResult,\r\n RpcOutboundCommands,\r\n RpcOutboundHandlers,\r\n RpcPingData,\r\n RpcPingResult,\r\n RpcShutdownData,\r\n RpcShutdownResult,\r\n RpcType,\r\n rpcVersion\r\n} from './rpc-base';\r\nimport { RpcManager } from './rpc-manager';\r\nimport { RpcOutbound } from './rpc-outbound';\r\nimport { RpcSeek, RpcSeekMode, RpcSeekResult } from './seek/rpc-seek-model';\r\n\r\n/**\r\n * Deferred data object.\r\n */\r\nexport interface DeferredData<TData, TResult> {\r\n deferred: NativeDeferred<TResult>;\r\n data: TData;\r\n}\r\n\r\n/**\r\n * The Rpc class.\r\n */\r\nexport class Rpc {\r\n // RPC timeout 10 seconds.\r\n private static rpcTimeout = 10 * 1000;\r\n\r\n /**\r\n * This subject is updated whenever there's new reported data\r\n */\r\n private rpcSubjects: { [index: string]: Subject<DeferredData<any, any>> };\r\n\r\n /**\r\n * Deferred response collection.\r\n */\r\n private deferredCollection = new Map<RpcOutboundCommands, DeferredData<any, any>>();\r\n\r\n /**\r\n * Active status of rpc by Observable.\r\n */\r\n private stateChangedInternal: Subject<boolean> = new Subject<boolean>();\r\n\r\n /**\r\n * Active status of rpc.\r\n */\r\n private stateActiveInternal = false;\r\n\r\n /**\r\n * Inbound module handlers to process when rpc is called.\r\n * - called from Module to Shell.\r\n */\r\n private rpcInboundHandlers: RpcInboundHandlers = {\r\n FailedHandler: (data: RpcBaseData) => {\r\n return this.processNextForSubject<RpcBaseData, void>(RpcInboundCommands.Failed, data);\r\n },\r\n SeekHandler: (data: RpcSeek) => {\r\n return Promise.resolve(<RpcSeekResult>{ name: data.sourceName, subName: data.sourceSubName });\r\n }\r\n };\r\n\r\n /**\r\n * Outbound shell handlers to process when rpc is called.\r\n * - called from Shell to Module.\r\n * - if code reached a handler, module is not ready yet.\r\n * set timeout for RPC call.\r\n */\r\n private rpcOutboundHandlers: RpcOutboundHandlers = {\r\n InitHandler: (data: RpcInitDataInternal) =>\r\n this.createTimerPromise<RpcInitDataInternal, RpcInitResult>(\r\n RpcOutboundCommands.Init, Rpc.rpcTimeout,\r\n <RpcInitDataInternal>{ locale: data.locale }),\r\n OpenHandler: (rpcOpenData: RpcOpenDataInternal) =>\r\n this.createTimerPromise<RpcOpenDataInternal, RpcOpenResult>(RpcOutboundCommands.Open, Rpc.rpcTimeout, rpcOpenData),\r\n ActivateHandler: (data: RpcActivateDataInternal) =>\r\n this.createTimerPromise<RpcBaseData, void>(RpcOutboundCommands.Activate, Rpc.rpcTimeout, data),\r\n Deactivate2Handler: (data: RpcBaseData) =>\r\n this.createTimerPromise<RpcBaseData, RpcDeactivateResult>(RpcOutboundCommands.Deactivate2, Rpc.rpcTimeout, data),\r\n ShutdownHandler: (data: RpcShutdownData) =>\r\n this.createTimerPromise<RpcShutdownData, RpcShutdownResult>(RpcOutboundCommands.Shutdown, Rpc.rpcTimeout, data),\r\n PingHandler: (data: RpcPingData) => {\r\n this.changeActiveState(true);\r\n return Promise.resolve(<RpcPingResult>{ name: 'pong' });\r\n }\r\n };\r\n\r\n /**\r\n * Rpc manager object.\r\n */\r\n public rpcManager: RpcManager = new RpcManager();\r\n\r\n /**\r\n * Initializes a new instance of the Rpc class.\r\n *\r\n * @param http the Http class instance injected.\r\n */\r\n constructor() {\r\n this.rpcSubjects = {};\r\n const commands = Object.keys(RpcInboundCommands);\r\n commands.forEach((value, index, array) => {\r\n this.rpcSubjects[RpcInboundCommands[value]] = new Subject<any>();\r\n });\r\n }\r\n\r\n /**\r\n * Gets observable to watch the state change.\r\n */\r\n public get stateChanged(): Observable<boolean> {\r\n this.stateChangedInternal.next(this.stateActiveInternal);\r\n return this.stateChangedInternal.asObservable();\r\n }\r\n\r\n /**\r\n * Gets the state of rpc.\r\n */\r\n public get stateActive(): boolean {\r\n return this.stateActiveInternal;\r\n }\r\n\r\n /**\r\n * Gets whether rpc is running on the shell.\r\n */\r\n public get isShell(): boolean {\r\n if (this.rpcManager.rpcChannel == null) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcNotInitialized.message;\r\n throw new Error(message);\r\n }\r\n\r\n return this.rpcManager.rpcChannel.rpcMode === RpcMode.Shell;\r\n }\r\n\r\n /**\r\n * Register inbound command handler.\r\n *\r\n * @param command The command name.\r\n * @param handler The command handler.\r\n */\r\n public registerInboundHandler(command: string, handler: CommandCallBackType): void {\r\n const handlerName = RpcBase.commandToHandlerName(command);\r\n this.rpcInboundHandlers[handlerName] = handler;\r\n this.rpcManager.registerInboundHandler(command, handler);\r\n }\r\n\r\n /**\r\n * Register outbound command handler.\r\n *\r\n * @param command The command name.\r\n * @param handler The command handler.\r\n */\r\n public registerOutboundHandler(command: string, handler: CommandCallBackType): void {\r\n const handlerName = RpcBase.commandToHandlerName(command);\r\n this.rpcOutboundHandlers[handlerName] = handler;\r\n }\r\n\r\n /**\r\n * Initializes Rpc configuration\r\n */\r\n public init(): void {\r\n this.rpcManager.init(this.rpcInboundHandlers, this.rpcOutboundHandlers);\r\n if (this.isShell) {\r\n this.changeActiveState(true);\r\n }\r\n }\r\n\r\n /***************************************************************\r\n * Section for Shell usage.\r\n ***************************************************************/\r\n\r\n /**\r\n * This updates its value every time there's a reported data from the rpc channel\r\n */\r\n public moduleSubjects<T>(commandType: RpcInboundCommands): Observable<DeferredData<T, any>> {\r\n return <Observable<DeferredData<T, any>>>this.rpcSubjects[RpcInboundCommands[commandType]];\r\n }\r\n\r\n /**\r\n * Connect a module with name and iframe.\r\n * - start pinging to iframe to wait for response.\r\n *\r\n * @param name the name of the module.\r\n * @param path the path to open the module the module name.\r\n * @param iframe the iframe window object.\r\n * @param primary the primary window to affect router url.\r\n * @return Promise<string> the promise with subName created for the window.\r\n */\r\n public moduleConnect(name: string, path: string, iframe: Window, primary: boolean): Promise<string> {\r\n return this.rpcManager.connectRpcOutbound(name, path, iframe, primary);\r\n }\r\n\r\n /**\r\n * Init the module.\r\n *\r\n * @param name the name of module.\r\n * @param subName the sub name of rpc channel.\r\n * @param entryPointType the entry point type.\r\n * @return Promise<void> the promise object of init result.\r\n */\r\n public moduleInit(name: string, subName: string, entryPoint: EnvironmentModuleEntryPoint): Promise<RpcInitResult> {\r\n const rpc = this.rpcManager.rpcChannel.getRpc<RpcOutbound>(name, subName, RpcType.Outbound);\r\n const self = MsftSme.self();\r\n const data: RpcInitData = {\r\n entryPointType: entryPoint.entryPointType,\r\n entryPointName: entryPoint.name,\r\n theme: self.Resources.theme,\r\n assets: self.Resources.assets,\r\n moduleAssets: self.Resources.moduleAssets,\r\n locale: self.Resources.localeId,\r\n localeRegional: self.Resources.localeRegionalId,\r\n lib: self.Resources.lib,\r\n sessionId: self.Init.sessionId,\r\n modules: self.Environment.modules,\r\n accessibilityMode: self.Resources.accessibilityMode,\r\n sessionExpiration: self.Init.sessionExpiration,\r\n performanceProfile: MsftSme.getPerformanceProfile(),\r\n connectivityLevel: self.Init.connectivityLevel,\r\n consoleDebug: MsftSme.consoleDebug(),\r\n sideLoad: MsftSme.sideLoad(),\r\n experiments: MsftSme.experiments(),\r\n shellVersion: self.Init.shellVersion\r\n };\r\n return rpc.init(data).then(result => {\r\n const strings = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Rpc;\r\n // copy the version string of remote module.\r\n if (result && result.version) {\r\n rpc.version = result.version;\r\n Logging.log({\r\n level: LogLevel.Verbose,\r\n message: strings.Version.message.format(rpcVersion, name, rpc.version),\r\n source: 'rpc.moduleInit'\r\n });\r\n } else {\r\n const message = strings.MissingVersion.message.format(name);\r\n Logging.log({\r\n level: LogLevel.Critical,\r\n message,\r\n source: 'rpc.moduleInit'\r\n });\r\n throw new Error(message);\r\n }\r\n\r\n this.changeActiveState(true);\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * Open the module by specifying the path and parameters.\r\n *\r\n * @param name the name of module.\r\n * @param subName the sub name of rpc channel.\r\n * @param path the open path.\r\n * @return Promise<RpcOpenResult> the promise object of RpcOpenResult.\r\n */\r\n public moduleOpen(name: string, subName: string, path: string): Promise<RpcOpenResult> {\r\n const rpc = <RpcOutbound>this.rpcManager.rpcChannel.getRpc(name, subName, RpcType.Outbound);\r\n return rpc.open({ path }).then(result => {\r\n this.changeActiveState(true);\r\n return result;\r\n });\r\n }\r\n\r\n /**\r\n * Activate the module to start receiving data.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n * @param primary the primary window to affect router url.\r\n * @param url the inner url to open.\r\n * @return Promise<void> the promise of activation result.\r\n */\r\n public moduleActivate(name: string, subName: string, primary: boolean, url: string): Promise<void> {\r\n const rpc = this.rpcManager.reconnectRpcOutbound(name, subName, primary);\r\n return rpc.activate({ url })\r\n .then(data => {\r\n this.changeActiveState(true);\r\n return data;\r\n });\r\n }\r\n\r\n /**\r\n * Deactivate 2 the module to stop receiving data.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n * @param primary the primary window to affect router url.\r\n * @return Promise<void> the promise of deactivation result.\r\n */\r\n public moduleDeactivate2(name: string, subName: string, primary: boolean): Promise<RpcDeactivateResult> {\r\n this.changeActiveState(false);\r\n const rpc = this.rpcManager.rpcChannel.getRpc<RpcOutbound>(name, subName, RpcType.Outbound);\r\n return rpc.deactivate2({});\r\n }\r\n\r\n /**\r\n * Request to shutdown the module.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n * @param primary the primary window to affect router url.\r\n * @param force the forcible state.\r\n * @return Promise<RpcShutdownResult> the promise object of result.\r\n */\r\n public moduleShutdown(name: string, subName: string, primary: boolean, force: boolean): Promise<RpcShutdownResult> {\r\n const rpc = this.rpcManager.reconnectRpcOutbound(name, subName, primary);\r\n return rpc.shutdown({ force: force });\r\n }\r\n\r\n /**\r\n * Remove the module from the rpc channel.\r\n *\r\n * @param name the module name.\r\n * @param subName the sub name of rpc channel.\r\n */\r\n public moduleRemove(name: string, subName: string): void {\r\n this.rpcManager.removeRpcOutbound(name, subName);\r\n }\r\n\r\n /**\r\n * Get module version string.\r\n *\r\n * @param name the name of module.\r\n * @param subName the sub name of rpc channel.\r\n * @return string the RPC version of module.\r\n */\r\n public moduleVersion(name: string, subName: string): string {\r\n const rpc = <RpcOutbound>this.rpcManager.rpcChannel.getRpc(name, subName, RpcType.Outbound);\r\n return rpc && rpc.version;\r\n }\r\n\r\n /***************************************************************\r\n * Section for Module usage.\r\n ***************************************************************/\r\n\r\n /**\r\n * Register outbound handler. It accepts delay register in case of loading/initialization took a time for module.\r\n *\r\n * @param command the name of RPC Shell command.\r\n * @param handler the handler to handle Shell request.\r\n */\r\n public register(command: string, handler: (data: any) => Promise<any>): void;\r\n\r\n /**\r\n * Register outbound handler. It accepts delay register in case of loading/initialization took a time for module.\r\n *\r\n * @param command the enum ID of RPC Shell command.\r\n * @param handler the handler to handle Shell request.\r\n */\r\n // tslint:disable-next-line:unified-signatures\r\n public register(command: RpcOutboundCommands, handler: (data: any) => Promise<any>): void;\r\n public register(command: RpcOutboundCommands | string, handler: (data: any) => Promise<any>): void {\r\n if (typeof command === 'string') {\r\n const commandName: string = command;\r\n this.rpcManager.rpcInbound.register(commandName, handler);\r\n return;\r\n }\r\n\r\n const deferredData = <DeferredData<any, any>>this.deferredCollection[command];\r\n if (deferredData) {\r\n delete this.deferredCollection[command];\r\n handler(deferredData.data).then(deferredData.deferred.resolve, deferredData.deferred.reject);\r\n return;\r\n }\r\n\r\n if (command === RpcOutboundCommands.Init) {\r\n const modifiedHandler = (data: RpcInitDataInternal) => {\r\n // node context is used before passing request to handler.\r\n this.changeActiveState(true);\r\n const self = MsftSme.self();\r\n self.Init.entryPointType = data.entryPointType;\r\n self.Init.entryPointName = data.entryPointName;\r\n self.Init.sessionId = data.sessionId;\r\n self.Init.sessionExpiration = data.sessionExpiration;\r\n self.Init.performanceProfile = data.performanceProfile;\r\n self.Init.shellVersion = data.shellVersion;\r\n self.Environment.modules = data.modules;\r\n self.Init.connectivityLevel = data.connectivityLevel;\r\n self.Resources.lib = data.lib;\r\n self.Resources.moduleAssets = data.moduleAssets;\r\n\r\n if (!MsftSme.isNullOrUndefined(self.Resources.accessibilityMode)\r\n && !MsftSme.isNullOrUndefined(data.accessibilityMode)\r\n && CoreEnvironment.accessibilityManager) {\r\n self.Resources.accessibilityMode = data.accessibilityMode;\r\n CoreEnvironment.accessibilityManager.changeAccessibilityMode(self.Resources.accessibilityMode);\r\n }\r\n\r\n // ensure that global environment settings persist across origins\r\n if (!MsftSme.isNullOrUndefined(data.consoleDebug) && MsftSme.consoleDebug() !== data.consoleDebug) {\r\n MsftSme.consoleDebug(data.consoleDebug);\r\n }\r\n\r\n if (!MsftSme.isNullOrUndefined(data.sideLoad)) {\r\n const sideLoadKeys = Object.keys(MsftSme.sideLoad() || {});\r\n const dataSideLoadKeys = Object.keys(data.sideLoad || {});\r\n\r\n if (sideLoadKeys.length !== dataSideLoadKeys.length || sideLoadKeys.some(key => !!data.sideLoad[key])) {\r\n MsftSme.sideLoadReset();\r\n dataSideLoadKeys.forEach(k => MsftSme.sideLoad(k));\r\n }\r\n }\r\n\r\n if (!MsftSme.isNullOrUndefined(data.experiments)) {\r\n const experiments = MsftSme.experiments();\r\n if (experiments.length !== data.experiments.length || experiments.some((v, i) => v !== data.experiments[i])) {\r\n MsftSme.experiments(data.experiments);\r\n }\r\n }\r\n\r\n if (CoreEnvironment.assetManager && data.theme && data.assets) {\r\n CoreEnvironment.assetManager.loadAssets(data.theme, data.assets);\r\n }\r\n\r\n for (const item of data.modules) {\r\n // NOTES: the next 'if' block code can be removed only if all extensions adapted newer shell. (after 1.1114.0)\r\n if (!self.Init.shellVersion && item.name === 'msft.sme.shell-extensions') {\r\n // look for shell version if missing from older MSI/ShellUI.\r\n self.Init.shellVersion = item.version;\r\n }\r\n\r\n if (item.name === self.Init.moduleName) {\r\n self.Environment.version = item.version || self.Environment.version;\r\n }\r\n }\r\n\r\n const localeLoader = CoreEnvironment.moduleLoadLocale({ id: data.localeRegional || data.locale, neutral: data.locale });\r\n const passingData = <RpcInitData>{\r\n locale: data.locale,\r\n localeRegional: data.localeRegional,\r\n sessionId: data.sessionId\r\n };\r\n\r\n // update metaTags so sessionId is properly updated in telemetry\r\n SmeWebTelemetry.updateFromRpcInit({ 'wac-session-id': data.sessionId, 'wac-extension-version': self.Environment.version });\r\n\r\n return localeLoader\r\n .then(() => this.seekShell(RpcSeekMode.Create))\r\n .then(() => handler(passingData))\r\n .then(() => ({ version: rpcVersion }));\r\n };\r\n this.rpcManager.rpcInbound.register(RpcOutboundCommands[command], modifiedHandler);\r\n } else {\r\n this.rpcManager.rpcInbound.register(RpcOutboundCommands[command], handler);\r\n }\r\n }\r\n\r\n /**\r\n * Module report a failure.\r\n */\r\n public failed(data: any): Promise<void> {\r\n const rpc = this.rpcManager.rpcInbound;\r\n return rpc.failed(data);\r\n }\r\n\r\n /**\r\n * Seek shell frame.\r\n *\r\n * @param Promise<any> the promise object.\r\n */\r\n public seekShell(mode: RpcSeekMode): Promise<RpcSeekResult> {\r\n return this.rpcManager.seekShell(mode);\r\n }\r\n\r\n /**\r\n * Validate existing outbound connection and remove if it doesn't live anymore.\r\n *\r\n * @return number the count of removed outbound.\r\n */\r\n public validate(): number {\r\n let count = 0;\r\n const collection = this.rpcManager.getCurrentRpcOutbound();\r\n collection.forEach((rpc, index, array) => {\r\n if (!this.rpcManager.rpcChannel.validate(rpc)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n /**\r\n * Change the active status of rpc.\r\n */\r\n public changeActiveState(state: boolean): void {\r\n this.stateActiveInternal = state;\r\n this.stateChangedInternal.next(state);\r\n }\r\n\r\n /**\r\n * Create auto-failed timer promise.\r\n *\r\n * @param command the outbound command type.\r\n * @param timeoutMs the timeout milliseconds.\r\n * @param data the data context.\r\n * @return Promise<any> the promise.\r\n */\r\n private createTimerPromise<TData, TResult>(command: RpcOutboundCommands, timeoutMs: number, data: TData): Promise<TResult> {\r\n const deferred = NativeQ.defer<TResult>();\r\n this.deferredCollection[command] = <DeferredData<TData, TResult>>{ deferred: deferred, data: data };\r\n setTimeout(\r\n () => {\r\n const deferredData: DeferredData<TData, TResult> = this.deferredCollection[command];\r\n if (deferredData) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcTimeout.message;\r\n deferredData.deferred.reject(message);\r\n delete this.deferredCollection[command];\r\n }\r\n },\r\n timeoutMs);\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Create promise that does not timeout.\r\n *\r\n * @param command the outbound type.\r\n * @param data the data context.\r\n * @return Promise<any> the promise.\r\n */\r\n private createPromise<TData, TResult>(command: RpcOutboundCommands, data: TData): Promise<any> {\r\n const deferred = NativeQ.defer<TResult>();\r\n this.deferredCollection[command] = <DeferredData<TData, TResult>>{ deferred: deferred, data: data };\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Process data pushing into next call of subject with deferred data type.\r\n *\r\n * @param command the inbound command type.\r\n * @param data the rpc data came from a module/iframe.\r\n * @return Promise the promise which receiver must settle within fixed waiting time (10 seconds)\r\n */\r\n private processNextForSubject<TData, TResult>(command: RpcInboundCommands, data: TData): Promise<TResult> {\r\n const subject = this.rpcSubjects[RpcInboundCommands[command]];\r\n if (subject.closed || subject.hasError) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.RpcSubjectClosed.message;\r\n throw new Error(message.format(RpcInboundCommands[command]));\r\n }\r\n\r\n const deferredData = <DeferredData<TData, TResult>>{\r\n data: data,\r\n deferred: NativeQ.defer<TResult>()\r\n };\r\n subject.next(deferredData);\r\n return deferredData.deferred.promise;\r\n }\r\n}\r\n"]}
@@ -18,39 +18,45 @@ export declare class CredSSPManager {
18
18
  * New Enable CredSSP on the passed in server.
19
19
  *
20
20
  * @param serverName This server on which CredSSP should be enabled
21
+ * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored
21
22
  */
22
- wsmanEnableManagedServer(serverName: string): Observable<boolean>;
23
+ wsmanEnableManagedServer(serverName: string, verbose?: boolean): Observable<boolean>;
23
24
  /**
24
25
  * New Disable CredSSP for the passed in server.
25
26
  *
26
27
  * @param serverName This server on which CredSSP should be disabled
28
+ * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored
27
29
  */
28
- wsmanDisableManagedServer(serverName: string): Observable<boolean>;
30
+ wsmanDisableManagedServer(serverName: string, verbose?: boolean): Observable<boolean>;
29
31
  /**
30
32
  * New Enable CredSSP client role for the gateway and delegate to the list of servers.
31
33
  *
32
34
  * @param serverNames This list of servers where CredSSP should be enabled.
35
+ * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored
33
36
  */
34
- wsmanEnableClientRole(serverNames: string[]): Observable<boolean>;
37
+ wsmanEnableClientRole(serverNames: string[], verbose?: boolean): Observable<boolean>;
35
38
  /**
36
39
  * New Disable CredSSP client role for the gateway and remove all delegated servers.
37
40
  *
38
41
  * @param serverNames This list of servers where CredSSP should be disabled.
42
+ * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored
39
43
  */
40
- wsmanDisableClientRole(serverNames: string[]): Observable<boolean>;
44
+ wsmanDisableClientRole(serverNames: string[], verbose?: boolean): Observable<boolean>;
41
45
  /**
42
46
  * New Enable the server as a CredSSP server, and enable the gateway as a CredSSP client of the server.
43
47
  *
44
48
  * @param serverName The sever where CredSSP delegation should be enabled.
49
+ * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored
45
50
  */
46
- wsmanEnableDelegation(serverName: string): Observable<boolean>;
51
+ wsmanEnableDelegation(serverName: string, verbose?: boolean): Observable<boolean>;
47
52
  /**
48
53
  * Test WSMan CredSSP connection from gateway to server(s)
49
54
  * @param serverNames the servers to test connection to from gateway
50
55
  * @param credentials explicit credentials(username and password) to be used to WSMan CredSSP test
56
+ * @param verbose (Optional) Specify whether a solution (if any) should be returned if CredSSP errored
51
57
  * @returns true if we can safely connect to all server without isssues otherwise returns false
52
58
  */
53
- testCredSSP(serverNames: string[], credentials: Credentials): Observable<boolean>;
59
+ testCredSSP(serverNames: string[], credentials: Credentials, verbose?: boolean): Observable<boolean>;
54
60
  /**
55
61
  * @deprecated
56
62
  * Notification message wouldn't be displayed from this call. Display the notification by own code,
@@ -126,6 +132,7 @@ export declare class CredSSPManager {
126
132
  /**
127
133
  * The RPC request to the CredSSPManagerShellService.
128
134
  * @param request The requested CredSSP manager operation
135
+ * @param verbose Specify whether a solution (if any) should be returned if CredSSP errored
129
136
  */
130
137
  private sendRequest;
131
138
  /**