@azure/msal-browser 3.20.0 → 3.21.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 (208) hide show
  1. package/dist/app/IPublicClientApplication.d.ts +53 -53
  2. package/dist/app/IPublicClientApplication.mjs +105 -105
  3. package/dist/app/PublicClientApplication.d.ts +293 -293
  4. package/dist/app/PublicClientApplication.mjs +364 -364
  5. package/dist/app/PublicClientNext.d.ts +276 -276
  6. package/dist/app/PublicClientNext.mjs +354 -354
  7. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
  8. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
  9. package/dist/broker/nativeBroker/NativeRequest.d.ts +45 -45
  10. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  11. package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
  12. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
  13. package/dist/cache/AccountManager.d.ts +48 -48
  14. package/dist/cache/AccountManager.mjs +126 -126
  15. package/dist/cache/AsyncMemoryStorage.d.ts +50 -50
  16. package/dist/cache/AsyncMemoryStorage.mjs +131 -131
  17. package/dist/cache/BrowserCacheManager.d.ts +410 -385
  18. package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
  19. package/dist/cache/BrowserCacheManager.mjs +1364 -1294
  20. package/dist/cache/BrowserCacheManager.mjs.map +1 -1
  21. package/dist/cache/BrowserStorage.d.ts +11 -11
  22. package/dist/cache/BrowserStorage.mjs +32 -32
  23. package/dist/cache/DatabaseStorage.d.ts +56 -56
  24. package/dist/cache/DatabaseStorage.mjs +200 -200
  25. package/dist/cache/IAsyncStorage.d.ts +27 -27
  26. package/dist/cache/ITokenCache.d.ts +11 -11
  27. package/dist/cache/IWindowStorage.d.ts +27 -27
  28. package/dist/cache/MemoryStorage.d.ts +11 -11
  29. package/dist/cache/MemoryStorage.mjs +31 -31
  30. package/dist/cache/TokenCache.d.ts +77 -77
  31. package/dist/cache/TokenCache.mjs +195 -195
  32. package/dist/config/Configuration.d.ts +213 -208
  33. package/dist/config/Configuration.d.ts.map +1 -1
  34. package/dist/config/Configuration.mjs +128 -128
  35. package/dist/config/Configuration.mjs.map +1 -1
  36. package/dist/controllers/ControllerFactory.d.ts +5 -5
  37. package/dist/controllers/ControllerFactory.mjs +25 -25
  38. package/dist/controllers/IController.d.ts +60 -60
  39. package/dist/controllers/NestedAppAuthController.d.ts +202 -202
  40. package/dist/controllers/NestedAppAuthController.mjs +473 -473
  41. package/dist/controllers/StandardController.d.ts +405 -405
  42. package/dist/controllers/StandardController.d.ts.map +1 -1
  43. package/dist/controllers/StandardController.mjs +1334 -1316
  44. package/dist/controllers/StandardController.mjs.map +1 -1
  45. package/dist/controllers/UnknownOperatingContextController.d.ts +86 -86
  46. package/dist/controllers/UnknownOperatingContextController.mjs +256 -256
  47. package/dist/crypto/BrowserCrypto.d.ts +52 -52
  48. package/dist/crypto/BrowserCrypto.mjs +151 -151
  49. package/dist/crypto/CryptoOps.d.ts +74 -74
  50. package/dist/crypto/CryptoOps.mjs +176 -176
  51. package/dist/crypto/PkceGenerator.d.ts +8 -8
  52. package/dist/crypto/PkceGenerator.mjs +54 -54
  53. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  54. package/dist/crypto/SignedHttpRequest.mjs +39 -39
  55. package/dist/encode/Base64Decode.d.ts +9 -9
  56. package/dist/encode/Base64Decode.mjs +36 -36
  57. package/dist/encode/Base64Encode.d.ts +19 -19
  58. package/dist/encode/Base64Encode.mjs +43 -43
  59. package/dist/error/BrowserAuthError.d.ts +256 -255
  60. package/dist/error/BrowserAuthError.d.ts.map +1 -1
  61. package/dist/error/BrowserAuthError.mjs +265 -264
  62. package/dist/error/BrowserAuthError.mjs.map +1 -1
  63. package/dist/error/BrowserAuthErrorCodes.d.ts +47 -46
  64. package/dist/error/BrowserAuthErrorCodes.d.ts.map +1 -1
  65. package/dist/error/BrowserAuthErrorCodes.mjs +53 -52
  66. package/dist/error/BrowserAuthErrorCodes.mjs.map +1 -1
  67. package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
  68. package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
  69. package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
  70. package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
  71. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
  72. package/dist/error/NativeAuthError.d.ts +29 -29
  73. package/dist/error/NativeAuthError.mjs +60 -60
  74. package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
  75. package/dist/error/NativeAuthErrorCodes.mjs +6 -6
  76. package/dist/error/NestedAppAuthError.d.ts +14 -14
  77. package/dist/error/NestedAppAuthError.mjs +23 -23
  78. package/dist/event/EventHandler.d.ts +41 -41
  79. package/dist/event/EventHandler.mjs +125 -125
  80. package/dist/event/EventMessage.d.ts +25 -25
  81. package/dist/event/EventMessage.mjs +68 -68
  82. package/dist/event/EventType.d.ts +29 -29
  83. package/dist/event/EventType.mjs +32 -32
  84. package/dist/index.d.ts +40 -40
  85. package/dist/index.mjs +1 -1
  86. package/dist/interaction_client/BaseInteractionClient.d.ts +50 -50
  87. package/dist/interaction_client/BaseInteractionClient.mjs +106 -106
  88. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  89. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
  90. package/dist/interaction_client/NativeInteractionClient.d.ts +151 -151
  91. package/dist/interaction_client/NativeInteractionClient.mjs +621 -621
  92. package/dist/interaction_client/PopupClient.d.ts +118 -105
  93. package/dist/interaction_client/PopupClient.d.ts.map +1 -1
  94. package/dist/interaction_client/PopupClient.mjs +460 -434
  95. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  96. package/dist/interaction_client/RedirectClient.d.ts +50 -50
  97. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  98. package/dist/interaction_client/RedirectClient.mjs +349 -317
  99. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  100. package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
  101. package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
  102. package/dist/interaction_client/SilentCacheClient.d.ts +16 -16
  103. package/dist/interaction_client/SilentCacheClient.mjs +42 -42
  104. package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
  105. package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
  106. package/dist/interaction_client/SilentIframeClient.mjs +111 -101
  107. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  108. package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
  109. package/dist/interaction_client/SilentRefreshClient.mjs +47 -47
  110. package/dist/interaction_client/StandardInteractionClient.d.ts +48 -48
  111. package/dist/interaction_client/StandardInteractionClient.mjs +199 -199
  112. package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
  113. package/dist/interaction_handler/InteractionHandler.mjs +93 -93
  114. package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
  115. package/dist/interaction_handler/RedirectHandler.d.ts.map +1 -1
  116. package/dist/interaction_handler/RedirectHandler.mjs +135 -134
  117. package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
  118. package/dist/interaction_handler/SilentHandler.d.ts +13 -13
  119. package/dist/interaction_handler/SilentHandler.mjs +134 -134
  120. package/dist/naa/AccountInfo.d.ts +11 -11
  121. package/dist/naa/AuthBridge.d.ts +8 -8
  122. package/dist/naa/AuthResult.d.ts +6 -6
  123. package/dist/naa/BridgeAccountContext.d.ts +12 -12
  124. package/dist/naa/BridgeCapabilities.d.ts +3 -3
  125. package/dist/naa/BridgeError.d.ts +9 -9
  126. package/dist/naa/BridgeError.mjs +7 -7
  127. package/dist/naa/BridgeProxy.d.ts +67 -67
  128. package/dist/naa/BridgeProxy.d.ts.map +1 -1
  129. package/dist/naa/BridgeProxy.mjs +153 -148
  130. package/dist/naa/BridgeProxy.mjs.map +1 -1
  131. package/dist/naa/BridgeRequest.d.ts +7 -7
  132. package/dist/naa/BridgeRequestEnvelope.d.ts +12 -12
  133. package/dist/naa/BridgeResponseEnvelope.d.ts +13 -13
  134. package/dist/naa/BridgeStatusCode.d.ts +11 -11
  135. package/dist/naa/BridgeStatusCode.mjs +14 -14
  136. package/dist/naa/IBridgeProxy.d.ts +10 -10
  137. package/dist/naa/InitContext.d.ts +8 -8
  138. package/dist/naa/TokenRequest.d.ts +18 -18
  139. package/dist/naa/TokenResponse.d.ts +13 -13
  140. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +35 -35
  141. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +179 -179
  142. package/dist/navigation/INavigationClient.d.ts +16 -16
  143. package/dist/navigation/NavigationClient.d.ts +22 -22
  144. package/dist/navigation/NavigationClient.mjs +40 -40
  145. package/dist/navigation/NavigationOptions.d.ts +12 -12
  146. package/dist/network/FetchClient.d.ts +26 -26
  147. package/dist/network/FetchClient.mjs +99 -99
  148. package/dist/operatingcontext/BaseOperatingContext.d.ts +41 -41
  149. package/dist/operatingcontext/BaseOperatingContext.mjs +94 -94
  150. package/dist/operatingcontext/NestedAppOperatingContext.d.ts +34 -34
  151. package/dist/operatingcontext/NestedAppOperatingContext.mjs +71 -71
  152. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  153. package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
  154. package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
  155. package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
  156. package/dist/packageMetadata.d.ts +2 -2
  157. package/dist/packageMetadata.mjs +4 -4
  158. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  159. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  160. package/dist/request/ClearCacheRequest.d.ts +10 -10
  161. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  162. package/dist/request/EndSessionRequest.d.ts +15 -15
  163. package/dist/request/InitializeApplicationRequest.d.ts +8 -8
  164. package/dist/request/PopupRequest.d.ts +34 -34
  165. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  166. package/dist/request/RedirectRequest.d.ts +40 -35
  167. package/dist/request/RedirectRequest.d.ts.map +1 -1
  168. package/dist/request/RequestHelpers.d.ts +13 -13
  169. package/dist/request/RequestHelpers.mjs +53 -53
  170. package/dist/request/SilentRequest.d.ts +33 -33
  171. package/dist/request/SsoSilentRequest.d.ts +29 -29
  172. package/dist/response/AuthenticationResult.d.ts +4 -4
  173. package/dist/response/ResponseHandler.d.ts +7 -7
  174. package/dist/response/ResponseHandler.mjs +36 -36
  175. package/dist/telemetry/BrowserPerformanceClient.d.ts +38 -34
  176. package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  177. package/dist/telemetry/BrowserPerformanceClient.mjs +163 -163
  178. package/dist/telemetry/BrowserPerformanceClient.mjs.map +1 -1
  179. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  180. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
  181. package/dist/utils/BrowserConstants.d.ts +182 -180
  182. package/dist/utils/BrowserConstants.d.ts.map +1 -1
  183. package/dist/utils/BrowserConstants.mjs +214 -212
  184. package/dist/utils/BrowserConstants.mjs.map +1 -1
  185. package/dist/utils/BrowserProtocolUtils.d.ts +11 -11
  186. package/dist/utils/BrowserProtocolUtils.mjs +21 -21
  187. package/dist/utils/BrowserUtils.d.ts +75 -75
  188. package/dist/utils/BrowserUtils.mjs +157 -157
  189. package/lib/msal-browser.cjs +19027 -18857
  190. package/lib/msal-browser.cjs.map +1 -1
  191. package/lib/msal-browser.js +19027 -18857
  192. package/lib/msal-browser.js.map +1 -1
  193. package/lib/msal-browser.min.js +62 -62
  194. package/package.json +2 -2
  195. package/src/cache/BrowserCacheManager.ts +95 -0
  196. package/src/config/Configuration.ts +9 -1
  197. package/src/controllers/StandardController.ts +30 -12
  198. package/src/error/BrowserAuthError.ts +2 -0
  199. package/src/error/BrowserAuthErrorCodes.ts +1 -0
  200. package/src/interaction_client/PopupClient.ts +202 -117
  201. package/src/interaction_client/RedirectClient.ts +62 -2
  202. package/src/interaction_client/SilentIframeClient.ts +41 -3
  203. package/src/interaction_handler/RedirectHandler.ts +1 -0
  204. package/src/naa/BridgeProxy.ts +7 -2
  205. package/src/packageMetadata.ts +1 -1
  206. package/src/request/RedirectRequest.ts +5 -0
  207. package/src/telemetry/BrowserPerformanceClient.ts +1 -1
  208. package/src/utils/BrowserConstants.ts +2 -0
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-browser v3.20.0 2024-07-23 */
1
+ /*! @azure/msal-browser v3.21.0 2024-08-13 */
2
2
  'use strict';
3
3
  import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
4
4
  import { PerformanceEvents } from '@azure/msal-common';
@@ -6,156 +6,156 @@ import { KEY_FORMAT_JWK } from '../utils/BrowserConstants.mjs';
6
6
  import { urlEncodeArr } from '../encode/Base64Encode.mjs';
7
7
  import { cryptoNonExistent } from '../error/BrowserAuthErrorCodes.mjs';
8
8
 
9
- /*
10
- * Copyright (c) Microsoft Corporation. All rights reserved.
11
- * Licensed under the MIT License.
12
- */
13
- /**
14
- * This file defines functions used by the browser library to perform cryptography operations such as
15
- * hashing and encoding. It also has helper functions to validate the availability of specific APIs.
16
- */
17
- /**
18
- * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams
19
- */
20
- // RSA KeyGen Algorithm
21
- const PKCS1_V15_KEYGEN_ALG = "RSASSA-PKCS1-v1_5";
22
- // SHA-256 hashing algorithm
23
- const S256_HASH_ALG = "SHA-256";
24
- // MOD length for PoP tokens
25
- const MODULUS_LENGTH = 2048;
26
- // Public Exponent
27
- const PUBLIC_EXPONENT = new Uint8Array([0x01, 0x00, 0x01]);
28
- // UUID hex digits
29
- const UUID_CHARS = "0123456789abcdef";
30
- // Array to store UINT32 random value
31
- const UINT32_ARR = new Uint32Array(1);
32
- const keygenAlgorithmOptions = {
33
- name: PKCS1_V15_KEYGEN_ALG,
34
- hash: S256_HASH_ALG,
35
- modulusLength: MODULUS_LENGTH,
36
- publicExponent: PUBLIC_EXPONENT,
37
- };
38
- /**
39
- * Check whether browser crypto is available.
40
- */
41
- function validateCryptoAvailable(logger) {
42
- if ("crypto" in window) {
43
- logger.verbose("BrowserCrypto: modern crypto interface available");
44
- }
45
- else {
46
- logger.error("BrowserCrypto: crypto interface is unavailable");
47
- throw createBrowserAuthError(cryptoNonExistent);
48
- }
49
- }
50
- /**
51
- * Returns a sha-256 hash of the given dataString as an ArrayBuffer.
52
- * @param dataString {string} data string
53
- * @param performanceClient {?IPerformanceClient}
54
- * @param correlationId {?string} correlation id
55
- */
56
- async function sha256Digest(dataString, performanceClient, correlationId) {
57
- performanceClient?.addQueueMeasurement(PerformanceEvents.Sha256Digest, correlationId);
58
- const encoder = new TextEncoder();
59
- const data = encoder.encode(dataString);
60
- return window.crypto.subtle.digest(S256_HASH_ALG, data);
61
- }
62
- /**
63
- * Populates buffer with cryptographically random values.
64
- * @param dataBuffer
65
- */
66
- function getRandomValues(dataBuffer) {
67
- return window.crypto.getRandomValues(dataBuffer);
68
- }
69
- /**
70
- * Returns random Uint32 value.
71
- * @returns {number}
72
- */
73
- function getRandomUint32() {
74
- window.crypto.getRandomValues(UINT32_ARR);
75
- return UINT32_ARR[0];
76
- }
77
- /**
78
- * Creates a UUID v7 from the current timestamp.
79
- * Implementation relies on the system clock to guarantee increasing order of generated identifiers.
80
- * @returns {number}
81
- */
82
- function createNewGuid() {
83
- const currentTimestamp = Date.now();
84
- const baseRand = getRandomUint32() * 0x400 + (getRandomUint32() & 0x3ff);
85
- // Result byte array
86
- const bytes = new Uint8Array(16);
87
- // A 12-bit `rand_a` field value
88
- const randA = Math.trunc(baseRand / 2 ** 30);
89
- // The higher 30 bits of 62-bit `rand_b` field value
90
- const randBHi = baseRand & (2 ** 30 - 1);
91
- // The lower 32 bits of 62-bit `rand_b` field value
92
- const randBLo = getRandomUint32();
93
- bytes[0] = currentTimestamp / 2 ** 40;
94
- bytes[1] = currentTimestamp / 2 ** 32;
95
- bytes[2] = currentTimestamp / 2 ** 24;
96
- bytes[3] = currentTimestamp / 2 ** 16;
97
- bytes[4] = currentTimestamp / 2 ** 8;
98
- bytes[5] = currentTimestamp;
99
- bytes[6] = 0x70 | (randA >>> 8);
100
- bytes[7] = randA;
101
- bytes[8] = 0x80 | (randBHi >>> 24);
102
- bytes[9] = randBHi >>> 16;
103
- bytes[10] = randBHi >>> 8;
104
- bytes[11] = randBHi;
105
- bytes[12] = randBLo >>> 24;
106
- bytes[13] = randBLo >>> 16;
107
- bytes[14] = randBLo >>> 8;
108
- bytes[15] = randBLo;
109
- let text = "";
110
- for (let i = 0; i < bytes.length; i++) {
111
- text += UUID_CHARS.charAt(bytes[i] >>> 4);
112
- text += UUID_CHARS.charAt(bytes[i] & 0xf);
113
- if (i === 3 || i === 5 || i === 7 || i === 9) {
114
- text += "-";
115
- }
116
- }
117
- return text;
118
- }
119
- /**
120
- * Generates a keypair based on current keygen algorithm config.
121
- * @param extractable
122
- * @param usages
123
- */
124
- async function generateKeyPair(extractable, usages) {
125
- return window.crypto.subtle.generateKey(keygenAlgorithmOptions, extractable, usages);
126
- }
127
- /**
128
- * Export key as Json Web Key (JWK)
129
- * @param key
130
- */
131
- async function exportJwk(key) {
132
- return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key);
133
- }
134
- /**
135
- * Imports key as Json Web Key (JWK), can set extractable and usages.
136
- * @param key
137
- * @param extractable
138
- * @param usages
139
- */
140
- async function importJwk(key, extractable, usages) {
141
- return window.crypto.subtle.importKey(KEY_FORMAT_JWK, key, keygenAlgorithmOptions, extractable, usages);
142
- }
143
- /**
144
- * Signs given data with given key
145
- * @param key
146
- * @param data
147
- */
148
- async function sign(key, data) {
149
- return window.crypto.subtle.sign(keygenAlgorithmOptions, key, data);
150
- }
151
- /**
152
- * Returns the SHA-256 hash of an input string
153
- * @param plainText
154
- */
155
- async function hashString(plainText) {
156
- const hashBuffer = await sha256Digest(plainText);
157
- const hashBytes = new Uint8Array(hashBuffer);
158
- return urlEncodeArr(hashBytes);
9
+ /*
10
+ * Copyright (c) Microsoft Corporation. All rights reserved.
11
+ * Licensed under the MIT License.
12
+ */
13
+ /**
14
+ * This file defines functions used by the browser library to perform cryptography operations such as
15
+ * hashing and encoding. It also has helper functions to validate the availability of specific APIs.
16
+ */
17
+ /**
18
+ * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams
19
+ */
20
+ // RSA KeyGen Algorithm
21
+ const PKCS1_V15_KEYGEN_ALG = "RSASSA-PKCS1-v1_5";
22
+ // SHA-256 hashing algorithm
23
+ const S256_HASH_ALG = "SHA-256";
24
+ // MOD length for PoP tokens
25
+ const MODULUS_LENGTH = 2048;
26
+ // Public Exponent
27
+ const PUBLIC_EXPONENT = new Uint8Array([0x01, 0x00, 0x01]);
28
+ // UUID hex digits
29
+ const UUID_CHARS = "0123456789abcdef";
30
+ // Array to store UINT32 random value
31
+ const UINT32_ARR = new Uint32Array(1);
32
+ const keygenAlgorithmOptions = {
33
+ name: PKCS1_V15_KEYGEN_ALG,
34
+ hash: S256_HASH_ALG,
35
+ modulusLength: MODULUS_LENGTH,
36
+ publicExponent: PUBLIC_EXPONENT,
37
+ };
38
+ /**
39
+ * Check whether browser crypto is available.
40
+ */
41
+ function validateCryptoAvailable(logger) {
42
+ if ("crypto" in window) {
43
+ logger.verbose("BrowserCrypto: modern crypto interface available");
44
+ }
45
+ else {
46
+ logger.error("BrowserCrypto: crypto interface is unavailable");
47
+ throw createBrowserAuthError(cryptoNonExistent);
48
+ }
49
+ }
50
+ /**
51
+ * Returns a sha-256 hash of the given dataString as an ArrayBuffer.
52
+ * @param dataString {string} data string
53
+ * @param performanceClient {?IPerformanceClient}
54
+ * @param correlationId {?string} correlation id
55
+ */
56
+ async function sha256Digest(dataString, performanceClient, correlationId) {
57
+ performanceClient?.addQueueMeasurement(PerformanceEvents.Sha256Digest, correlationId);
58
+ const encoder = new TextEncoder();
59
+ const data = encoder.encode(dataString);
60
+ return window.crypto.subtle.digest(S256_HASH_ALG, data);
61
+ }
62
+ /**
63
+ * Populates buffer with cryptographically random values.
64
+ * @param dataBuffer
65
+ */
66
+ function getRandomValues(dataBuffer) {
67
+ return window.crypto.getRandomValues(dataBuffer);
68
+ }
69
+ /**
70
+ * Returns random Uint32 value.
71
+ * @returns {number}
72
+ */
73
+ function getRandomUint32() {
74
+ window.crypto.getRandomValues(UINT32_ARR);
75
+ return UINT32_ARR[0];
76
+ }
77
+ /**
78
+ * Creates a UUID v7 from the current timestamp.
79
+ * Implementation relies on the system clock to guarantee increasing order of generated identifiers.
80
+ * @returns {number}
81
+ */
82
+ function createNewGuid() {
83
+ const currentTimestamp = Date.now();
84
+ const baseRand = getRandomUint32() * 0x400 + (getRandomUint32() & 0x3ff);
85
+ // Result byte array
86
+ const bytes = new Uint8Array(16);
87
+ // A 12-bit `rand_a` field value
88
+ const randA = Math.trunc(baseRand / 2 ** 30);
89
+ // The higher 30 bits of 62-bit `rand_b` field value
90
+ const randBHi = baseRand & (2 ** 30 - 1);
91
+ // The lower 32 bits of 62-bit `rand_b` field value
92
+ const randBLo = getRandomUint32();
93
+ bytes[0] = currentTimestamp / 2 ** 40;
94
+ bytes[1] = currentTimestamp / 2 ** 32;
95
+ bytes[2] = currentTimestamp / 2 ** 24;
96
+ bytes[3] = currentTimestamp / 2 ** 16;
97
+ bytes[4] = currentTimestamp / 2 ** 8;
98
+ bytes[5] = currentTimestamp;
99
+ bytes[6] = 0x70 | (randA >>> 8);
100
+ bytes[7] = randA;
101
+ bytes[8] = 0x80 | (randBHi >>> 24);
102
+ bytes[9] = randBHi >>> 16;
103
+ bytes[10] = randBHi >>> 8;
104
+ bytes[11] = randBHi;
105
+ bytes[12] = randBLo >>> 24;
106
+ bytes[13] = randBLo >>> 16;
107
+ bytes[14] = randBLo >>> 8;
108
+ bytes[15] = randBLo;
109
+ let text = "";
110
+ for (let i = 0; i < bytes.length; i++) {
111
+ text += UUID_CHARS.charAt(bytes[i] >>> 4);
112
+ text += UUID_CHARS.charAt(bytes[i] & 0xf);
113
+ if (i === 3 || i === 5 || i === 7 || i === 9) {
114
+ text += "-";
115
+ }
116
+ }
117
+ return text;
118
+ }
119
+ /**
120
+ * Generates a keypair based on current keygen algorithm config.
121
+ * @param extractable
122
+ * @param usages
123
+ */
124
+ async function generateKeyPair(extractable, usages) {
125
+ return window.crypto.subtle.generateKey(keygenAlgorithmOptions, extractable, usages);
126
+ }
127
+ /**
128
+ * Export key as Json Web Key (JWK)
129
+ * @param key
130
+ */
131
+ async function exportJwk(key) {
132
+ return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key);
133
+ }
134
+ /**
135
+ * Imports key as Json Web Key (JWK), can set extractable and usages.
136
+ * @param key
137
+ * @param extractable
138
+ * @param usages
139
+ */
140
+ async function importJwk(key, extractable, usages) {
141
+ return window.crypto.subtle.importKey(KEY_FORMAT_JWK, key, keygenAlgorithmOptions, extractable, usages);
142
+ }
143
+ /**
144
+ * Signs given data with given key
145
+ * @param key
146
+ * @param data
147
+ */
148
+ async function sign(key, data) {
149
+ return window.crypto.subtle.sign(keygenAlgorithmOptions, key, data);
150
+ }
151
+ /**
152
+ * Returns the SHA-256 hash of an input string
153
+ * @param plainText
154
+ */
155
+ async function hashString(plainText) {
156
+ const hashBuffer = await sha256Digest(plainText);
157
+ const hashBytes = new Uint8Array(hashBuffer);
158
+ return urlEncodeArr(hashBytes);
159
159
  }
160
160
 
161
161
  export { createNewGuid, exportJwk, generateKeyPair, getRandomValues, hashString, importJwk, sha256Digest, sign, validateCryptoAvailable };
@@ -1,75 +1,75 @@
1
- import { ICrypto, IPerformanceClient, Logger, ShrOptions, SignedHttpRequest, SignedHttpRequestParameters } from "@azure/msal-common";
2
- export type CachedKeyPair = {
3
- publicKey: CryptoKey;
4
- privateKey: CryptoKey;
5
- requestMethod?: string;
6
- requestUri?: string;
7
- };
8
- /**
9
- * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and
10
- * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).
11
- */
12
- export declare class CryptoOps implements ICrypto {
13
- private logger;
14
- /**
15
- * CryptoOps can be used in contexts outside a PCA instance,
16
- * meaning there won't be a performance manager available.
17
- */
18
- private performanceClient;
19
- private static POP_KEY_USAGES;
20
- private static EXTRACTABLE;
21
- private cache;
22
- constructor(logger: Logger, performanceClient?: IPerformanceClient);
23
- /**
24
- * Creates a new random GUID - used to populate state and nonce.
25
- * @returns string (GUID)
26
- */
27
- createNewGuid(): string;
28
- /**
29
- * Encodes input string to base64.
30
- * @param input
31
- */
32
- base64Encode(input: string): string;
33
- /**
34
- * Decodes input string from base64.
35
- * @param input
36
- */
37
- base64Decode(input: string): string;
38
- /**
39
- * Encodes input string to base64 URL safe string.
40
- * @param input
41
- */
42
- base64UrlEncode(input: string): string;
43
- /**
44
- * Stringifies and base64Url encodes input public key
45
- * @param inputKid
46
- * @returns Base64Url encoded public key
47
- */
48
- encodeKid(inputKid: string): string;
49
- /**
50
- * Generates a keypair, stores it and returns a thumbprint
51
- * @param request
52
- */
53
- getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise<string>;
54
- /**
55
- * Removes cryptographic keypair from key store matching the keyId passed in
56
- * @param kid
57
- */
58
- removeTokenBindingKey(kid: string): Promise<boolean>;
59
- /**
60
- * Removes all cryptographic keys from IndexedDB storage
61
- */
62
- clearKeystore(): Promise<boolean>;
63
- /**
64
- * Signs the given object as a jwt payload with private key retrieved by given kid.
65
- * @param payload
66
- * @param kid
67
- */
68
- signJwt(payload: SignedHttpRequest, kid: string, shrOptions?: ShrOptions, correlationId?: string): Promise<string>;
69
- /**
70
- * Returns the SHA-256 hash of an input string
71
- * @param plainText
72
- */
73
- hashString(plainText: string): Promise<string>;
74
- }
1
+ import { ICrypto, IPerformanceClient, Logger, ShrOptions, SignedHttpRequest, SignedHttpRequestParameters } from "@azure/msal-common";
2
+ export type CachedKeyPair = {
3
+ publicKey: CryptoKey;
4
+ privateKey: CryptoKey;
5
+ requestMethod?: string;
6
+ requestUri?: string;
7
+ };
8
+ /**
9
+ * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and
10
+ * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).
11
+ */
12
+ export declare class CryptoOps implements ICrypto {
13
+ private logger;
14
+ /**
15
+ * CryptoOps can be used in contexts outside a PCA instance,
16
+ * meaning there won't be a performance manager available.
17
+ */
18
+ private performanceClient;
19
+ private static POP_KEY_USAGES;
20
+ private static EXTRACTABLE;
21
+ private cache;
22
+ constructor(logger: Logger, performanceClient?: IPerformanceClient);
23
+ /**
24
+ * Creates a new random GUID - used to populate state and nonce.
25
+ * @returns string (GUID)
26
+ */
27
+ createNewGuid(): string;
28
+ /**
29
+ * Encodes input string to base64.
30
+ * @param input
31
+ */
32
+ base64Encode(input: string): string;
33
+ /**
34
+ * Decodes input string from base64.
35
+ * @param input
36
+ */
37
+ base64Decode(input: string): string;
38
+ /**
39
+ * Encodes input string to base64 URL safe string.
40
+ * @param input
41
+ */
42
+ base64UrlEncode(input: string): string;
43
+ /**
44
+ * Stringifies and base64Url encodes input public key
45
+ * @param inputKid
46
+ * @returns Base64Url encoded public key
47
+ */
48
+ encodeKid(inputKid: string): string;
49
+ /**
50
+ * Generates a keypair, stores it and returns a thumbprint
51
+ * @param request
52
+ */
53
+ getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise<string>;
54
+ /**
55
+ * Removes cryptographic keypair from key store matching the keyId passed in
56
+ * @param kid
57
+ */
58
+ removeTokenBindingKey(kid: string): Promise<boolean>;
59
+ /**
60
+ * Removes all cryptographic keys from IndexedDB storage
61
+ */
62
+ clearKeystore(): Promise<boolean>;
63
+ /**
64
+ * Signs the given object as a jwt payload with private key retrieved by given kid.
65
+ * @param payload
66
+ * @param kid
67
+ */
68
+ signJwt(payload: SignedHttpRequest, kid: string, shrOptions?: ShrOptions, correlationId?: string): Promise<string>;
69
+ /**
70
+ * Returns the SHA-256 hash of an input string
71
+ * @param plainText
72
+ */
73
+ hashString(plainText: string): Promise<string>;
74
+ }
75
75
  //# sourceMappingURL=CryptoOps.d.ts.map