@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,78 +1,78 @@
1
- import { ICrypto, Logger, ExternalTokenResponse } from "@azure/msal-common";
2
- import { BrowserConfiguration } from "../config/Configuration";
3
- import { SilentRequest } from "../request/SilentRequest";
4
- import { BrowserCacheManager } from "./BrowserCacheManager";
5
- import { ITokenCache } from "./ITokenCache";
6
- import { AuthenticationResult } from "../response/AuthenticationResult";
7
- export type LoadTokenOptions = {
8
- clientInfo?: string;
9
- expiresOn?: number;
10
- extendedExpiresOn?: number;
11
- };
12
- /**
13
- * Token cache manager
14
- */
15
- export declare class TokenCache implements ITokenCache {
16
- isBrowserEnvironment: boolean;
17
- protected config: BrowserConfiguration;
18
- private storage;
19
- private logger;
20
- private cryptoObj;
21
- constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto);
22
- /**
23
- * API to load tokens to msal-browser cache.
24
- * @param request
25
- * @param response
26
- * @param options
27
- * @returns `AuthenticationResult` for the response that was loaded.
28
- */
29
- loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult;
30
- /**
31
- * Helper function to load account to msal-browser cache
32
- * @param idToken
33
- * @param environment
34
- * @param clientInfo
35
- * @param authorityType
36
- * @param requestHomeAccountId
37
- * @returns `AccountEntity`
38
- */
39
- private loadAccount;
40
- /**
41
- * Helper function to load id tokens to msal-browser cache
42
- * @param idToken
43
- * @param homeAccountId
44
- * @param environment
45
- * @param tenantId
46
- * @returns `IdTokenEntity`
47
- */
48
- private loadIdToken;
49
- /**
50
- * Helper function to load access tokens to msal-browser cache
51
- * @param request
52
- * @param response
53
- * @param homeAccountId
54
- * @param environment
55
- * @param tenantId
56
- * @returns `AccessTokenEntity`
57
- */
58
- private loadAccessToken;
59
- /**
60
- * Helper function to load refresh tokens to msal-browser cache
61
- * @param request
62
- * @param response
63
- * @param homeAccountId
64
- * @param environment
65
- * @returns `RefreshTokenEntity`
66
- */
67
- private loadRefreshToken;
68
- /**
69
- * Helper function to generate an `AuthenticationResult` for the result.
70
- * @param request
71
- * @param idTokenObj
72
- * @param cacheRecord
73
- * @param authority
74
- * @returns `AuthenticationResult`
75
- */
76
- private generateAuthenticationResult;
77
- }
1
+ import { ICrypto, Logger, ExternalTokenResponse } from "@azure/msal-common";
2
+ import { BrowserConfiguration } from "../config/Configuration";
3
+ import { SilentRequest } from "../request/SilentRequest";
4
+ import { BrowserCacheManager } from "./BrowserCacheManager";
5
+ import { ITokenCache } from "./ITokenCache";
6
+ import { AuthenticationResult } from "../response/AuthenticationResult";
7
+ export type LoadTokenOptions = {
8
+ clientInfo?: string;
9
+ expiresOn?: number;
10
+ extendedExpiresOn?: number;
11
+ };
12
+ /**
13
+ * Token cache manager
14
+ */
15
+ export declare class TokenCache implements ITokenCache {
16
+ isBrowserEnvironment: boolean;
17
+ protected config: BrowserConfiguration;
18
+ private storage;
19
+ private logger;
20
+ private cryptoObj;
21
+ constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto);
22
+ /**
23
+ * API to load tokens to msal-browser cache.
24
+ * @param request
25
+ * @param response
26
+ * @param options
27
+ * @returns `AuthenticationResult` for the response that was loaded.
28
+ */
29
+ loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult;
30
+ /**
31
+ * Helper function to load account to msal-browser cache
32
+ * @param idToken
33
+ * @param environment
34
+ * @param clientInfo
35
+ * @param authorityType
36
+ * @param requestHomeAccountId
37
+ * @returns `AccountEntity`
38
+ */
39
+ private loadAccount;
40
+ /**
41
+ * Helper function to load id tokens to msal-browser cache
42
+ * @param idToken
43
+ * @param homeAccountId
44
+ * @param environment
45
+ * @param tenantId
46
+ * @returns `IdTokenEntity`
47
+ */
48
+ private loadIdToken;
49
+ /**
50
+ * Helper function to load access tokens to msal-browser cache
51
+ * @param request
52
+ * @param response
53
+ * @param homeAccountId
54
+ * @param environment
55
+ * @param tenantId
56
+ * @returns `AccessTokenEntity`
57
+ */
58
+ private loadAccessToken;
59
+ /**
60
+ * Helper function to load refresh tokens to msal-browser cache
61
+ * @param request
62
+ * @param response
63
+ * @param homeAccountId
64
+ * @param environment
65
+ * @returns `RefreshTokenEntity`
66
+ */
67
+ private loadRefreshToken;
68
+ /**
69
+ * Helper function to generate an `AuthenticationResult` for the result.
70
+ * @param request
71
+ * @param idTokenObj
72
+ * @param cacheRecord
73
+ * @param authority
74
+ * @returns `AuthenticationResult`
75
+ */
76
+ private generateAuthenticationResult;
77
+ }
78
78
  //# sourceMappingURL=TokenCache.d.ts.map
@@ -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 { AuthToken, Authority, AccountEntity, buildAccountToCache, CacheHelpers, ScopeSet } from '@azure/msal-common';
4
4
  import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
@@ -6,200 +6,200 @@ import { base64Decode } from '../encode/Base64Decode.mjs';
6
6
  import { createNewGuid } from '../crypto/BrowserCrypto.mjs';
7
7
  import { nonBrowserEnvironment, unableToLoadToken } from '../error/BrowserAuthErrorCodes.mjs';
8
8
 
9
- /*
10
- * Copyright (c) Microsoft Corporation. All rights reserved.
11
- * Licensed under the MIT License.
12
- */
13
- /**
14
- * Token cache manager
15
- */
16
- class TokenCache {
17
- constructor(configuration, storage, logger, cryptoObj) {
18
- this.isBrowserEnvironment = typeof window !== "undefined";
19
- this.config = configuration;
20
- this.storage = storage;
21
- this.logger = logger;
22
- this.cryptoObj = cryptoObj;
23
- }
24
- // Move getAllAccounts here and cache utility APIs
25
- /**
26
- * API to load tokens to msal-browser cache.
27
- * @param request
28
- * @param response
29
- * @param options
30
- * @returns `AuthenticationResult` for the response that was loaded.
31
- */
32
- loadExternalTokens(request, response, options) {
33
- if (!this.isBrowserEnvironment) {
34
- throw createBrowserAuthError(nonBrowserEnvironment);
35
- }
36
- const idTokenClaims = response.id_token
37
- ? AuthToken.extractTokenClaims(response.id_token, base64Decode)
38
- : undefined;
39
- const authorityOptions = {
40
- protocolMode: this.config.auth.protocolMode,
41
- knownAuthorities: this.config.auth.knownAuthorities,
42
- cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
43
- authorityMetadata: this.config.auth.authorityMetadata,
44
- skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,
45
- };
46
- const authority = request.authority
47
- ? new Authority(Authority.generateAuthority(request.authority, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, request.correlationId || createNewGuid())
48
- : undefined;
49
- const cacheRecordAccount = this.loadAccount(request, options.clientInfo || response.client_info || "", idTokenClaims, authority);
50
- const idToken = this.loadIdToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm);
51
- const accessToken = this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options);
52
- const refreshToken = this.loadRefreshToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment);
53
- return this.generateAuthenticationResult(request, {
54
- account: cacheRecordAccount,
55
- idToken,
56
- accessToken,
57
- refreshToken,
58
- }, idTokenClaims, authority);
59
- }
60
- /**
61
- * Helper function to load account to msal-browser cache
62
- * @param idToken
63
- * @param environment
64
- * @param clientInfo
65
- * @param authorityType
66
- * @param requestHomeAccountId
67
- * @returns `AccountEntity`
68
- */
69
- loadAccount(request, clientInfo, idTokenClaims, authority) {
70
- this.logger.verbose("TokenCache - loading account");
71
- if (request.account) {
72
- const accountEntity = AccountEntity.createFromAccountInfo(request.account);
73
- this.storage.setAccount(accountEntity);
74
- return accountEntity;
75
- }
76
- else if (!authority || (!clientInfo && !idTokenClaims)) {
77
- this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead.");
78
- throw createBrowserAuthError(unableToLoadToken);
79
- }
80
- const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);
81
- const claimsTenantId = idTokenClaims?.tid;
82
- const cachedAccount = buildAccountToCache(this.storage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, authority.hostnameAndPort, claimsTenantId, undefined, // authCodePayload
83
- undefined, // nativeAccountId
84
- this.logger);
85
- this.storage.setAccount(cachedAccount);
86
- return cachedAccount;
87
- }
88
- /**
89
- * Helper function to load id tokens to msal-browser cache
90
- * @param idToken
91
- * @param homeAccountId
92
- * @param environment
93
- * @param tenantId
94
- * @returns `IdTokenEntity`
95
- */
96
- loadIdToken(response, homeAccountId, environment, tenantId) {
97
- if (!response.id_token) {
98
- this.logger.verbose("TokenCache - no id token found in response");
99
- return null;
100
- }
101
- this.logger.verbose("TokenCache - loading id token");
102
- const idTokenEntity = CacheHelpers.createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId);
103
- this.storage.setIdTokenCredential(idTokenEntity);
104
- return idTokenEntity;
105
- }
106
- /**
107
- * Helper function to load access tokens to msal-browser cache
108
- * @param request
109
- * @param response
110
- * @param homeAccountId
111
- * @param environment
112
- * @param tenantId
113
- * @returns `AccessTokenEntity`
114
- */
115
- loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {
116
- if (!response.access_token) {
117
- this.logger.verbose("TokenCache - no access token found in response");
118
- return null;
119
- }
120
- else if (!response.expires_in) {
121
- this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache.");
122
- return null;
123
- }
124
- else if (!response.scope &&
125
- (!request.scopes || !request.scopes.length)) {
126
- this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache.");
127
- return null;
128
- }
129
- this.logger.verbose("TokenCache - loading access token");
130
- const scopes = response.scope
131
- ? ScopeSet.fromString(response.scope)
132
- : new ScopeSet(request.scopes);
133
- const expiresOn = options.expiresOn ||
134
- response.expires_in + new Date().getTime() / 1000;
135
- const extendedExpiresOn = options.extendedExpiresOn ||
136
- (response.ext_expires_in || response.expires_in) +
137
- new Date().getTime() / 1000;
138
- const accessTokenEntity = CacheHelpers.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode);
139
- this.storage.setAccessTokenCredential(accessTokenEntity);
140
- return accessTokenEntity;
141
- }
142
- /**
143
- * Helper function to load refresh tokens to msal-browser cache
144
- * @param request
145
- * @param response
146
- * @param homeAccountId
147
- * @param environment
148
- * @returns `RefreshTokenEntity`
149
- */
150
- loadRefreshToken(response, homeAccountId, environment) {
151
- if (!response.refresh_token) {
152
- this.logger.verbose("TokenCache - no refresh token found in response");
153
- return null;
154
- }
155
- this.logger.verbose("TokenCache - loading refresh token");
156
- const refreshTokenEntity = CacheHelpers.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId, response.foci, undefined, // userAssertionHash
157
- response.refresh_token_expires_in);
158
- this.storage.setRefreshTokenCredential(refreshTokenEntity);
159
- return refreshTokenEntity;
160
- }
161
- /**
162
- * Helper function to generate an `AuthenticationResult` for the result.
163
- * @param request
164
- * @param idTokenObj
165
- * @param cacheRecord
166
- * @param authority
167
- * @returns `AuthenticationResult`
168
- */
169
- generateAuthenticationResult(request, cacheRecord, idTokenClaims, authority) {
170
- let accessToken = "";
171
- let responseScopes = [];
172
- let expiresOn = null;
173
- let extExpiresOn;
174
- if (cacheRecord?.accessToken) {
175
- accessToken = cacheRecord.accessToken.secret;
176
- responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();
177
- expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);
178
- extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);
179
- }
180
- const accountEntity = cacheRecord.account;
181
- return {
182
- authority: authority ? authority.canonicalAuthority : "",
183
- uniqueId: cacheRecord.account.localAccountId,
184
- tenantId: cacheRecord.account.realm,
185
- scopes: responseScopes,
186
- account: accountEntity.getAccountInfo(),
187
- idToken: cacheRecord.idToken?.secret || "",
188
- idTokenClaims: idTokenClaims || {},
189
- accessToken: accessToken,
190
- fromCache: true,
191
- expiresOn: expiresOn,
192
- correlationId: request.correlationId || "",
193
- requestId: "",
194
- extExpiresOn: extExpiresOn,
195
- familyId: cacheRecord.refreshToken?.familyId || "",
196
- tokenType: cacheRecord?.accessToken?.tokenType || "",
197
- state: request.state || "",
198
- cloudGraphHostName: accountEntity.cloudGraphHostName || "",
199
- msGraphHost: accountEntity.msGraphHost || "",
200
- fromNativeBroker: false,
201
- };
202
- }
9
+ /*
10
+ * Copyright (c) Microsoft Corporation. All rights reserved.
11
+ * Licensed under the MIT License.
12
+ */
13
+ /**
14
+ * Token cache manager
15
+ */
16
+ class TokenCache {
17
+ constructor(configuration, storage, logger, cryptoObj) {
18
+ this.isBrowserEnvironment = typeof window !== "undefined";
19
+ this.config = configuration;
20
+ this.storage = storage;
21
+ this.logger = logger;
22
+ this.cryptoObj = cryptoObj;
23
+ }
24
+ // Move getAllAccounts here and cache utility APIs
25
+ /**
26
+ * API to load tokens to msal-browser cache.
27
+ * @param request
28
+ * @param response
29
+ * @param options
30
+ * @returns `AuthenticationResult` for the response that was loaded.
31
+ */
32
+ loadExternalTokens(request, response, options) {
33
+ if (!this.isBrowserEnvironment) {
34
+ throw createBrowserAuthError(nonBrowserEnvironment);
35
+ }
36
+ const idTokenClaims = response.id_token
37
+ ? AuthToken.extractTokenClaims(response.id_token, base64Decode)
38
+ : undefined;
39
+ const authorityOptions = {
40
+ protocolMode: this.config.auth.protocolMode,
41
+ knownAuthorities: this.config.auth.knownAuthorities,
42
+ cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
43
+ authorityMetadata: this.config.auth.authorityMetadata,
44
+ skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,
45
+ };
46
+ const authority = request.authority
47
+ ? new Authority(Authority.generateAuthority(request.authority, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, request.correlationId || createNewGuid())
48
+ : undefined;
49
+ const cacheRecordAccount = this.loadAccount(request, options.clientInfo || response.client_info || "", idTokenClaims, authority);
50
+ const idToken = this.loadIdToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm);
51
+ const accessToken = this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options);
52
+ const refreshToken = this.loadRefreshToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment);
53
+ return this.generateAuthenticationResult(request, {
54
+ account: cacheRecordAccount,
55
+ idToken,
56
+ accessToken,
57
+ refreshToken,
58
+ }, idTokenClaims, authority);
59
+ }
60
+ /**
61
+ * Helper function to load account to msal-browser cache
62
+ * @param idToken
63
+ * @param environment
64
+ * @param clientInfo
65
+ * @param authorityType
66
+ * @param requestHomeAccountId
67
+ * @returns `AccountEntity`
68
+ */
69
+ loadAccount(request, clientInfo, idTokenClaims, authority) {
70
+ this.logger.verbose("TokenCache - loading account");
71
+ if (request.account) {
72
+ const accountEntity = AccountEntity.createFromAccountInfo(request.account);
73
+ this.storage.setAccount(accountEntity);
74
+ return accountEntity;
75
+ }
76
+ else if (!authority || (!clientInfo && !idTokenClaims)) {
77
+ this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead.");
78
+ throw createBrowserAuthError(unableToLoadToken);
79
+ }
80
+ const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims);
81
+ const claimsTenantId = idTokenClaims?.tid;
82
+ const cachedAccount = buildAccountToCache(this.storage, authority, homeAccountId, base64Decode, idTokenClaims, clientInfo, authority.hostnameAndPort, claimsTenantId, undefined, // authCodePayload
83
+ undefined, // nativeAccountId
84
+ this.logger);
85
+ this.storage.setAccount(cachedAccount);
86
+ return cachedAccount;
87
+ }
88
+ /**
89
+ * Helper function to load id tokens to msal-browser cache
90
+ * @param idToken
91
+ * @param homeAccountId
92
+ * @param environment
93
+ * @param tenantId
94
+ * @returns `IdTokenEntity`
95
+ */
96
+ loadIdToken(response, homeAccountId, environment, tenantId) {
97
+ if (!response.id_token) {
98
+ this.logger.verbose("TokenCache - no id token found in response");
99
+ return null;
100
+ }
101
+ this.logger.verbose("TokenCache - loading id token");
102
+ const idTokenEntity = CacheHelpers.createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId);
103
+ this.storage.setIdTokenCredential(idTokenEntity);
104
+ return idTokenEntity;
105
+ }
106
+ /**
107
+ * Helper function to load access tokens to msal-browser cache
108
+ * @param request
109
+ * @param response
110
+ * @param homeAccountId
111
+ * @param environment
112
+ * @param tenantId
113
+ * @returns `AccessTokenEntity`
114
+ */
115
+ loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {
116
+ if (!response.access_token) {
117
+ this.logger.verbose("TokenCache - no access token found in response");
118
+ return null;
119
+ }
120
+ else if (!response.expires_in) {
121
+ this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache.");
122
+ return null;
123
+ }
124
+ else if (!response.scope &&
125
+ (!request.scopes || !request.scopes.length)) {
126
+ this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache.");
127
+ return null;
128
+ }
129
+ this.logger.verbose("TokenCache - loading access token");
130
+ const scopes = response.scope
131
+ ? ScopeSet.fromString(response.scope)
132
+ : new ScopeSet(request.scopes);
133
+ const expiresOn = options.expiresOn ||
134
+ response.expires_in + new Date().getTime() / 1000;
135
+ const extendedExpiresOn = options.extendedExpiresOn ||
136
+ (response.ext_expires_in || response.expires_in) +
137
+ new Date().getTime() / 1000;
138
+ const accessTokenEntity = CacheHelpers.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode);
139
+ this.storage.setAccessTokenCredential(accessTokenEntity);
140
+ return accessTokenEntity;
141
+ }
142
+ /**
143
+ * Helper function to load refresh tokens to msal-browser cache
144
+ * @param request
145
+ * @param response
146
+ * @param homeAccountId
147
+ * @param environment
148
+ * @returns `RefreshTokenEntity`
149
+ */
150
+ loadRefreshToken(response, homeAccountId, environment) {
151
+ if (!response.refresh_token) {
152
+ this.logger.verbose("TokenCache - no refresh token found in response");
153
+ return null;
154
+ }
155
+ this.logger.verbose("TokenCache - loading refresh token");
156
+ const refreshTokenEntity = CacheHelpers.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId, response.foci, undefined, // userAssertionHash
157
+ response.refresh_token_expires_in);
158
+ this.storage.setRefreshTokenCredential(refreshTokenEntity);
159
+ return refreshTokenEntity;
160
+ }
161
+ /**
162
+ * Helper function to generate an `AuthenticationResult` for the result.
163
+ * @param request
164
+ * @param idTokenObj
165
+ * @param cacheRecord
166
+ * @param authority
167
+ * @returns `AuthenticationResult`
168
+ */
169
+ generateAuthenticationResult(request, cacheRecord, idTokenClaims, authority) {
170
+ let accessToken = "";
171
+ let responseScopes = [];
172
+ let expiresOn = null;
173
+ let extExpiresOn;
174
+ if (cacheRecord?.accessToken) {
175
+ accessToken = cacheRecord.accessToken.secret;
176
+ responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();
177
+ expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);
178
+ extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);
179
+ }
180
+ const accountEntity = cacheRecord.account;
181
+ return {
182
+ authority: authority ? authority.canonicalAuthority : "",
183
+ uniqueId: cacheRecord.account.localAccountId,
184
+ tenantId: cacheRecord.account.realm,
185
+ scopes: responseScopes,
186
+ account: accountEntity.getAccountInfo(),
187
+ idToken: cacheRecord.idToken?.secret || "",
188
+ idTokenClaims: idTokenClaims || {},
189
+ accessToken: accessToken,
190
+ fromCache: true,
191
+ expiresOn: expiresOn,
192
+ correlationId: request.correlationId || "",
193
+ requestId: "",
194
+ extExpiresOn: extExpiresOn,
195
+ familyId: cacheRecord.refreshToken?.familyId || "",
196
+ tokenType: cacheRecord?.accessToken?.tokenType || "",
197
+ state: request.state || "",
198
+ cloudGraphHostName: accountEntity.cloudGraphHostName || "",
199
+ msGraphHost: accountEntity.msGraphHost || "",
200
+ fromNativeBroker: false,
201
+ };
202
+ }
203
203
  }
204
204
 
205
205
  export { TokenCache };