@microsoft/windows-admin-center-sdk 2.186.0 → 2.296.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/strings.json +1 -1
  15. package/angular/assets/strings/sv-SE/strings.json +1 -1
  16. package/angular/assets/strings/tr-TR/strings.json +1 -1
  17. package/angular/assets/strings/zh-CN/strings.json +1 -1
  18. package/angular/assets/strings/zh-TW/strings.json +1 -1
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +1103 -1209
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +2 -2
  22. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  23. package/angular/esm2015/src/controls/actions/actions.module.js +2 -2
  24. package/angular/esm2015/src/controls/actions/containers/action-bar/action-bar.component.js +2 -2
  25. package/angular/esm2015/src/controls/actions/items/action-button/action-button-renderer.component.js +5 -5
  26. package/angular/esm2015/src/controls/actions/items/action-dropdown/action-dropdown.component.js +31 -13
  27. package/angular/esm2015/src/controls/actions/items/action-item.component.js +7 -3
  28. package/angular/esm2015/src/controls/badge/badge-base.component.js +2 -13
  29. package/angular/esm2015/src/controls/badge/bugfixes-feature-badge.component.js +42 -70
  30. package/angular/esm2015/src/controls/badge/coming-soon-badge.component.js +42 -70
  31. package/angular/esm2015/src/controls/badge/credssp-enabled-badge.component.js +42 -70
  32. package/angular/esm2015/src/controls/badge/critical-badge.component.js +42 -70
  33. package/angular/esm2015/src/controls/badge/custom-badge.component.js +42 -70
  34. package/angular/esm2015/src/controls/badge/feedback-badge.component.js +42 -70
  35. package/angular/esm2015/src/controls/badge/improvement-feature-badge.component.js +42 -70
  36. package/angular/esm2015/src/controls/badge/new-badge.component.js +42 -70
  37. package/angular/esm2015/src/controls/badge/new-feature-badge.component.js +42 -70
  38. package/angular/esm2015/src/controls/badge/preview-badge.component.js +42 -70
  39. package/angular/esm2015/src/controls/badge/warning-badge.component.js +42 -70
  40. package/angular/esm2015/src/controls/breadcrumb/breadcrumb.component.js +6 -6
  41. package/angular/esm2015/src/controls/breadcrumb-header/breadcrumb-header.component.js +2 -2
  42. package/angular/esm2015/src/controls/data-table/data-table-column.component.js +5 -3
  43. package/angular/esm2015/src/controls/data-table/data-table.component.js +20 -26
  44. package/angular/esm2015/src/controls/data-table/extensions/data-table-column-picker-extension.js +2 -1
  45. package/angular/esm2015/src/controls/details/details.component.js +2 -2
  46. package/angular/esm2015/src/controls/dialog/base-dialog.component.js +1 -1
  47. package/angular/esm2015/src/controls/dialog/confirmation-dialog/confirmation-dialog.component.js +20 -30
  48. package/angular/esm2015/src/controls/dialog/dialog.service.js +7 -3
  49. package/angular/esm2015/src/controls/dropdown/dropdown.component.js +2 -2
  50. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +50 -40
  51. package/angular/esm2015/src/controls/form/form-field/checklist/checklist-form-field.component.js +3 -3
  52. package/angular/esm2015/src/controls/form/form-field/combobox/combobox-form-field.component.js +14 -13
  53. package/angular/esm2015/src/controls/form/form-field/datetime/datetime-form-field.component.js +2 -2
  54. package/angular/esm2015/src/controls/form/form-field/form-field.component.js +16 -4
  55. package/angular/esm2015/src/controls/form/form-field/options-form-field/form-field-option.component.js +5 -3
  56. package/angular/esm2015/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.js +25 -21
  57. package/angular/esm2015/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.js +5 -5
  58. package/angular/esm2015/src/controls/form/form-field/search/search-form-field.component.js +2 -2
  59. package/angular/esm2015/src/controls/form/form-field/tags/tags-form-field.component.js +2 -2
  60. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +4 -10
  61. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.js +1 -1
  62. package/angular/esm2015/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.js +17 -1
  63. package/angular/esm2015/src/controls/icon/layered-icon/layered-icon.component.js +12 -1
  64. package/angular/esm2015/src/controls/icon/layered-icon/status/status-icon.component.js +53 -9
  65. package/angular/esm2015/src/controls/loading-wheel/loading-wheel.component.js +17 -1
  66. package/angular/esm2015/src/controls/master-view/master-view.component.js +34 -30
  67. package/angular/esm2015/src/controls/pivot/pivot-tab.component.js +1 -1
  68. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  69. package/angular/esm2015/src/controls/property-grid/property-grid.component.js +13 -29
  70. package/angular/esm2015/src/controls/schema-form/schema-form-content.component.js +7 -4
  71. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +23 -35
  72. package/angular/esm2015/src/controls/settings/settings.component.js +28 -1
  73. package/angular/esm2015/src/controls/settings/settings.module.js +8 -3
  74. package/angular/esm2015/src/controls/tooltip/tooltip-host.component.js +16 -5
  75. package/angular/esm2015/src/controls/wizard/wizard.component.js +38 -6
  76. package/angular/esm2015/src/directives/clamp/clamp.directive.js +26 -7
  77. package/angular/esm2015/src/directives/discard/discard.directive.js +2 -2
  78. package/angular/esm2015/src/directives/markdown/markdown.directive.js +5 -18
  79. package/angular/esm2015/src/generated/strings.js +1 -1
  80. package/angular/esm2015/src/guards/experiment.guard.service.js +14 -1
  81. package/angular/esm2015/src/pipes/boolean-converter-pipe.js +11 -1
  82. package/angular/esm2015/src/pipes/byte-unit-converter-pipe.js +11 -1
  83. package/angular/esm2015/src/pipes/enum-converter-pipe.js +16 -1
  84. package/angular/esm2015/src/pipes/format-pipe.js +11 -1
  85. package/angular/esm2015/src/pipes/highlight-pipe.js +11 -1
  86. package/angular/esm2015/src/pipes/yesno-converter-pipe.js +11 -1
  87. package/angular/esm2015/src/service/gateway.service.js +8 -5
  88. package/angular/esm2015/src/service/notification.service.js +23 -1
  89. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +1042 -1069
  90. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  91. package/angular/package.json +0 -1
  92. package/angular/src/controls/actions/items/action-dropdown/action-dropdown.component.d.ts +2 -0
  93. package/angular/src/controls/actions/items/action-item.component.d.ts +11 -1
  94. package/angular/src/controls/badge/badge-base.component.d.ts +0 -4
  95. package/angular/src/controls/data-table/data-table-column.component.d.ts +2 -1
  96. package/angular/src/controls/data-table/data-table.component.d.ts +4 -0
  97. package/angular/src/controls/dialog/base-dialog.component.d.ts +1 -1
  98. package/angular/src/controls/form/form-field/form-field.component.d.ts +10 -1
  99. package/angular/src/controls/form/form-field/options-form-field/form-field-option.component.d.ts +5 -1
  100. package/angular/src/controls/form/validation-alert/validation-alert.component.d.ts +0 -4
  101. package/angular/src/controls/form/validation-alert/validation-alert.d.ts +0 -1
  102. package/angular/src/controls/horizontal-bar-chart/stacked-horizontal-bar-chart.component.d.ts +16 -0
  103. package/angular/src/controls/icon/layered-icon/layered-icon.component.d.ts +11 -0
  104. package/angular/src/controls/icon/layered-icon/status/status-icon.component.d.ts +13 -2
  105. package/angular/src/controls/loading-wheel/loading-wheel.component.d.ts +16 -0
  106. package/angular/src/controls/master-view/master-view.component.d.ts +1 -0
  107. package/angular/src/controls/pivot/pivot-tab.component.d.ts +0 -1
  108. package/angular/src/controls/pivot/pivot.component.d.ts +4 -0
  109. package/angular/src/controls/settings/common-settings/common-settings.component.d.ts +6 -5
  110. package/angular/src/controls/settings/settings.component.d.ts +27 -0
  111. package/angular/src/controls/settings/settings.module.d.ts +7 -6
  112. package/angular/src/controls/tooltip/tooltip-host.component.d.ts +1 -1
  113. package/angular/src/controls/wizard/wizard.component.d.ts +23 -0
  114. package/angular/src/directives/clamp/clamp.directive.d.ts +5 -0
  115. package/angular/src/directives/markdown/markdown.directive.d.ts +2 -3
  116. package/angular/src/generated/strings.d.ts +9 -0
  117. package/angular/src/guards/experiment.guard.service.d.ts +13 -0
  118. package/angular/src/pipes/boolean-converter-pipe.d.ts +10 -0
  119. package/angular/src/pipes/byte-unit-converter-pipe.d.ts +10 -0
  120. package/angular/src/pipes/enum-converter-pipe.d.ts +15 -0
  121. package/angular/src/pipes/format-pipe.d.ts +10 -0
  122. package/angular/src/pipes/highlight-pipe.d.ts +10 -0
  123. package/angular/src/pipes/yesno-converter-pipe.d.ts +10 -0
  124. package/angular/src/service/gateway.service.d.ts +3 -1
  125. package/angular/src/service/notification.service.d.ts +22 -0
  126. package/core/base/environment.d.ts +7 -0
  127. package/core/base/environment.js.map +1 -1
  128. package/core/base/versioned-object.js +2 -2
  129. package/core/base/versioned-object.js.map +1 -1
  130. package/core/data/cim-stream.js +8 -1
  131. package/core/data/cim-stream.js.map +1 -1
  132. package/core/data/core-environment.d.ts +4 -0
  133. package/core/data/core-environment.js +1 -0
  134. package/core/data/core-environment.js.map +1 -1
  135. package/core/data/crypto.js +10 -9
  136. package/core/data/crypto.js.map +1 -1
  137. package/core/data/file-transfer.js +5 -1
  138. package/core/data/file-transfer.js.map +1 -1
  139. package/core/data/gateway-connection.d.ts +11 -1
  140. package/core/data/gateway-connection.js +51 -9
  141. package/core/data/gateway-connection.js.map +1 -1
  142. package/core/data/http-constants.d.ts +5 -1
  143. package/core/data/http-constants.js +5 -1
  144. package/core/data/http-constants.js.map +1 -1
  145. package/core/data/net.d.ts +15 -11
  146. package/core/data/net.js +44 -41
  147. package/core/data/net.js.map +1 -1
  148. package/core/data/node-connection.d.ts +2 -2
  149. package/core/data/node-connection.js.map +1 -1
  150. package/core/data/powershell-stream.js +11 -3
  151. package/core/data/powershell-stream.js.map +1 -1
  152. package/core/data/powershell.d.ts +17 -1
  153. package/core/data/powershell.js +35 -9
  154. package/core/data/powershell.js.map +1 -1
  155. package/core/data/settings-manager.d.ts +9 -0
  156. package/core/data/settings-manager.js +18 -1
  157. package/core/data/settings-manager.js.map +1 -1
  158. package/core/generated/powershell-scripts.d.ts +5 -4
  159. package/core/generated/powershell-scripts.js +5 -4
  160. package/core/generated/powershell-scripts.js.map +1 -1
  161. package/core/host/host-core-manager.d.ts +36 -0
  162. package/core/host/host-core-manager.js +134 -0
  163. package/core/host/host-core-manager.js.map +1 -0
  164. package/core/host/host-core-message-type.d.ts +12 -0
  165. package/core/host/host-core-message-type.js +17 -0
  166. package/core/host/host-core-message-type.js.map +1 -0
  167. package/core/host/host-core-messages.d.ts +14 -0
  168. package/core/host/host-core-messages.js +3 -0
  169. package/core/host/host-core-messages.js.map +1 -0
  170. package/core/manifest/manifest-loader.d.ts +2 -1
  171. package/core/manifest/manifest-loader.js +27 -18
  172. package/core/manifest/manifest-loader.js.map +1 -1
  173. package/core/notification/notification.js +4 -0
  174. package/core/notification/notification.js.map +1 -1
  175. package/core/security/authorization-manager.d.ts +44 -0
  176. package/core/security/authorization-manager.js +111 -5
  177. package/core/security/authorization-manager.js.map +1 -1
  178. package/core/security/sign-on-manager.d.ts +109 -0
  179. package/core/security/sign-on-manager.js +119 -0
  180. package/core/security/sign-on-manager.js.map +1 -0
  181. package/core/security/tag-manager.js.map +1 -1
  182. package/core/shared/cluster-inventory/cluster-inventory-cache.js +3 -2
  183. package/core/shared/cluster-inventory/cluster-inventory-cache.js.map +1 -1
  184. package/core/shared/gateway-inventory/gateway-inventory-cache.d.ts +1 -1
  185. package/core/shared/gateway-inventory/gateway-inventory-cache.js +1 -1
  186. package/core/shared/gateway-inventory/gateway-inventory-cache.js.map +1 -1
  187. package/core/shared/server-inventory/server-inventory-cache.js +2 -1
  188. package/core/shared/server-inventory/server-inventory-cache.js.map +1 -1
  189. package/core/shared/tool-inventory/tool-inventory-cache.js +1 -1
  190. package/core/shared/tool-inventory/tool-inventory-cache.js.map +1 -1
  191. package/e2e/assets/strings/cs-CZ/strings.json +1 -1
  192. package/e2e/assets/strings/de-DE/strings.json +1 -1
  193. package/e2e/assets/strings/es-ES/strings.json +1 -1
  194. package/e2e/assets/strings/fr-FR/strings.json +1 -1
  195. package/e2e/assets/strings/hu-HU/strings.json +1 -1
  196. package/e2e/assets/strings/it-IT/strings.json +1 -1
  197. package/e2e/assets/strings/ja-JP/strings.json +1 -1
  198. package/e2e/assets/strings/ko-KR/strings.json +1 -1
  199. package/e2e/assets/strings/nl-NL/strings.json +1 -1
  200. package/e2e/assets/strings/pl-PL/strings.json +1 -1
  201. package/e2e/assets/strings/pt-BR/strings.json +1 -1
  202. package/e2e/assets/strings/pt-PT/strings.json +1 -1
  203. package/e2e/assets/strings/ru-RU/strings.json +1 -1
  204. package/e2e/assets/strings/strings.json +1 -1
  205. package/e2e/assets/strings/sv-SE/strings.json +1 -1
  206. package/e2e/assets/strings/tr-TR/strings.json +1 -1
  207. package/e2e/assets/strings/zh-CN/strings.json +1 -1
  208. package/e2e/assets/strings/zh-TW/strings.json +1 -1
  209. package/package.json +5 -5
  210. package/styles/css/fonts.css +2 -2
  211. package/styles/css/main.css +1 -1
  212. package/styles/fonts/ServMDL2/ServMDL2-4.62.woff +0 -0
  213. package/styles/fonts/ServMDL2/ServMDL2.json +238 -2039
  214. package/styles/fonts/ServMDL2/ServMDL2.scss +238 -2039
  215. package/tools/gulp-manifest-resource/index.js +3 -1
  216. package/tools/gulp-manifest-resource/index.js.map +1 -1
  217. package/tools/gulp-ps-cim/index.js +1 -1
  218. package/tools/gulp-ps-cim/index.js.map +1 -1
  219. package/tools/gulp-ps-cim/powershell-cim-config-schema.json +1 -1
  220. package/tools/gulp-ps-code/index.js +36 -2
  221. package/tools/gulp-ps-code/index.js.map +1 -1
  222. package/tools/gulp-ps-code/ps-code-convert.js +4 -8
  223. package/tools/gulp-ps-code/ps-code-convert.js.map +1 -1
  224. package/tools/gulp-ps-resjson/index.js +79 -74
  225. package/tools/gulp-ps-resjson/index.js.map +1 -1
  226. package/tools/module-template/build/pipelines/codeinspector.yml +27 -0
  227. package/tools/module-template/gulpfile.ts/common/lint.ts +3 -3
  228. package/tools/module-template/gulpfile.ts/common/pack.ts +14 -14
  229. package/tools/module-template/gulpfile.ts/common/ui-test-automation.ts +40 -0
  230. package/tools/module-template/gulpfile.ts/common/utilities.ts +10 -10
  231. package/tools/module-template/gulpfile.ts/common/validate.ts +14 -4
  232. package/tools/module-template/gulpfile.ts/index.ts +20 -8
  233. package/tools/wac-cli/src/upgrade/file-updater.d.ts +1 -0
  234. package/tools/wac-cli/src/upgrade/file-updater.js +7 -1
  235. package/tools/wac-cli/src/upgrade/file-updater.js.map +1 -1
  236. package/styles/fonts/ServMDL2/ServMDL2-4.33.woff +0 -0
@@ -37,14 +37,15 @@ export class Crypto {
37
37
  * @return Observable<string> the hash generated.
38
38
  */
39
39
  static encryptRsaSha1(jwk, data) {
40
+ const RsaSha1 = 'Crypto/encryptRsaSha1';
40
41
  let message = '';
41
42
  if (jwk == null) {
42
43
  message = MsftSme.getStrings().MsftSmeShell.Core.Error.ArgumentNullError.message;
43
- return throwError(new Error(message.format('Crypto/encryptRsaSha1', 'jwk')));
44
+ return throwError(new Error(message.format(RsaSha1, 'jwk')));
44
45
  }
45
46
  if (data == null) {
46
47
  message = MsftSme.getStrings().MsftSmeShell.Core.Error.ArgumentNullError.message;
47
- return throwError(new Error(message.format('Crypto/encryptRsaSha1', 'data')));
48
+ return throwError(new Error(message.format(RsaSha1, 'data')));
48
49
  }
49
50
  const root = window;
50
51
  const isIE = !!root.msCrypto;
@@ -64,7 +65,7 @@ export class Crypto {
64
65
  }
65
66
  }
66
67
  message = MsftSme.getStrings().MsftSmeShell.Core.Error.UnknownBrowser.message;
67
- return throwError(new Error(message.format('Crypto/encryptRsaSha1')));
68
+ return throwError(new Error(message.format(RsaSha1)));
68
69
  }
69
70
  /**
70
71
  * sign with HMAC/SHA-256
@@ -105,7 +106,7 @@ export class Crypto {
105
106
  * @return Observable<string> the hash generated.
106
107
  */
107
108
  static hash256WebAPI(subtle, data) {
108
- return Observable.create((observer) => {
109
+ return new Observable((observer) => {
109
110
  const array = Crypto.toUint8Array(data);
110
111
  subtle.digest({ name: 'SHA-256' }, array)
111
112
  .then((hash) => {
@@ -125,7 +126,7 @@ export class Crypto {
125
126
  * @return Observable<string> the hash generated.
126
127
  */
127
128
  static hash256IE(subtle, data) {
128
- return Observable.create((observer) => {
129
+ return new Observable((observer) => {
129
130
  const array = Crypto.toUint8Array(data);
130
131
  const cryptoOp = subtle.digest({ name: 'SHA-256' }, array);
131
132
  cryptoOp.oncomplete = (event) => {
@@ -150,7 +151,7 @@ export class Crypto {
150
151
  * @return Observable<string> the encrypted base64 string.
151
152
  */
152
153
  static encryptRsaWebAPI(subtle, jwkObject, data) {
153
- return Observable.create((observer) => {
154
+ return new Observable((observer) => {
154
155
  const array = Crypto.toUtf8ArrayBuffer(data);
155
156
  subtle.importKey('jwk', jwkObject, Crypto.algRsaOaepSha1Key, false, ['encrypt'])
156
157
  .then((publicKey) => {
@@ -173,7 +174,7 @@ export class Crypto {
173
174
  * @return Observable<string> the encrypted base64 string.
174
175
  */
175
176
  static encryptRsaIE(subtle, jwk, data) {
176
- return Observable.create((observer) => {
177
+ return new Observable((observer) => {
177
178
  const array = Crypto.toUtf8ArrayBuffer(data);
178
179
  const onerror = (error) => {
179
180
  if (!observer.closed) {
@@ -203,7 +204,7 @@ export class Crypto {
203
204
  * @return Observable<string> the encrypted base64 string.
204
205
  */
205
206
  static signHmacWebAPI(subtle, key, data) {
206
- return Observable.create((observer) => {
207
+ return new Observable((observer) => {
207
208
  const array = Crypto.toUtf8ArrayBuffer(data);
208
209
  const keyObject = Crypto.toArrayBufferView(window.atob(key));
209
210
  subtle.importKey('raw', keyObject, Crypto.algHmacSha256Key, false, ['sign'])
@@ -227,7 +228,7 @@ export class Crypto {
227
228
  * @return Observable<string> the encrypted base64 string.
228
229
  */
229
230
  static signHmacIE(subtle, key, data) {
230
- return Observable.create((observer) => {
231
+ return new Observable((observer) => {
231
232
  const array = Crypto.toUtf8ArrayBuffer(data);
232
233
  const onerror = (error) => {
233
234
  if (!observer.closed) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/crypto.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,iBAAiB,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAY,EAAE,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAS5D;;;GAGG;AACH,MAAM,OAAO,MAAM;IAIf;;;;;OAKG;IACI,MAAM,CAAC,SAAS,CAAC,IAAY;QAChC,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAChG,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SAC5E;QAED,MAAM,IAAI,GAAQ,MAAM,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC9B,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACvD;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9D,IAAI,MAAM,EAAE;gBACR,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aAC7C;SACJ;QAED,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,cAAc,CAAC,GAAW,EAAE,IAAY;QAClD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC1F,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SAChF;QAED,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC1F,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACjF;QAED,MAAM,IAAI,GAAQ,MAAM,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC9B,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC/D;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC,IAAI,MAAM,EAAE;gBACR,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;aAC3D;YAED,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAClC,IAAI,MAAM,EAAE;gBACR,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC/C,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;aAC1D;SACJ;QAED,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QACvF,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,QAAQ,CAAC,GAAW,EAAE,IAAY;QAC5C,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC1F,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SAC1E;QAED,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC1F,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACjF;QAED,MAAM,IAAI,GAAQ,MAAM,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC9B,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC7D;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9D,IAAI,MAAM,EAAE;gBACR,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;aACnD;SACJ;QAED,OAAO,GAAG,OAAO,CAAC,UAAU,EAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;QACvF,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,aAAa,CAAC,MAAoB,EAAE,IAAY;QAC3D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,QAA0B,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;iBACpC,IAAI,CACL,CAAC,IAAiB,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,EACD,CAAC,KAAU,EAAE,EAAE;gBACX,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,SAAS,CAAC,MAAW,EAAE,IAAY;QAC9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,QAA0B,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAQ,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;YAChE,QAAQ,CAAC,UAAU,GAAG,CAAC,KAAU,EAAE,EAAE;gBACjC,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,CAAC;YACF,QAAQ,CAAC,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE;gBAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC;YACF,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,gBAAgB,CAAC,MAAoB,EAAE,SAAc,EAAE,IAAY;QAC9E,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,QAA0B,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC3E,IAAI,CAAC,CAAC,SAAc,EAAE,EAAE;gBACrB,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAO,KAAK,CAAC,CAAC;YAC3E,CAAC,CAAC;iBACD,IAAI,CACL,CAAC,MAAmB,EAAE,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,EACD,CAAC,KAAU,EAAE,EAAE;gBACX,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,YAAY,CAAC,MAAW,EAAE,GAAW,EAAE,IAAY;QAC9D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,QAA0B,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,WAAW,GAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACzG,WAAW,CAAC,UAAU,GAAG,CAAC,0BAA+B,EAAE,EAAE;gBACzD,MAAM,SAAS,GAAQ,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChE,MAAM,SAAS,GAAQ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClF,SAAS,CAAC,UAAU,GAAG,CAAC,wBAA6B,EAAE,EAAE;oBACrD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3E,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACxB,CAAC,CAAC;gBACF,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;YAChC,CAAC,CAAC;YACF,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,cAAc,CAAC,MAAoB,EAAE,GAAW,EAAE,IAAY;QACzE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,QAA0B,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAQ,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;iBACvE,IAAI,CAAC,CAAC,SAAc,EAAE,EAAE;gBACrB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAO,KAAK,CAAC,CAAC;YACvE,CAAC,CAAC;iBACD,IAAI,CACL,CAAC,MAAmB,EAAE,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,EACD,CAAC,KAAU,EAAE,EAAE;gBACX,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,UAAU,CAAC,MAAW,EAAE,GAAW,EAAE,IAAY;QAC5D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,QAA0B,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,MAAM,WAAW,GAAQ,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACrG,WAAW,CAAC,UAAU,GAAG,CAAC,gBAAqB,EAAE,EAAE;gBAC/C,MAAM,SAAS,GAAQ,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;gBACtD,MAAM,SAAS,GAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC9E,SAAS,CAAC,UAAU,GAAG,CAAC,cAAmB,EAAE,EAAE;oBAC3C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBACjE,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACxB,CAAC,CAAC;gBACF,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;YAChC,CAAC,CAAC;YACF,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,WAAW,CAAC,KAAkB;QACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;SAClD;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,YAAY,CAAC,IAAY;QACpC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,+BAA+B;YAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YACtB,8BAA8B;SACjC;QAED,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,iBAAiB,CAAC,IAAY;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,UAAU,CAAC,IAAY;QAClC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,aAAa,CAAC,IAAY;QACrC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAChC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,iBAAiB,CAAC,IAAY;QACzC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAChC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,YAAY,CAAC,IAAiB;QACzC,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;;AAjXc,wBAAiB,GAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;AACvE,uBAAgB,GAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC","file":"crypto.js","sourcesContent":["\r\nimport * as base64ArrayBuffer from 'base64-arraybuffer';\r\nimport { Observable, Observer, of, throwError } from 'rxjs';\r\nimport { Strings } from '../generated/strings';\r\n\r\n/**\r\n * Unescape non-binary string code\r\n * @param data A value representing original non-binary string code\r\n */\r\ndeclare function unescape(data: string): string;\r\n\r\n/**\r\n * Web Crypto interface class.\r\n * @dynamic\r\n */\r\nexport class Crypto {\r\n private static algRsaOaepSha1Key: any = { name: 'RSA-OAEP', hash: { name: 'SHA-1' } };\r\n private static algHmacSha256Key: any = { name: 'HMAC', hash: { name: 'SHA-256' } };\r\n\r\n /**\r\n * hash with SHA-256\r\n * (If it doesn't support web based crypto, encode as base64.)\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n public static getSha256(data: string): Observable<string> {\r\n if (data == null) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/getSha256', 'data')));\r\n }\r\n\r\n const root = <any>window;\r\n const isIE = !!root.msCrypto;\r\n if (isIE && root.msCrypto.subtle) {\r\n return Crypto.hash256IE(root.msCrypto.subtle, data);\r\n }\r\n\r\n if (root.crypto) {\r\n const subtle = root.crypto.subtle || root.crypto.webkitSubtle;\r\n if (subtle) {\r\n return Crypto.hash256WebAPI(subtle, data);\r\n }\r\n }\r\n\r\n return of(window.btoa(data));\r\n }\r\n\r\n /**\r\n * encrypt with RSA/SHA-1\r\n *\r\n * @param jwk the JSON Web Key. Single string with JSON.stringify format.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n public static encryptRsaSha1(jwk: string, data: string): Observable<string> {\r\n let message = '';\r\n if (jwk == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/encryptRsaSha1', 'jwk')));\r\n }\r\n\r\n if (data == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/encryptRsaSha1', 'data')));\r\n }\r\n\r\n const root = <any>window;\r\n const isIE = !!root.msCrypto;\r\n if (isIE && root.msCrypto.subtle) {\r\n return Crypto.encryptRsaIE(root.msCrypto.subtle, jwk, data);\r\n }\r\n\r\n if (root.crypto) {\r\n let subtle = root.crypto.subtle;\r\n if (subtle) {\r\n const jwkObject = JSON.parse(jwk);\r\n return Crypto.encryptRsaWebAPI(subtle, jwkObject, data);\r\n }\r\n\r\n subtle = root.crypto.webkitSubtle;\r\n if (subtle) {\r\n const jwkArray = Crypto.toArrayBufferView(jwk);\r\n return Crypto.encryptRsaWebAPI(subtle, jwkArray, data);\r\n }\r\n }\r\n\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.UnknownBrowser.message;\r\n return throwError(new Error(message.format('Crypto/encryptRsaSha1')));\r\n }\r\n\r\n /**\r\n * sign with HMAC/SHA-256\r\n *\r\n * @param key the key (base64 encoded).\r\n * @param data the original data to hash. (unicode - not utf8)\r\n * @return Observable<string> the hash generated.\r\n */\r\n public static signHmac(key: string, data: string): Observable<string> {\r\n let message = '';\r\n if (key == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/signHmac', 'key')));\r\n }\r\n\r\n if (data == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/encryptRsaSha1', 'data')));\r\n }\r\n\r\n const root = <any>window;\r\n const isIE = !!root.msCrypto;\r\n if (isIE && root.msCrypto.subtle) {\r\n return Crypto.signHmacIE(root.msCrypto.subtle, key, data);\r\n }\r\n\r\n if (root.crypto) {\r\n const subtle = root.crypto.subtle || root.crypto.webkitSubtle;\r\n if (subtle) {\r\n return Crypto.signHmacWebAPI(subtle, key, data);\r\n }\r\n }\r\n\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.UnknownBrowser.message;\r\n return throwError(new Error(message.format('Crypto/signHmac')));\r\n }\r\n\r\n /**\r\n * Hash with SHA-256 for WebAPI.\r\n *\r\n * @param subtle the Web API subtle.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n private static hash256WebAPI(subtle: SubtleCrypto, data: string): Observable<string> {\r\n return Observable.create((observer: Observer<string>) => {\r\n const array = Crypto.toUint8Array(data);\r\n subtle.digest({ name: 'SHA-256' }, array)\r\n .then(\r\n (hash: ArrayBuffer) => {\r\n const hexText = Crypto.toHexString(hash);\r\n observer.next(hexText);\r\n observer.complete();\r\n },\r\n (error: any) => {\r\n observer.error(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Hash with SHA-256 for IE/Older API.\r\n *\r\n * @param subtle the older API subtle.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n private static hash256IE(subtle: any, data: string): Observable<string> {\r\n return Observable.create((observer: Observer<string>) => {\r\n const array = Crypto.toUint8Array(data);\r\n const cryptoOp: any = subtle.digest({ name: 'SHA-256' }, array);\r\n cryptoOp.oncomplete = (event: any) => {\r\n const hexText = Crypto.toHexString(event.target.result);\r\n observer.next(hexText);\r\n observer.complete();\r\n };\r\n cryptoOp.onerror = (error: any) => {\r\n if (!observer.closed) {\r\n observer.error(error);\r\n }\r\n };\r\n cryptoOp.finish();\r\n });\r\n }\r\n\r\n /**\r\n * Encrypt with RSA/SHA-1 for WebAPI.\r\n *\r\n * @param subtle the Web API subtle.\r\n * @param jwkObject the JSON Web key object or ArrayBufferView on webkit.\r\n * @param data the original data to encrypt.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static encryptRsaWebAPI(subtle: SubtleCrypto, jwkObject: any, data: string): Observable<string> {\r\n return Observable.create((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n subtle.importKey('jwk', jwkObject, Crypto.algRsaOaepSha1Key, false, ['encrypt'])\r\n .then((publicKey: any) => {\r\n return subtle.encrypt(Crypto.algRsaOaepSha1Key, publicKey, <any>array);\r\n })\r\n .then(\r\n (result: ArrayBuffer) => {\r\n observer.next(Crypto.createBase64(result));\r\n observer.complete();\r\n },\r\n (error: any) => {\r\n observer.error(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Encrypt with RSA/SHA-1 for IE/Older API.\r\n *\r\n * @param subtle the older API subtle.\r\n * @param jwk the JSON Web key format (Stringfiy).\r\n * @param data the original data to hash.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static encryptRsaIE(subtle: any, jwk: string, data: string): Observable<string> {\r\n return Observable.create((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n const onerror = (error: any) => {\r\n if (!observer.closed) {\r\n observer.error(error);\r\n }\r\n };\r\n const jwkBytes = Crypto.toArrayBuffer(jwk);\r\n const importKeyOp: any = subtle.importKey('jwk', jwkBytes, Crypto.algRsaOaepSha1Key, false, ['encrypt']);\r\n importKeyOp.oncomplete = (importKeyOpOnCompleteEvent: any) => {\r\n const publicKey: any = importKeyOpOnCompleteEvent.target.result;\r\n const encryptOp: any = subtle.encrypt(Crypto.algRsaOaepSha1Key, publicKey, array);\r\n encryptOp.oncomplete = (encryptOpOnCompleteEvent: any) => {\r\n observer.next(Crypto.createBase64(encryptOpOnCompleteEvent.target.result));\r\n observer.complete();\r\n };\r\n encryptOp.onerror = onerror;\r\n };\r\n importKeyOp.onerror = onerror;\r\n });\r\n }\r\n\r\n /**\r\n * Sign with HMAC for WebAPI.\r\n *\r\n * @param subtle the Web API subtle.\r\n * @param key the key.\r\n * @param data the original data to encrypt.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static signHmacWebAPI(subtle: SubtleCrypto, key: string, data: string): Observable<string> {\r\n return Observable.create((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n const keyObject = <any>Crypto.toArrayBufferView(window.atob(key));\r\n subtle.importKey('raw', keyObject, Crypto.algHmacSha256Key, false, ['sign'])\r\n .then((publicKey: any) => {\r\n return subtle.sign(Crypto.algHmacSha256Key, publicKey, <any>array);\r\n })\r\n .then(\r\n (result: ArrayBuffer) => {\r\n observer.next(Crypto.createBase64(result));\r\n observer.complete();\r\n },\r\n (error: any) => {\r\n observer.error(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Sign with HMAC for IE/Older API.\r\n *\r\n * @param subtle the older API subtle.\r\n * @param jwk the key.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static signHmacIE(subtle: any, key: string, data: string): Observable<string> {\r\n return Observable.create((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n const onerror = (error: any) => {\r\n if (!observer.closed) {\r\n observer.error(error);\r\n }\r\n };\r\n const keyBytes = Crypto.toArrayBuffer(window.atob(key));\r\n const importKeyOp: any = subtle.importKey('raw', keyBytes, Crypto.algHmacSha256Key, false, ['sign']);\r\n importKeyOp.oncomplete = (importKeyOpEvent: any) => {\r\n const publicKey: any = importKeyOpEvent.target.result;\r\n const encryptOp: any = subtle.sign(Crypto.algHmacSha256Key, publicKey, array);\r\n encryptOp.oncomplete = (encryptOpEvent: any) => {\r\n observer.next(Crypto.createBase64(encryptOpEvent.target.result));\r\n observer.complete();\r\n };\r\n encryptOp.onerror = onerror;\r\n };\r\n importKeyOp.onerror = onerror;\r\n });\r\n }\r\n\r\n /**\r\n * Create hex string from byte raw data.\r\n *\r\n * @param bytes the array buffer.\r\n * @return string the hex string.\r\n */\r\n private static toHexString(bytes: ArrayBuffer): string {\r\n const array = new Uint8Array(bytes);\r\n let hexText = '';\r\n for (let i = 0; i < array.length; i++) {\r\n const hex = array[i].toString(16);\r\n hexText += (hex.length === 1 ? '0' : '') + hex;\r\n }\r\n\r\n return hexText;\r\n }\r\n\r\n /**\r\n * Create Uint8Array from a string.\r\n *\r\n * @param data The string data.\r\n * @return Uint8Array The bytes array.\r\n */\r\n private static toUint8Array(data: string): Uint8Array {\r\n const temp: number[] = [];\r\n for (let i = 0; i < data.length; i++) {\r\n const ch = data.charCodeAt(i);\r\n /* tslint:disable:no-bitwise */\r\n temp.push((ch & 0x0ff00) >> 8);\r\n temp.push(ch & 0x0ff);\r\n /* tslint:enable:no-bitwise */\r\n }\r\n\r\n return new Uint8Array(temp);\r\n }\r\n\r\n /**\r\n * Create ArrayBuffer from a string with unicode.\r\n *\r\n * @param data The string data.\r\n * @return ArrayBuffer The bytes array.\r\n */\r\n private static toUtf8ArrayBuffer(data: string): ArrayBuffer {\r\n const utf8 = Crypto.utf8Encode(data);\r\n return Crypto.toArrayBuffer(utf8);\r\n }\r\n\r\n /**\r\n * Encode utf8 string.\r\n *\r\n * @param data the unencoded string.\r\n */\r\n private static utf8Encode(data: string): string {\r\n return unescape(encodeURIComponent(data));\r\n }\r\n\r\n /**\r\n * Create ArrayBuffer from a string with unicode.\r\n *\r\n * @param data The string data.\r\n * @return ArrayBuffer The bytes array.\r\n */\r\n private static toArrayBuffer(data: string): ArrayBuffer {\r\n const buffer = new ArrayBuffer(data.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < buffer.byteLength; i++) {\r\n view[i] = data.charCodeAt(i);\r\n }\r\n\r\n return buffer;\r\n }\r\n\r\n /**\r\n * Create ArrayBufferView from a string with unicode.\r\n *\r\n * @param data The string data.\r\n * @return ArrayBuffer The bytes array.\r\n */\r\n private static toArrayBufferView(data: string): ArrayBufferView {\r\n const buffer = new ArrayBuffer(data.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < buffer.byteLength; i++) {\r\n view[i] = data.charCodeAt(i);\r\n }\r\n\r\n return view;\r\n }\r\n\r\n /**\r\n * Create base64 from byte data.\r\n *\r\n * @param data The byte data.\r\n * @return string The base64 encoded data.\r\n */\r\n private static createBase64(data: ArrayBuffer): string {\r\n return base64ArrayBuffer.encode(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/data/crypto.ts"],"names":[],"mappings":"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","file":"crypto.js","sourcesContent":["\r\nimport * as base64ArrayBuffer from 'base64-arraybuffer';\r\nimport { Observable, Observer, of, throwError } from 'rxjs';\r\nimport { Strings } from '../generated/strings';\r\n\r\n/**\r\n * Unescape non-binary string code\r\n * @param data A value representing original non-binary string code\r\n */\r\ndeclare function unescape(data: string): string;\r\n\r\n/**\r\n * Web Crypto interface class.\r\n * @dynamic\r\n */\r\nexport class Crypto {\r\n private static algRsaOaepSha1Key: any = { name: 'RSA-OAEP', hash: { name: 'SHA-1' } };\r\n private static algHmacSha256Key: any = { name: 'HMAC', hash: { name: 'SHA-256' } };\r\n\r\n /**\r\n * hash with SHA-256\r\n * (If it doesn't support web based crypto, encode as base64.)\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n public static getSha256(data: string): Observable<string> {\r\n if (data == null) {\r\n const message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/getSha256', 'data')));\r\n }\r\n\r\n const root = <any>window;\r\n const isIE = !!root.msCrypto;\r\n if (isIE && root.msCrypto.subtle) {\r\n return Crypto.hash256IE(root.msCrypto.subtle, data);\r\n }\r\n\r\n if (root.crypto) {\r\n const subtle = root.crypto.subtle || root.crypto.webkitSubtle;\r\n if (subtle) {\r\n return Crypto.hash256WebAPI(subtle, data);\r\n }\r\n }\r\n\r\n return of(window.btoa(data));\r\n }\r\n\r\n /**\r\n * encrypt with RSA/SHA-1\r\n *\r\n * @param jwk the JSON Web Key. Single string with JSON.stringify format.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n public static encryptRsaSha1(jwk: string, data: string): Observable<string> {\r\n const RsaSha1 = 'Crypto/encryptRsaSha1';\r\n let message = '';\r\n if (jwk == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format(RsaSha1, 'jwk')));\r\n }\r\n\r\n if (data == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format(RsaSha1, 'data')));\r\n }\r\n\r\n const root = <any>window;\r\n const isIE = !!root.msCrypto;\r\n if (isIE && root.msCrypto.subtle) {\r\n return Crypto.encryptRsaIE(root.msCrypto.subtle, jwk, data);\r\n }\r\n\r\n if (root.crypto) {\r\n let subtle = root.crypto.subtle;\r\n if (subtle) {\r\n const jwkObject = JSON.parse(jwk);\r\n return Crypto.encryptRsaWebAPI(subtle, jwkObject, data);\r\n }\r\n\r\n subtle = root.crypto.webkitSubtle;\r\n if (subtle) {\r\n const jwkArray = Crypto.toArrayBufferView(jwk);\r\n return Crypto.encryptRsaWebAPI(subtle, jwkArray, data);\r\n }\r\n }\r\n\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.UnknownBrowser.message;\r\n return throwError(new Error(message.format(RsaSha1)));\r\n }\r\n\r\n /**\r\n * sign with HMAC/SHA-256\r\n *\r\n * @param key the key (base64 encoded).\r\n * @param data the original data to hash. (unicode - not utf8)\r\n * @return Observable<string> the hash generated.\r\n */\r\n public static signHmac(key: string, data: string): Observable<string> {\r\n let message = '';\r\n if (key == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/signHmac', 'key')));\r\n }\r\n\r\n if (data == null) {\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.ArgumentNullError.message;\r\n return throwError(new Error(message.format('Crypto/encryptRsaSha1', 'data')));\r\n }\r\n\r\n const root = <any>window;\r\n const isIE = !!root.msCrypto;\r\n if (isIE && root.msCrypto.subtle) {\r\n return Crypto.signHmacIE(root.msCrypto.subtle, key, data);\r\n }\r\n\r\n if (root.crypto) {\r\n const subtle = root.crypto.subtle || root.crypto.webkitSubtle;\r\n if (subtle) {\r\n return Crypto.signHmacWebAPI(subtle, key, data);\r\n }\r\n }\r\n\r\n message = MsftSme.getStrings<Strings>().MsftSmeShell.Core.Error.UnknownBrowser.message;\r\n return throwError(new Error(message.format('Crypto/signHmac')));\r\n }\r\n\r\n /**\r\n * Hash with SHA-256 for WebAPI.\r\n *\r\n * @param subtle the Web API subtle.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n private static hash256WebAPI(subtle: SubtleCrypto, data: string): Observable<string> {\r\n return new Observable((observer: Observer<string>) => {\r\n const array = Crypto.toUint8Array(data);\r\n subtle.digest({ name: 'SHA-256' }, array)\r\n .then(\r\n (hash: ArrayBuffer) => {\r\n const hexText = Crypto.toHexString(hash);\r\n observer.next(hexText);\r\n observer.complete();\r\n },\r\n (error: any) => {\r\n observer.error(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Hash with SHA-256 for IE/Older API.\r\n *\r\n * @param subtle the older API subtle.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the hash generated.\r\n */\r\n private static hash256IE(subtle: any, data: string): Observable<string> {\r\n return new Observable((observer: Observer<string>) => {\r\n const array = Crypto.toUint8Array(data);\r\n const cryptoOp: any = subtle.digest({ name: 'SHA-256' }, array);\r\n cryptoOp.oncomplete = (event: any) => {\r\n const hexText = Crypto.toHexString(event.target.result);\r\n observer.next(hexText);\r\n observer.complete();\r\n };\r\n cryptoOp.onerror = (error: any) => {\r\n if (!observer.closed) {\r\n observer.error(error);\r\n }\r\n };\r\n cryptoOp.finish();\r\n });\r\n }\r\n\r\n /**\r\n * Encrypt with RSA/SHA-1 for WebAPI.\r\n *\r\n * @param subtle the Web API subtle.\r\n * @param jwkObject the JSON Web key object or ArrayBufferView on webkit.\r\n * @param data the original data to encrypt.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static encryptRsaWebAPI(subtle: SubtleCrypto, jwkObject: any, data: string): Observable<string> {\r\n return new Observable((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n subtle.importKey('jwk', jwkObject, Crypto.algRsaOaepSha1Key, false, ['encrypt'])\r\n .then((publicKey: any) => {\r\n return subtle.encrypt(Crypto.algRsaOaepSha1Key, publicKey, <any>array);\r\n })\r\n .then(\r\n (result: ArrayBuffer) => {\r\n observer.next(Crypto.createBase64(result));\r\n observer.complete();\r\n },\r\n (error: any) => {\r\n observer.error(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Encrypt with RSA/SHA-1 for IE/Older API.\r\n *\r\n * @param subtle the older API subtle.\r\n * @param jwk the JSON Web key format (Stringfiy).\r\n * @param data the original data to hash.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static encryptRsaIE(subtle: any, jwk: string, data: string): Observable<string> {\r\n return new Observable((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n const onerror = (error: any) => {\r\n if (!observer.closed) {\r\n observer.error(error);\r\n }\r\n };\r\n const jwkBytes = Crypto.toArrayBuffer(jwk);\r\n const importKeyOp: any = subtle.importKey('jwk', jwkBytes, Crypto.algRsaOaepSha1Key, false, ['encrypt']);\r\n importKeyOp.oncomplete = (importKeyOpOnCompleteEvent: any) => {\r\n const publicKey: any = importKeyOpOnCompleteEvent.target.result;\r\n const encryptOp: any = subtle.encrypt(Crypto.algRsaOaepSha1Key, publicKey, array);\r\n encryptOp.oncomplete = (encryptOpOnCompleteEvent: any) => {\r\n observer.next(Crypto.createBase64(encryptOpOnCompleteEvent.target.result));\r\n observer.complete();\r\n };\r\n encryptOp.onerror = onerror;\r\n };\r\n importKeyOp.onerror = onerror;\r\n });\r\n }\r\n\r\n /**\r\n * Sign with HMAC for WebAPI.\r\n *\r\n * @param subtle the Web API subtle.\r\n * @param key the key.\r\n * @param data the original data to encrypt.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static signHmacWebAPI(subtle: SubtleCrypto, key: string, data: string): Observable<string> {\r\n return new Observable((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n const keyObject = <any>Crypto.toArrayBufferView(window.atob(key));\r\n subtle.importKey('raw', keyObject, Crypto.algHmacSha256Key, false, ['sign'])\r\n .then((publicKey: any) => {\r\n return subtle.sign(Crypto.algHmacSha256Key, publicKey, <any>array);\r\n })\r\n .then(\r\n (result: ArrayBuffer) => {\r\n observer.next(Crypto.createBase64(result));\r\n observer.complete();\r\n },\r\n (error: any) => {\r\n observer.error(error);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Sign with HMAC for IE/Older API.\r\n *\r\n * @param subtle the older API subtle.\r\n * @param jwk the key.\r\n * @param data the original data to hash.\r\n * @return Observable<string> the encrypted base64 string.\r\n */\r\n private static signHmacIE(subtle: any, key: string, data: string): Observable<string> {\r\n return new Observable((observer: Observer<string>) => {\r\n const array = Crypto.toUtf8ArrayBuffer(data);\r\n const onerror = (error: any) => {\r\n if (!observer.closed) {\r\n observer.error(error);\r\n }\r\n };\r\n const keyBytes = Crypto.toArrayBuffer(window.atob(key));\r\n const importKeyOp: any = subtle.importKey('raw', keyBytes, Crypto.algHmacSha256Key, false, ['sign']);\r\n importKeyOp.oncomplete = (importKeyOpEvent: any) => {\r\n const publicKey: any = importKeyOpEvent.target.result;\r\n const encryptOp: any = subtle.sign(Crypto.algHmacSha256Key, publicKey, array);\r\n encryptOp.oncomplete = (encryptOpEvent: any) => {\r\n observer.next(Crypto.createBase64(encryptOpEvent.target.result));\r\n observer.complete();\r\n };\r\n encryptOp.onerror = onerror;\r\n };\r\n importKeyOp.onerror = onerror;\r\n });\r\n }\r\n\r\n /**\r\n * Create hex string from byte raw data.\r\n *\r\n * @param bytes the array buffer.\r\n * @return string the hex string.\r\n */\r\n private static toHexString(bytes: ArrayBuffer): string {\r\n const array = new Uint8Array(bytes);\r\n let hexText = '';\r\n for (let i = 0; i < array.length; i++) {\r\n const hex = array[i].toString(16);\r\n hexText += (hex.length === 1 ? '0' : '') + hex;\r\n }\r\n\r\n return hexText;\r\n }\r\n\r\n /**\r\n * Create Uint8Array from a string.\r\n *\r\n * @param data The string data.\r\n * @return Uint8Array The bytes array.\r\n */\r\n private static toUint8Array(data: string): Uint8Array {\r\n const temp: number[] = [];\r\n for (let i = 0; i < data.length; i++) {\r\n const ch = data.charCodeAt(i);\r\n /* tslint:disable:no-bitwise */\r\n temp.push((ch & 0x0ff00) >> 8);\r\n temp.push(ch & 0x0ff);\r\n /* tslint:enable:no-bitwise */\r\n }\r\n\r\n return new Uint8Array(temp);\r\n }\r\n\r\n /**\r\n * Create ArrayBuffer from a string with unicode.\r\n *\r\n * @param data The string data.\r\n * @return ArrayBuffer The bytes array.\r\n */\r\n private static toUtf8ArrayBuffer(data: string): ArrayBuffer {\r\n const utf8 = Crypto.utf8Encode(data);\r\n return Crypto.toArrayBuffer(utf8);\r\n }\r\n\r\n /**\r\n * Encode utf8 string.\r\n *\r\n * @param data the unencoded string.\r\n */\r\n private static utf8Encode(data: string): string {\r\n return unescape(encodeURIComponent(data));\r\n }\r\n\r\n /**\r\n * Create ArrayBuffer from a string with unicode.\r\n *\r\n * @param data The string data.\r\n * @return ArrayBuffer The bytes array.\r\n */\r\n private static toArrayBuffer(data: string): ArrayBuffer {\r\n const buffer = new ArrayBuffer(data.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < buffer.byteLength; i++) {\r\n view[i] = data.charCodeAt(i);\r\n }\r\n\r\n return buffer;\r\n }\r\n\r\n /**\r\n * Create ArrayBufferView from a string with unicode.\r\n *\r\n * @param data The string data.\r\n * @return ArrayBuffer The bytes array.\r\n */\r\n private static toArrayBufferView(data: string): ArrayBufferView {\r\n const buffer = new ArrayBuffer(data.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < buffer.byteLength; i++) {\r\n view[i] = data.charCodeAt(i);\r\n }\r\n\r\n return view;\r\n }\r\n\r\n /**\r\n * Create base64 from byte data.\r\n *\r\n * @param data The byte data.\r\n * @return string The base64 encoded data.\r\n */\r\n private static createBase64(data: ArrayBuffer): string {\r\n return base64ArrayBuffer.encode(data);\r\n }\r\n}\r\n"]}
@@ -311,14 +311,18 @@ export class FileTransfer {
311
311
  });
312
312
  }
313
313
  newRequestHeaders(node, options) {
314
- const request = { headers: {} };
314
+ const request = this.gatewayConnection.defaultHttpSecureOptions;
315
315
  this.authorizationManager.addAuthorizationRequestHeader(request, node);
316
316
  const headers = new Headers();
317
+ const authAadToken = request.headers[headerConstants.SME_AAD_AUTHORIZATION];
317
318
  const authToken = request.headers[headerConstants.SME_AUTHORIZATION];
318
319
  const useLaps = request.headers[headerConstants.USE_LAPS];
319
320
  const xsfrToken = Cookie.getCrossSiteRequestForgeryToken();
320
321
  const { logAudit, logTelemetry } = options.logging;
321
322
  headers.append(headerConstants.MODULE_NAME, this.nameOfModule);
323
+ if (authAadToken) {
324
+ headers.append(headerConstants.SME_AAD_AUTHORIZATION, authAadToken);
325
+ }
322
326
  if (authToken) {
323
327
  headers.append(headerConstants.SME_AUTHORIZATION, authToken);
324
328
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/data/file-transfer.ts"],"names":[],"mappings":"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","file":"file-transfer.js","sourcesContent":["import { from, Observable } from 'rxjs';\r\nimport { AjaxError, AjaxRequest } from 'rxjs/ajax';\r\nimport { map } from 'rxjs/operators';\r\nimport { CancellationToken } from '../async/cancellation';\r\nimport { Progress } from '../async/progress';\r\nimport { ErrorMonitor } from '../diagnostics/error-monitor';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { Cookie } from './cookie';\r\nimport { GatewayConnection } from './gateway-connection';\r\nimport { ApiVersion } from './gateway-url-builder';\r\nimport { headerConstants, HttpStatusCode } from './http-constants';\r\nimport { NativeQ } from './native-q';\r\nimport { NodeConnection, NodeRequest } from './node-connection';\r\nimport { UriBuilder } from './uri-builder';\r\n\r\nexport interface FileOptions {\r\n /**\r\n * Indicates that audit logging for this request should be made. Default is false.\r\n */\r\n logAudit?: boolean;\r\n\r\n /**\r\n * Indicates that telemetry logging for this request should be made. Default is false.\r\n */\r\n logTelemetry?: boolean;\r\n}\r\n\r\n/** Represents a object that transfers files */\r\nexport class FileTransfer {\r\n\r\n private moduleName = null;\r\n\r\n /**\r\n * Downloads a blob of data\r\n *\r\n * @param blob the blob of data to download\r\n * @param fileName the name of the file for the user to download.\r\n */\r\n public static downloadBlob(blob: Blob, fileName: string) {\r\n let useAnchorTagForDownload = true;\r\n\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n // This is for IE and Microsoft Edge < 16\r\n // for those cases the download anchor tag doesn't generate the right name so we use the MS download system instead\r\n // \"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\"\r\n const ua = navigator.userAgent;\r\n const edgeIndex = ua.indexOf('Edge');\r\n if (edgeIndex > 0) {\r\n const dotIndex = ua.indexOf('.', edgeIndex);\r\n let versionNumber = 0;\r\n if (dotIndex > 0) {\r\n const versionString = ua.substring(edgeIndex + 'Edge'.length + 1, dotIndex);\r\n versionNumber = Number(versionString);\r\n }\r\n\r\n useAnchorTagForDownload = versionNumber > 15;\r\n } else {\r\n useAnchorTagForDownload = false;\r\n }\r\n }\r\n\r\n if (useAnchorTagForDownload) {\r\n const downloadLink = document.createElement('a');\r\n downloadLink.style.display = 'none';\r\n\r\n const url = URL.createObjectURL(blob);\r\n downloadLink.setAttribute('href', url);\r\n downloadLink.setAttribute('download', fileName);\r\n downloadLink.click();\r\n downloadLink.remove();\r\n } else {\r\n window.navigator.msSaveOrOpenBlob(blob, fileName);\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to a file.\r\n *\r\n * @param filePath the file path we are navigating to.\r\n */\r\n public static navigateToFile(filePath: string): void {\r\n const downloadLink = document.createElement('a');\r\n downloadLink.style.display = 'none';\r\n downloadLink.setAttribute('href', filePath);\r\n downloadLink.click();\r\n downloadLink.remove();\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the FileTransfer class.\r\n *\r\n * @param nodeConnection the NodeConnection class instance.\r\n * @param gatewayConnection the GatewayConnection class instance.\r\n * @param authorizationManager the AuthorizationManager class instance.\r\n */\r\n constructor(\r\n private nodeConnection: NodeConnection,\r\n private gatewayConnection: GatewayConnection,\r\n private authorizationManager: AuthorizationManager) {\r\n }\r\n\r\n private static generateRanges(ranges: ContentRange[], segmentSize: number, totalSize: number): void {\r\n const offset = segmentSize - 1;\r\n const max = totalSize - 1;\r\n\r\n for (let first = 0, last = offset; first < max; first += offset + 1, last = Math.min(++last + offset, max)) {\r\n ranges.push(new ContentRange(first, last, totalSize));\r\n }\r\n }\r\n\r\n private static extractNode(input: string) {\r\n const url = new URL(input);\r\n const segments = url.pathname.split('/');\r\n return segments[3];\r\n }\r\n\r\n /**\r\n * The GET call to file transfer endpoint and manual download of stream\r\n *\r\n * @param nodeName the node to transfer the file from.\r\n * @param sourcePath the path of the remote file to transfer.\r\n * @param targetName the desired name for the downloaded file.\r\n * @param fileOptions the file options for the action.\r\n * @return Observable<Blob> the observable Blob object.\r\n */\r\n public transferFile(\r\n nodeName: string,\r\n sourcePath: string,\r\n targetName: string,\r\n fileOptions?: FileOptions): Observable<Blob> {\r\n const relativeUrl = this.gatewayConnection.url().node(nodeName).makeRelative().fileTransfer().file(sourcePath).build();\r\n const headers = {\r\n Accept: 'application/octet-stream'\r\n };\r\n const token = Cookie.getCrossSiteRequestForgeryToken();\r\n\r\n if (token) {\r\n headers[headerConstants.CROSS_SITE_REQUEST_FORGERY_TOKEN] = token;\r\n }\r\n\r\n const request = <NodeRequest>{ headers: headers, responseType: 'blob' };\r\n\r\n if (fileOptions) {\r\n request.logAudit = fileOptions.logAudit;\r\n request.logTelemetry = fileOptions.logTelemetry;\r\n }\r\n\r\n return this.nodeConnection.get(nodeName, relativeUrl, request)\r\n .pipe(map((responseBlob: Blob) => {\r\n FileTransfer.downloadBlob(responseBlob, targetName);\r\n return responseBlob;\r\n }));\r\n }\r\n\r\n /**\r\n * Upload a file from fileObject.\r\n *\r\n * @deprecated Use upload instead.\r\n * @param nodeName the node to upload the file to.\r\n * @param path the file path to store on the target node.\r\n * @param fileObject the file object created on the UI.\r\n * @param fileOptions the file options for the action.\r\n * @return Observable<any> the observable object.\r\n */\r\n public uploadFile(nodeName: string, path: string, fileObject: File, fileOptions?: FileOptions): Observable<any> {\r\n const deferred = NativeQ.defer<any>();\r\n const formData = new FormData();\r\n formData.append('file-0', fileObject);\r\n const request = new XMLHttpRequest();\r\n const url = this.gatewayConnection.url().node(nodeName).fileTransfer().file(path).build();\r\n const handler = () => {\r\n if (request.readyState === 4 /* complete */) {\r\n if (request.status === HttpStatusCode.Ok || request.status === HttpStatusCode.Created) {\r\n deferred.resolve(request.responseText);\r\n } else {\r\n ErrorMonitor.current.reportErrorFromAjax(\r\n <AjaxError>{\r\n status: request.status,\r\n xhr: request,\r\n request: { url, method: 'POST'}\r\n });\r\n\r\n const uploadError = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error;\r\n const message = request.status === HttpStatusCode.CorsRequestFailed ? uploadError.FileNotFound\r\n : (request.status === HttpStatusCode.BadRequest ? uploadError.OperationBlocked\r\n : uploadError.Unknown.format(request.status));\r\n deferred.reject({ xhr: request, message: message });\r\n }\r\n }\r\n };\r\n\r\n let tokenValue: string;\r\n const ajaxRequest = <AjaxRequest>{ headers: {} };\r\n this.authorizationManager.addAuthorizationRequestHeader(ajaxRequest, nodeName);\r\n request.open('PUT', url);\r\n request.withCredentials = true;\r\n\r\n tokenValue = ajaxRequest.headers[headerConstants.SME_AUTHORIZATION];\r\n if (tokenValue) {\r\n request.setRequestHeader(headerConstants.SME_AUTHORIZATION, tokenValue);\r\n }\r\n\r\n tokenValue = ajaxRequest.headers[headerConstants.USE_LAPS];\r\n if (tokenValue) {\r\n request.setRequestHeader(headerConstants.USE_LAPS, tokenValue);\r\n\r\n // If ajaxRequest.headers[LAPS_LOCALADMINNAME] will always have default of 'administrator',\r\n // so no need to check if it exists and not null\r\n request.setRequestHeader(headerConstants.LAPS_LOCALADMINNAME, ajaxRequest.headers[headerConstants.LAPS_LOCALADMINNAME]);\r\n }\r\n\r\n if (fileOptions) {\r\n if (fileOptions.logAudit === true || fileOptions.logAudit === false) {\r\n request.setRequestHeader(headerConstants.LOG_AUDIT, fileOptions.logAudit ? 'true' : 'false');\r\n }\r\n\r\n if (fileOptions.logTelemetry === true || fileOptions.logTelemetry === false) {\r\n request.setRequestHeader(headerConstants.LOG_TELEMETRY, fileOptions.logTelemetry ? 'true' : 'false');\r\n }\r\n }\r\n\r\n const token = Cookie.getCrossSiteRequestForgeryToken();\r\n if (token) {\r\n request.setRequestHeader(headerConstants.CROSS_SITE_REQUEST_FORGERY_TOKEN, token);\r\n }\r\n\r\n request.setRequestHeader(headerConstants.MODULE_NAME, this.nameOfModule);\r\n request.onreadystatechange = handler;\r\n request.send(formData);\r\n return from(deferred.promise);\r\n }\r\n\r\n /**\r\n * Uploads the specified file.\r\n * @param node The target computer to upload the file to.\r\n * @param path The path on the target computer to upload the file to.\r\n * @param file The file to upload.\r\n * @param options The file upload options.\r\n * @param cancellationToken The token that can be used to cancel the operation.\r\n * @returns An observable object that contains the result of the file transfer.\r\n */\r\n public upload(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions = new FileUploadOptions(),\r\n cancellationToken: CancellationToken = CancellationToken.NONE\r\n ): Observable<FileTransferResult> {\r\n\r\n return from(this.uploadAsync(node, path, file, options, cancellationToken));\r\n }\r\n\r\n private uploadAsync(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken): Promise<FileTransferResult> {\r\n\r\n // if the file size <= transfer size, then just transfer the file all at once,\r\n // which will be much faster than the multi - request flow for a single transfer\r\n if (file.size <= options.transferSize) {\r\n return this.uploadAllAtOnce(node, path, file, options, cancellationToken);\r\n }\r\n\r\n return this.uploadInParts(node, path, file, options, cancellationToken);\r\n }\r\n\r\n private async uploadAllAtOnce(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken): Promise<FileTransferResult> {\r\n\r\n const url = this.gatewayConnection.url().node(node).fileTransfer().file(path).build();\r\n const headers = this.newRequestHeaders(node, options);\r\n const transfer = new FileTransferInfo(file.size, 1);\r\n const result = new FileTransferResult(new FileTransferContinuation(null, null, file, transfer));\r\n\r\n do {\r\n const response = await fetch(url, { method: 'PUT', credentials: 'include', headers: headers, body: file });\r\n\r\n switch (response.status) {\r\n case HttpStatusCode.Ok:\r\n case HttpStatusCode.Created:\r\n case HttpStatusCode.NoContent:\r\n transfer.incrementCompleted();\r\n return result;\r\n }\r\n }\r\n while (!cancellationToken.isCancellationRequested);\r\n\r\n cancellationToken.throwIfCancellationRequested();\r\n }\r\n\r\n private async uploadInParts(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Promise<FileTransferResult> {\r\n\r\n const continuation = await this.newUpload(node, path, file, options, cancellationToken);\r\n let canceled = cancellationToken.isCancellationRequested;\r\n let error: Error = null;\r\n\r\n if (!canceled) {\r\n error = await this.uploadRanges(continuation, options, cancellationToken);\r\n canceled = error !== null || cancellationToken.isCancellationRequested;\r\n }\r\n\r\n if (canceled && options.cancellationBehavior === FileTransferCancellationBehavior.Cancel) {\r\n try {\r\n // cancel the file transfer if an error occurred or the caller requested cancellation\r\n await this.cancelUpload(continuation);\r\n } catch (e) {\r\n // unable to cancel (e.g. clean up) the file transfer\r\n // if cancellation occurred from an error, rethrow it now\r\n if (error !== null) {\r\n throw error;\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n return new FileTransferResult();\r\n }\r\n\r\n return new FileTransferResult(continuation);\r\n }\r\n\r\n /**\r\n * Resumes a previously started file upload.\r\n * @param continuation The information required to continue the file transfer.\r\n * @param progress The object used to report the progress of the upload.\r\n * @param cancellationToken The token that can be used to cancel the operation.\r\n */\r\n public resumeUpload(\r\n continuation: FileTransferContinuation,\r\n progress: Progress<number> = new NoProgress(),\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Observable<void> {\r\n\r\n return from(this.resumeUploadAsync(continuation, progress, cancellationToken));\r\n }\r\n\r\n private async resumeUploadAsync(\r\n continuation: FileTransferContinuation,\r\n progress: Progress<number> = new NoProgress(),\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Promise<void> {\r\n\r\n const transferSize = continuation.transfer.size;\r\n const options = new FileUploadOptions(transferSize, FileTransferCancellationBehavior.Pause, progress);\r\n const error = await this.uploadRanges(continuation, options, cancellationToken);\r\n\r\n if (error !== null) {\r\n throw error;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Cancels a previously started file upload.\r\n * @param continuation The information required to cancel the file transfer.\r\n */\r\n public cancelUpload(continuation: FileTransferContinuation): Observable<void> {\r\n return from(this.cancelUploadAsync(continuation));\r\n }\r\n\r\n private async cancelUploadAsync(continuation: FileTransferContinuation): Promise<void> {\r\n const url = continuation.location;\r\n const node = FileTransfer.extractNode(url);\r\n const headers = this.newRequestHeaders(node, new FileUploadOptions());\r\n let attempts = 0;\r\n\r\n headers.append(headerConstants.IF_MATCH, continuation.token);\r\n\r\n do {\r\n const response = await fetch(url, { method: 'DELETE', credentials: 'include', headers: headers });\r\n const statusCode = response.status;\r\n\r\n // canceled or a new transfer was started\r\n if (statusCode === HttpStatusCode.NoContent || statusCode === HttpStatusCode.PreconditionFailed) {\r\n break;\r\n }\r\n\r\n switch (statusCode) {\r\n case HttpStatusCode.Conflict:\r\n break;\r\n case HttpStatusCode.BadGateway:\r\n case HttpStatusCode.ServiceUnavailable:\r\n if (++attempts > 3) {\r\n const giveUpMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n throw new Error(giveUpMessage.format(statusCode));\r\n }\r\n break;\r\n default:\r\n const unknownMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n throw new Error(unknownMessage.format(statusCode));\r\n }\r\n\r\n } while (true);\r\n\r\n return null;\r\n }\r\n\r\n private newRequestHeaders(node: string, options: FileUploadOptions): Headers {\r\n const request = <AjaxRequest>{ headers: {} };\r\n\r\n this.authorizationManager.addAuthorizationRequestHeader(request, node);\r\n\r\n const headers = new Headers();\r\n const authToken = request.headers[headerConstants.SME_AUTHORIZATION];\r\n const useLaps = request.headers[headerConstants.USE_LAPS];\r\n const xsfrToken = Cookie.getCrossSiteRequestForgeryToken();\r\n const { logAudit, logTelemetry } = options.logging;\r\n\r\n headers.append(headerConstants.MODULE_NAME, this.nameOfModule);\r\n\r\n if (authToken) {\r\n headers.append(headerConstants.SME_AUTHORIZATION, authToken);\r\n }\r\n\r\n if (useLaps) {\r\n headers.append(headerConstants.USE_LAPS, useLaps);\r\n headers.append(headerConstants.LAPS_LOCALADMINNAME, request.headers[headerConstants.LAPS_LOCALADMINNAME]);\r\n }\r\n\r\n if (xsfrToken) {\r\n headers.append(headerConstants.CROSS_SITE_REQUEST_FORGERY_TOKEN, xsfrToken);\r\n }\r\n\r\n if (logAudit !== undefined) {\r\n headers.append(headerConstants.LOG_AUDIT, logAudit.toString());\r\n }\r\n\r\n if (logTelemetry !== undefined) {\r\n headers.append(headerConstants.LOG_TELEMETRY, logTelemetry.toString());\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n private async newUpload(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Promise<FileTransferContinuation> {\r\n\r\n const url = this.gatewayConnection.url().node(node).fileTransfer().file(path).build();\r\n const lastModified = new Date(file.lastModified).toISOString();\r\n const headers = this.newRequestHeaders(node, options);\r\n let response: Response;\r\n let retry = false;\r\n\r\n headers.append(headerConstants.CONTENT_DISPOSITION, `create; size=${file.size}; modification-date=\"${lastModified}\"`);\r\n\r\n do {\r\n response = await fetch(url, { method: 'POST', credentials: 'include', headers: headers });\r\n retry = response.status === HttpStatusCode.Conflict;\r\n } while (retry && !cancellationToken.isCancellationRequested);\r\n\r\n switch (response.status) {\r\n case HttpStatusCode.Created:\r\n const builder = new UriBuilder(response.headers.get(headerConstants.LOCATION));\r\n\r\n // it's the client's job to tell the server which api version they want to use;\r\n // the location header will not contain the query parameter\r\n builder.setQueryParameter('api-version', ApiVersion.Latest);\r\n\r\n const location = builder.toString();\r\n const etag = response.headers.get(headerConstants.ETAG);\r\n const ranges = new Array<ContentRange>();\r\n\r\n FileTransfer.generateRanges(ranges, options.transferSize, file.size);\r\n\r\n const transfer = new FileTransferInfo(options.transferSize, ranges.length);\r\n const continuation = new FileTransferContinuation(location, etag, file, transfer, ranges);\r\n\r\n return continuation;\r\n case HttpStatusCode.Forbidden:\r\n case HttpStatusCode.Conflict:\r\n const blockedMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.OperationBlocked;\r\n throw new Error(blockedMessage);\r\n default:\r\n const unknownMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n throw new Error(unknownMessage.format(response.status));\r\n }\r\n }\r\n\r\n private async uploadRanges(\r\n continuation: FileTransferContinuation,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken): Promise<Error> {\r\n\r\n const node = FileTransfer.extractNode(continuation.location);\r\n const progress = options.progress;\r\n const ranges = continuation.ranges;\r\n const transfer = continuation.transfer;\r\n const remaining = continuation.ranges.length;\r\n const promises = new Map<number, Promise<HttpTransferResult>>();\r\n\r\n // start up to 3 uploads in parallel\r\n for (let i = 0; i < remaining && i < 3; i++) {\r\n promises.set(i, this.uploadPartialFile(i, node, continuation, ranges.shift(), options));\r\n }\r\n\r\n while (promises.size > 0 && !cancellationToken.isCancellationRequested) {\r\n // wait for first completed upload\r\n const result = await Promise.race(promises.values());\r\n\r\n switch (result.statusCode) {\r\n case HttpStatusCode.NoContent:\r\n if (ranges.length > 0) {\r\n if (!cancellationToken.isCancellationRequested) {\r\n // start next upload\r\n promises.set(result.index, this.uploadPartialFile(result.index, node, continuation, ranges.shift(), options));\r\n }\r\n } else {\r\n promises.delete(result.index);\r\n }\r\n\r\n transfer.incrementCompleted();\r\n progress.report(transfer.percentComplete);\r\n break;\r\n case HttpStatusCode.Unauthorized:\r\n case HttpStatusCode.Conflict:\r\n case HttpStatusCode.BadGateway:\r\n case HttpStatusCode.ServiceUnavailable:\r\n if (!cancellationToken.isCancellationRequested) {\r\n // retry upload\r\n promises.set(result.index, this.uploadPartialFile(result.index, node, continuation, result.range, options));\r\n }\r\n break;\r\n case HttpStatusCode.Gone:\r\n case HttpStatusCode.PreconditionFailed:\r\n\r\n // burn down promises\r\n promises.delete(result.index);\r\n await Promise.all(promises.values());\r\n promises.clear();\r\n\r\n // clear remaining ranges; the transfer cannot be completed\r\n if (ranges.length > 0) {\r\n ranges.splice(0, ranges.length);\r\n }\r\n break;\r\n default:\r\n const unknownMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n return new Error(unknownMessage.format(result.statusCode));\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private async uploadPartialFile(\r\n index: number,\r\n node: string,\r\n continuation: FileTransferContinuation,\r\n range: ContentRange,\r\n options: FileUploadOptions): Promise<HttpTransferResult> {\r\n\r\n const blob = continuation.file.slice(range.from, range.to + 1);\r\n const headers = this.newRequestHeaders(node, options);\r\n\r\n headers.append(headerConstants.CONTENT_TYPE, 'application/octet-stream');\r\n headers.append(headerConstants.CONTENT_RANGE, range.toString());\r\n headers.append(headerConstants.IF_MATCH, continuation.token);\r\n\r\n const response = await fetch(continuation.location, {\r\n method: 'PATCH',\r\n credentials: 'include',\r\n headers: headers,\r\n body: blob\r\n });\r\n\r\n return new HttpTransferResult(index, response.status, range);\r\n }\r\n\r\n /**\r\n * Gets the name of current shell or module.\r\n */\r\n private get nameOfModule(): string {\r\n if (!this.moduleName) {\r\n this.moduleName = EnvironmentModule.getModuleName();\r\n }\r\n\r\n return this.moduleName;\r\n }\r\n}\r\n\r\n/** Represents the possible cancellation behaviors */\r\nexport enum FileTransferCancellationBehavior {\r\n /** Indicates the file transfer is cancelled or aborted on cancellation */\r\n Cancel,\r\n\r\n /** Indicates the file transfer is paused on cancellation */\r\n Pause,\r\n}\r\n\r\n/** Represents file upload options. */\r\nexport class FileUploadOptions {\r\n constructor(\r\n /** Gets the size of transfer content. The default value is 10MB. */\r\n public readonly transferSize: number = 10485760,\r\n\r\n /** Indicates the behavior to perform if the operation is canceled. */\r\n public readonly cancellationBehavior: FileTransferCancellationBehavior = FileTransferCancellationBehavior.Cancel,\r\n\r\n /** A token that can be used to cancel the operation. */\r\n public readonly progress: Progress<number> = new NoProgress(),\r\n\r\n /** Gets the associated logging options. */\r\n public readonly logging: FileOptions = { logAudit: false, logTelemetry: false }) {\r\n\r\n }\r\n}\r\n\r\n/** Represents the size and progress of a file transfer. */\r\nexport class FileTransferInfo {\r\n private completed = 0;\r\n\r\n constructor(\r\n /** Gets the size used in the file transfer. */\r\n public readonly size: number,\r\n\r\n /** Gets the total number of items in the file transfer. */\r\n public readonly count: number) {\r\n }\r\n\r\n /** Gets the percentage of the file transfer completed. */\r\n public get percentComplete(): number {\r\n return (this.completed / this.count) * 100;\r\n }\r\n\r\n /** Increments the number of completed items in the file transfer. */\r\n public incrementCompleted(): void {\r\n this.completed = Math.min(this.completed + 1, this.count);\r\n }\r\n}\r\n\r\n/** Represents a continuation for a file transfer */\r\nexport class FileTransferContinuation {\r\n constructor(\r\n /** Gets the URl representing the location of the file transfer */\r\n public readonly location: string,\r\n\r\n /** Gets the continuation token for the file transfer */\r\n public readonly token: string,\r\n\r\n /** Gets the file being transferred */\r\n public readonly file: File,\r\n\r\n /** Gets the file transfer information. */\r\n public readonly transfer: FileTransferInfo,\r\n\r\n /** Gets the remaining ranges in the file transfer */\r\n public readonly ranges: ContentRange[] = new Array<ContentRange>()) {\r\n }\r\n}\r\n\r\n/** Represents the result of a file transfer */\r\nexport class FileTransferResult {\r\n constructor(\r\n /** Gets the continuation token associated with the file transfer */\r\n public readonly continuation: FileTransferContinuation =\r\n new FileTransferContinuation(null, null, null, new FileTransferInfo(0, 0))) {\r\n\r\n }\r\n\r\n /** Gets a value indicating whether the file transfer is complete */\r\n public get completed(): boolean {\r\n return this.continuation.ranges.length === 0;\r\n }\r\n\r\n /** Gets a value indicating whether the file transfer is resumable */\r\n public get resumable() {\r\n return !this.completed &&\r\n this.continuation.token !== null &&\r\n this.continuation.location !== null &&\r\n this.continuation.file !== null;\r\n }\r\n}\r\n\r\n/** Represent a range of content in a file transfer */\r\nexport class ContentRange {\r\n constructor(\r\n /** Gets the zero-based start of the content, in bytes */\r\n // tslint:disable-next-line:no-shadowed-variable\r\n public readonly from: number,\r\n\r\n /** Gets the zero-based end of the content, in bytes */\r\n public readonly to: number,\r\n\r\n /** Gets the total size of the content in bytes */\r\n public readonly totalSize: number) {\r\n\r\n }\r\n\r\n /** Returns the string representation of the object */\r\n public toString(): string {\r\n return `bytes ${this.from}-${this.to}/${this.totalSize}`;\r\n }\r\n}\r\n\r\nclass NoProgress implements Progress<number> {\r\n public report(value: number): void {\r\n\r\n }\r\n}\r\n\r\nclass HttpTransferResult {\r\n constructor(\r\n public readonly index: number,\r\n public readonly statusCode: number,\r\n public readonly range: ContentRange) {\r\n\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/data/file-transfer.ts"],"names":[],"mappings":"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","file":"file-transfer.js","sourcesContent":["import { from, Observable } from 'rxjs';\r\nimport { AjaxError, AjaxRequest } from 'rxjs/ajax';\r\nimport { map } from 'rxjs/operators';\r\nimport { CancellationToken } from '../async/cancellation';\r\nimport { Progress } from '../async/progress';\r\nimport { ErrorMonitor } from '../diagnostics/error-monitor';\r\nimport { Strings } from '../generated/strings';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { AuthorizationManager } from '../security/authorization-manager';\r\nimport { Cookie } from './cookie';\r\nimport { GatewayConnection } from './gateway-connection';\r\nimport { ApiVersion } from './gateway-url-builder';\r\nimport { headerConstants, HttpStatusCode } from './http-constants';\r\nimport { NativeQ } from './native-q';\r\nimport { NodeConnection, NodeRequest } from './node-connection';\r\nimport { UriBuilder } from './uri-builder';\r\n\r\nexport interface FileOptions {\r\n /**\r\n * Indicates that audit logging for this request should be made. Default is false.\r\n */\r\n logAudit?: boolean;\r\n\r\n /**\r\n * Indicates that telemetry logging for this request should be made. Default is false.\r\n */\r\n logTelemetry?: boolean;\r\n}\r\n\r\n/** Represents a object that transfers files */\r\nexport class FileTransfer {\r\n\r\n private moduleName = null;\r\n\r\n /**\r\n * Downloads a blob of data\r\n *\r\n * @param blob the blob of data to download\r\n * @param fileName the name of the file for the user to download.\r\n */\r\n public static downloadBlob(blob: Blob, fileName: string) {\r\n let useAnchorTagForDownload = true;\r\n\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n // This is for IE and Microsoft Edge < 16\r\n // for those cases the download anchor tag doesn't generate the right name so we use the MS download system instead\r\n // \"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\"\r\n const ua = navigator.userAgent;\r\n const edgeIndex = ua.indexOf('Edge');\r\n if (edgeIndex > 0) {\r\n const dotIndex = ua.indexOf('.', edgeIndex);\r\n let versionNumber = 0;\r\n if (dotIndex > 0) {\r\n const versionString = ua.substring(edgeIndex + 'Edge'.length + 1, dotIndex);\r\n versionNumber = Number(versionString);\r\n }\r\n\r\n useAnchorTagForDownload = versionNumber > 15;\r\n } else {\r\n useAnchorTagForDownload = false;\r\n }\r\n }\r\n\r\n if (useAnchorTagForDownload) {\r\n const downloadLink = document.createElement('a');\r\n downloadLink.style.display = 'none';\r\n\r\n const url = URL.createObjectURL(blob);\r\n downloadLink.setAttribute('href', url);\r\n downloadLink.setAttribute('download', fileName);\r\n downloadLink.click();\r\n downloadLink.remove();\r\n } else {\r\n window.navigator.msSaveOrOpenBlob(blob, fileName);\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to a file.\r\n *\r\n * @param filePath the file path we are navigating to.\r\n */\r\n public static navigateToFile(filePath: string): void {\r\n const downloadLink = document.createElement('a');\r\n downloadLink.style.display = 'none';\r\n downloadLink.setAttribute('href', filePath);\r\n downloadLink.click();\r\n downloadLink.remove();\r\n }\r\n\r\n /**\r\n * Initializes a new instance of the FileTransfer class.\r\n *\r\n * @param nodeConnection the NodeConnection class instance.\r\n * @param gatewayConnection the GatewayConnection class instance.\r\n * @param authorizationManager the AuthorizationManager class instance.\r\n */\r\n constructor(\r\n private nodeConnection: NodeConnection,\r\n private gatewayConnection: GatewayConnection,\r\n private authorizationManager: AuthorizationManager) {\r\n }\r\n\r\n private static generateRanges(ranges: ContentRange[], segmentSize: number, totalSize: number): void {\r\n const offset = segmentSize - 1;\r\n const max = totalSize - 1;\r\n\r\n for (let first = 0, last = offset; first < max; first += offset + 1, last = Math.min(++last + offset, max)) {\r\n ranges.push(new ContentRange(first, last, totalSize));\r\n }\r\n }\r\n\r\n private static extractNode(input: string) {\r\n const url = new URL(input);\r\n const segments = url.pathname.split('/');\r\n return segments[3];\r\n }\r\n\r\n /**\r\n * The GET call to file transfer endpoint and manual download of stream\r\n *\r\n * @param nodeName the node to transfer the file from.\r\n * @param sourcePath the path of the remote file to transfer.\r\n * @param targetName the desired name for the downloaded file.\r\n * @param fileOptions the file options for the action.\r\n * @return Observable<Blob> the observable Blob object.\r\n */\r\n public transferFile(\r\n nodeName: string,\r\n sourcePath: string,\r\n targetName: string,\r\n fileOptions?: FileOptions): Observable<Blob> {\r\n const relativeUrl = this.gatewayConnection.url().node(nodeName).makeRelative().fileTransfer().file(sourcePath).build();\r\n const headers = {\r\n Accept: 'application/octet-stream'\r\n };\r\n const token = Cookie.getCrossSiteRequestForgeryToken();\r\n\r\n if (token) {\r\n headers[headerConstants.CROSS_SITE_REQUEST_FORGERY_TOKEN] = token;\r\n }\r\n\r\n const request = <NodeRequest>{ headers: headers, responseType: 'blob' };\r\n\r\n if (fileOptions) {\r\n request.logAudit = fileOptions.logAudit;\r\n request.logTelemetry = fileOptions.logTelemetry;\r\n }\r\n\r\n return this.nodeConnection.get(nodeName, relativeUrl, request)\r\n .pipe(map((responseBlob: Blob) => {\r\n FileTransfer.downloadBlob(responseBlob, targetName);\r\n return responseBlob;\r\n }));\r\n }\r\n\r\n /**\r\n * Upload a file from fileObject.\r\n *\r\n * @deprecated Use upload instead.\r\n * @param nodeName the node to upload the file to.\r\n * @param path the file path to store on the target node.\r\n * @param fileObject the file object created on the UI.\r\n * @param fileOptions the file options for the action.\r\n * @return Observable<any> the observable object.\r\n */\r\n public uploadFile(nodeName: string, path: string, fileObject: File, fileOptions?: FileOptions): Observable<any> {\r\n const deferred = NativeQ.defer<any>();\r\n const formData = new FormData();\r\n formData.append('file-0', fileObject);\r\n const request = new XMLHttpRequest();\r\n const url = this.gatewayConnection.url().node(nodeName).fileTransfer().file(path).build();\r\n const handler = () => {\r\n if (request.readyState === 4 /* complete */) {\r\n if (request.status === HttpStatusCode.Ok || request.status === HttpStatusCode.Created) {\r\n deferred.resolve(request.responseText);\r\n } else {\r\n ErrorMonitor.current.reportErrorFromAjax(\r\n <AjaxError>{\r\n status: request.status,\r\n xhr: request,\r\n request: { url, method: 'POST'}\r\n });\r\n\r\n const uploadError = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error;\r\n const message = request.status === HttpStatusCode.CorsRequestFailed ? uploadError.FileNotFound\r\n : (request.status === HttpStatusCode.BadRequest ? uploadError.OperationBlocked\r\n : uploadError.Unknown.format(request.status));\r\n deferred.reject({ xhr: request, message: message });\r\n }\r\n }\r\n };\r\n\r\n let tokenValue: string;\r\n const ajaxRequest = <AjaxRequest>{ headers: {} };\r\n this.authorizationManager.addAuthorizationRequestHeader(ajaxRequest, nodeName);\r\n request.open('PUT', url);\r\n request.withCredentials = true;\r\n\r\n tokenValue = ajaxRequest.headers[headerConstants.SME_AUTHORIZATION];\r\n if (tokenValue) {\r\n request.setRequestHeader(headerConstants.SME_AUTHORIZATION, tokenValue);\r\n }\r\n\r\n tokenValue = ajaxRequest.headers[headerConstants.USE_LAPS];\r\n if (tokenValue) {\r\n request.setRequestHeader(headerConstants.USE_LAPS, tokenValue);\r\n\r\n // If ajaxRequest.headers[LAPS_LOCALADMINNAME] will always have default of 'administrator',\r\n // so no need to check if it exists and not null\r\n request.setRequestHeader(headerConstants.LAPS_LOCALADMINNAME, ajaxRequest.headers[headerConstants.LAPS_LOCALADMINNAME]);\r\n }\r\n\r\n if (fileOptions) {\r\n if (fileOptions.logAudit === true || fileOptions.logAudit === false) {\r\n request.setRequestHeader(headerConstants.LOG_AUDIT, fileOptions.logAudit ? 'true' : 'false');\r\n }\r\n\r\n if (fileOptions.logTelemetry === true || fileOptions.logTelemetry === false) {\r\n request.setRequestHeader(headerConstants.LOG_TELEMETRY, fileOptions.logTelemetry ? 'true' : 'false');\r\n }\r\n }\r\n\r\n const token = Cookie.getCrossSiteRequestForgeryToken();\r\n if (token) {\r\n request.setRequestHeader(headerConstants.CROSS_SITE_REQUEST_FORGERY_TOKEN, token);\r\n }\r\n\r\n request.setRequestHeader(headerConstants.MODULE_NAME, this.nameOfModule);\r\n request.onreadystatechange = handler;\r\n request.send(formData);\r\n return from(deferred.promise);\r\n }\r\n\r\n /**\r\n * Uploads the specified file.\r\n * @param node The target computer to upload the file to.\r\n * @param path The path on the target computer to upload the file to.\r\n * @param file The file to upload.\r\n * @param options The file upload options.\r\n * @param cancellationToken The token that can be used to cancel the operation.\r\n * @returns An observable object that contains the result of the file transfer.\r\n */\r\n public upload(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions = new FileUploadOptions(),\r\n cancellationToken: CancellationToken = CancellationToken.NONE\r\n ): Observable<FileTransferResult> {\r\n\r\n return from(this.uploadAsync(node, path, file, options, cancellationToken));\r\n }\r\n\r\n private uploadAsync(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken): Promise<FileTransferResult> {\r\n\r\n // if the file size <= transfer size, then just transfer the file all at once,\r\n // which will be much faster than the multi - request flow for a single transfer\r\n if (file.size <= options.transferSize) {\r\n return this.uploadAllAtOnce(node, path, file, options, cancellationToken);\r\n }\r\n\r\n return this.uploadInParts(node, path, file, options, cancellationToken);\r\n }\r\n\r\n private async uploadAllAtOnce(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken): Promise<FileTransferResult> {\r\n\r\n const url = this.gatewayConnection.url().node(node).fileTransfer().file(path).build();\r\n const headers = this.newRequestHeaders(node, options);\r\n const transfer = new FileTransferInfo(file.size, 1);\r\n const result = new FileTransferResult(new FileTransferContinuation(null, null, file, transfer));\r\n\r\n do {\r\n const response = await fetch(url, { method: 'PUT', credentials: 'include', headers: headers, body: file });\r\n\r\n switch (response.status) {\r\n case HttpStatusCode.Ok:\r\n case HttpStatusCode.Created:\r\n case HttpStatusCode.NoContent:\r\n transfer.incrementCompleted();\r\n return result;\r\n }\r\n }\r\n while (!cancellationToken.isCancellationRequested);\r\n\r\n cancellationToken.throwIfCancellationRequested();\r\n }\r\n\r\n private async uploadInParts(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Promise<FileTransferResult> {\r\n\r\n const continuation = await this.newUpload(node, path, file, options, cancellationToken);\r\n let canceled = cancellationToken.isCancellationRequested;\r\n let error: Error = null;\r\n\r\n if (!canceled) {\r\n error = await this.uploadRanges(continuation, options, cancellationToken);\r\n canceled = error !== null || cancellationToken.isCancellationRequested;\r\n }\r\n\r\n if (canceled && options.cancellationBehavior === FileTransferCancellationBehavior.Cancel) {\r\n try {\r\n // cancel the file transfer if an error occurred or the caller requested cancellation\r\n await this.cancelUpload(continuation);\r\n } catch (e) {\r\n // unable to cancel (e.g. clean up) the file transfer\r\n // if cancellation occurred from an error, rethrow it now\r\n if (error !== null) {\r\n throw error;\r\n }\r\n\r\n throw e;\r\n }\r\n\r\n return new FileTransferResult();\r\n }\r\n\r\n return new FileTransferResult(continuation);\r\n }\r\n\r\n /**\r\n * Resumes a previously started file upload.\r\n * @param continuation The information required to continue the file transfer.\r\n * @param progress The object used to report the progress of the upload.\r\n * @param cancellationToken The token that can be used to cancel the operation.\r\n */\r\n public resumeUpload(\r\n continuation: FileTransferContinuation,\r\n progress: Progress<number> = new NoProgress(),\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Observable<void> {\r\n\r\n return from(this.resumeUploadAsync(continuation, progress, cancellationToken));\r\n }\r\n\r\n private async resumeUploadAsync(\r\n continuation: FileTransferContinuation,\r\n progress: Progress<number> = new NoProgress(),\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Promise<void> {\r\n\r\n const transferSize = continuation.transfer.size;\r\n const options = new FileUploadOptions(transferSize, FileTransferCancellationBehavior.Pause, progress);\r\n const error = await this.uploadRanges(continuation, options, cancellationToken);\r\n\r\n if (error !== null) {\r\n throw error;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Cancels a previously started file upload.\r\n * @param continuation The information required to cancel the file transfer.\r\n */\r\n public cancelUpload(continuation: FileTransferContinuation): Observable<void> {\r\n return from(this.cancelUploadAsync(continuation));\r\n }\r\n\r\n private async cancelUploadAsync(continuation: FileTransferContinuation): Promise<void> {\r\n const url = continuation.location;\r\n const node = FileTransfer.extractNode(url);\r\n const headers = this.newRequestHeaders(node, new FileUploadOptions());\r\n let attempts = 0;\r\n\r\n headers.append(headerConstants.IF_MATCH, continuation.token);\r\n\r\n do {\r\n const response = await fetch(url, { method: 'DELETE', credentials: 'include', headers: headers });\r\n const statusCode = response.status;\r\n\r\n // canceled or a new transfer was started\r\n if (statusCode === HttpStatusCode.NoContent || statusCode === HttpStatusCode.PreconditionFailed) {\r\n break;\r\n }\r\n\r\n switch (statusCode) {\r\n case HttpStatusCode.Conflict:\r\n break;\r\n case HttpStatusCode.BadGateway:\r\n case HttpStatusCode.ServiceUnavailable:\r\n if (++attempts > 3) {\r\n const giveUpMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n throw new Error(giveUpMessage.format(statusCode));\r\n }\r\n break;\r\n default:\r\n const unknownMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n throw new Error(unknownMessage.format(statusCode));\r\n }\r\n\r\n } while (true);\r\n\r\n return null;\r\n }\r\n\r\n private newRequestHeaders(node: string, options: FileUploadOptions): Headers {\r\n const request = this.gatewayConnection.defaultHttpSecureOptions;\r\n\r\n this.authorizationManager.addAuthorizationRequestHeader(request, node);\r\n\r\n const headers = new Headers();\r\n const authAadToken = request.headers[headerConstants.SME_AAD_AUTHORIZATION];\r\n const authToken = request.headers[headerConstants.SME_AUTHORIZATION];\r\n const useLaps = request.headers[headerConstants.USE_LAPS];\r\n const xsfrToken = Cookie.getCrossSiteRequestForgeryToken();\r\n const { logAudit, logTelemetry } = options.logging;\r\n\r\n headers.append(headerConstants.MODULE_NAME, this.nameOfModule);\r\n\r\n if (authAadToken) {\r\n headers.append(headerConstants.SME_AAD_AUTHORIZATION, authAadToken);\r\n }\r\n\r\n if (authToken) {\r\n headers.append(headerConstants.SME_AUTHORIZATION, authToken);\r\n }\r\n\r\n if (useLaps) {\r\n headers.append(headerConstants.USE_LAPS, useLaps);\r\n headers.append(headerConstants.LAPS_LOCALADMINNAME, request.headers[headerConstants.LAPS_LOCALADMINNAME]);\r\n }\r\n\r\n if (xsfrToken) {\r\n headers.append(headerConstants.CROSS_SITE_REQUEST_FORGERY_TOKEN, xsfrToken);\r\n }\r\n\r\n if (logAudit !== undefined) {\r\n headers.append(headerConstants.LOG_AUDIT, logAudit.toString());\r\n }\r\n\r\n if (logTelemetry !== undefined) {\r\n headers.append(headerConstants.LOG_TELEMETRY, logTelemetry.toString());\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n private async newUpload(\r\n node: string,\r\n path: string,\r\n file: File,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken = CancellationToken.NONE): Promise<FileTransferContinuation> {\r\n\r\n const url = this.gatewayConnection.url().node(node).fileTransfer().file(path).build();\r\n const lastModified = new Date(file.lastModified).toISOString();\r\n const headers = this.newRequestHeaders(node, options);\r\n let response: Response;\r\n let retry = false;\r\n\r\n headers.append(headerConstants.CONTENT_DISPOSITION, `create; size=${file.size}; modification-date=\"${lastModified}\"`);\r\n\r\n do {\r\n response = await fetch(url, { method: 'POST', credentials: 'include', headers: headers });\r\n retry = response.status === HttpStatusCode.Conflict;\r\n } while (retry && !cancellationToken.isCancellationRequested);\r\n\r\n switch (response.status) {\r\n case HttpStatusCode.Created:\r\n const builder = new UriBuilder(response.headers.get(headerConstants.LOCATION));\r\n\r\n // it's the client's job to tell the server which api version they want to use;\r\n // the location header will not contain the query parameter\r\n builder.setQueryParameter('api-version', ApiVersion.Latest);\r\n\r\n const location = builder.toString();\r\n const etag = response.headers.get(headerConstants.ETAG);\r\n const ranges = new Array<ContentRange>();\r\n\r\n FileTransfer.generateRanges(ranges, options.transferSize, file.size);\r\n\r\n const transfer = new FileTransferInfo(options.transferSize, ranges.length);\r\n const continuation = new FileTransferContinuation(location, etag, file, transfer, ranges);\r\n\r\n return continuation;\r\n case HttpStatusCode.Forbidden:\r\n case HttpStatusCode.Conflict:\r\n const blockedMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.OperationBlocked;\r\n throw new Error(blockedMessage);\r\n default:\r\n const unknownMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n throw new Error(unknownMessage.format(response.status));\r\n }\r\n }\r\n\r\n private async uploadRanges(\r\n continuation: FileTransferContinuation,\r\n options: FileUploadOptions,\r\n cancellationToken: CancellationToken): Promise<Error> {\r\n\r\n const node = FileTransfer.extractNode(continuation.location);\r\n const progress = options.progress;\r\n const ranges = continuation.ranges;\r\n const transfer = continuation.transfer;\r\n const remaining = continuation.ranges.length;\r\n const promises = new Map<number, Promise<HttpTransferResult>>();\r\n\r\n // start up to 3 uploads in parallel\r\n for (let i = 0; i < remaining && i < 3; i++) {\r\n promises.set(i, this.uploadPartialFile(i, node, continuation, ranges.shift(), options));\r\n }\r\n\r\n while (promises.size > 0 && !cancellationToken.isCancellationRequested) {\r\n // wait for first completed upload\r\n const result = await Promise.race(promises.values());\r\n\r\n switch (result.statusCode) {\r\n case HttpStatusCode.NoContent:\r\n if (ranges.length > 0) {\r\n if (!cancellationToken.isCancellationRequested) {\r\n // start next upload\r\n promises.set(result.index, this.uploadPartialFile(result.index, node, continuation, ranges.shift(), options));\r\n }\r\n } else {\r\n promises.delete(result.index);\r\n }\r\n\r\n transfer.incrementCompleted();\r\n progress.report(transfer.percentComplete);\r\n break;\r\n case HttpStatusCode.Unauthorized:\r\n case HttpStatusCode.Conflict:\r\n case HttpStatusCode.BadGateway:\r\n case HttpStatusCode.ServiceUnavailable:\r\n if (!cancellationToken.isCancellationRequested) {\r\n // retry upload\r\n promises.set(result.index, this.uploadPartialFile(result.index, node, continuation, result.range, options));\r\n }\r\n break;\r\n case HttpStatusCode.Gone:\r\n case HttpStatusCode.PreconditionFailed:\r\n\r\n // burn down promises\r\n promises.delete(result.index);\r\n await Promise.all(promises.values());\r\n promises.clear();\r\n\r\n // clear remaining ranges; the transfer cannot be completed\r\n if (ranges.length > 0) {\r\n ranges.splice(0, ranges.length);\r\n }\r\n break;\r\n default:\r\n const unknownMessage = MsftSme.getStrings<Strings>().MsftSmeShell.Core.DirectoryList.Upload.Error.Unknown;\r\n return new Error(unknownMessage.format(result.statusCode));\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private async uploadPartialFile(\r\n index: number,\r\n node: string,\r\n continuation: FileTransferContinuation,\r\n range: ContentRange,\r\n options: FileUploadOptions): Promise<HttpTransferResult> {\r\n\r\n const blob = continuation.file.slice(range.from, range.to + 1);\r\n const headers = this.newRequestHeaders(node, options);\r\n\r\n headers.append(headerConstants.CONTENT_TYPE, 'application/octet-stream');\r\n headers.append(headerConstants.CONTENT_RANGE, range.toString());\r\n headers.append(headerConstants.IF_MATCH, continuation.token);\r\n\r\n const response = await fetch(continuation.location, {\r\n method: 'PATCH',\r\n credentials: 'include',\r\n headers: headers,\r\n body: blob\r\n });\r\n\r\n return new HttpTransferResult(index, response.status, range);\r\n }\r\n\r\n /**\r\n * Gets the name of current shell or module.\r\n */\r\n private get nameOfModule(): string {\r\n if (!this.moduleName) {\r\n this.moduleName = EnvironmentModule.getModuleName();\r\n }\r\n\r\n return this.moduleName;\r\n }\r\n}\r\n\r\n/** Represents the possible cancellation behaviors */\r\nexport enum FileTransferCancellationBehavior {\r\n /** Indicates the file transfer is cancelled or aborted on cancellation */\r\n Cancel,\r\n\r\n /** Indicates the file transfer is paused on cancellation */\r\n Pause,\r\n}\r\n\r\n/** Represents file upload options. */\r\nexport class FileUploadOptions {\r\n constructor(\r\n /** Gets the size of transfer content. The default value is 10MB. */\r\n public readonly transferSize: number = 10485760,\r\n\r\n /** Indicates the behavior to perform if the operation is canceled. */\r\n public readonly cancellationBehavior: FileTransferCancellationBehavior = FileTransferCancellationBehavior.Cancel,\r\n\r\n /** A token that can be used to cancel the operation. */\r\n public readonly progress: Progress<number> = new NoProgress(),\r\n\r\n /** Gets the associated logging options. */\r\n public readonly logging: FileOptions = { logAudit: false, logTelemetry: false }) {\r\n\r\n }\r\n}\r\n\r\n/** Represents the size and progress of a file transfer. */\r\nexport class FileTransferInfo {\r\n private completed = 0;\r\n\r\n constructor(\r\n /** Gets the size used in the file transfer. */\r\n public readonly size: number,\r\n\r\n /** Gets the total number of items in the file transfer. */\r\n public readonly count: number) {\r\n }\r\n\r\n /** Gets the percentage of the file transfer completed. */\r\n public get percentComplete(): number {\r\n return (this.completed / this.count) * 100;\r\n }\r\n\r\n /** Increments the number of completed items in the file transfer. */\r\n public incrementCompleted(): void {\r\n this.completed = Math.min(this.completed + 1, this.count);\r\n }\r\n}\r\n\r\n/** Represents a continuation for a file transfer */\r\nexport class FileTransferContinuation {\r\n constructor(\r\n /** Gets the URl representing the location of the file transfer */\r\n public readonly location: string,\r\n\r\n /** Gets the continuation token for the file transfer */\r\n public readonly token: string,\r\n\r\n /** Gets the file being transferred */\r\n public readonly file: File,\r\n\r\n /** Gets the file transfer information. */\r\n public readonly transfer: FileTransferInfo,\r\n\r\n /** Gets the remaining ranges in the file transfer */\r\n public readonly ranges: ContentRange[] = new Array<ContentRange>()) {\r\n }\r\n}\r\n\r\n/** Represents the result of a file transfer */\r\nexport class FileTransferResult {\r\n constructor(\r\n /** Gets the continuation token associated with the file transfer */\r\n public readonly continuation: FileTransferContinuation =\r\n new FileTransferContinuation(null, null, null, new FileTransferInfo(0, 0))) {\r\n\r\n }\r\n\r\n /** Gets a value indicating whether the file transfer is complete */\r\n public get completed(): boolean {\r\n return this.continuation.ranges.length === 0;\r\n }\r\n\r\n /** Gets a value indicating whether the file transfer is resumable */\r\n public get resumable() {\r\n return !this.completed &&\r\n this.continuation.token !== null &&\r\n this.continuation.location !== null &&\r\n this.continuation.file !== null;\r\n }\r\n}\r\n\r\n/** Represent a range of content in a file transfer */\r\nexport class ContentRange {\r\n constructor(\r\n /** Gets the zero-based start of the content, in bytes */\r\n // tslint:disable-next-line:no-shadowed-variable\r\n public readonly from: number,\r\n\r\n /** Gets the zero-based end of the content, in bytes */\r\n public readonly to: number,\r\n\r\n /** Gets the total size of the content in bytes */\r\n public readonly totalSize: number) {\r\n\r\n }\r\n\r\n /** Returns the string representation of the object */\r\n public toString(): string {\r\n return `bytes ${this.from}-${this.to}/${this.totalSize}`;\r\n }\r\n}\r\n\r\nclass NoProgress implements Progress<number> {\r\n public report(value: number): void {\r\n\r\n }\r\n}\r\n\r\nclass HttpTransferResult {\r\n constructor(\r\n public readonly index: number,\r\n public readonly statusCode: number,\r\n public readonly range: ContentRange) {\r\n\r\n }\r\n}\r\n"]}
@@ -4,6 +4,7 @@ import { RpcForwardResponse } from '../rpc/forward/rpc-forward-model';
4
4
  import { Rpc } from '../rpc/rpc';
5
5
  import { RpcRelationshipType } from '../rpc/rpc-base';
6
6
  import { RpcServiceForwarder } from '../rpc/rpc-forwarder';
7
+ import { AuthorizationManager } from '../security/authorization-manager';
7
8
  import { GatewayUrlBuilder } from './gateway-url-builder';
8
9
  import { Http, HttpResponseRetryHandler } from './http';
9
10
  /**
@@ -87,6 +88,7 @@ export interface GatewayCondition {
87
88
  */
88
89
  export declare class GatewayConnection extends RpcServiceForwarder {
89
90
  http: Http;
91
+ private authorizationManager;
90
92
  private static rpcCommands;
91
93
  /**
92
94
  * internally maintained gateway URL.
@@ -153,8 +155,9 @@ export declare class GatewayConnection extends RpcServiceForwarder {
153
155
  *
154
156
  * @param http the Http object.
155
157
  * @param rpc the Rpc class.
158
+ * @patam authorizationManager the authorization manager class object.
156
159
  */
157
- constructor(http: Http, rpc: Rpc);
160
+ constructor(http: Http, rpc: Rpc, authorizationManager: AuthorizationManager);
158
161
  /**
159
162
  * Configure the gateway URL to connect to.
160
163
  */
@@ -227,6 +230,12 @@ export declare class GatewayConnection extends RpcServiceForwarder {
227
230
  * @return Observable<any> the query result observable.
228
231
  */
229
232
  call(request: GatewayRequest): Observable<any>;
233
+ /**
234
+ * Gets default secure request options.
235
+ *
236
+ * @returns updated request object.
237
+ */
238
+ get defaultHttpSecureOptions(): AjaxRequest;
230
239
  /**
231
240
  * Check if elevation is required from the error object.
232
241
  *
@@ -256,6 +265,7 @@ export declare class GatewayConnection extends RpcServiceForwarder {
256
265
  error: boolean;
257
266
  isGatewayProcessElevated: boolean;
258
267
  completed: boolean;
268
+ id: string;
259
269
  }>;
260
270
  /**
261
271
  * Check gateway condition.