@azure/msal-browser 3.5.1-beta.1 → 3.7.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 (290) hide show
  1. package/dist/app/IPublicClientApplication.d.ts +51 -51
  2. package/dist/app/IPublicClientApplication.mjs +102 -102
  3. package/dist/app/IPublicClientApplication.mjs.map +1 -1
  4. package/dist/app/PublicClientApplication.d.ts +269 -268
  5. package/dist/app/PublicClientApplication.d.ts.map +1 -1
  6. package/dist/app/PublicClientApplication.mjs +333 -333
  7. package/dist/app/PublicClientApplication.mjs.map +1 -1
  8. package/dist/app/PublicClientNext.d.ts +273 -273
  9. package/dist/app/PublicClientNext.mjs +351 -351
  10. package/dist/app/PublicClientNext.mjs.map +1 -1
  11. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
  12. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
  13. package/dist/broker/nativeBroker/NativeMessageHandler.mjs.map +1 -1
  14. package/dist/broker/nativeBroker/NativeRequest.d.ts +44 -44
  15. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  16. package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
  17. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
  18. package/dist/broker/nativeBroker/NativeStatusCodes.mjs.map +1 -1
  19. package/dist/cache/AsyncMemoryStorage.d.ts +51 -51
  20. package/dist/cache/AsyncMemoryStorage.mjs +132 -132
  21. package/dist/cache/AsyncMemoryStorage.mjs.map +1 -1
  22. package/dist/cache/BrowserCacheManager.d.ts +395 -383
  23. package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
  24. package/dist/cache/BrowserCacheManager.mjs +1283 -1263
  25. package/dist/cache/BrowserCacheManager.mjs.map +1 -1
  26. package/dist/cache/BrowserStorage.d.ts +11 -11
  27. package/dist/cache/BrowserStorage.mjs +32 -32
  28. package/dist/cache/BrowserStorage.mjs.map +1 -1
  29. package/dist/cache/CryptoKeyStore.d.ts +18 -18
  30. package/dist/cache/CryptoKeyStore.mjs +40 -40
  31. package/dist/cache/CryptoKeyStore.mjs.map +1 -1
  32. package/dist/cache/DatabaseStorage.d.ts +56 -56
  33. package/dist/cache/DatabaseStorage.mjs +190 -190
  34. package/dist/cache/DatabaseStorage.mjs.map +1 -1
  35. package/dist/cache/IAsyncMemoryStorage.d.ts +27 -27
  36. package/dist/cache/ITokenCache.d.ts +11 -11
  37. package/dist/cache/IWindowStorage.d.ts +27 -27
  38. package/dist/cache/MemoryStorage.d.ts +11 -11
  39. package/dist/cache/MemoryStorage.mjs +31 -31
  40. package/dist/cache/MemoryStorage.mjs.map +1 -1
  41. package/dist/cache/TokenCache.d.ts +77 -77
  42. package/dist/cache/TokenCache.d.ts.map +1 -1
  43. package/dist/cache/TokenCache.mjs +223 -225
  44. package/dist/cache/TokenCache.mjs.map +1 -1
  45. package/dist/config/Configuration.d.ts +206 -206
  46. package/dist/config/Configuration.d.ts.map +1 -1
  47. package/dist/config/Configuration.mjs +128 -128
  48. package/dist/config/Configuration.mjs.map +1 -1
  49. package/dist/controllers/ControllerFactory.d.ts +4 -4
  50. package/dist/controllers/ControllerFactory.d.ts.map +1 -1
  51. package/dist/controllers/ControllerFactory.mjs +29 -29
  52. package/dist/controllers/ControllerFactory.mjs.map +1 -1
  53. package/dist/controllers/IController.d.ts +61 -61
  54. package/dist/controllers/NestedAppAuthController.d.ts +95 -95
  55. package/dist/controllers/NestedAppAuthController.mjs +334 -334
  56. package/dist/controllers/NestedAppAuthController.mjs.map +1 -1
  57. package/dist/controllers/StandardController.d.ts +407 -407
  58. package/dist/controllers/StandardController.d.ts.map +1 -1
  59. package/dist/controllers/StandardController.mjs +1307 -1294
  60. package/dist/controllers/StandardController.mjs.map +1 -1
  61. package/dist/controllers/UnknownOperatingContextController.d.ts +87 -87
  62. package/dist/controllers/UnknownOperatingContextController.mjs +264 -264
  63. package/dist/controllers/UnknownOperatingContextController.mjs.map +1 -1
  64. package/dist/crypto/BrowserCrypto.d.ts +44 -44
  65. package/dist/crypto/BrowserCrypto.mjs +93 -93
  66. package/dist/crypto/BrowserCrypto.mjs.map +1 -1
  67. package/dist/crypto/CryptoOps.d.ts +63 -63
  68. package/dist/crypto/CryptoOps.mjs +145 -145
  69. package/dist/crypto/CryptoOps.mjs.map +1 -1
  70. package/dist/crypto/PkceGenerator.d.ts +8 -8
  71. package/dist/crypto/PkceGenerator.mjs +54 -54
  72. package/dist/crypto/PkceGenerator.mjs.map +1 -1
  73. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  74. package/dist/crypto/SignedHttpRequest.mjs +39 -39
  75. package/dist/crypto/SignedHttpRequest.mjs.map +1 -1
  76. package/dist/encode/Base64Decode.d.ts +9 -9
  77. package/dist/encode/Base64Decode.mjs +36 -36
  78. package/dist/encode/Base64Decode.mjs.map +1 -1
  79. package/dist/encode/Base64Encode.d.ts +19 -19
  80. package/dist/encode/Base64Encode.mjs +43 -43
  81. package/dist/encode/Base64Encode.mjs.map +1 -1
  82. package/dist/error/BrowserAuthError.d.ts +250 -250
  83. package/dist/error/BrowserAuthError.mjs +258 -258
  84. package/dist/error/BrowserAuthError.mjs.map +1 -1
  85. package/dist/error/BrowserAuthErrorCodes.d.ts +45 -45
  86. package/dist/error/BrowserAuthErrorCodes.mjs +49 -49
  87. package/dist/error/BrowserAuthErrorCodes.mjs.map +1 -1
  88. package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
  89. package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
  90. package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
  91. package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
  92. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
  93. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs.map +1 -1
  94. package/dist/error/NativeAuthError.d.ts +29 -29
  95. package/dist/error/NativeAuthError.mjs +60 -60
  96. package/dist/error/NativeAuthError.mjs.map +1 -1
  97. package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
  98. package/dist/error/NativeAuthErrorCodes.mjs +6 -6
  99. package/dist/error/NativeAuthErrorCodes.mjs.map +1 -1
  100. package/dist/error/NestedAppAuthError.d.ts +14 -14
  101. package/dist/error/NestedAppAuthError.mjs +23 -23
  102. package/dist/error/NestedAppAuthError.mjs.map +1 -1
  103. package/dist/event/EventHandler.d.ts +41 -41
  104. package/dist/event/EventHandler.mjs +119 -119
  105. package/dist/event/EventHandler.mjs.map +1 -1
  106. package/dist/event/EventMessage.d.ts +25 -25
  107. package/dist/event/EventMessage.mjs +68 -68
  108. package/dist/event/EventMessage.mjs.map +1 -1
  109. package/dist/event/EventType.d.ts +28 -28
  110. package/dist/event/EventType.mjs +31 -31
  111. package/dist/event/EventType.mjs.map +1 -1
  112. package/dist/index.d.ts +39 -39
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.mjs +1 -1
  115. package/dist/interaction_client/BaseInteractionClient.d.ts +54 -54
  116. package/dist/interaction_client/BaseInteractionClient.mjs +152 -152
  117. package/dist/interaction_client/BaseInteractionClient.mjs.map +1 -1
  118. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  119. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
  120. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs.map +1 -1
  121. package/dist/interaction_client/NativeInteractionClient.d.ts +140 -140
  122. package/dist/interaction_client/NativeInteractionClient.d.ts.map +1 -1
  123. package/dist/interaction_client/NativeInteractionClient.mjs +541 -549
  124. package/dist/interaction_client/NativeInteractionClient.mjs.map +1 -1
  125. package/dist/interaction_client/PopupClient.d.ts +105 -105
  126. package/dist/interaction_client/PopupClient.mjs +432 -432
  127. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  128. package/dist/interaction_client/RedirectClient.d.ts +49 -49
  129. package/dist/interaction_client/RedirectClient.mjs +311 -311
  130. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  131. package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
  132. package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
  133. package/dist/interaction_client/SilentAuthCodeClient.mjs.map +1 -1
  134. package/dist/interaction_client/SilentCacheClient.d.ts +24 -24
  135. package/dist/interaction_client/SilentCacheClient.mjs +61 -61
  136. package/dist/interaction_client/SilentCacheClient.mjs.map +1 -1
  137. package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
  138. package/dist/interaction_client/SilentIframeClient.mjs +96 -96
  139. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  140. package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
  141. package/dist/interaction_client/SilentRefreshClient.d.ts.map +1 -1
  142. package/dist/interaction_client/SilentRefreshClient.mjs +47 -43
  143. package/dist/interaction_client/SilentRefreshClient.mjs.map +1 -1
  144. package/dist/interaction_client/StandardInteractionClient.d.ts +54 -54
  145. package/dist/interaction_client/StandardInteractionClient.mjs +222 -222
  146. package/dist/interaction_client/StandardInteractionClient.mjs.map +1 -1
  147. package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
  148. package/dist/interaction_handler/InteractionHandler.mjs +93 -93
  149. package/dist/interaction_handler/InteractionHandler.mjs.map +1 -1
  150. package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
  151. package/dist/interaction_handler/RedirectHandler.mjs +134 -134
  152. package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
  153. package/dist/interaction_handler/SilentHandler.d.ts +13 -13
  154. package/dist/interaction_handler/SilentHandler.mjs +133 -133
  155. package/dist/interaction_handler/SilentHandler.mjs.map +1 -1
  156. package/dist/naa/AccountInfo.d.ts +11 -11
  157. package/dist/naa/AuthBridge.d.ts +8 -5
  158. package/dist/naa/AuthBridge.d.ts.map +1 -1
  159. package/dist/naa/AuthResult.d.ts +7 -0
  160. package/dist/naa/AuthResult.d.ts.map +1 -0
  161. package/dist/naa/BridgeCapabilities.d.ts +3 -3
  162. package/dist/naa/BridgeError.d.ts +9 -9
  163. package/dist/naa/BridgeError.mjs +7 -7
  164. package/dist/naa/BridgeError.mjs.map +1 -1
  165. package/dist/naa/BridgeProxy.d.ts +68 -72
  166. package/dist/naa/BridgeProxy.d.ts.map +1 -1
  167. package/dist/naa/BridgeProxy.mjs +155 -152
  168. package/dist/naa/BridgeProxy.mjs.map +1 -1
  169. package/dist/naa/BridgeRequest.d.ts +7 -6
  170. package/dist/naa/BridgeRequest.d.ts.map +1 -1
  171. package/dist/naa/BridgeRequestEnvelope.d.ts +12 -13
  172. package/dist/naa/BridgeRequestEnvelope.d.ts.map +1 -1
  173. package/dist/naa/BridgeResponseEnvelope.d.ts +13 -10
  174. package/dist/naa/BridgeResponseEnvelope.d.ts.map +1 -1
  175. package/dist/naa/BridgeStatusCode.d.ts +11 -10
  176. package/dist/naa/BridgeStatusCode.d.ts.map +1 -1
  177. package/dist/naa/BridgeStatusCode.mjs +15 -16
  178. package/dist/naa/BridgeStatusCode.mjs.map +1 -1
  179. package/dist/naa/IBridgeProxy.d.ts +10 -12
  180. package/dist/naa/IBridgeProxy.d.ts.map +1 -1
  181. package/dist/naa/{InitializeBridgeResponse.d.ts → InitContext.d.ts} +7 -7
  182. package/dist/naa/InitContext.d.ts.map +1 -0
  183. package/dist/naa/TokenRequest.d.ts +18 -19
  184. package/dist/naa/TokenRequest.d.ts.map +1 -1
  185. package/dist/naa/TokenResponse.d.ts +13 -15
  186. package/dist/naa/TokenResponse.d.ts.map +1 -1
  187. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +23 -23
  188. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts.map +1 -1
  189. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +141 -141
  190. package/dist/naa/mapping/NestedAppAuthAdapter.mjs.map +1 -1
  191. package/dist/navigation/INavigationClient.d.ts +16 -16
  192. package/dist/navigation/NavigationClient.d.ts +22 -22
  193. package/dist/navigation/NavigationClient.mjs +40 -40
  194. package/dist/navigation/NavigationClient.mjs.map +1 -1
  195. package/dist/navigation/NavigationOptions.d.ts +12 -12
  196. package/dist/network/FetchClient.d.ts +26 -26
  197. package/dist/network/FetchClient.mjs +99 -99
  198. package/dist/network/FetchClient.mjs.map +1 -1
  199. package/dist/operatingcontext/BaseOperatingContext.d.ts +41 -40
  200. package/dist/operatingcontext/BaseOperatingContext.d.ts.map +1 -1
  201. package/dist/operatingcontext/BaseOperatingContext.mjs +96 -45
  202. package/dist/operatingcontext/BaseOperatingContext.mjs.map +1 -1
  203. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  204. package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
  205. package/dist/operatingcontext/StandardOperatingContext.mjs.map +1 -1
  206. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +32 -32
  207. package/dist/operatingcontext/TeamsAppOperatingContext.mjs +85 -85
  208. package/dist/operatingcontext/TeamsAppOperatingContext.mjs.map +1 -1
  209. package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
  210. package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
  211. package/dist/operatingcontext/UnknownOperatingContext.mjs.map +1 -1
  212. package/dist/packageMetadata.d.ts +2 -2
  213. package/dist/packageMetadata.d.ts.map +1 -1
  214. package/dist/packageMetadata.mjs +4 -4
  215. package/dist/packageMetadata.mjs.map +1 -1
  216. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  217. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  218. package/dist/request/ClearCacheRequest.d.ts +10 -10
  219. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  220. package/dist/request/EndSessionRequest.d.ts +15 -15
  221. package/dist/request/PopupRequest.d.ts +34 -34
  222. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  223. package/dist/request/RedirectRequest.d.ts +35 -35
  224. package/dist/request/SilentRequest.d.ts +32 -32
  225. package/dist/request/SsoSilentRequest.d.ts +29 -29
  226. package/dist/response/AuthenticationResult.d.ts +4 -4
  227. package/dist/response/ResponseHandler.d.ts +7 -7
  228. package/dist/response/ResponseHandler.mjs +36 -36
  229. package/dist/response/ResponseHandler.mjs.map +1 -1
  230. package/dist/telemetry/BrowserPerformanceClient.d.ts +34 -36
  231. package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  232. package/dist/telemetry/BrowserPerformanceClient.mjs +163 -126
  233. package/dist/telemetry/BrowserPerformanceClient.mjs.map +1 -1
  234. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  235. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
  236. package/dist/telemetry/BrowserPerformanceMeasurement.mjs.map +1 -1
  237. package/dist/utils/BrowserConstants.d.ts +180 -176
  238. package/dist/utils/BrowserConstants.d.ts.map +1 -1
  239. package/dist/utils/BrowserConstants.mjs +213 -205
  240. package/dist/utils/BrowserConstants.mjs.map +1 -1
  241. package/dist/utils/BrowserProtocolUtils.d.ts +11 -11
  242. package/dist/utils/BrowserProtocolUtils.mjs +21 -21
  243. package/dist/utils/BrowserProtocolUtils.mjs.map +1 -1
  244. package/dist/utils/BrowserUtils.d.ts +56 -56
  245. package/dist/utils/BrowserUtils.mjs +125 -125
  246. package/dist/utils/BrowserUtils.mjs.map +1 -1
  247. package/lib/msal-browser.cjs +18304 -17929
  248. package/lib/msal-browser.cjs.map +1 -1
  249. package/lib/msal-browser.js +18304 -17929
  250. package/lib/msal-browser.js.map +1 -1
  251. package/lib/msal-browser.min.js +66 -68
  252. package/package.json +103 -102
  253. package/src/app/PublicClientApplication.ts +2 -1
  254. package/src/cache/BrowserCacheManager.ts +38 -23
  255. package/src/cache/DatabaseStorage.ts +1 -1
  256. package/src/cache/TokenCache.ts +34 -29
  257. package/src/config/Configuration.ts +1 -1
  258. package/src/controllers/ControllerFactory.ts +3 -5
  259. package/src/controllers/StandardController.ts +53 -26
  260. package/src/crypto/CryptoOps.ts +1 -1
  261. package/src/crypto/SignedHttpRequest.ts +1 -1
  262. package/src/index.ts +1 -0
  263. package/src/interaction_client/BaseInteractionClient.ts +2 -2
  264. package/src/interaction_client/NativeInteractionClient.ts +24 -20
  265. package/src/interaction_client/PopupClient.ts +1 -1
  266. package/src/interaction_client/RedirectClient.ts +3 -3
  267. package/src/interaction_client/SilentAuthCodeClient.ts +1 -1
  268. package/src/interaction_client/SilentRefreshClient.ts +8 -0
  269. package/src/interaction_client/StandardInteractionClient.ts +1 -1
  270. package/src/interaction_handler/SilentHandler.ts +2 -2
  271. package/src/naa/AuthBridge.ts +3 -2
  272. package/src/naa/AuthResult.ts +12 -0
  273. package/src/naa/BridgeProxy.ts +64 -71
  274. package/src/naa/BridgeRequest.ts +6 -2
  275. package/src/naa/BridgeRequestEnvelope.ts +1 -13
  276. package/src/naa/BridgeResponseEnvelope.ts +5 -7
  277. package/src/naa/BridgeStatusCode.ts +12 -10
  278. package/src/naa/IBridgeProxy.ts +3 -14
  279. package/src/naa/{InitializeBridgeResponse.ts → InitContext.ts} +1 -1
  280. package/src/naa/TokenRequest.ts +1 -2
  281. package/src/naa/TokenResponse.ts +1 -4
  282. package/src/naa/mapping/NestedAppAuthAdapter.ts +19 -19
  283. package/src/operatingcontext/BaseOperatingContext.ts +64 -7
  284. package/src/packageMetadata.ts +1 -1
  285. package/src/telemetry/BrowserPerformanceClient.ts +95 -42
  286. package/src/utils/BrowserConstants.ts +11 -0
  287. package/dist/naa/AccountRequests.d.ts +0 -10
  288. package/dist/naa/AccountRequests.d.ts.map +0 -1
  289. package/dist/naa/InitializeBridgeResponse.d.ts.map +0 -1
  290. package/src/naa/AccountRequests.ts +0 -16
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-browser v3.5.1-beta.1 2023-11-14 */
1
+ /*! @azure/msal-browser v3.7.0 2024-01-09 */
2
2
  'use strict';
3
3
  import { PerformanceEvents, JoseHeader } from '@azure/msal-common';
4
4
  import { base64Encode, urlEncode, urlEncodeArr } from '../encode/Base64Encode.mjs';
@@ -8,150 +8,150 @@ import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
8
8
  import { CryptoKeyStore } from '../cache/CryptoKeyStore.mjs';
9
9
  import { cryptoKeyNotFound } from '../error/BrowserAuthErrorCodes.mjs';
10
10
 
11
- /*
12
- * Copyright (c) Microsoft Corporation. All rights reserved.
13
- * Licensed under the MIT License.
14
- */
15
- /**
16
- * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and
17
- * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).
18
- */
19
- class CryptoOps {
20
- constructor(logger, performanceClient) {
21
- this.logger = logger;
22
- // Browser crypto needs to be validated first before any other classes can be set.
23
- validateCryptoAvailable(logger);
24
- this.cache = new CryptoKeyStore(this.logger);
25
- this.performanceClient = performanceClient;
26
- }
27
- /**
28
- * Creates a new random GUID - used to populate state and nonce.
29
- * @returns string (GUID)
30
- */
31
- createNewGuid() {
32
- return createNewGuid();
33
- }
34
- /**
35
- * Encodes input string to base64.
36
- * @param input
37
- */
38
- base64Encode(input) {
39
- return base64Encode(input);
40
- }
41
- /**
42
- * Decodes input string from base64.
43
- * @param input
44
- */
45
- base64Decode(input) {
46
- return base64Decode(input);
47
- }
48
- /**
49
- * Generates a keypair, stores it and returns a thumbprint
50
- * @param request
51
- */
52
- async getPublicKeyThumbprint(request) {
53
- const publicKeyThumbMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId);
54
- // Generate Keypair
55
- const keyPair = await generateKeyPair(CryptoOps.EXTRACTABLE, CryptoOps.POP_KEY_USAGES);
56
- // Generate Thumbprint for Public Key
57
- const publicKeyJwk = await exportJwk(keyPair.publicKey);
58
- const pubKeyThumprintObj = {
59
- e: publicKeyJwk.e,
60
- kty: publicKeyJwk.kty,
61
- n: publicKeyJwk.n,
62
- };
63
- const publicJwkString = getSortedObjectString(pubKeyThumprintObj);
64
- const publicJwkHash = await this.hashString(publicJwkString);
65
- // Generate Thumbprint for Private Key
66
- const privateKeyJwk = await exportJwk(keyPair.privateKey);
67
- // Re-import private key to make it unextractable
68
- const unextractablePrivateKey = await importJwk(privateKeyJwk, false, ["sign"]);
69
- // Store Keypair data in keystore
70
- await this.cache.asymmetricKeys.setItem(publicJwkHash, {
71
- privateKey: unextractablePrivateKey,
72
- publicKey: keyPair.publicKey,
73
- requestMethod: request.resourceRequestMethod,
74
- requestUri: request.resourceRequestUri,
75
- });
76
- if (publicKeyThumbMeasurement) {
77
- publicKeyThumbMeasurement.end({
78
- success: true,
79
- });
80
- }
81
- return publicJwkHash;
82
- }
83
- /**
84
- * Removes cryptographic keypair from key store matching the keyId passed in
85
- * @param kid
86
- */
87
- async removeTokenBindingKey(kid) {
88
- await this.cache.asymmetricKeys.removeItem(kid);
89
- const keyFound = await this.cache.asymmetricKeys.containsKey(kid);
90
- return !keyFound;
91
- }
92
- /**
93
- * Removes all cryptographic keys from IndexedDB storage
94
- */
95
- async clearKeystore() {
96
- return await this.cache.clear();
97
- }
98
- /**
99
- * Signs the given object as a jwt payload with private key retrieved by given kid.
100
- * @param payload
101
- * @param kid
102
- */
103
- async signJwt(payload, kid, shrOptions, correlationId) {
104
- const signJwtMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId);
105
- const cachedKeyPair = await this.cache.asymmetricKeys.getItem(kid);
106
- if (!cachedKeyPair) {
107
- throw createBrowserAuthError(cryptoKeyNotFound);
108
- }
109
- // Get public key as JWK
110
- const publicKeyJwk = await exportJwk(cachedKeyPair.publicKey);
111
- const publicKeyJwkString = getSortedObjectString(publicKeyJwk);
112
- // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: "FULL_PUBLIC_KEY_HASH" })
113
- const encodedKeyIdThumbprint = urlEncode(JSON.stringify({ kid: kid }));
114
- // Generate header
115
- const shrHeader = JoseHeader.getShrHeaderString({
116
- ...shrOptions?.header,
117
- alg: publicKeyJwk.alg,
118
- kid: encodedKeyIdThumbprint,
119
- });
120
- const encodedShrHeader = urlEncode(shrHeader);
121
- // Generate payload
122
- payload.cnf = {
123
- jwk: JSON.parse(publicKeyJwkString),
124
- };
125
- const encodedPayload = urlEncode(JSON.stringify(payload));
126
- // Form token string
127
- const tokenString = `${encodedShrHeader}.${encodedPayload}`;
128
- // Sign token
129
- const encoder = new TextEncoder();
130
- const tokenBuffer = encoder.encode(tokenString);
131
- const signatureBuffer = await sign(cachedKeyPair.privateKey, tokenBuffer);
132
- const encodedSignature = urlEncodeArr(new Uint8Array(signatureBuffer));
133
- const signedJwt = `${tokenString}.${encodedSignature}`;
134
- if (signJwtMeasurement) {
135
- signJwtMeasurement.end({
136
- success: true,
137
- });
138
- }
139
- return signedJwt;
140
- }
141
- /**
142
- * Returns the SHA-256 hash of an input string
143
- * @param plainText
144
- */
145
- async hashString(plainText) {
146
- const hashBuffer = await sha256Digest(plainText);
147
- const hashBytes = new Uint8Array(hashBuffer);
148
- return urlEncodeArr(hashBytes);
149
- }
150
- }
151
- CryptoOps.POP_KEY_USAGES = ["sign", "verify"];
152
- CryptoOps.EXTRACTABLE = true;
153
- function getSortedObjectString(obj) {
154
- return JSON.stringify(obj, Object.keys(obj).sort());
11
+ /*
12
+ * Copyright (c) Microsoft Corporation. All rights reserved.
13
+ * Licensed under the MIT License.
14
+ */
15
+ /**
16
+ * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and
17
+ * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).
18
+ */
19
+ class CryptoOps {
20
+ constructor(logger, performanceClient) {
21
+ this.logger = logger;
22
+ // Browser crypto needs to be validated first before any other classes can be set.
23
+ validateCryptoAvailable(logger);
24
+ this.cache = new CryptoKeyStore(this.logger);
25
+ this.performanceClient = performanceClient;
26
+ }
27
+ /**
28
+ * Creates a new random GUID - used to populate state and nonce.
29
+ * @returns string (GUID)
30
+ */
31
+ createNewGuid() {
32
+ return createNewGuid();
33
+ }
34
+ /**
35
+ * Encodes input string to base64.
36
+ * @param input
37
+ */
38
+ base64Encode(input) {
39
+ return base64Encode(input);
40
+ }
41
+ /**
42
+ * Decodes input string from base64.
43
+ * @param input
44
+ */
45
+ base64Decode(input) {
46
+ return base64Decode(input);
47
+ }
48
+ /**
49
+ * Generates a keypair, stores it and returns a thumbprint
50
+ * @param request
51
+ */
52
+ async getPublicKeyThumbprint(request) {
53
+ const publicKeyThumbMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId);
54
+ // Generate Keypair
55
+ const keyPair = await generateKeyPair(CryptoOps.EXTRACTABLE, CryptoOps.POP_KEY_USAGES);
56
+ // Generate Thumbprint for Public Key
57
+ const publicKeyJwk = await exportJwk(keyPair.publicKey);
58
+ const pubKeyThumprintObj = {
59
+ e: publicKeyJwk.e,
60
+ kty: publicKeyJwk.kty,
61
+ n: publicKeyJwk.n,
62
+ };
63
+ const publicJwkString = getSortedObjectString(pubKeyThumprintObj);
64
+ const publicJwkHash = await this.hashString(publicJwkString);
65
+ // Generate Thumbprint for Private Key
66
+ const privateKeyJwk = await exportJwk(keyPair.privateKey);
67
+ // Re-import private key to make it unextractable
68
+ const unextractablePrivateKey = await importJwk(privateKeyJwk, false, ["sign"]);
69
+ // Store Keypair data in keystore
70
+ await this.cache.asymmetricKeys.setItem(publicJwkHash, {
71
+ privateKey: unextractablePrivateKey,
72
+ publicKey: keyPair.publicKey,
73
+ requestMethod: request.resourceRequestMethod,
74
+ requestUri: request.resourceRequestUri,
75
+ });
76
+ if (publicKeyThumbMeasurement) {
77
+ publicKeyThumbMeasurement.end({
78
+ success: true,
79
+ });
80
+ }
81
+ return publicJwkHash;
82
+ }
83
+ /**
84
+ * Removes cryptographic keypair from key store matching the keyId passed in
85
+ * @param kid
86
+ */
87
+ async removeTokenBindingKey(kid) {
88
+ await this.cache.asymmetricKeys.removeItem(kid);
89
+ const keyFound = await this.cache.asymmetricKeys.containsKey(kid);
90
+ return !keyFound;
91
+ }
92
+ /**
93
+ * Removes all cryptographic keys from IndexedDB storage
94
+ */
95
+ async clearKeystore() {
96
+ return this.cache.clear();
97
+ }
98
+ /**
99
+ * Signs the given object as a jwt payload with private key retrieved by given kid.
100
+ * @param payload
101
+ * @param kid
102
+ */
103
+ async signJwt(payload, kid, shrOptions, correlationId) {
104
+ const signJwtMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId);
105
+ const cachedKeyPair = await this.cache.asymmetricKeys.getItem(kid);
106
+ if (!cachedKeyPair) {
107
+ throw createBrowserAuthError(cryptoKeyNotFound);
108
+ }
109
+ // Get public key as JWK
110
+ const publicKeyJwk = await exportJwk(cachedKeyPair.publicKey);
111
+ const publicKeyJwkString = getSortedObjectString(publicKeyJwk);
112
+ // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: "FULL_PUBLIC_KEY_HASH" })
113
+ const encodedKeyIdThumbprint = urlEncode(JSON.stringify({ kid: kid }));
114
+ // Generate header
115
+ const shrHeader = JoseHeader.getShrHeaderString({
116
+ ...shrOptions?.header,
117
+ alg: publicKeyJwk.alg,
118
+ kid: encodedKeyIdThumbprint,
119
+ });
120
+ const encodedShrHeader = urlEncode(shrHeader);
121
+ // Generate payload
122
+ payload.cnf = {
123
+ jwk: JSON.parse(publicKeyJwkString),
124
+ };
125
+ const encodedPayload = urlEncode(JSON.stringify(payload));
126
+ // Form token string
127
+ const tokenString = `${encodedShrHeader}.${encodedPayload}`;
128
+ // Sign token
129
+ const encoder = new TextEncoder();
130
+ const tokenBuffer = encoder.encode(tokenString);
131
+ const signatureBuffer = await sign(cachedKeyPair.privateKey, tokenBuffer);
132
+ const encodedSignature = urlEncodeArr(new Uint8Array(signatureBuffer));
133
+ const signedJwt = `${tokenString}.${encodedSignature}`;
134
+ if (signJwtMeasurement) {
135
+ signJwtMeasurement.end({
136
+ success: true,
137
+ });
138
+ }
139
+ return signedJwt;
140
+ }
141
+ /**
142
+ * Returns the SHA-256 hash of an input string
143
+ * @param plainText
144
+ */
145
+ async hashString(plainText) {
146
+ const hashBuffer = await sha256Digest(plainText);
147
+ const hashBytes = new Uint8Array(hashBuffer);
148
+ return urlEncodeArr(hashBytes);
149
+ }
150
+ }
151
+ CryptoOps.POP_KEY_USAGES = ["sign", "verify"];
152
+ CryptoOps.EXTRACTABLE = true;
153
+ function getSortedObjectString(obj) {
154
+ return JSON.stringify(obj, Object.keys(obj).sort());
155
155
  }
156
156
 
157
157
  export { CryptoOps };
@@ -1 +1 @@
1
- {"version":3,"file":"CryptoOps.mjs","sources":["../../src/crypto/CryptoOps.ts"],"sourcesContent":[null],"names":["BrowserCrypto.validateCryptoAvailable","BrowserCrypto.createNewGuid","BrowserCrypto.generateKeyPair","BrowserCrypto.exportJwk"],"mappings":";;;;;;;;;;AAKA;AAmBA;;;AAUG;AACH;;AAGI;;;AAGG,QAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;;AAGH,QAAAA,uBAAoE,CAAA,MAAA,CAAA,CAAA;AACpE,QAAA,IAAQ,CAAA,KAAM,GAAC,IAAA,cAA4B,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA;QACpC,IAAC,kBAAsB,GAAA,iBAAA,CAAA;AAElB,KAAA;AAQZ;;;AAGG;AACH,IAAA,aAAa;AAIb,QAAA,OAAAC,aAAA,EAAA,CAAA;;;AAGG;AACH;AAIA;;;AAGG,KAAA;AACH;AAIA;;;AAGG,IAAA,YAAA,CAAA,KAAA,EAAA;QACyB,OAAA,YACxB,OAAO,CAAE;AAsDb,KAAA;;;AAGG;;AAOH,IAAA,MAAA,sBAAA,CAAA,OAAA,EAAA;;AAEG;AACG,QAAA,MAAA,OAAiB,GAAA,MAAQC,eAAQ,CAAA,SAAA,CAAA,WAAA,EAAA,SAAA,CAAA,cAAA,CAAA,CAAA;AAIvC;;;;AAIG,YAAA,GAAA,EAAA,YAAA,CAAA,GAAA;YAEC,eAAS,CAAA,CAAA;AA8Db,SAAA,CAAA;;;AAGG;QACa,MAAA,aAAY,GAAA,MAAgBC,SAAQ,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA;AAOvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"CryptoOps.mjs","sources":["../../src/crypto/CryptoOps.ts"],"sourcesContent":[null],"names":["BrowserCrypto.validateCryptoAvailable","BrowserCrypto.createNewGuid","BrowserCrypto.generateKeyPair","BrowserCrypto.exportJwk","BrowserCrypto.importJwk","BrowserAuthErrorCodes.cryptoKeyNotFound","BrowserCrypto.sign","BrowserCrypto.sha256Digest"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { IPerformanceClient, Logger, PkceCodes } from "@azure/msal-common";
2
- /**
3
- * This file defines APIs to generate PKCE codes and code verifiers.
4
- */
5
- /**
6
- * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636
7
- */
8
- export declare function generatePkceCodes(performanceClient: IPerformanceClient, logger: Logger, correlationId: string): Promise<PkceCodes>;
1
+ import { IPerformanceClient, Logger, PkceCodes } from "@azure/msal-common";
2
+ /**
3
+ * This file defines APIs to generate PKCE codes and code verifiers.
4
+ */
5
+ /**
6
+ * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636
7
+ */
8
+ export declare function generatePkceCodes(performanceClient: IPerformanceClient, logger: Logger, correlationId: string): Promise<PkceCodes>;
9
9
  //# sourceMappingURL=PkceGenerator.d.ts.map
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-browser v3.5.1-beta.1 2023-11-14 */
1
+ /*! @azure/msal-browser v3.7.0 2024-01-09 */
2
2
  'use strict';
3
3
  import { PerformanceEvents, invoke, invokeAsync } from '@azure/msal-common';
4
4
  import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
@@ -6,59 +6,59 @@ import { urlEncodeArr } from '../encode/Base64Encode.mjs';
6
6
  import { getRandomValues, sha256Digest } from './BrowserCrypto.mjs';
7
7
  import { pkceNotCreated } from '../error/BrowserAuthErrorCodes.mjs';
8
8
 
9
- /*
10
- * Copyright (c) Microsoft Corporation. All rights reserved.
11
- * Licensed under the MIT License.
12
- */
13
- // Constant byte array length
14
- const RANDOM_BYTE_ARR_LENGTH = 32;
15
- /**
16
- * This file defines APIs to generate PKCE codes and code verifiers.
17
- */
18
- /**
19
- * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636
20
- */
21
- async function generatePkceCodes(performanceClient, logger, correlationId) {
22
- performanceClient.addQueueMeasurement(PerformanceEvents.GeneratePkceCodes, correlationId);
23
- const codeVerifier = invoke(generateCodeVerifier, PerformanceEvents.GenerateCodeVerifier, logger, performanceClient, correlationId)(performanceClient, logger, correlationId);
24
- const codeChallenge = await invokeAsync(generateCodeChallengeFromVerifier, PerformanceEvents.GenerateCodeChallengeFromVerifier, logger, performanceClient, correlationId)(codeVerifier, performanceClient, logger, correlationId);
25
- return {
26
- verifier: codeVerifier,
27
- challenge: codeChallenge,
28
- };
29
- }
30
- /**
31
- * Generates a random 32 byte buffer and returns the base64
32
- * encoded string to be used as a PKCE Code Verifier
33
- */
34
- function generateCodeVerifier(performanceClient, logger, correlationId) {
35
- try {
36
- // Generate random values as utf-8
37
- const buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);
38
- invoke(getRandomValues, PerformanceEvents.GetRandomValues, logger, performanceClient, correlationId)(buffer);
39
- // encode verifier as base64
40
- const pkceCodeVerifierB64 = urlEncodeArr(buffer);
41
- return pkceCodeVerifierB64;
42
- }
43
- catch (e) {
44
- throw createBrowserAuthError(pkceNotCreated);
45
- }
46
- }
47
- /**
48
- * Creates a base64 encoded PKCE Code Challenge string from the
49
- * hash created from the PKCE Code Verifier supplied
50
- */
51
- async function generateCodeChallengeFromVerifier(pkceCodeVerifier, performanceClient, logger, correlationId) {
52
- performanceClient.addQueueMeasurement(PerformanceEvents.GenerateCodeChallengeFromVerifier, correlationId);
53
- try {
54
- // hashed verifier
55
- const pkceHashedCodeVerifier = await invokeAsync(sha256Digest, PerformanceEvents.Sha256Digest, logger, performanceClient, correlationId)(pkceCodeVerifier, performanceClient, correlationId);
56
- // encode hash as base64
57
- return urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));
58
- }
59
- catch (e) {
60
- throw createBrowserAuthError(pkceNotCreated);
61
- }
9
+ /*
10
+ * Copyright (c) Microsoft Corporation. All rights reserved.
11
+ * Licensed under the MIT License.
12
+ */
13
+ // Constant byte array length
14
+ const RANDOM_BYTE_ARR_LENGTH = 32;
15
+ /**
16
+ * This file defines APIs to generate PKCE codes and code verifiers.
17
+ */
18
+ /**
19
+ * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636
20
+ */
21
+ async function generatePkceCodes(performanceClient, logger, correlationId) {
22
+ performanceClient.addQueueMeasurement(PerformanceEvents.GeneratePkceCodes, correlationId);
23
+ const codeVerifier = invoke(generateCodeVerifier, PerformanceEvents.GenerateCodeVerifier, logger, performanceClient, correlationId)(performanceClient, logger, correlationId);
24
+ const codeChallenge = await invokeAsync(generateCodeChallengeFromVerifier, PerformanceEvents.GenerateCodeChallengeFromVerifier, logger, performanceClient, correlationId)(codeVerifier, performanceClient, logger, correlationId);
25
+ return {
26
+ verifier: codeVerifier,
27
+ challenge: codeChallenge,
28
+ };
29
+ }
30
+ /**
31
+ * Generates a random 32 byte buffer and returns the base64
32
+ * encoded string to be used as a PKCE Code Verifier
33
+ */
34
+ function generateCodeVerifier(performanceClient, logger, correlationId) {
35
+ try {
36
+ // Generate random values as utf-8
37
+ const buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);
38
+ invoke(getRandomValues, PerformanceEvents.GetRandomValues, logger, performanceClient, correlationId)(buffer);
39
+ // encode verifier as base64
40
+ const pkceCodeVerifierB64 = urlEncodeArr(buffer);
41
+ return pkceCodeVerifierB64;
42
+ }
43
+ catch (e) {
44
+ throw createBrowserAuthError(pkceNotCreated);
45
+ }
46
+ }
47
+ /**
48
+ * Creates a base64 encoded PKCE Code Challenge string from the
49
+ * hash created from the PKCE Code Verifier supplied
50
+ */
51
+ async function generateCodeChallengeFromVerifier(pkceCodeVerifier, performanceClient, logger, correlationId) {
52
+ performanceClient.addQueueMeasurement(PerformanceEvents.GenerateCodeChallengeFromVerifier, correlationId);
53
+ try {
54
+ // hashed verifier
55
+ const pkceHashedCodeVerifier = await invokeAsync(sha256Digest, PerformanceEvents.Sha256Digest, logger, performanceClient, correlationId)(pkceCodeVerifier, performanceClient, correlationId);
56
+ // encode hash as base64
57
+ return urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));
58
+ }
59
+ catch (e) {
60
+ throw createBrowserAuthError(pkceNotCreated);
61
+ }
62
62
  }
63
63
 
64
64
  export { generatePkceCodes };
@@ -1 +1 @@
1
- {"version":3,"file":"PkceGenerator.mjs","sources":["../../src/crypto/PkceGenerator.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAKA;AAkBA;;AAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PkceGenerator.mjs","sources":["../../src/crypto/PkceGenerator.ts"],"sourcesContent":[null],"names":["BrowserAuthErrorCodes.pkceNotCreated"],"mappings":";;;;;;;;AAAA;;;AAGG;AAiBH;AACA,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;AAEG;AAEH;;AAEG;AACI,eAAe,iBAAiB,CACnC,iBAAqC,EACrC,MAAc,EACd,aAAqB,EAAA;IAErB,iBAAiB,CAAC,mBAAmB,CACjC,iBAAiB,CAAC,iBAAiB,EACnC,aAAa,CAChB,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,CACvB,oBAAoB,EACpB,iBAAiB,CAAC,oBAAoB,EACtC,MAAM,EACN,iBAAiB,EACjB,aAAa,CAChB,CAAC,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,MAAM,WAAW,CACnC,iCAAiC,EACjC,iBAAiB,CAAC,iCAAiC,EACnD,MAAM,EACN,iBAAiB,EACjB,aAAa,CAChB,CAAC,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D,OAAO;AACH,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,SAAS,EAAE,aAAa;KAC3B,CAAC;AACN,CAAC;AAED;;;AAGG;AACH,SAAS,oBAAoB,CACzB,iBAAqC,EACrC,MAAc,EACd,aAAqB,EAAA;IAErB,IAAI;;AAEA,QAAA,MAAM,MAAM,GAAe,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAClE,QAAA,MAAM,CACF,eAAe,EACf,iBAAiB,CAAC,eAAe,EACjC,MAAM,EACN,iBAAiB,EACjB,aAAa,CAChB,CAAC,MAAM,CAAC,CAAC;;AAEV,QAAA,MAAM,mBAAmB,GAAW,YAAY,CAAC,MAAM,CAAC,CAAC;AACzD,QAAA,OAAO,mBAAmB,CAAC;AAC9B,KAAA;AAAC,IAAA,OAAO,CAAC,EAAE;AACR,QAAA,MAAM,sBAAsB,CAACA,cAAoC,CAAC,CAAC;AACtE,KAAA;AACL,CAAC;AAED;;;AAGG;AACH,eAAe,iCAAiC,CAC5C,gBAAwB,EACxB,iBAAqC,EACrC,MAAc,EACd,aAAqB,EAAA;IAErB,iBAAiB,CAAC,mBAAmB,CACjC,iBAAiB,CAAC,iCAAiC,EACnD,aAAa,CAChB,CAAC;IACF,IAAI;;QAEA,MAAM,sBAAsB,GAAG,MAAM,WAAW,CAC5C,YAAY,EACZ,iBAAiB,CAAC,YAAY,EAC9B,MAAM,EACN,iBAAiB,EACjB,aAAa,CAChB,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;;QAEtD,OAAO,YAAY,CAAC,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC/D,KAAA;AAAC,IAAA,OAAO,CAAC,EAAE;AACR,QAAA,MAAM,sBAAsB,CAACA,cAAoC,CAAC,CAAC;AACtE,KAAA;AACL;;;;"}
@@ -1,31 +1,31 @@
1
- import { LoggerOptions, SignedHttpRequestParameters } from "@azure/msal-common";
2
- export type SignedHttpRequestOptions = {
3
- loggerOptions: LoggerOptions;
4
- };
5
- export declare class SignedHttpRequest {
6
- private popTokenGenerator;
7
- private cryptoOps;
8
- private shrParameters;
9
- private logger;
10
- constructor(shrParameters: SignedHttpRequestParameters, shrOptions?: SignedHttpRequestOptions);
11
- /**
12
- * Generates and caches a keypair for the given request options.
13
- * @returns Public key digest, which should be sent to the token issuer.
14
- */
15
- generatePublicKeyThumbprint(): Promise<string>;
16
- /**
17
- * Generates a signed http request for the given payload with the given key.
18
- * @param payload Payload to sign (e.g. access token)
19
- * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
20
- * @param claims Additional claims to include/override in the signed JWT
21
- * @returns Pop token signed with the corresponding private key
22
- */
23
- signRequest(payload: string, publicKeyThumbprint: string, claims?: object): Promise<string>;
24
- /**
25
- * Removes cached keys from browser for given public key thumbprint
26
- * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
27
- * @returns If keys are properly deleted
28
- */
29
- removeKeys(publicKeyThumbprint: string): Promise<boolean>;
30
- }
1
+ import { LoggerOptions, SignedHttpRequestParameters } from "@azure/msal-common";
2
+ export type SignedHttpRequestOptions = {
3
+ loggerOptions: LoggerOptions;
4
+ };
5
+ export declare class SignedHttpRequest {
6
+ private popTokenGenerator;
7
+ private cryptoOps;
8
+ private shrParameters;
9
+ private logger;
10
+ constructor(shrParameters: SignedHttpRequestParameters, shrOptions?: SignedHttpRequestOptions);
11
+ /**
12
+ * Generates and caches a keypair for the given request options.
13
+ * @returns Public key digest, which should be sent to the token issuer.
14
+ */
15
+ generatePublicKeyThumbprint(): Promise<string>;
16
+ /**
17
+ * Generates a signed http request for the given payload with the given key.
18
+ * @param payload Payload to sign (e.g. access token)
19
+ * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
20
+ * @param claims Additional claims to include/override in the signed JWT
21
+ * @returns Pop token signed with the corresponding private key
22
+ */
23
+ signRequest(payload: string, publicKeyThumbprint: string, claims?: object): Promise<string>;
24
+ /**
25
+ * Removes cached keys from browser for given public key thumbprint
26
+ * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
27
+ * @returns If keys are properly deleted
28
+ */
29
+ removeKeys(publicKeyThumbprint: string): Promise<boolean>;
30
+ }
31
31
  //# sourceMappingURL=SignedHttpRequest.d.ts.map
@@ -1,47 +1,47 @@
1
- /*! @azure/msal-browser v3.5.1-beta.1 2023-11-14 */
1
+ /*! @azure/msal-browser v3.7.0 2024-01-09 */
2
2
  'use strict';
3
3
  import { CryptoOps } from './CryptoOps.mjs';
4
4
  import { Logger, PopTokenGenerator } from '@azure/msal-common';
5
5
  import { name, version } from '../packageMetadata.mjs';
6
6
 
7
- /*
8
- * Copyright (c) Microsoft Corporation. All rights reserved.
9
- * Licensed under the MIT License.
10
- */
11
- class SignedHttpRequest {
12
- constructor(shrParameters, shrOptions) {
13
- const loggerOptions = (shrOptions && shrOptions.loggerOptions) || {};
14
- this.logger = new Logger(loggerOptions, name, version);
15
- this.cryptoOps = new CryptoOps(this.logger);
16
- this.popTokenGenerator = new PopTokenGenerator(this.cryptoOps);
17
- this.shrParameters = shrParameters;
18
- }
19
- /**
20
- * Generates and caches a keypair for the given request options.
21
- * @returns Public key digest, which should be sent to the token issuer.
22
- */
23
- async generatePublicKeyThumbprint() {
24
- const { kid } = await this.popTokenGenerator.generateKid(this.shrParameters);
25
- return kid;
26
- }
27
- /**
28
- * Generates a signed http request for the given payload with the given key.
29
- * @param payload Payload to sign (e.g. access token)
30
- * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
31
- * @param claims Additional claims to include/override in the signed JWT
32
- * @returns Pop token signed with the corresponding private key
33
- */
34
- async signRequest(payload, publicKeyThumbprint, claims) {
35
- return this.popTokenGenerator.signPayload(payload, publicKeyThumbprint, this.shrParameters, claims);
36
- }
37
- /**
38
- * Removes cached keys from browser for given public key thumbprint
39
- * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
40
- * @returns If keys are properly deleted
41
- */
42
- async removeKeys(publicKeyThumbprint) {
43
- return await this.cryptoOps.removeTokenBindingKey(publicKeyThumbprint);
44
- }
7
+ /*
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License.
10
+ */
11
+ class SignedHttpRequest {
12
+ constructor(shrParameters, shrOptions) {
13
+ const loggerOptions = (shrOptions && shrOptions.loggerOptions) || {};
14
+ this.logger = new Logger(loggerOptions, name, version);
15
+ this.cryptoOps = new CryptoOps(this.logger);
16
+ this.popTokenGenerator = new PopTokenGenerator(this.cryptoOps);
17
+ this.shrParameters = shrParameters;
18
+ }
19
+ /**
20
+ * Generates and caches a keypair for the given request options.
21
+ * @returns Public key digest, which should be sent to the token issuer.
22
+ */
23
+ async generatePublicKeyThumbprint() {
24
+ const { kid } = await this.popTokenGenerator.generateKid(this.shrParameters);
25
+ return kid;
26
+ }
27
+ /**
28
+ * Generates a signed http request for the given payload with the given key.
29
+ * @param payload Payload to sign (e.g. access token)
30
+ * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
31
+ * @param claims Additional claims to include/override in the signed JWT
32
+ * @returns Pop token signed with the corresponding private key
33
+ */
34
+ async signRequest(payload, publicKeyThumbprint, claims) {
35
+ return this.popTokenGenerator.signPayload(payload, publicKeyThumbprint, this.shrParameters, claims);
36
+ }
37
+ /**
38
+ * Removes cached keys from browser for given public key thumbprint
39
+ * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)
40
+ * @returns If keys are properly deleted
41
+ */
42
+ async removeKeys(publicKeyThumbprint) {
43
+ return this.cryptoOps.removeTokenBindingKey(publicKeyThumbprint);
44
+ }
45
45
  }
46
46
 
47
47
  export { SignedHttpRequest };
@@ -1 +1 @@
1
- {"version":3,"file":"SignedHttpRequest.mjs","sources":["../../src/crypto/SignedHttpRequest.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAMA;AAQA;;;AAOW,uBAA4C,CAAA;IACnD,yBAAuB,EAAA,UAAA,EAAA;AAGnB,QAAA,MAAA,aAAA,IAAe,UAA2B,IAAA,UAAA,CAAA,aAChC,KAA2B,EAAA,CAAA;AASzC,QAAA,IAAA,CAAA,MAAA,GAAA,IAAA,MAAA,CAAA,aAAA,EAAA,IAAA,EAAA,OAAA,CAAA,CAAA;;;AAGG,QAAA,IAAA,CAAA,aAAA,GAAA,aAAA,CAAA;AACG,KAAA;AAQN;;;;;;AAMG,QAAA,OAAA,GAAA,CAAA;AACG,KAAA;AAaN;;;;AAIG;;AAIN;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SignedHttpRequest.mjs","sources":["../../src/crypto/SignedHttpRequest.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;AAGG;MAeU,iBAAiB,CAAA;IAM1B,WACI,CAAA,aAA0C,EAC1C,UAAqC,EAAA;QAErC,MAAM,aAAa,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,aAAa,KAAK,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;KACtC;AAED;;;AAGG;AACH,IAAA,MAAM,2BAA2B,GAAA;AAC7B,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CACpD,IAAI,CAAC,aAAa,CACrB,CAAC;AAEF,QAAA,OAAO,GAAG,CAAC;KACd;AAED;;;;;;AAMG;AACH,IAAA,MAAM,WAAW,CACb,OAAe,EACf,mBAA2B,EAC3B,MAAe,EAAA;AAEf,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CACrC,OAAO,EACP,mBAAmB,EACnB,IAAI,CAAC,aAAa,EAClB,MAAM,CACT,CAAC;KACL;AAED;;;;AAIG;IACH,MAAM,UAAU,CAAC,mBAA2B,EAAA;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;KACpE;AACJ;;;;"}
@@ -1,10 +1,10 @@
1
- /**
2
- * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:
3
- * https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem
4
- */
5
- /**
6
- * Returns a URL-safe plaintext decoded string from b64 encoded input.
7
- * @param input
8
- */
9
- export declare function base64Decode(input: string): string;
1
+ /**
2
+ * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:
3
+ * https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem
4
+ */
5
+ /**
6
+ * Returns a URL-safe plaintext decoded string from b64 encoded input.
7
+ * @param input
8
+ */
9
+ export declare function base64Decode(input: string): string;
10
10
  //# sourceMappingURL=Base64Decode.d.ts.map