@azure/msal-browser 3.0.0-alpha.1 → 3.0.0-beta.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 (178) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +213 -213
  3. package/dist/app/IPublicClientApplication.d.ts +45 -45
  4. package/dist/app/IPublicClientApplication.js +96 -96
  5. package/dist/app/PublicClientApplication.d.ts +244 -244
  6. package/dist/app/PublicClientApplication.js +307 -307
  7. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +63 -63
  8. package/dist/broker/nativeBroker/NativeMessageHandler.js +255 -255
  9. package/dist/broker/nativeBroker/NativeRequest.d.ts +43 -43
  10. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  11. package/dist/cache/AsyncMemoryStorage.d.ts +51 -51
  12. package/dist/cache/AsyncMemoryStorage.js +132 -132
  13. package/dist/cache/BrowserCacheManager.d.ts +376 -377
  14. package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
  15. package/dist/cache/BrowserCacheManager.js +1275 -1276
  16. package/dist/cache/BrowserCacheManager.js.map +1 -1
  17. package/dist/cache/BrowserStorage.d.ts +11 -11
  18. package/dist/cache/BrowserStorage.js +35 -35
  19. package/dist/cache/CryptoKeyStore.d.ts +18 -17
  20. package/dist/cache/CryptoKeyStore.d.ts.map +1 -1
  21. package/dist/cache/CryptoKeyStore.js +40 -41
  22. package/dist/cache/CryptoKeyStore.js.map +1 -1
  23. package/dist/cache/DatabaseStorage.d.ts +56 -56
  24. package/dist/cache/DatabaseStorage.js +190 -190
  25. package/dist/cache/IAsyncMemoryStorage.d.ts +27 -27
  26. package/dist/cache/ITokenCache.d.ts +10 -10
  27. package/dist/cache/IWindowStorage.d.ts +27 -27
  28. package/dist/cache/MemoryStorage.d.ts +11 -11
  29. package/dist/cache/MemoryStorage.js +31 -31
  30. package/dist/cache/TokenCache.d.ts +76 -76
  31. package/dist/cache/TokenCache.js +225 -225
  32. package/dist/config/Configuration.d.ts +187 -203
  33. package/dist/config/Configuration.d.ts.map +1 -1
  34. package/dist/config/Configuration.js +97 -101
  35. package/dist/config/Configuration.js.map +1 -1
  36. package/dist/controllers/ControllerFactory.d.ts +9 -9
  37. package/dist/controllers/ControllerFactory.js +37 -37
  38. package/dist/controllers/IController.d.ts +66 -66
  39. package/dist/controllers/IController.d.ts.map +1 -1
  40. package/dist/controllers/StandardController.d.ts +413 -413
  41. package/dist/controllers/StandardController.d.ts.map +1 -1
  42. package/dist/controllers/StandardController.js +1277 -1272
  43. package/dist/controllers/StandardController.js.map +1 -1
  44. package/dist/crypto/BrowserCrypto.d.ts +49 -61
  45. package/dist/crypto/BrowserCrypto.d.ts.map +1 -1
  46. package/dist/crypto/BrowserCrypto.js +93 -134
  47. package/dist/crypto/BrowserCrypto.js.map +1 -1
  48. package/dist/crypto/CryptoOps.d.ts +72 -73
  49. package/dist/crypto/CryptoOps.d.ts.map +1 -1
  50. package/dist/crypto/CryptoOps.js +150 -150
  51. package/dist/crypto/CryptoOps.js.map +1 -1
  52. package/dist/crypto/GuidGenerator.d.ts +12 -12
  53. package/dist/crypto/GuidGenerator.js +96 -96
  54. package/dist/crypto/ISubtleCrypto.d.ts +9 -9
  55. package/dist/crypto/ModernBrowserCrypto.d.ts +9 -9
  56. package/dist/crypto/ModernBrowserCrypto.js +24 -24
  57. package/dist/crypto/PkceGenerator.d.ts +24 -24
  58. package/dist/crypto/PkceGenerator.js +58 -58
  59. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  60. package/dist/crypto/SignedHttpRequest.js +39 -39
  61. package/dist/encode/Base64Decode.d.ts +22 -22
  62. package/dist/encode/Base64Decode.js +73 -73
  63. package/dist/encode/Base64Encode.d.ts +31 -31
  64. package/dist/encode/Base64Encode.js +79 -79
  65. package/dist/error/BrowserAuthError.d.ts +382 -382
  66. package/dist/error/BrowserAuthError.js +483 -483
  67. package/dist/error/BrowserConfigurationAuthError.d.ts +70 -70
  68. package/dist/error/BrowserConfigurationAuthError.js +96 -96
  69. package/dist/error/NativeAuthError.d.ts +57 -56
  70. package/dist/error/NativeAuthError.d.ts.map +1 -1
  71. package/dist/error/NativeAuthError.js +93 -88
  72. package/dist/error/NativeAuthError.js.map +1 -1
  73. package/dist/event/EventHandler.d.ts +41 -41
  74. package/dist/event/EventHandler.js +119 -119
  75. package/dist/event/EventMessage.d.ts +25 -25
  76. package/dist/event/EventMessage.d.ts.map +1 -1
  77. package/dist/event/EventMessage.js +68 -67
  78. package/dist/event/EventMessage.js.map +1 -1
  79. package/dist/event/EventType.d.ts +28 -26
  80. package/dist/event/EventType.d.ts.map +1 -1
  81. package/dist/event/EventType.js +32 -32
  82. package/dist/event/EventType.js.map +1 -1
  83. package/dist/index.d.ts +35 -35
  84. package/dist/index.js +1 -1
  85. package/dist/interaction_client/BaseInteractionClient.d.ts +53 -52
  86. package/dist/interaction_client/BaseInteractionClient.d.ts.map +1 -1
  87. package/dist/interaction_client/BaseInteractionClient.js +151 -138
  88. package/dist/interaction_client/BaseInteractionClient.js.map +1 -1
  89. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  90. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.js +10 -10
  91. package/dist/interaction_client/NativeInteractionClient.d.ts +148 -148
  92. package/dist/interaction_client/NativeInteractionClient.d.ts.map +1 -1
  93. package/dist/interaction_client/NativeInteractionClient.js +521 -517
  94. package/dist/interaction_client/NativeInteractionClient.js.map +1 -1
  95. package/dist/interaction_client/PopupClient.d.ts +111 -111
  96. package/dist/interaction_client/PopupClient.js +476 -476
  97. package/dist/interaction_client/RedirectClient.d.ts +48 -48
  98. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  99. package/dist/interaction_client/RedirectClient.js +291 -290
  100. package/dist/interaction_client/RedirectClient.js.map +1 -1
  101. package/dist/interaction_client/SilentAuthCodeClient.d.ts +22 -22
  102. package/dist/interaction_client/SilentAuthCodeClient.js +62 -62
  103. package/dist/interaction_client/SilentCacheClient.d.ts +21 -21
  104. package/dist/interaction_client/SilentCacheClient.js +67 -67
  105. package/dist/interaction_client/SilentCacheClient.js.map +1 -1
  106. package/dist/interaction_client/SilentIframeClient.d.ts +31 -31
  107. package/dist/interaction_client/SilentIframeClient.js +127 -127
  108. package/dist/interaction_client/SilentRefreshClient.d.ts +19 -19
  109. package/dist/interaction_client/SilentRefreshClient.js +62 -62
  110. package/dist/interaction_client/SilentRefreshClient.js.map +1 -1
  111. package/dist/interaction_client/StandardInteractionClient.d.ts +59 -59
  112. package/dist/interaction_client/StandardInteractionClient.js +259 -259
  113. package/dist/interaction_handler/InteractionHandler.d.ts +39 -39
  114. package/dist/interaction_handler/InteractionHandler.js +127 -127
  115. package/dist/interaction_handler/RedirectHandler.d.ts +24 -24
  116. package/dist/interaction_handler/RedirectHandler.js +118 -118
  117. package/dist/interaction_handler/SilentHandler.d.ts +47 -47
  118. package/dist/interaction_handler/SilentHandler.js +162 -162
  119. package/dist/internals.d.ts +23 -23
  120. package/dist/internals.js +4 -4
  121. package/dist/navigation/INavigationClient.d.ts +16 -16
  122. package/dist/navigation/NavigationClient.d.ts +22 -22
  123. package/dist/navigation/NavigationClient.js +40 -40
  124. package/dist/navigation/NavigationOptions.d.ts +12 -12
  125. package/dist/network/FetchClient.d.ts +26 -26
  126. package/dist/network/FetchClient.js +99 -99
  127. package/dist/network/XhrClient.d.ts +40 -40
  128. package/dist/network/XhrClient.js +117 -117
  129. package/dist/operatingcontext/BaseOperatingContext.d.ts +40 -40
  130. package/dist/operatingcontext/BaseOperatingContext.js +44 -44
  131. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  132. package/dist/operatingcontext/StandardOperatingContext.js +43 -43
  133. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +25 -25
  134. package/dist/operatingcontext/TeamsAppOperatingContext.js +42 -42
  135. package/dist/packageMetadata.d.ts +2 -2
  136. package/dist/packageMetadata.d.ts.map +1 -1
  137. package/dist/packageMetadata.js +4 -4
  138. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  139. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  140. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  141. package/dist/request/EndSessionRequest.d.ts +15 -15
  142. package/dist/request/PopupRequest.d.ts +32 -32
  143. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  144. package/dist/request/RedirectRequest.d.ts +33 -33
  145. package/dist/request/SilentRequest.d.ts +30 -30
  146. package/dist/request/SsoSilentRequest.d.ts +26 -26
  147. package/dist/telemetry/BrowserPerformanceClient.d.ts +37 -38
  148. package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  149. package/dist/telemetry/BrowserPerformanceClient.js +124 -124
  150. package/dist/telemetry/BrowserPerformanceClient.js.map +1 -1
  151. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  152. package/dist/telemetry/BrowserPerformanceMeasurement.js +92 -92
  153. package/dist/utils/BrowserConstants.d.ts +176 -166
  154. package/dist/utils/BrowserConstants.d.ts.map +1 -1
  155. package/dist/utils/BrowserConstants.js +205 -215
  156. package/dist/utils/BrowserConstants.js.map +1 -1
  157. package/dist/utils/BrowserProtocolUtils.d.ts +18 -18
  158. package/dist/utils/BrowserProtocolUtils.js +34 -34
  159. package/dist/utils/BrowserStringUtils.d.ts +26 -26
  160. package/dist/utils/BrowserStringUtils.js +149 -149
  161. package/dist/utils/BrowserUtils.d.ts +65 -65
  162. package/dist/utils/BrowserUtils.js +138 -138
  163. package/dist/utils/MathUtils.d.ts +11 -11
  164. package/dist/utils/MathUtils.js +21 -21
  165. package/lib/msal-browser.cjs.js +18227 -0
  166. package/lib/msal-browser.cjs.js.map +1 -0
  167. package/lib/msal-browser.js +18233 -0
  168. package/lib/msal-browser.js.map +1 -0
  169. package/lib/msal-browser.min.js +63 -0
  170. package/package.json +101 -95
  171. package/dist/crypto/MsBrowserCrypto.d.ts +0 -10
  172. package/dist/crypto/MsBrowserCrypto.d.ts.map +0 -1
  173. package/dist/crypto/MsBrowserCrypto.js +0 -88
  174. package/dist/crypto/MsBrowserCrypto.js.map +0 -1
  175. package/dist/crypto/MsrBrowserCrypto.d.ts +0 -18
  176. package/dist/crypto/MsrBrowserCrypto.d.ts.map +0 -1
  177. package/dist/crypto/MsrBrowserCrypto.js +0 -35
  178. package/dist/crypto/MsrBrowserCrypto.js.map +0 -1
@@ -1,77 +1,77 @@
1
- import { ICrypto, Logger, ExternalTokenResponse, AuthenticationResult } 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
- export type LoadTokenOptions = {
7
- clientInfo?: string;
8
- expiresOn?: number;
9
- extendedExpiresOn?: number;
10
- };
11
- /**
12
- * Token cache manager
13
- */
14
- export declare class TokenCache implements ITokenCache {
15
- isBrowserEnvironment: boolean;
16
- protected config: BrowserConfiguration;
17
- private storage;
18
- private logger;
19
- private cryptoObj;
20
- constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto);
21
- /**
22
- * API to load tokens to msal-browser cache.
23
- * @param request
24
- * @param response
25
- * @param options
26
- * @returns `AuthenticationResult` for the response that was loaded.
27
- */
28
- loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult;
29
- /**
30
- * Helper function to load account to msal-browser cache
31
- * @param idToken
32
- * @param environment
33
- * @param clientInfo
34
- * @param authorityType
35
- * @param requestHomeAccountId
36
- * @returns `AccountEntity`
37
- */
38
- private loadAccount;
39
- /**
40
- * Helper function to load id tokens to msal-browser cache
41
- * @param idToken
42
- * @param homeAccountId
43
- * @param environment
44
- * @param tenantId
45
- * @returns `IdTokenEntity`
46
- */
47
- private loadIdToken;
48
- /**
49
- * Helper function to load access tokens to msal-browser cache
50
- * @param request
51
- * @param response
52
- * @param homeAccountId
53
- * @param environment
54
- * @param tenantId
55
- * @returns `AccessTokenEntity`
56
- */
57
- private loadAccessToken;
58
- /**
59
- * Helper function to load refresh tokens to msal-browser cache
60
- * @param request
61
- * @param response
62
- * @param homeAccountId
63
- * @param environment
64
- * @returns `RefreshTokenEntity`
65
- */
66
- private loadRefreshToken;
67
- /**
68
- * Helper function to generate an `AuthenticationResult` for the result.
69
- * @param request
70
- * @param idTokenObj
71
- * @param cacheRecord
72
- * @param authority
73
- * @returns `AuthenticationResult`
74
- */
75
- private generateAuthenticationResult;
76
- }
1
+ import { ICrypto, Logger, ExternalTokenResponse, AuthenticationResult } 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
+ export type LoadTokenOptions = {
7
+ clientInfo?: string;
8
+ expiresOn?: number;
9
+ extendedExpiresOn?: number;
10
+ };
11
+ /**
12
+ * Token cache manager
13
+ */
14
+ export declare class TokenCache implements ITokenCache {
15
+ isBrowserEnvironment: boolean;
16
+ protected config: BrowserConfiguration;
17
+ private storage;
18
+ private logger;
19
+ private cryptoObj;
20
+ constructor(configuration: BrowserConfiguration, storage: BrowserCacheManager, logger: Logger, cryptoObj: ICrypto);
21
+ /**
22
+ * API to load tokens to msal-browser cache.
23
+ * @param request
24
+ * @param response
25
+ * @param options
26
+ * @returns `AuthenticationResult` for the response that was loaded.
27
+ */
28
+ loadExternalTokens(request: SilentRequest, response: ExternalTokenResponse, options: LoadTokenOptions): AuthenticationResult;
29
+ /**
30
+ * Helper function to load account to msal-browser cache
31
+ * @param idToken
32
+ * @param environment
33
+ * @param clientInfo
34
+ * @param authorityType
35
+ * @param requestHomeAccountId
36
+ * @returns `AccountEntity`
37
+ */
38
+ private loadAccount;
39
+ /**
40
+ * Helper function to load id tokens to msal-browser cache
41
+ * @param idToken
42
+ * @param homeAccountId
43
+ * @param environment
44
+ * @param tenantId
45
+ * @returns `IdTokenEntity`
46
+ */
47
+ private loadIdToken;
48
+ /**
49
+ * Helper function to load access tokens to msal-browser cache
50
+ * @param request
51
+ * @param response
52
+ * @param homeAccountId
53
+ * @param environment
54
+ * @param tenantId
55
+ * @returns `AccessTokenEntity`
56
+ */
57
+ private loadAccessToken;
58
+ /**
59
+ * Helper function to load refresh tokens to msal-browser cache
60
+ * @param request
61
+ * @param response
62
+ * @param homeAccountId
63
+ * @param environment
64
+ * @returns `RefreshTokenEntity`
65
+ */
66
+ private loadRefreshToken;
67
+ /**
68
+ * Helper function to generate an `AuthenticationResult` for the result.
69
+ * @param request
70
+ * @param idTokenObj
71
+ * @param cacheRecord
72
+ * @param authority
73
+ * @returns `AuthenticationResult`
74
+ */
75
+ private generateAuthenticationResult;
76
+ }
77
77
  //# sourceMappingURL=TokenCache.d.ts.map
@@ -1,232 +1,232 @@
1
- /*! @azure/msal-browser v3.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-browser v3.0.0-beta.0 2023-06-19 */
2
2
  'use strict';
3
3
  import { AuthToken, CacheRecord, Authority, AccountEntity, IdTokenEntity, ScopeSet, AccessTokenEntity, RefreshTokenEntity, Constants } from '@azure/msal-common';
4
4
  import { BrowserAuthError } from '../error/BrowserAuthError.js';
5
5
 
6
- /*
7
- * Copyright (c) Microsoft Corporation. All rights reserved.
8
- * Licensed under the MIT License.
9
- */
10
- /**
11
- * Token cache manager
12
- */
13
- class TokenCache {
14
- constructor(configuration, storage, logger, cryptoObj) {
15
- this.isBrowserEnvironment = typeof window !== "undefined";
16
- this.config = configuration;
17
- this.storage = storage;
18
- this.logger = logger;
19
- this.cryptoObj = cryptoObj;
20
- }
21
- // Move getAllAccounts here and cache utility APIs
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, response, options) {
30
- this.logger.info("TokenCache - loadExternalTokens called");
31
- if (!response.id_token) {
32
- throw BrowserAuthError.createUnableToLoadTokenError("Please ensure server response includes id token.");
33
- }
34
- const idToken = new AuthToken(response.id_token, this.cryptoObj);
35
- let cacheRecord;
36
- let authority;
37
- if (request.account) {
38
- const cacheRecordAccount = this.loadAccount(idToken, request.account.environment, undefined, undefined, request.account.homeAccountId);
39
- cacheRecord = new CacheRecord(cacheRecordAccount, this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, request.account.environment, request.account.tenantId), this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, request.account.environment, request.account.tenantId, options), this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, request.account.environment));
40
- }
41
- else if (request.authority) {
42
- const authorityUrl = Authority.generateAuthority(request.authority, request.azureCloudOptions);
43
- const authorityOptions = {
44
- protocolMode: this.config.auth.protocolMode,
45
- knownAuthorities: this.config.auth.knownAuthorities,
46
- cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
47
- authorityMetadata: this.config.auth.authorityMetadata,
48
- skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,
49
- };
50
- authority = new Authority(authorityUrl, this.config.system.networkClient, this.storage, authorityOptions, this.logger);
51
- // "clientInfo" from options takes precedence over "clientInfo" in response
52
- if (options.clientInfo) {
53
- this.logger.trace("TokenCache - homeAccountId from options");
54
- const cacheRecordAccount = this.loadAccount(idToken, authority.hostnameAndPort, options.clientInfo, authority.authorityType);
55
- cacheRecord = new CacheRecord(cacheRecordAccount, this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant), this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant, options), this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort));
56
- }
57
- else if (response.client_info) {
58
- this.logger.trace("TokenCache - homeAccountId from response");
59
- const cacheRecordAccount = this.loadAccount(idToken, authority.hostnameAndPort, response.client_info, authority.authorityType);
60
- cacheRecord = new CacheRecord(cacheRecordAccount, this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant), this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant, options), this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort));
61
- }
62
- else {
63
- throw BrowserAuthError.createUnableToLoadTokenError("Please provide clientInfo in the response or options.");
64
- }
65
- }
66
- else {
67
- throw BrowserAuthError.createUnableToLoadTokenError("Please provide a request with an account or a request with authority.");
68
- }
69
- return this.generateAuthenticationResult(request, idToken, cacheRecord, authority);
70
- }
71
- /**
72
- * Helper function to load account to msal-browser cache
73
- * @param idToken
74
- * @param environment
75
- * @param clientInfo
76
- * @param authorityType
77
- * @param requestHomeAccountId
78
- * @returns `AccountEntity`
79
- */
80
- loadAccount(idToken, environment, clientInfo, authorityType, requestHomeAccountId) {
81
- let homeAccountId;
82
- if (requestHomeAccountId) {
83
- homeAccountId = requestHomeAccountId;
84
- }
85
- else if (authorityType !== undefined && clientInfo) {
86
- homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authorityType, this.logger, this.cryptoObj, idToken);
87
- }
88
- if (!homeAccountId) {
89
- throw BrowserAuthError.createUnableToLoadTokenError("Unexpected missing homeAccountId");
90
- }
91
- const accountEntity = clientInfo
92
- ? AccountEntity.createAccount(clientInfo, homeAccountId, idToken, undefined, undefined, undefined, environment)
93
- : AccountEntity.createGenericAccount(homeAccountId, idToken, undefined, undefined, undefined, environment);
94
- if (this.isBrowserEnvironment) {
95
- this.logger.verbose("TokenCache - loading account");
96
- this.storage.setAccount(accountEntity);
97
- return accountEntity;
98
- }
99
- else {
100
- throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
101
- }
102
- }
103
- /**
104
- * Helper function to load id tokens to msal-browser cache
105
- * @param idToken
106
- * @param homeAccountId
107
- * @param environment
108
- * @param tenantId
109
- * @returns `IdTokenEntity`
110
- */
111
- loadIdToken(idToken, homeAccountId, environment, tenantId) {
112
- const idTokenEntity = IdTokenEntity.createIdTokenEntity(homeAccountId, environment, idToken.rawToken, this.config.auth.clientId, tenantId);
113
- if (this.isBrowserEnvironment) {
114
- this.logger.verbose("TokenCache - loading id token");
115
- this.storage.setIdTokenCredential(idTokenEntity);
116
- return idTokenEntity;
117
- }
118
- else {
119
- throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
120
- }
121
- }
122
- /**
123
- * Helper function to load access tokens to msal-browser cache
124
- * @param request
125
- * @param response
126
- * @param homeAccountId
127
- * @param environment
128
- * @param tenantId
129
- * @returns `AccessTokenEntity`
130
- */
131
- loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {
132
- if (!response.access_token) {
133
- this.logger.verbose("TokenCache - No access token provided for caching");
134
- return null;
135
- }
136
- if (!response.expires_in) {
137
- throw BrowserAuthError.createUnableToLoadTokenError("Please ensure server response includes expires_in value.");
138
- }
139
- if (!options.extendedExpiresOn) {
140
- throw BrowserAuthError.createUnableToLoadTokenError("Please provide an extendedExpiresOn value in the options.");
141
- }
142
- const scopes = new ScopeSet(request.scopes).printScopes();
143
- const expiresOn = options.expiresOn ||
144
- response.expires_in + new Date().getTime() / 1000;
145
- const extendedExpiresOn = options.extendedExpiresOn;
146
- const accessTokenEntity = AccessTokenEntity.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes, expiresOn, extendedExpiresOn, this.cryptoObj);
147
- if (this.isBrowserEnvironment) {
148
- this.logger.verbose("TokenCache - loading access token");
149
- this.storage.setAccessTokenCredential(accessTokenEntity);
150
- return accessTokenEntity;
151
- }
152
- else {
153
- throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
154
- }
155
- }
156
- /**
157
- * Helper function to load refresh tokens to msal-browser cache
158
- * @param request
159
- * @param response
160
- * @param homeAccountId
161
- * @param environment
162
- * @returns `RefreshTokenEntity`
163
- */
164
- loadRefreshToken(request, response, homeAccountId, environment) {
165
- if (!response.refresh_token) {
166
- this.logger.verbose("TokenCache - No refresh token provided for caching");
167
- return null;
168
- }
169
- const refreshTokenEntity = RefreshTokenEntity.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId);
170
- if (this.isBrowserEnvironment) {
171
- this.logger.verbose("TokenCache - loading refresh token");
172
- this.storage.setRefreshTokenCredential(refreshTokenEntity);
173
- return refreshTokenEntity;
174
- }
175
- else {
176
- throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
177
- }
178
- }
179
- /**
180
- * Helper function to generate an `AuthenticationResult` for the result.
181
- * @param request
182
- * @param idTokenObj
183
- * @param cacheRecord
184
- * @param authority
185
- * @returns `AuthenticationResult`
186
- */
187
- generateAuthenticationResult(request, idTokenObj, cacheRecord, authority) {
188
- let accessToken = Constants.EMPTY_STRING;
189
- let responseScopes = [];
190
- let expiresOn = null;
191
- let extExpiresOn;
192
- if (cacheRecord?.accessToken) {
193
- accessToken = cacheRecord.accessToken.secret;
194
- responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();
195
- expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);
196
- extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);
197
- }
198
- const uid = idTokenObj?.claims.oid ||
199
- idTokenObj?.claims.sub ||
200
- Constants.EMPTY_STRING;
201
- const tid = idTokenObj?.claims.tid || Constants.EMPTY_STRING;
202
- return {
203
- authority: authority
204
- ? authority.canonicalAuthority
205
- : Constants.EMPTY_STRING,
206
- uniqueId: uid,
207
- tenantId: tid,
208
- scopes: responseScopes,
209
- account: cacheRecord?.account
210
- ? cacheRecord.account.getAccountInfo()
211
- : null,
212
- idToken: idTokenObj ? idTokenObj.rawToken : Constants.EMPTY_STRING,
213
- idTokenClaims: idTokenObj ? idTokenObj.claims : {},
214
- accessToken: accessToken,
215
- fromCache: true,
216
- expiresOn: expiresOn,
217
- correlationId: request.correlationId || Constants.EMPTY_STRING,
218
- requestId: Constants.EMPTY_STRING,
219
- extExpiresOn: extExpiresOn,
220
- familyId: Constants.EMPTY_STRING,
221
- tokenType: cacheRecord?.accessToken?.tokenType || Constants.EMPTY_STRING,
222
- state: Constants.EMPTY_STRING,
223
- cloudGraphHostName: cacheRecord?.account?.cloudGraphHostName ||
224
- Constants.EMPTY_STRING,
225
- msGraphHost: cacheRecord?.account?.msGraphHost || Constants.EMPTY_STRING,
226
- code: undefined,
227
- fromNativeBroker: false,
228
- };
229
- }
6
+ /*
7
+ * Copyright (c) Microsoft Corporation. All rights reserved.
8
+ * Licensed under the MIT License.
9
+ */
10
+ /**
11
+ * Token cache manager
12
+ */
13
+ class TokenCache {
14
+ constructor(configuration, storage, logger, cryptoObj) {
15
+ this.isBrowserEnvironment = typeof window !== "undefined";
16
+ this.config = configuration;
17
+ this.storage = storage;
18
+ this.logger = logger;
19
+ this.cryptoObj = cryptoObj;
20
+ }
21
+ // Move getAllAccounts here and cache utility APIs
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, response, options) {
30
+ this.logger.info("TokenCache - loadExternalTokens called");
31
+ if (!response.id_token) {
32
+ throw BrowserAuthError.createUnableToLoadTokenError("Please ensure server response includes id token.");
33
+ }
34
+ const idToken = new AuthToken(response.id_token, this.cryptoObj);
35
+ let cacheRecord;
36
+ let authority;
37
+ if (request.account) {
38
+ const cacheRecordAccount = this.loadAccount(idToken, request.account.environment, undefined, undefined, request.account.homeAccountId);
39
+ cacheRecord = new CacheRecord(cacheRecordAccount, this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, request.account.environment, request.account.tenantId), this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, request.account.environment, request.account.tenantId, options), this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, request.account.environment));
40
+ }
41
+ else if (request.authority) {
42
+ const authorityUrl = Authority.generateAuthority(request.authority, request.azureCloudOptions);
43
+ const authorityOptions = {
44
+ protocolMode: this.config.auth.protocolMode,
45
+ knownAuthorities: this.config.auth.knownAuthorities,
46
+ cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,
47
+ authorityMetadata: this.config.auth.authorityMetadata,
48
+ skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache,
49
+ };
50
+ authority = new Authority(authorityUrl, this.config.system.networkClient, this.storage, authorityOptions, this.logger);
51
+ // "clientInfo" from options takes precedence over "clientInfo" in response
52
+ if (options.clientInfo) {
53
+ this.logger.trace("TokenCache - homeAccountId from options");
54
+ const cacheRecordAccount = this.loadAccount(idToken, authority.hostnameAndPort, options.clientInfo, authority.authorityType);
55
+ cacheRecord = new CacheRecord(cacheRecordAccount, this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant), this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant, options), this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort));
56
+ }
57
+ else if (response.client_info) {
58
+ this.logger.trace("TokenCache - homeAccountId from response");
59
+ const cacheRecordAccount = this.loadAccount(idToken, authority.hostnameAndPort, response.client_info, authority.authorityType);
60
+ cacheRecord = new CacheRecord(cacheRecordAccount, this.loadIdToken(idToken, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant), this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort, authority.tenant, options), this.loadRefreshToken(request, response, cacheRecordAccount.homeAccountId, authority.hostnameAndPort));
61
+ }
62
+ else {
63
+ throw BrowserAuthError.createUnableToLoadTokenError("Please provide clientInfo in the response or options.");
64
+ }
65
+ }
66
+ else {
67
+ throw BrowserAuthError.createUnableToLoadTokenError("Please provide a request with an account or a request with authority.");
68
+ }
69
+ return this.generateAuthenticationResult(request, idToken, cacheRecord, authority);
70
+ }
71
+ /**
72
+ * Helper function to load account to msal-browser cache
73
+ * @param idToken
74
+ * @param environment
75
+ * @param clientInfo
76
+ * @param authorityType
77
+ * @param requestHomeAccountId
78
+ * @returns `AccountEntity`
79
+ */
80
+ loadAccount(idToken, environment, clientInfo, authorityType, requestHomeAccountId) {
81
+ let homeAccountId;
82
+ if (requestHomeAccountId) {
83
+ homeAccountId = requestHomeAccountId;
84
+ }
85
+ else if (authorityType !== undefined && clientInfo) {
86
+ homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authorityType, this.logger, this.cryptoObj, idToken);
87
+ }
88
+ if (!homeAccountId) {
89
+ throw BrowserAuthError.createUnableToLoadTokenError("Unexpected missing homeAccountId");
90
+ }
91
+ const accountEntity = clientInfo
92
+ ? AccountEntity.createAccount(clientInfo, homeAccountId, idToken, undefined, undefined, undefined, environment)
93
+ : AccountEntity.createGenericAccount(homeAccountId, idToken, undefined, undefined, undefined, environment);
94
+ if (this.isBrowserEnvironment) {
95
+ this.logger.verbose("TokenCache - loading account");
96
+ this.storage.setAccount(accountEntity);
97
+ return accountEntity;
98
+ }
99
+ else {
100
+ throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
101
+ }
102
+ }
103
+ /**
104
+ * Helper function to load id tokens to msal-browser cache
105
+ * @param idToken
106
+ * @param homeAccountId
107
+ * @param environment
108
+ * @param tenantId
109
+ * @returns `IdTokenEntity`
110
+ */
111
+ loadIdToken(idToken, homeAccountId, environment, tenantId) {
112
+ const idTokenEntity = IdTokenEntity.createIdTokenEntity(homeAccountId, environment, idToken.rawToken, this.config.auth.clientId, tenantId);
113
+ if (this.isBrowserEnvironment) {
114
+ this.logger.verbose("TokenCache - loading id token");
115
+ this.storage.setIdTokenCredential(idTokenEntity);
116
+ return idTokenEntity;
117
+ }
118
+ else {
119
+ throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
120
+ }
121
+ }
122
+ /**
123
+ * Helper function to load access tokens to msal-browser cache
124
+ * @param request
125
+ * @param response
126
+ * @param homeAccountId
127
+ * @param environment
128
+ * @param tenantId
129
+ * @returns `AccessTokenEntity`
130
+ */
131
+ loadAccessToken(request, response, homeAccountId, environment, tenantId, options) {
132
+ if (!response.access_token) {
133
+ this.logger.verbose("TokenCache - No access token provided for caching");
134
+ return null;
135
+ }
136
+ if (!response.expires_in) {
137
+ throw BrowserAuthError.createUnableToLoadTokenError("Please ensure server response includes expires_in value.");
138
+ }
139
+ if (!options.extendedExpiresOn) {
140
+ throw BrowserAuthError.createUnableToLoadTokenError("Please provide an extendedExpiresOn value in the options.");
141
+ }
142
+ const scopes = new ScopeSet(request.scopes).printScopes();
143
+ const expiresOn = options.expiresOn ||
144
+ response.expires_in + new Date().getTime() / 1000;
145
+ const extendedExpiresOn = options.extendedExpiresOn;
146
+ const accessTokenEntity = AccessTokenEntity.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes, expiresOn, extendedExpiresOn, this.cryptoObj);
147
+ if (this.isBrowserEnvironment) {
148
+ this.logger.verbose("TokenCache - loading access token");
149
+ this.storage.setAccessTokenCredential(accessTokenEntity);
150
+ return accessTokenEntity;
151
+ }
152
+ else {
153
+ throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
154
+ }
155
+ }
156
+ /**
157
+ * Helper function to load refresh tokens to msal-browser cache
158
+ * @param request
159
+ * @param response
160
+ * @param homeAccountId
161
+ * @param environment
162
+ * @returns `RefreshTokenEntity`
163
+ */
164
+ loadRefreshToken(request, response, homeAccountId, environment) {
165
+ if (!response.refresh_token) {
166
+ this.logger.verbose("TokenCache - No refresh token provided for caching");
167
+ return null;
168
+ }
169
+ const refreshTokenEntity = RefreshTokenEntity.createRefreshTokenEntity(homeAccountId, environment, response.refresh_token, this.config.auth.clientId);
170
+ if (this.isBrowserEnvironment) {
171
+ this.logger.verbose("TokenCache - loading refresh token");
172
+ this.storage.setRefreshTokenCredential(refreshTokenEntity);
173
+ return refreshTokenEntity;
174
+ }
175
+ else {
176
+ throw BrowserAuthError.createUnableToLoadTokenError("loadExternalTokens is designed to work in browser environments only.");
177
+ }
178
+ }
179
+ /**
180
+ * Helper function to generate an `AuthenticationResult` for the result.
181
+ * @param request
182
+ * @param idTokenObj
183
+ * @param cacheRecord
184
+ * @param authority
185
+ * @returns `AuthenticationResult`
186
+ */
187
+ generateAuthenticationResult(request, idTokenObj, cacheRecord, authority) {
188
+ let accessToken = Constants.EMPTY_STRING;
189
+ let responseScopes = [];
190
+ let expiresOn = null;
191
+ let extExpiresOn;
192
+ if (cacheRecord?.accessToken) {
193
+ accessToken = cacheRecord.accessToken.secret;
194
+ responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();
195
+ expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);
196
+ extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);
197
+ }
198
+ const uid = idTokenObj?.claims.oid ||
199
+ idTokenObj?.claims.sub ||
200
+ Constants.EMPTY_STRING;
201
+ const tid = idTokenObj?.claims.tid || Constants.EMPTY_STRING;
202
+ return {
203
+ authority: authority
204
+ ? authority.canonicalAuthority
205
+ : Constants.EMPTY_STRING,
206
+ uniqueId: uid,
207
+ tenantId: tid,
208
+ scopes: responseScopes,
209
+ account: cacheRecord?.account
210
+ ? cacheRecord.account.getAccountInfo()
211
+ : null,
212
+ idToken: idTokenObj ? idTokenObj.rawToken : Constants.EMPTY_STRING,
213
+ idTokenClaims: idTokenObj ? idTokenObj.claims : {},
214
+ accessToken: accessToken,
215
+ fromCache: true,
216
+ expiresOn: expiresOn,
217
+ correlationId: request.correlationId || Constants.EMPTY_STRING,
218
+ requestId: Constants.EMPTY_STRING,
219
+ extExpiresOn: extExpiresOn,
220
+ familyId: Constants.EMPTY_STRING,
221
+ tokenType: cacheRecord?.accessToken?.tokenType || Constants.EMPTY_STRING,
222
+ state: Constants.EMPTY_STRING,
223
+ cloudGraphHostName: cacheRecord?.account?.cloudGraphHostName ||
224
+ Constants.EMPTY_STRING,
225
+ msGraphHost: cacheRecord?.account?.msGraphHost || Constants.EMPTY_STRING,
226
+ code: undefined,
227
+ fromNativeBroker: false,
228
+ };
229
+ }
230
230
  }
231
231
 
232
232
  export { TokenCache };