@microsoft/windows-admin-center-sdk 4.167.0 → 4.232.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 (499) hide show
  1. package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
  2. package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
  3. package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
  4. package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
  5. package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
  6. package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
  7. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
  8. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
  9. package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
  10. package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
  11. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  12. package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
  13. package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
  14. package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
  15. package/angular/esm2020/src/data/index.mjs +2 -1
  16. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +539 -167
  17. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  18. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +521 -167
  19. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  20. package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
  21. package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
  22. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
  23. package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
  24. package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
  25. package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
  26. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
  27. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
  28. package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
  29. package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
  30. package/angular/src/data/index.d.ts +1 -0
  31. package/core/async/cancellation.js +312 -0
  32. package/core/async/index.js +312 -0
  33. package/core/async/progress.js +312 -0
  34. package/core/azure/azure-constants.js +312 -0
  35. package/core/azure/azure-logging.js +312 -0
  36. package/core/azure/azure-manager.js +312 -0
  37. package/core/azure/models/aadAppConfig-data.js +312 -0
  38. package/core/azure/models/azureArcStatusEnum.js +312 -0
  39. package/core/azure/models/azureTokenResult-data.js +312 -0
  40. package/core/azure/resources/deployment-operation-request-body.js +312 -0
  41. package/core/azure/resources/deployment-operation-response.js +312 -0
  42. package/core/azure/resources/location-data.js +315 -0
  43. package/core/azure/resources/resource-group-data.js +312 -0
  44. package/core/azure/resources/subscription-data.js +312 -0
  45. package/core/base/data-store/browser-storage-data-store.js +315 -0
  46. package/core/base/data-store/cached-data-store.js +312 -0
  47. package/core/base/data-store/data-store.js +312 -0
  48. package/core/base/data-store/local-data-store.js +312 -0
  49. package/core/base/data-store/memory-data-store.js +312 -0
  50. package/core/base/data-store/session-data-store.js +312 -0
  51. package/core/base/date/date-like.js +312 -0
  52. package/core/base/date/date-range.js +312 -0
  53. package/core/base/date/date-time.js +312 -0
  54. package/core/base/date/date-type.js +312 -0
  55. package/core/base/date/time-unit.js +312 -0
  56. package/core/base/decorators/base.js +312 -0
  57. package/core/base/decorators/debounce.decorators.js +312 -0
  58. package/core/base/decorators/delay.decorator.js +315 -0
  59. package/core/base/decorators/yield.decorator.js +312 -0
  60. package/core/base/environment.js +312 -0
  61. package/core/base/json.js +312 -0
  62. package/core/base/msft-sme.mock.js +316 -0
  63. package/core/base/polyfills/array.js +315 -0
  64. package/core/base/polyfills/string.js +312 -0
  65. package/core/base/rxjs-lifetime-manager.js +312 -0
  66. package/core/base/utilities.js +312 -0
  67. package/core/base/versioned-object.js +312 -0
  68. package/core/data/accessibility-manager.js +312 -0
  69. package/core/data/active-directory/active-directory.js +312 -0
  70. package/core/data/active-directory/models/account-info.js +312 -0
  71. package/core/data/active-directory/models/active-directory-search-options.js +312 -0
  72. package/core/data/active-directory/models/search-type.js +312 -0
  73. package/core/data/animation.js +312 -0
  74. package/core/data/app-context.js +312 -0
  75. package/core/data/asset-manager.js +315 -0
  76. package/core/data/base64-array-buffer.js +312 -0
  77. package/core/data/batch-connection.js +312 -0
  78. package/core/data/cim-connection.js +312 -0
  79. package/core/data/cim-stream.js +312 -0
  80. package/core/data/cim.js +312 -0
  81. package/core/data/column-picker.js +312 -0
  82. package/core/data/cookie.js +312 -0
  83. package/core/data/core-environment.js +315 -0
  84. package/core/data/crypto.js +312 -0
  85. package/core/data/deployment-share.js +312 -0
  86. package/core/data/disposable.js +312 -0
  87. package/core/data/electron.js +315 -0
  88. package/core/data/error-extended.js +312 -0
  89. package/core/data/extension-broker/dialog-listener.js +312 -0
  90. package/core/data/extension-broker/extension-broker.js +312 -0
  91. package/core/data/extension-broker/extension-listener.js +312 -0
  92. package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
  93. package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
  94. package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
  95. package/core/data/extension-broker/model/extension-entries.js +315 -0
  96. package/core/data/extension-broker/model/extension-instance.js +315 -0
  97. package/core/data/extension-broker/model/extension-rect.js +312 -0
  98. package/core/data/extension-broker/model/extension-search-options.js +312 -0
  99. package/core/data/extension-broker/service-listener.js +312 -0
  100. package/core/data/extension-broker/worker-listener.js +312 -0
  101. package/core/data/extension-broker/worker-set.js +312 -0
  102. package/core/data/file-transfer.js +312 -0
  103. package/core/data/gateway-connection.js +312 -0
  104. package/core/data/gateway-status.js +312 -0
  105. package/core/data/gateway-url-builder.js +312 -0
  106. package/core/data/gateway-url-translator.js +316 -0
  107. package/core/data/gateway-urls.js +312 -0
  108. package/core/data/globalization.js +315 -0
  109. package/core/data/http-constants.js +315 -0
  110. package/core/data/http.js +312 -0
  111. package/core/data/jobs/jobs-manager.js +312 -0
  112. package/core/data/jobs/models/job-credentials.js +312 -0
  113. package/core/data/jobs/models/job-node.js +312 -0
  114. package/core/data/jobs/models/job-paginated-response.js +315 -0
  115. package/core/data/jobs/models/job-pagination-options.js +315 -0
  116. package/core/data/jobs/models/job.js +312 -0
  117. package/core/data/jobs/models/node-job.js +312 -0
  118. package/core/data/jobs/models/powershell-job.js +312 -0
  119. package/core/data/language.js +315 -0
  120. package/core/data/lifetime-data.js +312 -0
  121. package/core/data/localization-manager.js +312 -0
  122. package/core/data/native-q.js +312 -0
  123. package/core/data/net.d.ts.map +1 -1
  124. package/core/data/net.js +313 -1
  125. package/core/data/net.js.map +1 -1
  126. package/core/data/node-connection.d.ts.map +1 -1
  127. package/core/data/node-connection.js +312 -0
  128. package/core/data/node-connection.js.map +1 -1
  129. package/core/data/node-extension-install.js +312 -0
  130. package/core/data/powershell-alternate.js +312 -0
  131. package/core/data/powershell-batch.js +312 -0
  132. package/core/data/powershell-connection.js +312 -0
  133. package/core/data/powershell-crypto.js +312 -0
  134. package/core/data/powershell-stream.js +312 -0
  135. package/core/data/powershell.js +312 -0
  136. package/core/data/query-cache.js +312 -0
  137. package/core/data/resource-cache.js +312 -0
  138. package/core/data/schedule-reboot.js +312 -0
  139. package/core/data/settings-manager.js +312 -0
  140. package/core/data/settings-manger.mock.js +312 -0
  141. package/core/data/sme-extension.js +312 -0
  142. package/core/data/ssh-stream.js +312 -0
  143. package/core/data/units.js +312 -0
  144. package/core/data/uri-builder.js +315 -0
  145. package/core/data/wdac-operations.js +312 -0
  146. package/core/data/websocket-stream.js +312 -0
  147. package/core/diagnostics/error-monitor.js +312 -0
  148. package/core/diagnostics/log-level.js +312 -0
  149. package/core/diagnostics/log-record.js +312 -0
  150. package/core/diagnostics/logging-constants.js +312 -0
  151. package/core/diagnostics/logging.js +312 -0
  152. package/core/diagnostics/logging.mock.js +312 -0
  153. package/core/diagnostics/sme-web-telemetry-models.js +312 -0
  154. package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
  155. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  156. package/core/diagnostics/sme-web-telemetry.js +336 -15
  157. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  158. package/core/diagnostics/telemetry-control-type.js +312 -0
  159. package/core/diagnostics/telemetry-options.js +312 -0
  160. package/core/diagnostics/telemetry-record.js +312 -0
  161. package/core/dom/dom.js +312 -0
  162. package/core/frame/frame-connection.js +312 -0
  163. package/core/frame/frame-connection.mock.js +312 -0
  164. package/core/frame/shell-navigation-connection.js +312 -0
  165. package/core/generated/powershell-scripts.js +312 -0
  166. package/core/generated/strings.js +312 -0
  167. package/core/host/host-core-manager.js +312 -0
  168. package/core/host/host-core-message-type.js +312 -0
  169. package/core/host/host-core-messages.js +312 -0
  170. package/core/index.d.ts +0 -1
  171. package/core/index.d.ts.map +1 -1
  172. package/core/index.js +312 -1
  173. package/core/index.js.map +1 -1
  174. package/core/manifest/environment-modules.js +312 -0
  175. package/core/manifest/manifest-loader.js +312 -0
  176. package/core/notification/client-notification-instance.js +312 -0
  177. package/core/notification/client-notification.js +312 -0
  178. package/core/notification/notification-connection.js +312 -0
  179. package/core/notification/notification-link-type.js +312 -0
  180. package/core/notification/notification-manager.js +312 -0
  181. package/core/notification/notification-message.js +312 -0
  182. package/core/notification/notification-state.js +312 -0
  183. package/core/notification/notification.js +312 -0
  184. package/core/notification/powershell-notification.js +312 -0
  185. package/core/notification/socket-signalr.js +312 -0
  186. package/core/notification/work-item-connection.js +312 -0
  187. package/core/notification/work-item-manager.js +312 -0
  188. package/core/notification/work-item-request.js +312 -0
  189. package/core/performance/performance-profile-data-type.js +312 -0
  190. package/core/performance/performance-profile-data.js +312 -0
  191. package/core/performance/performance-profile-database.js +312 -0
  192. package/core/performance/performance-profile-record.js +312 -0
  193. package/core/performance/performance-profile.d.ts.map +1 -1
  194. package/core/performance/performance-profile.js +321 -9
  195. package/core/performance/performance-profile.js.map +1 -1
  196. package/core/performance/performance-tracker.js +312 -0
  197. package/core/polyfills.js +312 -0
  198. package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
  199. package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
  200. package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
  201. package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
  202. package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
  203. package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
  204. package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
  205. package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
  206. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +216 -0
  207. package/core/rpc/alive/rpc-alive-client.js +312 -0
  208. package/core/rpc/alive/rpc-alive-handler.js +312 -0
  209. package/core/rpc/alive/rpc-alive-model.js +315 -0
  210. package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
  211. package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
  212. package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
  213. package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
  214. package/core/rpc/azure/rpc-azure-model.js +312 -0
  215. package/core/rpc/azure/rpc-azure-request-client.js +312 -0
  216. package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
  217. package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
  218. package/core/rpc/azure/rpc-azure-response-client.js +312 -0
  219. package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
  220. package/core/rpc/credssp/rpc-credssp-model.js +312 -0
  221. package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
  222. package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
  223. package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
  224. package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
  225. package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
  226. package/core/rpc/dialog/rpc-dialog-client.js +312 -0
  227. package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
  228. package/core/rpc/dialog/rpc-dialog-model.js +312 -0
  229. package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
  230. package/core/rpc/electron/rpc-electron-model.js +312 -0
  231. package/core/rpc/electron/rpc-electron-request-client.js +312 -0
  232. package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
  233. package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
  234. package/core/rpc/electron/rpc-electron-response-client.js +312 -0
  235. package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
  236. package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
  237. package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
  238. package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
  239. package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
  240. package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
  241. package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
  242. package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
  243. package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
  244. package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
  245. package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
  246. package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
  247. package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
  248. package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
  249. package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
  250. package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
  251. package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
  252. package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
  253. package/core/rpc/forward/rpc-forward-down-client.js +315 -0
  254. package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
  255. package/core/rpc/forward/rpc-forward-model.js +312 -0
  256. package/core/rpc/forward/rpc-forward-up-client.js +312 -0
  257. package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
  258. package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
  259. package/core/rpc/log/rpc-log-client.js +312 -0
  260. package/core/rpc/log/rpc-log-handler.js +312 -0
  261. package/core/rpc/log/rpc-log-model.js +312 -0
  262. package/core/rpc/log/rpc-log-subject-server.js +312 -0
  263. package/core/rpc/notification/rpc-notification-client.js +312 -0
  264. package/core/rpc/notification/rpc-notification-handler.js +312 -0
  265. package/core/rpc/notification/rpc-notification-model.js +312 -0
  266. package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
  267. package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
  268. package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
  269. package/core/rpc/overlay/rpc-overlay-model.js +312 -0
  270. package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
  271. package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
  272. package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
  273. package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
  274. package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
  275. package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
  276. package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
  277. package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
  278. package/core/rpc/report/rpc-report-client.js +312 -0
  279. package/core/rpc/report/rpc-report-handler.js +312 -0
  280. package/core/rpc/report/rpc-report-model.js +312 -0
  281. package/core/rpc/report/rpc-report-subject-server.js +315 -0
  282. package/core/rpc/rpc-base.js +312 -0
  283. package/core/rpc/rpc-channel.js +312 -0
  284. package/core/rpc/rpc-forwarder.js +312 -0
  285. package/core/rpc/rpc-inbound-client.js +312 -0
  286. package/core/rpc/rpc-inbound.js +312 -0
  287. package/core/rpc/rpc-manager.js +312 -0
  288. package/core/rpc/rpc-module-subject-server.js +315 -0
  289. package/core/rpc/rpc-observable-client.js +312 -0
  290. package/core/rpc/rpc-observable-request.js +312 -0
  291. package/core/rpc/rpc-observable-result.js +312 -0
  292. package/core/rpc/rpc-observable-server.js +312 -0
  293. package/core/rpc/rpc-outbound-client.js +312 -0
  294. package/core/rpc/rpc-outbound.js +312 -0
  295. package/core/rpc/rpc-subject-server.js +312 -0
  296. package/core/rpc/rpc.js +312 -0
  297. package/core/rpc/seek/rpc-seek-client.js +312 -0
  298. package/core/rpc/seek/rpc-seek-handler.js +315 -0
  299. package/core/rpc/seek/rpc-seek-model.js +312 -0
  300. package/core/rpc/settings/rpc-settings-client.js +315 -0
  301. package/core/rpc/settings/rpc-settings-handler.js +312 -0
  302. package/core/rpc/settings/rpc-settings-model.js +312 -0
  303. package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
  304. package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
  305. package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
  306. package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
  307. package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
  308. package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
  309. package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
  310. package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
  311. package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
  312. package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
  313. package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
  314. package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
  315. package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
  316. package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
  317. package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
  318. package/core/rpc/update-data/rpc-update-data-client.js +312 -0
  319. package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
  320. package/core/rpc/update-data/rpc-update-data-model.js +312 -0
  321. package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
  322. package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
  323. package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
  324. package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
  325. package/core/rpc/work-item/rpc-work-item-client.js +312 -0
  326. package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
  327. package/core/rpc/work-item/rpc-work-item-model.js +312 -0
  328. package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
  329. package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
  330. package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
  331. package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
  332. package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
  333. package/core/security/active-connection.js +312 -0
  334. package/core/security/authorization-manager.js +312 -0
  335. package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
  336. package/core/security/connection-manager-settings/connection-settings.js +312 -0
  337. package/core/security/connection-manager.js +312 -0
  338. package/core/security/connection-stream.js +312 -0
  339. package/core/security/connection.js +312 -0
  340. package/core/security/credssp-manager.js +312 -0
  341. package/core/security/sign-on-manager.js +312 -0
  342. package/core/security/tag-manager.js +312 -0
  343. package/core/security/tool-condition-validator.js +312 -0
  344. package/core/security/tool-connection-query.js +312 -0
  345. package/core/security/user-principal.js +312 -0
  346. package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
  347. package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
  348. package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
  349. package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
  350. package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
  351. package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
  352. package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
  353. package/core/shared/inventory-query-caches.js +312 -0
  354. package/core/shared/server-inventory/server-inventory-cache.js +312 -0
  355. package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
  356. package/core/shared/server-inventory/server-inventory-detail.js +315 -0
  357. package/core/shared/server-inventory/server-inventory.js +312 -0
  358. package/core/shared/shared-cache.js +312 -0
  359. package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
  360. package/core/shared/tool-inventory/tool-inventory.js +312 -0
  361. package/core/special.js +315 -0
  362. package/core/test-utilities/accessibility-tester.js +312 -0
  363. package/core/test-utilities/console.mock.js +312 -0
  364. package/core/test-utilities/jasmine-axe-matcher.js +312 -0
  365. package/core/test-utilities/wait-async.js +312 -0
  366. package/core/test.js +312 -0
  367. package/core/testing.js +312 -0
  368. package/core/workflow/persistent-local-storage.js +312 -0
  369. package/core/workflow/persistent-work-item-apply-state.js +316 -0
  370. package/core/workflow/persistent-work-item-state.js +312 -0
  371. package/core/workflow/persistent-work-item.js +315 -0
  372. package/core/workflow/persistent-workflow-builder.js +312 -0
  373. package/core/workflow/persistent-workflow-context.js +312 -0
  374. package/core/workflow/persistent-workflow-runner.js +312 -0
  375. package/core/workflow/persistent-workflow-snapshot.js +312 -0
  376. package/core/workflow/persistent-workflow-store.js +312 -0
  377. package/core/workflow/persistent-workflow.js +312 -0
  378. package/package.json +4 -4
  379. package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
  380. package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
  381. package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
  382. package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
  383. package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
  384. package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
  385. package/tools/build/webpack/index-html.transform.js +312 -0
  386. package/tools/build/webpack/shell.index-html.transform.js +312 -0
  387. package/tools/build/webpack/shell.webpack.config.js +312 -0
  388. package/tools/build/webpack/webpack.config.js +312 -0
  389. package/tools/code-formatter/.eslintrc.base.json +2 -1
  390. package/tools/code-formatter/lint.js +312 -0
  391. package/tools/code-formatter/utilities.js +316 -0
  392. package/tools/gulp-doc-generator/index.js +312 -0
  393. package/tools/gulp-manifest-resource/index.js +312 -0
  394. package/tools/gulp-manifest-validator/index.js +312 -0
  395. package/tools/gulp-merge-json-in-folders/index.js +312 -0
  396. package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
  397. package/tools/gulp-ps-cim/index.js +315 -0
  398. package/tools/gulp-ps-code/index.d.ts.map +1 -1
  399. package/tools/gulp-ps-code/index.js +323 -2
  400. package/tools/gulp-ps-code/index.js.map +1 -1
  401. package/tools/gulp-ps-code/ps-code-convert.js +312 -0
  402. package/tools/gulp-ps-manifest/index.js +312 -0
  403. package/tools/gulp-ps-module/index.d.ts.map +1 -1
  404. package/tools/gulp-ps-module/index.js +327 -3
  405. package/tools/gulp-ps-module/index.js.map +1 -1
  406. package/tools/gulp-ps-resjson/index.js +315 -0
  407. package/tools/gulp-resjson/index.js +315 -0
  408. package/tools/gulp-resjson/resjson-convert.js +312 -0
  409. package/tools/gulp-schema-form/index.js +312 -0
  410. package/tools/gulp-svg-code/index.js +312 -0
  411. package/tools/gulp-svg-code/svg-code-convert.js +312 -0
  412. package/tools/gulp-update-notes-resource/index.js +312 -0
  413. package/tools/module-template/build/increment-package-version.ps1 +216 -0
  414. package/tools/module-template/build/push-incremented-version.ps1 +216 -1
  415. package/tools/module-template/build/update-powershell-code.ps1 +216 -0
  416. package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
  417. package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
  418. package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
  419. package/tools/pack-nuget/index.d.ts.map +1 -1
  420. package/tools/pack-nuget/index.js +321 -3
  421. package/tools/pack-nuget/index.js.map +1 -1
  422. package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
  423. package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
  424. package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
  425. package/tools/scripts/package-information/README.md +3 -0
  426. package/tools/scripts/package-information/ms-logo.png +0 -0
  427. package/tools/test-runner/index.js +312 -0
  428. package/tools/utilities/index.js +312 -0
  429. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
  430. package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
  431. package/tools/wac-cli/src/angular15/configs/config.js +312 -0
  432. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +312 -0
  433. package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
  434. package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
  435. package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
  436. package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
  437. package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
  438. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
  439. package/tools/wac-cli/src/angular15/main.js +312 -0
  440. package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
  441. package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
  442. package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
  443. package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
  444. package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
  445. package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
  446. package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
  447. package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
  448. package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
  449. package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
  450. package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
  451. package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
  452. package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
  453. package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
  454. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +312 -0
  455. package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
  456. package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
  457. package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
  458. package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
  459. package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
  460. package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
  461. package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
  462. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
  463. package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
  464. package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
  465. package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
  466. package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
  467. package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
  468. package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
  469. package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
  470. package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
  471. package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
  472. package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
  473. package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
  474. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
  475. package/tools/wac-cli/src/common.js +312 -0
  476. package/tools/wac-cli/src/create/main.js +312 -0
  477. package/tools/wac-cli/src/eslint/main.js +312 -0
  478. package/tools/wac-cli/src/index.js +312 -0
  479. package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
  480. package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
  481. package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
  482. package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
  483. package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
  484. package/tools/wac-cli/src/upgrade/get-files.js +312 -0
  485. package/tools/wac-cli/src/upgrade/main.js +312 -0
  486. package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
  487. package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
  488. package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
  489. package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
  490. package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
  491. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
  492. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
  493. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
  494. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
  495. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
  496. package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
  497. package/core/data/extension-broker/snap-in-listener.js +0 -73
  498. package/core/data/extension-broker/snap-in-listener.js.map +0 -1
  499. package/microsoft-windows-admin-center-sdk-4.167.0.tgz +0 -0
@@ -1,3 +1,315 @@
1
1
  export {};
2
2
 
3
3
  //# sourceMappingURL=performance-profile-record.js.map
4
+
5
+ // SIG // Begin signature block
6
+ // SIG // MIInwAYJKoZIhvcNAQcCoIInsTCCJ60CAQExDzANBglg
7
+ // SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
8
+ // SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
9
+ // SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
10
+ // SIG // QJWPV1boVrNVd03THqUONdM5g52LJ9lJrvJCQekwTQ+g
11
+ // SIG // gg12MIIF9DCCA9ygAwIBAgITMwAAA68wQA5Mo00FQQAA
12
+ // SIG // AAADrzANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
13
+ // SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
14
+ // SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
15
+ // SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
16
+ // SIG // aWduaW5nIFBDQSAyMDExMB4XDTIzMTExNjE5MDkwMFoX
17
+ // SIG // DTI0MTExNDE5MDkwMFowdDELMAkGA1UEBhMCVVMxEzAR
18
+ // SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
19
+ // SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
20
+ // SIG // bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
21
+ // SIG // MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
22
+ // SIG // zkvLNa2un9GBrYNDoRGkGv7d0PqtTBB4ViYakFbjuWpm
23
+ // SIG // F0KcvDAzzaCWJPhVgIXjz+S8cHEoHuWnp/n+UOljT3eh
24
+ // SIG // A8Rs6Lb1aTYub3tB/e0txewv2sQ3yscjYdtTBtFvEm9L
25
+ // SIG // 8Yv76K3Cxzi/Yvrdg+sr7w8y5RHn1Am0Ff8xggY1xpWC
26
+ // SIG // XFI+kQM18njQDcUqSlwBnexYfqHBhzz6YXA/S0EziYBu
27
+ // SIG // 2O2mM7R6gSyYkEOHgIGTVOGnOvvC5xBgC4KNcnQuQSRL
28
+ // SIG // iUI2CmzU8vefR6ykruyzt1rNMPI8OqWHQtSDKXU5JNqb
29
+ // SIG // k4GNjwzcwbSzOHrxuxWHq91l/vLdVDGDUwIDAQABo4IB
30
+ // SIG // czCCAW8wHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYB
31
+ // SIG // BQUHAwMwHQYDVR0OBBYEFEcccTTyBDxkjvJKs/m4AgEF
32
+ // SIG // hl7BMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVNaWNy
33
+ // SIG // b3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAx
34
+ // SIG // Mis1MDE4MjYwHwYDVR0jBBgwFoAUSG5k5VAF04KqFzc3
35
+ // SIG // IrVtqMp1ApUwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDov
36
+ // SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj
37
+ // SIG // Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNybDBhBggr
38
+ // SIG // BgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0dHA6Ly93
39
+ // SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
40
+ // SIG // Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNydDAMBgNV
41
+ // SIG // HRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQCEsRbf
42
+ // SIG // 80dn60xTweOWHZoWaQdpzSaDqIvqpYHE5ZzuEMJWDdcP
43
+ // SIG // 72MGw8v6BSaJQ+a+hTCXdERnIBDPKvU4ENjgu4EBJocH
44
+ // SIG // lSe8riiZUAR+z+z4OUYqoFd3EqJyfjjOJBR2z94Dy4ss
45
+ // SIG // 7LEkHUbj2NZiFqBoPYu2OGQvEk+1oaUsnNKZ7Nl7FHtV
46
+ // SIG // 7CI2lHBru83e4IPe3glIi0XVZJT5qV6Gx/QhAFmpEVBj
47
+ // SIG // SAmDdgII4UUwuI9yiX6jJFNOEek6MoeP06LMJtbqA3Bq
48
+ // SIG // +ZWmJ033F97uVpyaiS4bj3vFI/ZBgDnMqNDtZjcA2vi4
49
+ // SIG // RRMweggd9vsHyTLpn6+nXoLy03vMeebq0C3k44pgUIEu
50
+ // SIG // PQUlJIRTe6IrN3GcjaZ6zHGuQGWgu6SyO9r7qkrEpS2p
51
+ // SIG // RjnGZjx2RmCamdAWnDdu+DmfNEPAddYjaJJ7PTnd+PGz
52
+ // SIG // G+WeH4ocWgVnm5fJFhItjj70CJjgHqt57e1FiQcyWCwB
53
+ // SIG // hKX2rGgN2UICHBF3Q/rsKOspjMw2OlGphTn2KmFl5J7c
54
+ // SIG // Qxru54A9roClLnHGCiSUYos/iwFHI/dAVXEh0S0KKfTf
55
+ // SIG // M6AC6/9bCbsD61QLcRzRIElvgCgaiMWFjOBL99pemoEl
56
+ // SIG // AHsyzG6uX93fMfas09N9YzA0/rFAKAsNDOcFbQlEHKiD
57
+ // SIG // T7mI20tVoCcmSIhJATCCB3owggVioAMCAQICCmEOkNIA
58
+ // SIG // AAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT
59
+ // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
60
+ // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
61
+ // SIG // cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290
62
+ // SIG // IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTEx
63
+ // SIG // MDcwODIwNTkwOVoXDTI2MDcwODIxMDkwOVowfjELMAkG
64
+ // SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
65
+ // SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
66
+ // SIG // dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0
67
+ // SIG // IENvZGUgU2lnbmluZyBQQ0EgMjAxMTCCAiIwDQYJKoZI
68
+ // SIG // hvcNAQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6q
69
+ // SIG // ghBNNLrytlghn0IbKmvpWlCquAY4GgRJun/DDB7dN2vG
70
+ // SIG // EtgL8DjCmQawyDnVARQxQtOJDXlkh36UYCRsr55JnOlo
71
+ // SIG // XtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv
72
+ // SIG // 56sIUM+zRLdd2MQuA3WraPPLbfM6XKEW9Ea64DhkrG5k
73
+ // SIG // NXimoGMPLdNAk/jj3gcN1Vx5pUkp5w2+oBN3vpQ97/vj
74
+ // SIG // K1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+sYxd
75
+ // SIG // 6IlPhBryoS9Z5JA7La4zWMW3Pv4y07MDPbGyr5I4ftKd
76
+ // SIG // gCz1TlaRITUlwzluZH9TupwPrRkjhMv0ugOGjfdf8NBS
77
+ // SIG // v4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKuHCOnqWbs
78
+ // SIG // YR9q4ShJnV+I4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43Bd
79
+ // SIG // D1FGd7P4AOG8rAKCX9vAFbO9G9RVS+c5oQ/pI0m8GLhE
80
+ // SIG // fEXkwcNyeuBy5yTfv0aZxe/CHFfbg43sTUkwp6uO3+xb
81
+ // SIG // n6/83bBm4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7Iv
82
+ // SIG // hNdXnFy/dygo8e1twyiPLI9AN0/B4YVEicQJTMXUpUMv
83
+ // SIG // dJX3bvh4IFgsE11glZo+TzOE2rCIF96eTvSWsLxGoGyY
84
+ // SIG // 0uDWiIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEE
85
+ // SIG // AwIBADAdBgNVHQ4EFgQUSG5k5VAF04KqFzc3IrVtqMp1
86
+ // SIG // ApUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD
87
+ // SIG // VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
88
+ // SIG // BBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0f
89
+ // SIG // BFMwUTBPoE2gS4ZJaHR0cDovL2NybC5taWNyb3NvZnQu
90
+ // SIG // Y29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0
91
+ // SIG // MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRS
92
+ // SIG // MFAwTgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9z
93
+ // SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx
94
+ // SIG // MV8yMDExXzAzXzIyLmNydDCBnwYDVR0gBIGXMIGUMIGR
95
+ // SIG // BgkrBgEEAYI3LgMwgYMwPwYIKwYBBQUHAgEWM2h0dHA6
96
+ // SIG // Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvZG9jcy9w
97
+ // SIG // cmltYXJ5Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBM
98
+ // SIG // AGUAZwBhAGwAXwBwAG8AbABpAGMAeQBfAHMAdABhAHQA
99
+ // SIG // ZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEA
100
+ // SIG // Z/KGpZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVf
101
+ // SIG // Liw++MNy0W2D/r4/6ArKO79HqaPzadtjvyI1pZddZYSQ
102
+ // SIG // fYtGUFXYDJJ80hpLHPM8QotS0LD9a+M+By4pm+Y9G6XU
103
+ // SIG // tR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELuk
104
+ // SIG // qQUMm+1o+mgulaAqPyprWEljHwlpblqYluSD9MCP80Yr
105
+ // SIG // 3vw70L01724lruWvJ+3Q3fMOr5kol5hNDj0L8giJ1h/D
106
+ // SIG // Mhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgycSca
107
+ // SIG // f7H0J/jeLDogaZiyWYlobm+nt3TDQAUGpgEqKD6CPxNN
108
+ // SIG // ZgvAs0314Y9/HG8VfUWnduVAKmWjw11SYobDHWM2l4bf
109
+ // SIG // 2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbRBrF1HxS+
110
+ // SIG // YWG18NzGGwS+30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOX
111
+ // SIG // pQlLSBCZgB/QACnFsZulP0V3HjXG0qKin3p6IvpIlR+r
112
+ // SIG // +0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL/9azI2h15q/6
113
+ // SIG // /IvrC4DqaTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4
114
+ // SIG // ETIheu9BCrE/+6jMpF3BoYibV3FWTkhFwELJm3ZbCoBI
115
+ // SIG // a/15n8G9bW1qyVJzEw16UM0xghmiMIIZngIBATCBlTB+
116
+ // SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
117
+ // SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
118
+ // SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNy
119
+ // SIG // b3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAD
120
+ // SIG // rzBADkyjTQVBAAAAAAOvMA0GCWCGSAFlAwQCAQUAoIGu
121
+ // SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
122
+ // SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3
123
+ // SIG // DQEJBDEiBCD5/CWSgO20q5jE9cywOo35jXuKXsiKQFeX
124
+ // SIG // yAD/OS+b/TBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBp
125
+ // SIG // AGMAcgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNy
126
+ // SIG // b3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBAKeu4KT4
127
+ // SIG // NnsW9ScoICnjjxLnT8jFKAV4hIcEuKCYwCwrs0ZWvb7a
128
+ // SIG // SeCqQvyGs4fKeruFNVzv4lJR48ongLVmKdS6OwOGuhDN
129
+ // SIG // P2ydlkEk3yCKnYZQ1mxA9dJ4fD3r4r7O25RXTCoIL/gH
130
+ // SIG // OVUrROcKx7X5D8JwQJYDzSEblRDx8MaLoDPIFUEKx2m5
131
+ // SIG // R6WG1ra62SIH95BhdfAJzAUx1hACevhRFsFaA8b4LLsT
132
+ // SIG // /OhsXBOL45eGJj0N/9AL7e9iww9S/7/i1I9HJQX6fvC+
133
+ // SIG // bdxTO0XetTo2tsjwuCSh9rRSXn48GjllKn9bZuZp+aPb
134
+ // SIG // qfq8Mol2iUX20PJTm6zbMqe8nfGhghcsMIIXKAYKKwYB
135
+ // SIG // BAGCNwMDATGCFxgwghcUBgkqhkiG9w0BBwKgghcFMIIX
136
+ // SIG // AQIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcN
137
+ // SIG // AQkQAQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEw
138
+ // SIG // MTANBglghkgBZQMEAgEFAAQge27WkdJF6wkiHtTrkHAL
139
+ // SIG // x6acXyPAACO+dkTR+ew4R1QCBmZzCFJEBxgTMjAyNDA2
140
+ // SIG // MjcwNjI0NDYuNDM1WjAEgAIB9KCB2KSB1TCB0jELMAkG
141
+ // SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
142
+ // SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
143
+ // SIG // dCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0
144
+ // SIG // IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYD
145
+ // SIG // VQQLEx1UaGFsZXMgVFNTIEVTTjpGQzQxLTRCRDQtRDIy
146
+ // SIG // MDElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg
147
+ // SIG // U2VydmljZaCCEXswggcnMIIFD6ADAgECAhMzAAAB4pmZ
148
+ // SIG // lfHc4yDrAAEAAAHiMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
149
+ // SIG // BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
150
+ // SIG // DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
151
+ // SIG // ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29m
152
+ // SIG // dCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIzMTAxMjE5
153
+ // SIG // MDcyNVoXDTI1MDExMDE5MDcyNVowgdIxCzAJBgNVBAYT
154
+ // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
155
+ // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
156
+ // SIG // cG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
157
+ // SIG // YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMd
158
+ // SIG // VGhhbGVzIFRTUyBFU046RkM0MS00QkQ0LUQyMjAxJTAj
159
+ // SIG // BgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZp
160
+ // SIG // Y2UwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
161
+ // SIG // AQC1Y7WYVfpBZm/HCkKYNps4rA5USPe/Bm9mphr2wJgn
162
+ // SIG // dOCVRnk3v0BszPCm0KzA6Jewwu40tNyZHKz7FovVqVcL
163
+ // SIG // CHJEUPAJF9YnQRvR4cgrKQGr37r8+eZIZe26z0Mex/fV
164
+ // SIG // CW7BN8DJqZiWrD1qYBdOc2Zb6VkA1Cw3CGMpeZVyOB1W
165
+ // SIG // eTejEsVjvM8Fq+K/cZDJlF7OyAsQya+Wt/UknjwCUSMs
166
+ // SIG // 52iHNFs2ejBXE0cyyzcjwROCq1b9SxXfehTcQM8J3rUn
167
+ // SIG // j4PPBJkXs69k9x0xRJZ3iV8kGHemEO3giHO8pZVqGNNw
168
+ // SIG // hIPYIaK6falCnAVHxXEuFxJX9xkhEZ5cybCu7P2Rj1OH
169
+ // SIG // Wh09o1hqGIWtkAjppIIzpgRQqkBRcBZrD62Y+HkLM2Ma
170
+ // SIG // uHOB6j51LuIU+Gqqb1Gd6iDl23clONqTS/d3J9Kz005X
171
+ // SIG // jlLDkG4L5UXbYRQgXqcX2+p27Kd33GWjwX027V1WvJy0
172
+ // SIG // LjAgasn7Hm7qp28I/pR0H6iqYr6cneyglgAqI+/F1MGK
173
+ // SIG // stR8mJ0rU5nuE/byurtjvyk4X0TniR4koOOMphY/t+CH
174
+ // SIG // BRIT6IGirzTbE1ZuEG6qYQspJ68AcqqKwQix+m5ZUbST
175
+ // SIG // CcJruxkXU0LCMdhzCqqYRLaUptc97nwEnT64D4bECERZ
176
+ // SIG // B2RrooS9SY4+C7twmwJoWtJTqwIDAQABo4IBSTCCAUUw
177
+ // SIG // HQYDVR0OBBYEFESEDhHavu0HbJabSYgkTaV4CdoFMB8G
178
+ // SIG // A1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8G
179
+ // SIG // A1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9z
180
+ // SIG // b2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRp
181
+ // SIG // bWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggr
182
+ // SIG // BgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93
183
+ // SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
184
+ // SIG // cm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo
185
+ // SIG // MSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAww
186
+ // SIG // CgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
187
+ // SIG // SIb3DQEBCwUAA4ICAQDkVEQxq1UU257pX7INnE7Msoe2
188
+ // SIG // F74VVOzWTJCEwEGLBRD1YL0r4gspa+Wqd5Gu+mM9Lf+p
189
+ // SIG // cbnMyOsO7V6vJ+FsVFIHI+cAIZzaK4Zw/JY2Km3JN+34
190
+ // SIG // IGCt/sBMC4T9Txgubb1ytMWKJlNZ1PpVzsvWUZ0oSPx2
191
+ // SIG // XRa8NrK4LbG1qMPTjLgA0uZYO6JK12tnWgjhp8bmg9SD
192
+ // SIG // vuuRO6r9jtFtLBo+wFnTozXaXsT67KS9ihHDjHiVZpJP
193
+ // SIG // ztIGp4Rc8xwJ1o7TVp3lNdVkOgcb/DqTdX2PcM0KIsnI
194
+ // SIG // LzjiTPd6HeeRBnl8XxfG6Hy1ZVBN8yIpKEnnfvLOtTQz
195
+ // SIG // /sfUTMmtpsCv2LNcXbw5WUx53SCrLH5rt77v2vgRX9ri
196
+ // SIG // KMnFU7wUKb/3a0SQ+vHqONNZpAkRZJsv/gZkJUa8dq2q
197
+ // SIG // agLuZNDXr/olHQVCpl/4jmime+b7kIO4QogQOcSJuWSF
198
+ // SIG // w0pV+O8MBWq9/wYE8J7TKva2ukEQHkv6P7mFpJr6rxPA
199
+ // SIG // Kt/EJioE4gZ1kkv7lT3GhxMgK58hYeRvqnghpi+ODHxJ
200
+ // SIG // xRIcXN7Gj5l4XujIUoAiBiVGQwO99+p0A/H5+Muud+C3
201
+ // SIG // pfi7k+ReWxbdJi8Hfh+RsRszm2Zpv3N6RFrR79boO3Uv
202
+ // SIG // w363HdbJ9hOIJOFtS9Y3UQWyvccJDJsGPgh2XjErwTCC
203
+ // SIG // B3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUw
204
+ // SIG // DQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMw
205
+ // SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
206
+ // SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
207
+ // SIG // b24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp
208
+ // SIG // ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4
209
+ // SIG // MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMC
210
+ // SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
211
+ // SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
212
+ // SIG // b3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt
213
+ // SIG // U3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUA
214
+ // SIG // A4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC
215
+ // SIG // 0/3unAcH0qlsTnXIyjVX9gF/bErg4r25PhdgM/9cT8dm
216
+ // SIG // 95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNE
217
+ // SIG // t6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZT
218
+ // SIG // fDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6GnszrYBbfowQ
219
+ // SIG // HJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5
220
+ // SIG // LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVV
221
+ // SIG // mG1oO5pGve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKy
222
+ // SIG // zbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpG
223
+ // SIG // dc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2
224
+ // SIG // TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZ
225
+ // SIG // fD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1q
226
+ // SIG // GFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSL
227
+ // SIG // W6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLU
228
+ // SIG // HMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PAPBXb
229
+ // SIG // GjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQID
230
+ // SIG // AQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAj
231
+ // SIG // BgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxGNSnPEP8v
232
+ // SIG // BO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1Gely
233
+ // SIG // MFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYI
234
+ // SIG // KwYBBQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNv
235
+ // SIG // bS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNV
236
+ // SIG // HSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4K
237
+ // SIG // AFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
238
+ // SIG // BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2U
239
+ // SIG // kFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
240
+ // SIG // Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0
241
+ // SIG // cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYI
242
+ // SIG // KwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v
243
+ // SIG // d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jv
244
+ // SIG // b0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG9w0B
245
+ // SIG // AQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwU
246
+ // SIG // tj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTC
247
+ // SIG // j/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmCVgADsAW+
248
+ // SIG // iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhT
249
+ // SIG // dSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYS
250
+ // SIG // EhFdPSfgQJY4rPf5KYnDvBewVIVCs/wMnosZiefwC2qB
251
+ // SIG // woEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0
252
+ // SIG // DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxy
253
+ // SIG // bxCrdTDFNLB62FD+CljdQDzHVG2dY3RILLFORy3BFARx
254
+ // SIG // v2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+k
255
+ // SIG // KNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2
256
+ // SIG // tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4
257
+ // SIG // O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokL
258
+ // SIG // jzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTm
259
+ // SIG // dHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/Z
260
+ // SIG // cGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggLXMIIC
261
+ // SIG // QAIBATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMw
262
+ // SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
263
+ // SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
264
+ // SIG // b24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w
265
+ // SIG // ZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVz
266
+ // SIG // IFRTUyBFU046RkM0MS00QkQ0LUQyMjAxJTAjBgNVBAMT
267
+ // SIG // HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoB
268
+ // SIG // ATAHBgUrDgMCGgMVABabmWn6dG56SXSIX4gdXfKU6IZv
269
+ // SIG // oIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
270
+ // SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
271
+ // SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
272
+ // SIG // A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
273
+ // SIG // MTAwDQYJKoZIhvcNAQEFBQACBQDqJ2loMCIYDzIwMjQw
274
+ // SIG // NjI3MTIzMDMyWhgPMjAyNDA2MjgxMjMwMzJaMHcwPQYK
275
+ // SIG // KwYBBAGEWQoEATEvMC0wCgIFAOonaWgCAQAwCgIBAAIC
276
+ // SIG // Ao4CAf8wBwIBAAICEeAwCgIFAOoouugCAQAwNgYKKwYB
277
+ // SIG // BAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQAC
278
+ // SIG // AwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOB
279
+ // SIG // gQBQyeCEzACVqiOvZWAx7Wc8WHLpwEgKOi0Xe6Kd80RG
280
+ // SIG // 9jyjcEP9urmBfJ6azBn/zVcd7CBLrXZsFVz+i4bUP/TW
281
+ // SIG // pcmL0CdzuKWcWXQk/yrCGOK8JlyLJG2SRcmPIDNnpjR2
282
+ // SIG // EUnVtiVaZKMVRzNGFN3CMhNLsOjaZpjqkCITWLLaCjGC
283
+ // SIG // BA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYD
284
+ // SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
285
+ // SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
286
+ // SIG // JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
287
+ // SIG // QSAyMDEwAhMzAAAB4pmZlfHc4yDrAAEAAAHiMA0GCWCG
288
+ // SIG // SAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZI
289
+ // SIG // hvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEINXfSrXjDGhu
290
+ // SIG // 2ZwCP4WiKDz7LULw09zSg08aRvADT7SpMIH6BgsqhkiG
291
+ // SIG // 9w0BCRACLzGB6jCB5zCB5DCBvQQgK4kqShD9JrjGwVBE
292
+ // SIG // zg6C+HeS1OiP247nCGZDiQiPf/8wgZgwgYCkfjB8MQsw
293
+ // SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
294
+ // SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
295
+ // SIG // b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv
296
+ // SIG // ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAeKZmZXx
297
+ // SIG // 3OMg6wABAAAB4jAiBCAq2C6RW0ycut78mQElOP3ebV+g
298
+ // SIG // 6hNsN4Pb+nSNUOzoJzANBgkqhkiG9w0BAQsFAASCAgCm
299
+ // SIG // oF93TwTfvdhTy5lbeSq9ZnKRROx638DlbvTFuP/lM4yh
300
+ // SIG // jXdo7cS5qmmJrzxq0j2lr4HjSgJAT1D1nFfEiuiw1oDD
301
+ // SIG // 3pvRGhiTIGY3Pq2tGr2Jy+P/vV5X12RDn2nOmOFPrwtY
302
+ // SIG // ZuxL41V7NQIj8SCVdJBZTC0ugMZONI/pUIMaXZRlig3+
303
+ // SIG // Mgwkyqcwj38iyz4WknIuhdiJqE2JTSdweo8ALNO58aUp
304
+ // SIG // 8eF0kRAWnIRASjBfpSNiq1SZtvQT5HAvYcizFyulli/W
305
+ // SIG // LT+sPjM5gtmFmwnqyGGpf0gBEcDrJjT6K0hjl1aATsb+
306
+ // SIG // 4JPkUn7SSJDcuBAKw6kZQlI2+dxnKzebQw6BK9h4lQ85
307
+ // SIG // Zg9nyhPxw7jXRZcoUfiOjzQqJyVMu36ElibQO9nHfvMw
308
+ // SIG // Yju8v/L9ebUnJGXxReBXO2M7IlbCEB3+I7M/gs+PDCKY
309
+ // SIG // 7/AeerzM+umF3Pg+3k62f8eSgq23YXI1ivAOS62IrWUL
310
+ // SIG // yEKoaRaImSiRVL/8T8Ho9dkMvUacdXlAHsCvg+EaPxYQ
311
+ // SIG // Jr5qoqiTSJTGo63rqK2LwulPypdCr9b3bBLfr5PBZa+2
312
+ // SIG // TOThcQOJ/ICMmX3drgWCSPtem7tFRvd+r4AwUkPTfCyG
313
+ // SIG // ddWriCYD473B7Nzfz2umBGvu5yFPkdT3sdl4PfOk96IB
314
+ // SIG // c9mhxZ9mZNnQOantk1hM5w==
315
+ // SIG // End signature block
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/performance/performance-profile.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAKjC,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAqB5E;;GAEG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAwB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAE5C,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,8BAA8B,CAAiC;IACvE,OAAO,CAAC,8BAA8B,CAAiC;IACvE,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,oCAAoC,CAAuC;IAEnF;;OAEG;IACH,WAAkB,OAAO,IAAI,kBAAkB,CAO9C;IAED,WAAkB,QAAQ,IAAI,0BAA0B,CAEvD;IAED;;OAEG;WACW,kBAAkB,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAYhC;;OAEG;WACW,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAoBpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAoB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAoB/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAmB1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiBrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAiB9B,OAAO,CAAC,MAAM,CAAC,aAAa;IA0B5B,OAAO,CAAC,MAAM,CAAC,MAAM;IAcrB,OAAO,CAAC,MAAM,CAAC,QAAQ;IA2EvB,OAAO,CAAC,MAAM,CAAC,UAAU;IAelB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKtB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAK9B,OAAO,CAAC,uBAAuB;IAiBxB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IA4C3B,cAAc,IAAI,IAAI;IA0B7B,OAAO,CAAC,GAAG;IAwBX,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,yBAAyB;CAgBpC","file":"performance-profile.d.ts","sourcesContent":["import { of, Subscription, throwError } from 'rxjs';\r\nimport { AjaxError, AjaxRequest, AjaxResponse } from 'rxjs/ajax';\r\nimport { filter, map, take } from 'rxjs/operators';\r\nimport { CimResultFormat, CimStream, CimStreamMonitorSetContext, CimStreamOptions, CimStreamRequestData } from '../data/cim-stream';\r\nimport { Http } from '../data/http';\r\nimport { Net } from '../data/net';\r\nimport { PowerShellCommand } from '../data/powershell';\r\nimport { PowerShellStream, PowerShellStreamMonitorSetContext, PowerShellStreamOptions } from '../data/powershell-stream';\r\nimport { WebsocketStreamDataRequestState } from '../data/websocket-stream';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { RpcObservablePerformanceClient } from '../rpc/performance/rpc-observable-performance-client';\r\nimport { RpcObservablePerformanceConfigClient } from '../rpc/performance/rpc-observable-performance-config-client';\r\nimport { RpcObservablePerformanceServer } from '../rpc/performance/rpc-observable-performance-server';\r\nimport { Rpc } from '../rpc/rpc';\r\nimport {\r\n PerformanceProfileData, PerformanceProfileDataCim, PerformanceProfileDataPowerShell, PerformanceProfileXhrFetch\r\n} from './performance-profile-data';\r\nimport { PerformanceProfileDataType } from './performance-profile-data-type';\r\nimport { PerformanceProfileDatabase } from './performance-profile-database';\r\nimport { PerformanceProfileRecord } from './performance-profile-record';\r\n\r\ninterface PowerShellStreamContext {\r\n id: number;\r\n start: number;\r\n progressStart: number;\r\n progressEnd?: number;\r\n count: number;\r\n itemCount: number;\r\n}\r\n\r\ninterface CimStreamContext {\r\n id: number;\r\n start: number;\r\n progressStart: number;\r\n progressEnd?: number;\r\n count: number;\r\n itemCount: number;\r\n}\r\n\r\n/**\r\n * Performance measurement class.\r\n */\r\nexport class PerformanceProfile {\r\n private static monitorName = 'PerformanceProfile';\r\n private static instance: PerformanceProfile;\r\n\r\n private database: PerformanceProfileDatabase = null;\r\n private rpc: Rpc;\r\n private rpcObservablePerformanceClient: RpcObservablePerformanceClient;\r\n private rpcObservablePerformanceServer: RpcObservablePerformanceServer;\r\n private subscription: Subscription;\r\n private moduleVersionMap: { [index: string]: string } = {};\r\n private rpcObservablePerformanceConfigClient: RpcObservablePerformanceConfigClient;\r\n\r\n /**\r\n * Gets the current PerformanceProfile instance.\r\n */\r\n public static get current(): PerformanceProfile {\r\n if (PerformanceProfile.instance) {\r\n return PerformanceProfile.instance;\r\n }\r\n\r\n PerformanceProfile.instance = new PerformanceProfile();\r\n return PerformanceProfile.instance;\r\n }\r\n\r\n public static get database(): PerformanceProfileDatabase {\r\n return PerformanceProfile.current.database;\r\n }\r\n\r\n /**\r\n * Record Route navigation performance measurement.\r\n */\r\n public static logRouteNavigation(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n target?: string,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.RouteNavigation,\r\n routeNavigation: { url, target }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record Null packet.\r\n */\r\n public static logNull(source: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start: 0,\r\n end: 0,\r\n errorMessage: null,\r\n type: PerformanceProfileDataType.Null\r\n };\r\n PerformanceProfile.current.logAnyway(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for PowerShell.\r\n */\r\n private static logXhrFetchPowerShell(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n powershell: PerformanceProfileDataPowerShell,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status, powershell }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for CIM.\r\n */\r\n private static logXhrFetchCim(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n cim: PerformanceProfileDataCim,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status, cim }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for Batch.\r\n */\r\n private static logXhrFetchBatch(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n batch: PerformanceProfileXhrFetch[],\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status, batch }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for general.\r\n */\r\n private static logXhrFetch(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record WebSocket performance measurement.\r\n */\r\n private static logWebSocketPowerShell(\r\n source: string,\r\n nodeName: string,\r\n command: string,\r\n context: PowerShellStreamContext,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start: context.progressStart,\r\n end: context.progressEnd,\r\n errorMessage,\r\n type: PerformanceProfileDataType.WebSocket,\r\n webSocket: { nodeName, id: context.id, count: context.count, itemCount: context.itemCount, powershell: { command } }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record WebSocket performance measurement.\r\n */\r\n private static logWebSocketCim(\r\n source: string,\r\n nodeName: string,\r\n cim: CimStreamRequestData,\r\n context: CimStreamContext,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start: context.progressStart,\r\n end: context.progressEnd,\r\n errorMessage,\r\n type: PerformanceProfileDataType.WebSocket,\r\n webSocket: { nodeName, id: context.id, count: context.count, itemCount: context.itemCount, cim }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n private static powershellApi(\r\n url: string,\r\n body: string,\r\n response: { completed?: string, sessionId?: string; properties?: { completed: string; sessionId: string; }; }): PerformanceProfileDataPowerShell {\r\n const powershell: { command?: string; sessionId?: string; completed?: string } = {};\r\n if (body && body.indexOf('\\\"properties\\\"') > 0) {\r\n powershell.command = PerformanceProfile.getBetween(body, ',\\\"command\\\":\\\"', '\\\",\\\"')\r\n || PerformanceProfile.getBetween(body, '\\\"script\\\":\\\"##', '##:');\r\n }\r\n\r\n powershell.completed = response && response.completed;\r\n if (!powershell.completed) {\r\n powershell.completed = response && response.properties && response.properties.completed;\r\n }\r\n\r\n powershell.sessionId = response && response.sessionId;\r\n if (!powershell.sessionId) {\r\n powershell.sessionId = response && response.properties && response.properties.sessionId;\r\n if (!powershell.sessionId) {\r\n powershell.sessionId = PerformanceProfile.getBetween(url, 'features/powershellApi/pssessions/', '?');\r\n }\r\n }\r\n\r\n return powershell;\r\n }\r\n\r\n private static cimApi(url: string, body: string): PerformanceProfileDataCim {\r\n if (url.indexOf('/features/cim/query') > 0) {\r\n try {\r\n return JSON.parse(body);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n const namespaceName = PerformanceProfile.getBetween(url, '/namespaces/', '/classes/');\r\n const className = PerformanceProfile.getBetween(url, '/classes/', '/instances');\r\n return { namespace: namespaceName, className: className };\r\n }\r\n\r\n private static batchApi(body: string, response: string): PerformanceProfileXhrFetch[] {\r\n const delimiter = '\\x0d\\x0a';\r\n const batch: PerformanceProfileXhrFetch[] = [];\r\n let last = body.indexOf(delimiter);\r\n let separator = body.substring(0, last + 2);\r\n const bodySegments = body.split(separator);\r\n last = response.indexOf(delimiter);\r\n separator = response.substring(0, last + 2);\r\n const responseSegments = response.split(separator);\r\n if (bodySegments.length === responseSegments.length && bodySegments.length > 1) {\r\n let batchMethod: string;\r\n let batchUrl: string;\r\n let batchBody: string;\r\n let batchStatus: number;\r\n let batchResponse: any;\r\n for (let i = 1; i < bodySegments.length; i++) {\r\n const bodySegment = bodySegments[i];\r\n const responseSegment = responseSegments[i];\r\n const bodySegmentLines = bodySegment.split(delimiter);\r\n let emptyLines = 0;\r\n for (let j = 0; j < bodySegmentLines.length; j++) {\r\n const line = bodySegmentLines[j];\r\n if (line.length > 0) {\r\n if (emptyLines === 1 && !batchUrl) {\r\n // reached header segment.\r\n const query = line.split(' ');\r\n batchMethod = query[0];\r\n batchUrl = query[1];\r\n } else if (emptyLines >= 2 && !batchBody) {\r\n batchBody = line;\r\n }\r\n } else {\r\n emptyLines++;\r\n }\r\n }\r\n\r\n emptyLines = 0;\r\n const responseSegmentLines = responseSegment.split(delimiter);\r\n for (let j = 0; j < responseSegmentLines.length; j++) {\r\n const line = responseSegmentLines[j];\r\n if (line.length > 0) {\r\n if (emptyLines === 1 && !batchStatus) {\r\n // reached header segment.\r\n const query = line.split(' ');\r\n batchStatus = Number(query[1]);\r\n } else if (emptyLines >= 2 && !batchResponse) {\r\n try {\r\n batchResponse = JSON.parse(line);\r\n } catch {\r\n batchResponse = {};\r\n }\r\n }\r\n } else {\r\n emptyLines++;\r\n }\r\n }\r\n\r\n const batchItem: PerformanceProfileXhrFetch = {\r\n url: batchUrl,\r\n status: batchStatus,\r\n method: batchMethod\r\n };\r\n if (batchUrl.indexOf('/features/powershellApi/') > 0) {\r\n batchItem.powershell = PerformanceProfile.powershellApi(batchUrl, batchBody, batchResponse);\r\n } else if (batchUrl.includes('/features/cim/query')) {\r\n batchItem.cim = PerformanceProfile.cimApi(batchUrl, batchBody);\r\n }\r\n\r\n batch.push(batchItem);\r\n }\r\n }\r\n\r\n return batch;\r\n }\r\n\r\n private static getBetween(source: string, begin: string, end: string): string {\r\n let index0 = source.indexOf(begin);\r\n if (index0 < 0) {\r\n return null;\r\n }\r\n\r\n index0 += begin.length;\r\n const index1 = source.indexOf(end, index0);\r\n if (index1 < 0) {\r\n return null;\r\n }\r\n\r\n return source.substring(index0, index1 - index0);\r\n }\r\n\r\n public enable(rpc: Rpc): void {\r\n MsftSme.setPerformanceProfile(true);\r\n this.registerRpc(rpc);\r\n }\r\n\r\n public disable(rpc: Rpc): void {\r\n MsftSme.setPerformanceProfile(false);\r\n this.registerRpc(rpc);\r\n }\r\n\r\n private checkPerformanceProfile(): boolean {\r\n if (!MsftSme.getPerformanceProfile()) {\r\n if (this.database) {\r\n this.database.close();\r\n this.database = null;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n if (!this.database) {\r\n this.database = new PerformanceProfileDatabase();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public registerRpc(rpc: Rpc): void {\r\n if (!this.rpc) {\r\n this.rpc = rpc;\r\n if (MsftSme.isShell()) {\r\n this.subscription = rpc.stateChanged\r\n .pipe(\r\n filter(active => active),\r\n take(1))\r\n .subscribe(() => {\r\n this.rpcObservablePerformanceConfigClient = new RpcObservablePerformanceConfigClient(this.rpc);\r\n this.rpcObservablePerformanceServer = new RpcObservablePerformanceServer(rpc);\r\n this.rpcObservablePerformanceServer.register(\r\n request => {\r\n if (request.type === PerformanceProfileDataType.Null) {\r\n // The packet is null packet and retain only the version data.\r\n if (request.sourceVersion === '0.2.0') {\r\n // this version can support config command when on/off switch was used.\r\n this.moduleVersionMap[request.sourceName] = request.sourceVersion;\r\n }\r\n\r\n return of(null);\r\n }\r\n\r\n if (!this.checkPerformanceProfile()) {\r\n return of(null);\r\n }\r\n\r\n return this.database.write(request).pipe(map(() => null));\r\n });\r\n });\r\n } else {\r\n this.subscription = rpc.stateChanged\r\n .pipe(\r\n filter(active => active),\r\n take(1))\r\n .subscribe(() => {\r\n this.rpcObservablePerformanceClient = new RpcObservablePerformanceClient(rpc);\r\n });\r\n }\r\n }\r\n\r\n this.updateMonitors();\r\n }\r\n\r\n public updateMonitors(): void {\r\n const enabled = this.checkPerformanceProfile();\r\n if (this.rpcObservablePerformanceConfigClient) {\r\n // enable/disable the performance profile data collection to current modules.\r\n // but these must be version 0.2.0.\r\n const items = this.rpc.rpcManager.getCurrentRpcOutbound();\r\n if (items) {\r\n for (const item of items) {\r\n if (this.moduleVersionMap[item.name]) {\r\n this.rpcObservablePerformanceConfigClient.config({ enabled }, item).subscribe();\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (enabled) {\r\n this.registerHttp();\r\n this.registerPowerShellStream();\r\n this.registerCimStream();\r\n } else {\r\n Http.unregisterMonitors(PerformanceProfile.monitorName);\r\n PowerShellStream.unregisterMonitors(PerformanceProfile.monitorName);\r\n CimStream.unregisterMonitors(PerformanceProfile.monitorName);\r\n }\r\n }\r\n\r\n private log(message: PerformanceProfileData): void {\r\n if (!this.checkPerformanceProfile()) {\r\n return;\r\n }\r\n\r\n const self = MsftSme.self();\r\n const record: PerformanceProfileRecord = {\r\n ...message,\r\n ...{ sessionId: self.Init.sessionId, timestamp: Date.now(), moduleName: self.Init.moduleName }\r\n };\r\n\r\n if (!record.errorMessage) {\r\n delete record['errorMessage'];\r\n }\r\n\r\n if (this.rpc && this.rpc.stateActive && this.rpcObservablePerformanceClient) {\r\n // send to shell.\r\n this.rpcObservablePerformanceClient.log(record).subscribe();\r\n } else {\r\n // write to database.\r\n this.database.write(record).subscribe();\r\n }\r\n }\r\n\r\n private logAnyway(message: PerformanceProfileData): void {\r\n const self = MsftSme.self();\r\n const record: PerformanceProfileRecord = {\r\n ...message,\r\n ...{ sessionId: self.Init.sessionId, timestamp: Date.now(), moduleName: self.Init.moduleName }\r\n };\r\n\r\n if (!record.errorMessage) {\r\n delete record['errorMessage'];\r\n }\r\n\r\n if (this.rpc && this.rpc.stateActive && this.rpcObservablePerformanceClient) {\r\n // send to shell.\r\n this.rpcObservablePerformanceClient.log(record).subscribe();\r\n }\r\n }\r\n\r\n private registerHttp(): void {\r\n const startPropertyName = '_start_';\r\n\r\n Http.registerMonitorSet({\r\n name: PerformanceProfile.monitorName,\r\n preMonitor: (request: AjaxRequest) => {\r\n if (!request) {\r\n Logging.logWarning('Http', 'Http performance profile measurement error to access the AjaxRequest object.');\r\n return of(request);\r\n }\r\n\r\n request[startPropertyName] = Date.now();\r\n return of(request);\r\n },\r\n successMonitor: (response: AjaxResponse<any>) => {\r\n if (!response || !response.request || !response.request.url) {\r\n Logging.logWarning('Http', 'Http performance profile measurement error to access the AjaxResponse object.');\r\n return of(response);\r\n }\r\n\r\n const request = response.request;\r\n const url = request.url;\r\n const method = request.method;\r\n const end = Date.now();\r\n const start = request[startPropertyName];\r\n if (url.indexOf('/features/powershellApi/') > 0) {\r\n const powershell = PerformanceProfile.powershellApi(url, request.body, response.response);\r\n PerformanceProfile.logXhrFetchPowerShell('Http', start, end, url, method, response.status, powershell);\r\n } else if (url.includes('/features/cim/')) {\r\n const cim = PerformanceProfile.cimApi(url, request.body);\r\n PerformanceProfile.logXhrFetchCim('Http', start, end, url, method, response.status, cim);\r\n } else if (url.indexOf('/api/batch') > 0) {\r\n const batch = PerformanceProfile.batchApi(request.body, response.response);\r\n PerformanceProfile.logXhrFetchBatch('Http', start, end, url, method, response.status, batch);\r\n } else {\r\n PerformanceProfile.logXhrFetch('Http', start, end, url, method, response.status);\r\n }\r\n\r\n return of(response);\r\n },\r\n errorMonitor: (error: AjaxError) => {\r\n if (!error || !error.response || !error.request || !error.request.url) {\r\n Logging.logWarning('Http', 'Http performance profile measurement error to access the AjaxError object.');\r\n return throwError(() => error);\r\n }\r\n\r\n const request = error.request;\r\n const url = request.url;\r\n const method = request.method;\r\n const end = Date.now();\r\n const start = request[startPropertyName];\r\n const message = Net.getErrorMessage(error);\r\n if (url.indexOf('features/powershellApi') > 0) {\r\n const powershell = PerformanceProfile.powershellApi(url, request.body, error.response);\r\n PerformanceProfile.logXhrFetchPowerShell('Http', start, end, url, method, error.status, powershell, message);\r\n } else if (url.includes('/features/cim/')) {\r\n const cim = PerformanceProfile.cimApi(url, request.body);\r\n PerformanceProfile.logXhrFetchCim('Http', start, end, url, method, error.status, cim, message);\r\n } else {\r\n PerformanceProfile.logXhrFetch('Http', start, end, url, method, error.status, message);\r\n }\r\n\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n\r\n private registerPowerShellStream(): void {\r\n let masterId = 1;\r\n PowerShellStream.registerMonitorSet({\r\n name: PerformanceProfile.monitorName,\r\n preMonitor: (nodeName: string, command: PowerShellCommand, options?: PowerShellStreamOptions) => {\r\n const start = Date.now();\r\n const id = masterId++;\r\n const context: PowerShellStreamMonitorSetContext<PowerShellStreamContext> = {\r\n nodeName,\r\n command,\r\n options,\r\n data: { id, start, progressStart: start, count: 0, itemCount: 0 }\r\n };\r\n return of(context);\r\n },\r\n successMonitor: (response: any, context: PowerShellStreamMonitorSetContext<PowerShellStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n context.data.count++;\r\n context.data.itemCount += (response && response.results && response.results.length || 1);\r\n PerformanceProfile.logWebSocketPowerShell(\r\n 'PowerShellStream',\r\n context.nodeName,\r\n context.command.command,\r\n context.data);\r\n context.data.progressStart = Date.now();\r\n return of(response);\r\n },\r\n errorMonitor: (error: any, context: PowerShellStreamMonitorSetContext<PowerShellStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n PerformanceProfile.logWebSocketPowerShell(\r\n 'PowerShellStream',\r\n context.nodeName,\r\n context.command.command,\r\n context.data,\r\n Net.getErrorMessage(error));\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n\r\n private registerCimStream(): void {\r\n let masterId = 1;\r\n CimStream.registerMonitorSet({\r\n name: PerformanceProfile.monitorName,\r\n preMonitor: (\r\n nodeName: string,\r\n requestState: WebsocketStreamDataRequestState,\r\n request: CimStreamRequestData,\r\n format: CimResultFormat,\r\n options?: CimStreamOptions) => {\r\n const start = Date.now();\r\n const id = masterId++;\r\n const context: CimStreamMonitorSetContext<CimStreamContext> = {\r\n nodeName,\r\n requestState,\r\n request,\r\n format,\r\n options,\r\n data: { id, start, progressStart: start, count: 0, itemCount: 0 }\r\n };\r\n return of(context);\r\n },\r\n successMonitor: (response: any, context: CimStreamMonitorSetContext<CimStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n context.data.count++;\r\n context.data.itemCount += (response && response.results && response.results.length || 1);\r\n PerformanceProfile.logWebSocketCim(\r\n 'CimStream',\r\n context.nodeName,\r\n this.removeCimStreamDetailData(context.request),\r\n context.data);\r\n context.data.progressStart = Date.now();\r\n return of(response);\r\n },\r\n errorMonitor: (error: any, context: CimStreamMonitorSetContext<CimStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n PerformanceProfile.logWebSocketCim(\r\n 'CimStream',\r\n context.nodeName,\r\n this.removeCimStreamDetailData(context.request),\r\n context.data,\r\n Net.getErrorMessage(error));\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n\r\n private removeCimStreamDetailData(request: CimStreamRequestData): CimStreamRequestData {\r\n const skipKeys = ['data', 'keyProperties'];\r\n const requestRaw: any = request;\r\n const keys = Object.keys(requestRaw);\r\n const trimmedKeys = keys.filter(key => skipKeys.indexOf(key) < 0);\r\n if (keys.length !== trimmedKeys.length) {\r\n const copy: any = {};\r\n for (const key of trimmedKeys) {\r\n copy[key] = requestRaw[key];\r\n }\r\n\r\n return copy;\r\n }\r\n\r\n return request;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/performance/performance-profile.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAKjC,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAqB5E;;GAEG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAwB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAE5C,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,8BAA8B,CAAiC;IACvE,OAAO,CAAC,8BAA8B,CAAiC;IACvE,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,oCAAoC,CAAuC;IAEnF;;OAEG;IACH,WAAkB,OAAO,IAAI,kBAAkB,CAO9C;IAED,WAAkB,QAAQ,IAAI,0BAA0B,CAEvD;IAED;;OAEG;WACW,kBAAkB,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAYhC;;OAEG;WACW,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAoBpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAoB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAoB/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAmB1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiBrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAiB9B,OAAO,CAAC,MAAM,CAAC,aAAa;IA0B5B,OAAO,CAAC,MAAM,CAAC,MAAM;IAcrB,OAAO,CAAC,MAAM,CAAC,QAAQ;IA2EvB,OAAO,CAAC,MAAM,CAAC,UAAU;IAelB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKtB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAK9B,OAAO,CAAC,uBAAuB;IAiBxB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IA4C3B,cAAc,IAAI,IAAI;IA0B7B,OAAO,CAAC,GAAG;IAwBX,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,yBAAyB;CAgBpC","file":"performance-profile.d.ts","sourcesContent":["import { of, Subscription, throwError } from 'rxjs';\r\nimport { AjaxError, AjaxRequest, AjaxResponse } from 'rxjs/ajax';\r\nimport { filter, map, take } from 'rxjs/operators';\r\nimport { CimResultFormat, CimStream, CimStreamMonitorSetContext, CimStreamOptions, CimStreamRequestData } from '../data/cim-stream';\r\nimport { Http } from '../data/http';\r\nimport { Net } from '../data/net';\r\nimport { PowerShellCommand } from '../data/powershell';\r\nimport { PowerShellStream, PowerShellStreamMonitorSetContext, PowerShellStreamOptions } from '../data/powershell-stream';\r\nimport { WebsocketStreamDataRequestState } from '../data/websocket-stream';\r\nimport { Logging } from '../diagnostics/logging';\r\nimport { RpcObservablePerformanceClient } from '../rpc/performance/rpc-observable-performance-client';\r\nimport { RpcObservablePerformanceConfigClient } from '../rpc/performance/rpc-observable-performance-config-client';\r\nimport { RpcObservablePerformanceServer } from '../rpc/performance/rpc-observable-performance-server';\r\nimport { Rpc } from '../rpc/rpc';\r\nimport {\r\n PerformanceProfileData, PerformanceProfileDataCim, PerformanceProfileDataPowerShell, PerformanceProfileXhrFetch\r\n} from './performance-profile-data';\r\nimport { PerformanceProfileDataType } from './performance-profile-data-type';\r\nimport { PerformanceProfileDatabase } from './performance-profile-database';\r\nimport { PerformanceProfileRecord } from './performance-profile-record';\r\n\r\ninterface PowerShellStreamContext {\r\n id: number;\r\n start: number;\r\n progressStart: number;\r\n progressEnd?: number;\r\n count: number;\r\n itemCount: number;\r\n}\r\n\r\ninterface CimStreamContext {\r\n id: number;\r\n start: number;\r\n progressStart: number;\r\n progressEnd?: number;\r\n count: number;\r\n itemCount: number;\r\n}\r\n\r\n/**\r\n * Performance measurement class.\r\n */\r\nexport class PerformanceProfile {\r\n private static monitorName = 'PerformanceProfile';\r\n private static instance: PerformanceProfile;\r\n\r\n private database: PerformanceProfileDatabase = null;\r\n private rpc: Rpc;\r\n private rpcObservablePerformanceClient: RpcObservablePerformanceClient;\r\n private rpcObservablePerformanceServer: RpcObservablePerformanceServer;\r\n private subscription: Subscription;\r\n private moduleVersionMap: { [index: string]: string } = {};\r\n private rpcObservablePerformanceConfigClient: RpcObservablePerformanceConfigClient;\r\n\r\n /**\r\n * Gets the current PerformanceProfile instance.\r\n */\r\n public static get current(): PerformanceProfile {\r\n if (PerformanceProfile.instance) {\r\n return PerformanceProfile.instance;\r\n }\r\n\r\n PerformanceProfile.instance = new PerformanceProfile();\r\n return PerformanceProfile.instance;\r\n }\r\n\r\n public static get database(): PerformanceProfileDatabase {\r\n return PerformanceProfile.current.database;\r\n }\r\n\r\n /**\r\n * Record Route navigation performance measurement.\r\n */\r\n public static logRouteNavigation(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n target?: string,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.RouteNavigation,\r\n routeNavigation: { url, target }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record Null packet.\r\n */\r\n public static logNull(source: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start: 0,\r\n end: 0,\r\n errorMessage: null,\r\n type: PerformanceProfileDataType.Null\r\n };\r\n PerformanceProfile.current.logAnyway(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for PowerShell.\r\n */\r\n private static logXhrFetchPowerShell(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n powershell: PerformanceProfileDataPowerShell,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status, powershell }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for CIM.\r\n */\r\n private static logXhrFetchCim(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n cim: PerformanceProfileDataCim,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status, cim }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for Batch.\r\n */\r\n private static logXhrFetchBatch(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n batch: PerformanceProfileXhrFetch[],\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status, batch }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record XHR or Fetch performance measurement for general.\r\n */\r\n private static logXhrFetch(\r\n source: string,\r\n start: number,\r\n end: number,\r\n url: string,\r\n method: string,\r\n status: number,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start,\r\n end,\r\n errorMessage,\r\n type: PerformanceProfileDataType.XhrFetch,\r\n xhrFetch: { url, method, status }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record WebSocket performance measurement.\r\n */\r\n private static logWebSocketPowerShell(\r\n source: string,\r\n nodeName: string,\r\n command: string,\r\n context: PowerShellStreamContext,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start: context.progressStart,\r\n end: context.progressEnd,\r\n errorMessage,\r\n type: PerformanceProfileDataType.WebSocket,\r\n webSocket: { nodeName, id: context.id, count: context.count, itemCount: context.itemCount, powershell: { command } }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n /**\r\n * Record WebSocket performance measurement.\r\n */\r\n private static logWebSocketCim(\r\n source: string,\r\n nodeName: string,\r\n cim: CimStreamRequestData,\r\n context: CimStreamContext,\r\n errorMessage?: string): void {\r\n const data: PerformanceProfileData = {\r\n source,\r\n start: context.progressStart,\r\n end: context.progressEnd,\r\n errorMessage,\r\n type: PerformanceProfileDataType.WebSocket,\r\n webSocket: { nodeName, id: context.id, count: context.count, itemCount: context.itemCount, cim }\r\n };\r\n PerformanceProfile.current.log(data);\r\n }\r\n\r\n private static powershellApi(\r\n url: string,\r\n body: string,\r\n response: { completed?: string, sessionId?: string; properties?: { completed: string; sessionId: string; }; }): PerformanceProfileDataPowerShell {\r\n const powershell: { command?: string; sessionId?: string; completed?: string } = {};\r\n if (body && body.indexOf('\\\"properties\\\"') > 0) {\r\n powershell.command = PerformanceProfile.getBetween(body, ',\\\"command\\\":\\\"', '\\\",\\\"')\r\n || PerformanceProfile.getBetween(body, '\\\"script\\\":\\\"##', '##:');\r\n }\r\n\r\n powershell.completed = response && response.completed;\r\n if (!powershell.completed) {\r\n powershell.completed = response && response.properties && response.properties.completed;\r\n }\r\n\r\n powershell.sessionId = response && response.sessionId;\r\n if (!powershell.sessionId) {\r\n powershell.sessionId = response && response.properties && response.properties.sessionId;\r\n if (!powershell.sessionId) {\r\n powershell.sessionId = PerformanceProfile.getBetween(url, '/pssessions/', '?');\r\n }\r\n }\r\n\r\n return powershell;\r\n }\r\n\r\n private static cimApi(url: string, body: string): PerformanceProfileDataCim {\r\n if (url.indexOf('/features/cim/query') > 0 || url.indexOf('/services/WinREST/CIM/query') > 0) {\r\n try {\r\n return JSON.parse(body);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n const namespaceName = PerformanceProfile.getBetween(url, '/namespaces/', '/classes/');\r\n const className = PerformanceProfile.getBetween(url, '/classes/', '/instances');\r\n return { namespace: namespaceName, className: className };\r\n }\r\n\r\n private static batchApi(body: string, response: string): PerformanceProfileXhrFetch[] {\r\n const delimiter = '\\x0d\\x0a';\r\n const batch: PerformanceProfileXhrFetch[] = [];\r\n let last = body.indexOf(delimiter);\r\n let separator = body.substring(0, last + 2);\r\n const bodySegments = body.split(separator);\r\n last = response.indexOf(delimiter);\r\n separator = response.substring(0, last + 2);\r\n const responseSegments = response.split(separator);\r\n if (bodySegments.length === responseSegments.length && bodySegments.length > 1) {\r\n let batchMethod: string;\r\n let batchUrl: string;\r\n let batchBody: string;\r\n let batchStatus: number;\r\n let batchResponse: any;\r\n for (let i = 1; i < bodySegments.length; i++) {\r\n const bodySegment = bodySegments[i];\r\n const responseSegment = responseSegments[i];\r\n const bodySegmentLines = bodySegment.split(delimiter);\r\n let emptyLines = 0;\r\n for (let j = 0; j < bodySegmentLines.length; j++) {\r\n const line = bodySegmentLines[j];\r\n if (line.length > 0) {\r\n if (emptyLines === 1 && !batchUrl) {\r\n // reached header segment.\r\n const query = line.split(' ');\r\n batchMethod = query[0];\r\n batchUrl = query[1];\r\n } else if (emptyLines >= 2 && !batchBody) {\r\n batchBody = line;\r\n }\r\n } else {\r\n emptyLines++;\r\n }\r\n }\r\n\r\n emptyLines = 0;\r\n const responseSegmentLines = responseSegment.split(delimiter);\r\n for (let j = 0; j < responseSegmentLines.length; j++) {\r\n const line = responseSegmentLines[j];\r\n if (line.length > 0) {\r\n if (emptyLines === 1 && !batchStatus) {\r\n // reached header segment.\r\n const query = line.split(' ');\r\n batchStatus = Number(query[1]);\r\n } else if (emptyLines >= 2 && !batchResponse) {\r\n try {\r\n batchResponse = JSON.parse(line);\r\n } catch {\r\n batchResponse = {};\r\n }\r\n }\r\n } else {\r\n emptyLines++;\r\n }\r\n }\r\n\r\n const batchItem: PerformanceProfileXhrFetch = {\r\n url: batchUrl,\r\n status: batchStatus,\r\n method: batchMethod\r\n };\r\n if (batchUrl.indexOf('/features/powershellApi/') > 0 || batchUrl.indexOf('/services/WinREST/PowerShell/') > 0) {\r\n batchItem.powershell = PerformanceProfile.powershellApi(batchUrl, batchBody, batchResponse);\r\n } else if (batchUrl.includes('/features/cim/query') || batchUrl.includes('/services/WinREST/CIM/')) {\r\n batchItem.cim = PerformanceProfile.cimApi(batchUrl, batchBody);\r\n }\r\n\r\n batch.push(batchItem);\r\n }\r\n }\r\n\r\n return batch;\r\n }\r\n\r\n private static getBetween(source: string, begin: string, end: string): string {\r\n let index0 = source.indexOf(begin);\r\n if (index0 < 0) {\r\n return null;\r\n }\r\n\r\n index0 += begin.length;\r\n const index1 = source.indexOf(end, index0);\r\n if (index1 < 0) {\r\n return null;\r\n }\r\n\r\n return source.substring(index0, index1);\r\n }\r\n\r\n public enable(rpc: Rpc): void {\r\n MsftSme.setPerformanceProfile(true);\r\n this.registerRpc(rpc);\r\n }\r\n\r\n public disable(rpc: Rpc): void {\r\n MsftSme.setPerformanceProfile(false);\r\n this.registerRpc(rpc);\r\n }\r\n\r\n private checkPerformanceProfile(): boolean {\r\n if (!MsftSme.getPerformanceProfile()) {\r\n if (this.database) {\r\n this.database.close();\r\n this.database = null;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n if (!this.database) {\r\n this.database = new PerformanceProfileDatabase();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public registerRpc(rpc: Rpc): void {\r\n if (!this.rpc) {\r\n this.rpc = rpc;\r\n if (MsftSme.isShell()) {\r\n this.subscription = rpc.stateChanged\r\n .pipe(\r\n filter(active => active),\r\n take(1))\r\n .subscribe(() => {\r\n this.rpcObservablePerformanceConfigClient = new RpcObservablePerformanceConfigClient(this.rpc);\r\n this.rpcObservablePerformanceServer = new RpcObservablePerformanceServer(rpc);\r\n this.rpcObservablePerformanceServer.register(\r\n request => {\r\n if (request.type === PerformanceProfileDataType.Null) {\r\n // The packet is null packet and retain only the version data.\r\n if (request.sourceVersion === '0.2.0') {\r\n // this version can support config command when on/off switch was used.\r\n this.moduleVersionMap[request.sourceName] = request.sourceVersion;\r\n }\r\n\r\n return of(null);\r\n }\r\n\r\n if (!this.checkPerformanceProfile()) {\r\n return of(null);\r\n }\r\n\r\n return this.database.write(request).pipe(map(() => null));\r\n });\r\n });\r\n } else {\r\n this.subscription = rpc.stateChanged\r\n .pipe(\r\n filter(active => active),\r\n take(1))\r\n .subscribe(() => {\r\n this.rpcObservablePerformanceClient = new RpcObservablePerformanceClient(rpc);\r\n });\r\n }\r\n }\r\n\r\n this.updateMonitors();\r\n }\r\n\r\n public updateMonitors(): void {\r\n const enabled = this.checkPerformanceProfile();\r\n if (this.rpcObservablePerformanceConfigClient) {\r\n // enable/disable the performance profile data collection to current modules.\r\n // but these must be version 0.2.0.\r\n const items = this.rpc.rpcManager.getCurrentRpcOutbound();\r\n if (items) {\r\n for (const item of items) {\r\n if (this.moduleVersionMap[item.name]) {\r\n this.rpcObservablePerformanceConfigClient.config({ enabled }, item).subscribe();\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (enabled) {\r\n this.registerHttp();\r\n this.registerPowerShellStream();\r\n this.registerCimStream();\r\n } else {\r\n Http.unregisterMonitors(PerformanceProfile.monitorName);\r\n PowerShellStream.unregisterMonitors(PerformanceProfile.monitorName);\r\n CimStream.unregisterMonitors(PerformanceProfile.monitorName);\r\n }\r\n }\r\n\r\n private log(message: PerformanceProfileData): void {\r\n if (!this.checkPerformanceProfile()) {\r\n return;\r\n }\r\n\r\n const self = MsftSme.self();\r\n const record: PerformanceProfileRecord = {\r\n ...message,\r\n ...{ sessionId: self.Init.sessionId, timestamp: Date.now(), moduleName: self.Init.moduleName }\r\n };\r\n\r\n if (!record.errorMessage) {\r\n delete record['errorMessage'];\r\n }\r\n\r\n if (this.rpc && this.rpc.stateActive && this.rpcObservablePerformanceClient) {\r\n // send to shell.\r\n this.rpcObservablePerformanceClient.log(record).subscribe();\r\n } else {\r\n // write to database.\r\n this.database.write(record).subscribe();\r\n }\r\n }\r\n\r\n private logAnyway(message: PerformanceProfileData): void {\r\n const self = MsftSme.self();\r\n const record: PerformanceProfileRecord = {\r\n ...message,\r\n ...{ sessionId: self.Init.sessionId, timestamp: Date.now(), moduleName: self.Init.moduleName }\r\n };\r\n\r\n if (!record.errorMessage) {\r\n delete record['errorMessage'];\r\n }\r\n\r\n if (this.rpc && this.rpc.stateActive && this.rpcObservablePerformanceClient) {\r\n // send to shell.\r\n this.rpcObservablePerformanceClient.log(record).subscribe();\r\n }\r\n }\r\n\r\n private registerHttp(): void {\r\n const startPropertyName = '_start_';\r\n\r\n Http.registerMonitorSet({\r\n name: PerformanceProfile.monitorName,\r\n preMonitor: (request: AjaxRequest) => {\r\n if (!request) {\r\n Logging.logWarning('Http', 'Http performance profile measurement error to access the AjaxRequest object.');\r\n return of(request);\r\n }\r\n\r\n request[startPropertyName] = Date.now();\r\n return of(request);\r\n },\r\n successMonitor: (response: AjaxResponse<any>) => {\r\n if (!response || !response.request || !response.request.url) {\r\n Logging.logWarning('Http', 'Http performance profile measurement error to access the AjaxResponse object.');\r\n return of(response);\r\n }\r\n\r\n const request = response.request;\r\n const url = request.url;\r\n const method = request.method;\r\n const end = Date.now();\r\n const start = request[startPropertyName];\r\n if (url.indexOf('/features/powershellApi/') > 0 || url.indexOf('/services/WinREST/PowerShell/') > 0){\r\n const powershell = PerformanceProfile.powershellApi(url, request.body, response.response);\r\n PerformanceProfile.logXhrFetchPowerShell('Http', start, end, url, method, response.status, powershell);\r\n } else if (url.includes('/features/cim/') || url.includes('/services/WinREST/CIM')) {\r\n const cim = PerformanceProfile.cimApi(url, request.body);\r\n PerformanceProfile.logXhrFetchCim('Http', start, end, url, method, response.status, cim);\r\n } else if (url.indexOf('/api/batch') > 0) {\r\n const batch = PerformanceProfile.batchApi(request.body, response.response);\r\n PerformanceProfile.logXhrFetchBatch('Http', start, end, url, method, response.status, batch);\r\n } else {\r\n PerformanceProfile.logXhrFetch('Http', start, end, url, method, response.status);\r\n }\r\n\r\n return of(response);\r\n },\r\n errorMonitor: (error: AjaxError) => {\r\n if (!error || !error.response || !error.request || !error.request.url) {\r\n Logging.logWarning('Http', 'Http performance profile measurement error to access the AjaxError object.');\r\n return throwError(() => error);\r\n }\r\n\r\n const request = error.request;\r\n const url = request.url;\r\n const method = request.method;\r\n const end = Date.now();\r\n const start = request[startPropertyName];\r\n const message = Net.getErrorMessage(error);\r\n if (url.indexOf('features/powershellApi') > 0 || url.indexOf('/services/WinREST/PowerShell/') > 0) {\r\n const powershell = PerformanceProfile.powershellApi(url, request.body, error.response);\r\n PerformanceProfile.logXhrFetchPowerShell('Http', start, end, url, method, error.status, powershell, message);\r\n } else if (url.includes('/features/cim/') || url.includes('/services/WinREST/CIM/')) {\r\n const cim = PerformanceProfile.cimApi(url, request.body);\r\n PerformanceProfile.logXhrFetchCim('Http', start, end, url, method, error.status, cim, message);\r\n } else {\r\n PerformanceProfile.logXhrFetch('Http', start, end, url, method, error.status, message);\r\n }\r\n\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n\r\n private registerPowerShellStream(): void {\r\n let masterId = 1;\r\n PowerShellStream.registerMonitorSet({\r\n name: PerformanceProfile.monitorName,\r\n preMonitor: (nodeName: string, command: PowerShellCommand, options?: PowerShellStreamOptions) => {\r\n const start = Date.now();\r\n const id = masterId++;\r\n const context: PowerShellStreamMonitorSetContext<PowerShellStreamContext> = {\r\n nodeName,\r\n command,\r\n options,\r\n data: { id, start, progressStart: start, count: 0, itemCount: 0 }\r\n };\r\n return of(context);\r\n },\r\n successMonitor: (response: any, context: PowerShellStreamMonitorSetContext<PowerShellStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n context.data.count++;\r\n context.data.itemCount += (response && response.results && response.results.length || 1);\r\n PerformanceProfile.logWebSocketPowerShell(\r\n 'PowerShellStream',\r\n context.nodeName,\r\n context.command.command,\r\n context.data);\r\n context.data.progressStart = Date.now();\r\n return of(response);\r\n },\r\n errorMonitor: (error: any, context: PowerShellStreamMonitorSetContext<PowerShellStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n PerformanceProfile.logWebSocketPowerShell(\r\n 'PowerShellStream',\r\n context.nodeName,\r\n context.command.command,\r\n context.data,\r\n Net.getErrorMessage(error));\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n\r\n private registerCimStream(): void {\r\n let masterId = 1;\r\n CimStream.registerMonitorSet({\r\n name: PerformanceProfile.monitorName,\r\n preMonitor: (\r\n nodeName: string,\r\n requestState: WebsocketStreamDataRequestState,\r\n request: CimStreamRequestData,\r\n format: CimResultFormat,\r\n options?: CimStreamOptions) => {\r\n const start = Date.now();\r\n const id = masterId++;\r\n const context: CimStreamMonitorSetContext<CimStreamContext> = {\r\n nodeName,\r\n requestState,\r\n request,\r\n format,\r\n options,\r\n data: { id, start, progressStart: start, count: 0, itemCount: 0 }\r\n };\r\n return of(context);\r\n },\r\n successMonitor: (response: any, context: CimStreamMonitorSetContext<CimStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n context.data.count++;\r\n context.data.itemCount += (response && response.results && response.results.length || 1);\r\n PerformanceProfile.logWebSocketCim(\r\n 'CimStream',\r\n context.nodeName,\r\n this.removeCimStreamDetailData(context.request),\r\n context.data);\r\n context.data.progressStart = Date.now();\r\n return of(response);\r\n },\r\n errorMonitor: (error: any, context: CimStreamMonitorSetContext<CimStreamContext>) => {\r\n context.data.progressEnd = Date.now();\r\n PerformanceProfile.logWebSocketCim(\r\n 'CimStream',\r\n context.nodeName,\r\n this.removeCimStreamDetailData(context.request),\r\n context.data,\r\n Net.getErrorMessage(error));\r\n return throwError(() => error);\r\n }\r\n });\r\n }\r\n\r\n private removeCimStreamDetailData(request: CimStreamRequestData): CimStreamRequestData {\r\n const skipKeys = ['data', 'keyProperties'];\r\n const requestRaw: any = request;\r\n const keys = Object.keys(requestRaw);\r\n const trimmedKeys = keys.filter(key => skipKeys.indexOf(key) < 0);\r\n if (keys.length !== trimmedKeys.length) {\r\n const copy: any = {};\r\n for (const key of trimmedKeys) {\r\n copy[key] = requestRaw[key];\r\n }\r\n\r\n return copy;\r\n }\r\n\r\n return request;\r\n }\r\n}\r\n"]}