@azure/msal-common 14.6.0-alpha.0 → 14.6.1

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 (212) hide show
  1. package/dist/account/AccountInfo.d.ts +58 -58
  2. package/dist/account/AccountInfo.mjs +59 -59
  3. package/dist/account/AuthToken.d.ts +17 -17
  4. package/dist/account/AuthToken.mjs +58 -58
  5. package/dist/account/CcsCredential.d.ts +9 -9
  6. package/dist/account/CcsCredential.mjs +8 -8
  7. package/dist/account/ClientCredentials.d.ts +14 -14
  8. package/dist/account/ClientInfo.d.ts +18 -18
  9. package/dist/account/ClientInfo.mjs +37 -37
  10. package/dist/account/TokenClaims.d.ts +83 -83
  11. package/dist/account/TokenClaims.mjs +20 -20
  12. package/dist/authority/Authority.d.ts +253 -254
  13. package/dist/authority/Authority.d.ts.map +1 -1
  14. package/dist/authority/Authority.mjs +831 -816
  15. package/dist/authority/Authority.mjs.map +1 -1
  16. package/dist/authority/AuthorityFactory.d.ts +18 -31
  17. package/dist/authority/AuthorityFactory.d.ts.map +1 -1
  18. package/dist/authority/AuthorityFactory.mjs +29 -50
  19. package/dist/authority/AuthorityFactory.mjs.map +1 -1
  20. package/dist/authority/AuthorityMetadata.d.ts +43 -503
  21. package/dist/authority/AuthorityMetadata.d.ts.map +1 -1
  22. package/dist/authority/AuthorityMetadata.mjs +137 -603
  23. package/dist/authority/AuthorityMetadata.mjs.map +1 -1
  24. package/dist/authority/AuthorityOptions.d.ts +27 -27
  25. package/dist/authority/AuthorityOptions.mjs +18 -18
  26. package/dist/authority/AuthorityType.d.ts +10 -10
  27. package/dist/authority/AuthorityType.mjs +13 -13
  28. package/dist/authority/AzureRegion.d.ts +1 -1
  29. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  30. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  31. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  32. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
  33. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  34. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
  35. package/dist/authority/ImdsOptions.d.ts +5 -5
  36. package/dist/authority/OIDCOptions.d.ts +8 -8
  37. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  38. package/dist/authority/OpenIdConfigResponse.mjs +10 -10
  39. package/dist/authority/ProtocolMode.d.ts +8 -8
  40. package/dist/authority/ProtocolMode.mjs +11 -11
  41. package/dist/authority/RegionDiscovery.d.ts +32 -32
  42. package/dist/authority/RegionDiscovery.mjs +106 -106
  43. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  44. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  45. package/dist/cache/CacheManager.d.ts +508 -508
  46. package/dist/cache/CacheManager.mjs +1237 -1237
  47. package/dist/cache/entities/AccessTokenEntity.d.ts +25 -25
  48. package/dist/cache/entities/AccountEntity.d.ts +106 -106
  49. package/dist/cache/entities/AccountEntity.mjs +244 -244
  50. package/dist/cache/entities/AppMetadataEntity.d.ts +11 -39
  51. package/dist/cache/entities/AppMetadataEntity.d.ts.map +1 -1
  52. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +15 -48
  53. package/dist/cache/entities/AuthorityMetadataEntity.d.ts.map +1 -1
  54. package/dist/cache/entities/CacheRecord.d.ts +14 -14
  55. package/dist/cache/entities/CacheRecord.mjs +14 -14
  56. package/dist/cache/entities/CredentialEntity.d.ts +30 -30
  57. package/dist/cache/entities/IdTokenEntity.d.ts +8 -8
  58. package/dist/cache/entities/RefreshTokenEntity.d.ts +7 -7
  59. package/dist/cache/entities/ServerTelemetryEntity.d.ts +5 -5
  60. package/dist/cache/entities/ThrottlingEntity.d.ts +7 -7
  61. package/dist/cache/interface/ICacheManager.d.ts +166 -166
  62. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  63. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  64. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  65. package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
  66. package/dist/cache/utils/CacheHelpers.d.ts +94 -70
  67. package/dist/cache/utils/CacheHelpers.d.ts.map +1 -1
  68. package/dist/cache/utils/CacheHelpers.mjs +326 -252
  69. package/dist/cache/utils/CacheHelpers.mjs.map +1 -1
  70. package/dist/cache/utils/CacheTypes.d.ts +69 -69
  71. package/dist/client/AuthorizationCodeClient.d.ts +74 -74
  72. package/dist/client/AuthorizationCodeClient.mjs +402 -402
  73. package/dist/client/BaseClient.d.ts +51 -51
  74. package/dist/client/BaseClient.d.ts.map +1 -1
  75. package/dist/client/BaseClient.mjs +101 -101
  76. package/dist/client/BaseClient.mjs.map +1 -1
  77. package/dist/client/RefreshTokenClient.d.ts +35 -35
  78. package/dist/client/RefreshTokenClient.mjs +204 -204
  79. package/dist/client/SilentFlowClient.d.ts +27 -27
  80. package/dist/client/SilentFlowClient.mjs +128 -128
  81. package/dist/config/AppTokenProvider.d.ts +38 -38
  82. package/dist/config/ClientConfiguration.d.ts +150 -150
  83. package/dist/config/ClientConfiguration.d.ts.map +1 -1
  84. package/dist/config/ClientConfiguration.mjs +98 -96
  85. package/dist/config/ClientConfiguration.mjs.map +1 -1
  86. package/dist/constants/AADServerParamKeys.d.ts +52 -52
  87. package/dist/constants/AADServerParamKeys.mjs +56 -56
  88. package/dist/crypto/ICrypto.d.ts +58 -58
  89. package/dist/crypto/ICrypto.mjs +30 -30
  90. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  91. package/dist/crypto/JoseHeader.d.ts +22 -22
  92. package/dist/crypto/JoseHeader.mjs +37 -37
  93. package/dist/crypto/PopTokenGenerator.d.ts +60 -60
  94. package/dist/crypto/PopTokenGenerator.mjs +82 -82
  95. package/dist/crypto/SignedHttpRequest.d.ts +15 -15
  96. package/dist/error/AuthError.d.ts +44 -44
  97. package/dist/error/AuthError.mjs +46 -46
  98. package/dist/error/AuthErrorCodes.d.ts +5 -5
  99. package/dist/error/AuthErrorCodes.mjs +9 -9
  100. package/dist/error/ClientAuthError.d.ts +237 -237
  101. package/dist/error/ClientAuthError.mjs +249 -249
  102. package/dist/error/ClientAuthErrorCodes.d.ts +44 -44
  103. package/dist/error/ClientAuthErrorCodes.mjs +48 -48
  104. package/dist/error/ClientConfigurationError.d.ts +128 -128
  105. package/dist/error/ClientConfigurationError.mjs +135 -135
  106. package/dist/error/ClientConfigurationErrorCodes.d.ts +22 -22
  107. package/dist/error/ClientConfigurationErrorCodes.mjs +26 -26
  108. package/dist/error/InteractionRequiredAuthError.d.ts +61 -61
  109. package/dist/error/InteractionRequiredAuthError.mjs +84 -84
  110. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +7 -7
  111. package/dist/error/InteractionRequiredAuthErrorCodes.mjs +13 -13
  112. package/dist/error/JoseHeaderError.d.ts +15 -15
  113. package/dist/error/JoseHeaderError.mjs +22 -22
  114. package/dist/error/JoseHeaderErrorCodes.d.ts +2 -2
  115. package/dist/error/JoseHeaderErrorCodes.mjs +6 -6
  116. package/dist/error/ServerError.d.ts +7 -7
  117. package/dist/error/ServerError.mjs +14 -14
  118. package/dist/index.cjs +8081 -8611
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.ts +99 -99
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.mjs +4 -5
  123. package/dist/index.mjs.map +1 -1
  124. package/dist/logger/Logger.d.ts +95 -95
  125. package/dist/logger/Logger.mjs +188 -188
  126. package/dist/network/INetworkModule.d.ts +29 -29
  127. package/dist/network/INetworkModule.mjs +12 -12
  128. package/dist/network/NetworkManager.d.ts +33 -33
  129. package/dist/network/NetworkManager.mjs +34 -34
  130. package/dist/network/RequestThumbprint.d.ts +18 -18
  131. package/dist/network/ThrottlingUtils.d.ts +42 -42
  132. package/dist/network/ThrottlingUtils.mjs +95 -95
  133. package/dist/packageMetadata.d.ts +2 -2
  134. package/dist/packageMetadata.d.ts.map +1 -1
  135. package/dist/packageMetadata.mjs +4 -4
  136. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  137. package/dist/request/AuthenticationHeaderParser.mjs +55 -55
  138. package/dist/request/BaseAuthRequest.d.ts +43 -43
  139. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  140. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  141. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  142. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  143. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  144. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  145. package/dist/request/CommonRefreshTokenRequest.d.ts +22 -22
  146. package/dist/request/CommonSilentFlowRequest.d.ts +27 -27
  147. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  148. package/dist/request/NativeRequest.d.ts +19 -19
  149. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  150. package/dist/request/RequestParameterBuilder.d.ts +217 -217
  151. package/dist/request/RequestParameterBuilder.mjs +381 -381
  152. package/dist/request/RequestValidator.d.ts +33 -33
  153. package/dist/request/RequestValidator.mjs +81 -81
  154. package/dist/request/ScopeSet.d.ts +88 -88
  155. package/dist/request/ScopeSet.mjs +197 -197
  156. package/dist/request/StoreInCache.d.ts +8 -8
  157. package/dist/response/AuthenticationResult.d.ts +41 -41
  158. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  159. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  160. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  161. package/dist/response/IMDSBadResponse.d.ts +4 -4
  162. package/dist/response/ResponseHandler.d.ts +69 -69
  163. package/dist/response/ResponseHandler.mjs +350 -347
  164. package/dist/response/ResponseHandler.mjs.map +1 -1
  165. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  166. package/dist/response/ServerAuthorizationTokenResponse.d.ts +47 -47
  167. package/dist/telemetry/performance/IPerformanceClient.d.ts +57 -57
  168. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  169. package/dist/telemetry/performance/PerformanceClient.d.ts +198 -198
  170. package/dist/telemetry/performance/PerformanceClient.mjs +412 -412
  171. package/dist/telemetry/performance/PerformanceEvent.d.ts +464 -464
  172. package/dist/telemetry/performance/PerformanceEvent.mjs +253 -253
  173. package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
  174. package/dist/telemetry/performance/StubPerformanceClient.mjs +76 -76
  175. package/dist/telemetry/server/ServerTelemetryManager.d.ts +66 -66
  176. package/dist/telemetry/server/ServerTelemetryManager.mjs +201 -201
  177. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  178. package/dist/url/IUri.d.ts +12 -12
  179. package/dist/url/UrlString.d.ts +48 -48
  180. package/dist/url/UrlString.mjs +161 -161
  181. package/dist/utils/Constants.d.ts +296 -298
  182. package/dist/utils/Constants.d.ts.map +1 -1
  183. package/dist/utils/Constants.mjs +310 -313
  184. package/dist/utils/Constants.mjs.map +1 -1
  185. package/dist/utils/FunctionWrappers.d.ts +27 -27
  186. package/dist/utils/FunctionWrappers.mjs +84 -84
  187. package/dist/utils/MsalTypes.d.ts +6 -6
  188. package/dist/utils/ProtocolUtils.d.ts +42 -42
  189. package/dist/utils/ProtocolUtils.mjs +69 -69
  190. package/dist/utils/StringUtils.d.ts +40 -40
  191. package/dist/utils/StringUtils.mjs +95 -95
  192. package/dist/utils/TimeUtils.d.ts +27 -27
  193. package/dist/utils/TimeUtils.mjs +45 -45
  194. package/dist/utils/UrlUtils.d.ts +10 -10
  195. package/dist/utils/UrlUtils.mjs +44 -44
  196. package/package.json +1 -1
  197. package/src/authority/Authority.ts +69 -29
  198. package/src/authority/AuthorityFactory.ts +48 -92
  199. package/src/authority/AuthorityMetadata.ts +23 -526
  200. package/src/cache/entities/AppMetadataEntity.ts +6 -81
  201. package/src/cache/entities/AuthorityMetadataEntity.ts +2 -94
  202. package/src/cache/utils/CacheHelpers.ts +111 -0
  203. package/src/client/BaseClient.ts +10 -11
  204. package/src/config/ClientConfiguration.ts +4 -4
  205. package/src/index.ts +1 -2
  206. package/src/packageMetadata.ts +1 -1
  207. package/src/response/ResponseHandler.ts +5 -5
  208. package/src/utils/Constants.ts +0 -4
  209. package/dist/cache/entities/AppMetadataEntity.mjs +0 -73
  210. package/dist/cache/entities/AppMetadataEntity.mjs.map +0 -1
  211. package/dist/cache/entities/AuthorityMetadataEntity.mjs +0 -86
  212. package/dist/cache/entities/AuthorityMetadataEntity.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-common v14.6.0-alpha.0 2023-12-15 */
1
+ /*! @azure/msal-common v14.6.1 2024-01-23 */
2
2
  'use strict';
3
3
  import { Separators, CacheAccountType } from '../../utils/Constants.mjs';
4
4
  import { buildClientInfo } from '../../account/ClientInfo.mjs';
@@ -9,249 +9,249 @@ import { getTenantIdFromIdTokenClaims } from '../../account/TokenClaims.mjs';
9
9
  import { ProtocolMode } from '../../authority/ProtocolMode.mjs';
10
10
  import { invalidCacheEnvironment } from '../../error/ClientAuthErrorCodes.mjs';
11
11
 
12
- /*
13
- * Copyright (c) Microsoft Corporation. All rights reserved.
14
- * Licensed under the MIT License.
15
- */
16
- /**
17
- * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).
18
- *
19
- * Key : Value Schema
20
- *
21
- * Key: <home_account_id>-<environment>-<realm*>
22
- *
23
- * Value Schema:
24
- * {
25
- * homeAccountId: home account identifier for the auth scheme,
26
- * environment: entity that issued the token, represented as a full host
27
- * realm: Full tenant or organizational identifier that the account belongs to
28
- * localAccountId: Original tenant-specific accountID, usually used for legacy cases
29
- * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt
30
- * authorityType: Accounts authority type as a string
31
- * name: Full name for the account, including given name and family name,
32
- * lastModificationTime: last time this entity was modified in the cache
33
- * lastModificationApp:
34
- * nativeAccountId: Account identifier on the native device
35
- * tenantProfiles: Array of tenant profile objects for each tenant that the account has authenticated with in the browser
36
- * }
37
- * @internal
38
- */
39
- class AccountEntity {
40
- /**
41
- * Generate Account Id key component as per the schema: <home_account_id>-<environment>
42
- */
43
- generateAccountId() {
44
- const accountId = [this.homeAccountId, this.environment];
45
- return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
46
- }
47
- /**
48
- * Generate Account Cache Key as per the schema: <home_account_id>-<environment>-<realm*>
49
- */
50
- generateAccountKey() {
51
- return AccountEntity.generateAccountCacheKey({
52
- homeAccountId: this.homeAccountId,
53
- environment: this.environment,
54
- tenantId: this.realm,
55
- username: this.username,
56
- localAccountId: this.localAccountId,
57
- });
58
- }
59
- /**
60
- * Returns the AccountInfo interface for this account.
61
- */
62
- getAccountInfo() {
63
- return {
64
- homeAccountId: this.homeAccountId,
65
- environment: this.environment,
66
- tenantId: this.realm,
67
- username: this.username,
68
- localAccountId: this.localAccountId,
69
- name: this.name,
70
- nativeAccountId: this.nativeAccountId,
71
- authorityType: this.authorityType,
72
- // Deserialize tenant profiles array into a Map
73
- tenantProfiles: new Map((this.tenantProfiles || []).map((tenantProfile) => {
74
- return [tenantProfile.tenantId, tenantProfile];
75
- })),
76
- };
77
- }
78
- /**
79
- * Returns true if the account entity is in single tenant format (outdated), false otherwise
80
- */
81
- isSingleTenant() {
82
- return !this.tenantProfiles;
83
- }
84
- /**
85
- * Generates account key from interface
86
- * @param accountInterface
87
- */
88
- static generateAccountCacheKey(accountInterface) {
89
- const homeTenantId = accountInterface.homeAccountId.split(".")[1];
90
- const accountKey = [
91
- accountInterface.homeAccountId,
92
- accountInterface.environment || "",
93
- homeTenantId || accountInterface.tenantId || "",
94
- ];
95
- return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
96
- }
97
- /**
98
- * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.
99
- * @param accountDetails
100
- */
101
- static createAccount(accountDetails, authority, base64Decode) {
102
- const account = new AccountEntity();
103
- if (authority.authorityType === AuthorityType.Adfs) {
104
- account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;
105
- }
106
- else if (authority.protocolMode === ProtocolMode.AAD) {
107
- account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;
108
- }
109
- else {
110
- account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;
111
- }
112
- let clientInfo;
113
- if (accountDetails.clientInfo && base64Decode) {
114
- clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode);
115
- }
116
- account.clientInfo = accountDetails.clientInfo;
117
- account.homeAccountId = accountDetails.homeAccountId;
118
- account.nativeAccountId = accountDetails.nativeAccountId;
119
- const env = accountDetails.environment ||
120
- (authority && authority.getPreferredCache());
121
- if (!env) {
122
- throw createClientAuthError(invalidCacheEnvironment);
123
- }
124
- account.environment = env;
125
- // non AAD scenarios can have empty realm
126
- account.realm =
127
- clientInfo?.utid ||
128
- getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) ||
129
- "";
130
- // How do you account for MSA CID here?
131
- account.localAccountId =
132
- clientInfo?.uid ||
133
- accountDetails.idTokenClaims.oid ||
134
- accountDetails.idTokenClaims.sub ||
135
- "";
136
- /*
137
- * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.
138
- * In most cases it will contain a single email. This field should not be relied upon if a custom
139
- * policy is configured to return more than 1 email.
140
- */
141
- const preferredUsername = accountDetails.idTokenClaims.preferred_username ||
142
- accountDetails.idTokenClaims.upn;
143
- const email = accountDetails.idTokenClaims.emails
144
- ? accountDetails.idTokenClaims.emails[0]
145
- : null;
146
- account.username = preferredUsername || email || "";
147
- account.name = accountDetails.idTokenClaims.name;
148
- account.cloudGraphHostName = accountDetails.cloudGraphHostName;
149
- account.msGraphHost = accountDetails.msGraphHost;
150
- if (accountDetails.tenantProfiles) {
151
- account.tenantProfiles = accountDetails.tenantProfiles;
152
- }
153
- else {
154
- const tenantProfiles = [];
155
- if (accountDetails.idTokenClaims) {
156
- const tenantProfile = buildTenantProfileFromIdTokenClaims(accountDetails.homeAccountId, accountDetails.idTokenClaims);
157
- tenantProfiles.push(tenantProfile);
158
- }
159
- account.tenantProfiles = tenantProfiles;
160
- }
161
- return account;
162
- }
163
- /**
164
- * Creates an AccountEntity object from AccountInfo
165
- * @param accountInfo
166
- * @param cloudGraphHostName
167
- * @param msGraphHost
168
- * @returns
169
- */
170
- static createFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) {
171
- const account = new AccountEntity();
172
- account.authorityType =
173
- accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;
174
- account.homeAccountId = accountInfo.homeAccountId;
175
- account.localAccountId = accountInfo.localAccountId;
176
- account.nativeAccountId = accountInfo.nativeAccountId;
177
- account.realm = accountInfo.tenantId;
178
- account.environment = accountInfo.environment;
179
- account.username = accountInfo.username;
180
- account.name = accountInfo.name;
181
- account.cloudGraphHostName = cloudGraphHostName;
182
- account.msGraphHost = msGraphHost;
183
- // Serialize tenant profiles map into an array
184
- account.tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []);
185
- return account;
186
- }
187
- /**
188
- * Generate HomeAccountId from server response
189
- * @param serverClientInfo
190
- * @param authType
191
- */
192
- static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idTokenClaims) {
193
- // since ADFS/DSTS do not have tid and does not set client_info
194
- if (!(authType === AuthorityType.Adfs ||
195
- authType === AuthorityType.Dsts)) {
196
- // for cases where there is clientInfo
197
- if (serverClientInfo) {
198
- try {
199
- const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode);
200
- if (clientInfo.uid && clientInfo.utid) {
201
- return `${clientInfo.uid}.${clientInfo.utid}`;
202
- }
203
- }
204
- catch (e) { }
205
- }
206
- logger.warning("No client info in response");
207
- }
208
- // default to "sub" claim
209
- return idTokenClaims?.sub || "";
210
- }
211
- /**
212
- * Validates an entity: checks for all expected params
213
- * @param entity
214
- */
215
- static isAccountEntity(entity) {
216
- if (!entity) {
217
- return false;
218
- }
219
- return (entity.hasOwnProperty("homeAccountId") &&
220
- entity.hasOwnProperty("environment") &&
221
- entity.hasOwnProperty("realm") &&
222
- entity.hasOwnProperty("localAccountId") &&
223
- entity.hasOwnProperty("username") &&
224
- entity.hasOwnProperty("authorityType"));
225
- }
226
- /**
227
- * Helper function to determine whether 2 accountInfo objects represent the same account
228
- * @param accountA
229
- * @param accountB
230
- * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality
231
- */
232
- static accountInfoIsEqual(accountA, accountB, compareClaims) {
233
- if (!accountA || !accountB) {
234
- return false;
235
- }
236
- let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false
237
- if (compareClaims) {
238
- const accountAClaims = (accountA.idTokenClaims ||
239
- {});
240
- const accountBClaims = (accountB.idTokenClaims ||
241
- {});
242
- // issued at timestamp and nonce are expected to change each time a new id token is acquired
243
- claimsMatch =
244
- accountAClaims.iat === accountBClaims.iat &&
245
- accountAClaims.nonce === accountBClaims.nonce;
246
- }
247
- return (accountA.homeAccountId === accountB.homeAccountId &&
248
- accountA.localAccountId === accountB.localAccountId &&
249
- accountA.username === accountB.username &&
250
- accountA.tenantId === accountB.tenantId &&
251
- accountA.environment === accountB.environment &&
252
- accountA.nativeAccountId === accountB.nativeAccountId &&
253
- claimsMatch);
254
- }
12
+ /*
13
+ * Copyright (c) Microsoft Corporation. All rights reserved.
14
+ * Licensed under the MIT License.
15
+ */
16
+ /**
17
+ * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).
18
+ *
19
+ * Key : Value Schema
20
+ *
21
+ * Key: <home_account_id>-<environment>-<realm*>
22
+ *
23
+ * Value Schema:
24
+ * {
25
+ * homeAccountId: home account identifier for the auth scheme,
26
+ * environment: entity that issued the token, represented as a full host
27
+ * realm: Full tenant or organizational identifier that the account belongs to
28
+ * localAccountId: Original tenant-specific accountID, usually used for legacy cases
29
+ * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt
30
+ * authorityType: Accounts authority type as a string
31
+ * name: Full name for the account, including given name and family name,
32
+ * lastModificationTime: last time this entity was modified in the cache
33
+ * lastModificationApp:
34
+ * nativeAccountId: Account identifier on the native device
35
+ * tenantProfiles: Array of tenant profile objects for each tenant that the account has authenticated with in the browser
36
+ * }
37
+ * @internal
38
+ */
39
+ class AccountEntity {
40
+ /**
41
+ * Generate Account Id key component as per the schema: <home_account_id>-<environment>
42
+ */
43
+ generateAccountId() {
44
+ const accountId = [this.homeAccountId, this.environment];
45
+ return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
46
+ }
47
+ /**
48
+ * Generate Account Cache Key as per the schema: <home_account_id>-<environment>-<realm*>
49
+ */
50
+ generateAccountKey() {
51
+ return AccountEntity.generateAccountCacheKey({
52
+ homeAccountId: this.homeAccountId,
53
+ environment: this.environment,
54
+ tenantId: this.realm,
55
+ username: this.username,
56
+ localAccountId: this.localAccountId,
57
+ });
58
+ }
59
+ /**
60
+ * Returns the AccountInfo interface for this account.
61
+ */
62
+ getAccountInfo() {
63
+ return {
64
+ homeAccountId: this.homeAccountId,
65
+ environment: this.environment,
66
+ tenantId: this.realm,
67
+ username: this.username,
68
+ localAccountId: this.localAccountId,
69
+ name: this.name,
70
+ nativeAccountId: this.nativeAccountId,
71
+ authorityType: this.authorityType,
72
+ // Deserialize tenant profiles array into a Map
73
+ tenantProfiles: new Map((this.tenantProfiles || []).map((tenantProfile) => {
74
+ return [tenantProfile.tenantId, tenantProfile];
75
+ })),
76
+ };
77
+ }
78
+ /**
79
+ * Returns true if the account entity is in single tenant format (outdated), false otherwise
80
+ */
81
+ isSingleTenant() {
82
+ return !this.tenantProfiles;
83
+ }
84
+ /**
85
+ * Generates account key from interface
86
+ * @param accountInterface
87
+ */
88
+ static generateAccountCacheKey(accountInterface) {
89
+ const homeTenantId = accountInterface.homeAccountId.split(".")[1];
90
+ const accountKey = [
91
+ accountInterface.homeAccountId,
92
+ accountInterface.environment || "",
93
+ homeTenantId || accountInterface.tenantId || "",
94
+ ];
95
+ return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
96
+ }
97
+ /**
98
+ * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.
99
+ * @param accountDetails
100
+ */
101
+ static createAccount(accountDetails, authority, base64Decode) {
102
+ const account = new AccountEntity();
103
+ if (authority.authorityType === AuthorityType.Adfs) {
104
+ account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;
105
+ }
106
+ else if (authority.protocolMode === ProtocolMode.AAD) {
107
+ account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;
108
+ }
109
+ else {
110
+ account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;
111
+ }
112
+ let clientInfo;
113
+ if (accountDetails.clientInfo && base64Decode) {
114
+ clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode);
115
+ }
116
+ account.clientInfo = accountDetails.clientInfo;
117
+ account.homeAccountId = accountDetails.homeAccountId;
118
+ account.nativeAccountId = accountDetails.nativeAccountId;
119
+ const env = accountDetails.environment ||
120
+ (authority && authority.getPreferredCache());
121
+ if (!env) {
122
+ throw createClientAuthError(invalidCacheEnvironment);
123
+ }
124
+ account.environment = env;
125
+ // non AAD scenarios can have empty realm
126
+ account.realm =
127
+ clientInfo?.utid ||
128
+ getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) ||
129
+ "";
130
+ // How do you account for MSA CID here?
131
+ account.localAccountId =
132
+ clientInfo?.uid ||
133
+ accountDetails.idTokenClaims.oid ||
134
+ accountDetails.idTokenClaims.sub ||
135
+ "";
136
+ /*
137
+ * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.
138
+ * In most cases it will contain a single email. This field should not be relied upon if a custom
139
+ * policy is configured to return more than 1 email.
140
+ */
141
+ const preferredUsername = accountDetails.idTokenClaims.preferred_username ||
142
+ accountDetails.idTokenClaims.upn;
143
+ const email = accountDetails.idTokenClaims.emails
144
+ ? accountDetails.idTokenClaims.emails[0]
145
+ : null;
146
+ account.username = preferredUsername || email || "";
147
+ account.name = accountDetails.idTokenClaims.name;
148
+ account.cloudGraphHostName = accountDetails.cloudGraphHostName;
149
+ account.msGraphHost = accountDetails.msGraphHost;
150
+ if (accountDetails.tenantProfiles) {
151
+ account.tenantProfiles = accountDetails.tenantProfiles;
152
+ }
153
+ else {
154
+ const tenantProfiles = [];
155
+ if (accountDetails.idTokenClaims) {
156
+ const tenantProfile = buildTenantProfileFromIdTokenClaims(accountDetails.homeAccountId, accountDetails.idTokenClaims);
157
+ tenantProfiles.push(tenantProfile);
158
+ }
159
+ account.tenantProfiles = tenantProfiles;
160
+ }
161
+ return account;
162
+ }
163
+ /**
164
+ * Creates an AccountEntity object from AccountInfo
165
+ * @param accountInfo
166
+ * @param cloudGraphHostName
167
+ * @param msGraphHost
168
+ * @returns
169
+ */
170
+ static createFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) {
171
+ const account = new AccountEntity();
172
+ account.authorityType =
173
+ accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;
174
+ account.homeAccountId = accountInfo.homeAccountId;
175
+ account.localAccountId = accountInfo.localAccountId;
176
+ account.nativeAccountId = accountInfo.nativeAccountId;
177
+ account.realm = accountInfo.tenantId;
178
+ account.environment = accountInfo.environment;
179
+ account.username = accountInfo.username;
180
+ account.name = accountInfo.name;
181
+ account.cloudGraphHostName = cloudGraphHostName;
182
+ account.msGraphHost = msGraphHost;
183
+ // Serialize tenant profiles map into an array
184
+ account.tenantProfiles = Array.from(accountInfo.tenantProfiles?.values() || []);
185
+ return account;
186
+ }
187
+ /**
188
+ * Generate HomeAccountId from server response
189
+ * @param serverClientInfo
190
+ * @param authType
191
+ */
192
+ static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idTokenClaims) {
193
+ // since ADFS/DSTS do not have tid and does not set client_info
194
+ if (!(authType === AuthorityType.Adfs ||
195
+ authType === AuthorityType.Dsts)) {
196
+ // for cases where there is clientInfo
197
+ if (serverClientInfo) {
198
+ try {
199
+ const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode);
200
+ if (clientInfo.uid && clientInfo.utid) {
201
+ return `${clientInfo.uid}.${clientInfo.utid}`;
202
+ }
203
+ }
204
+ catch (e) { }
205
+ }
206
+ logger.warning("No client info in response");
207
+ }
208
+ // default to "sub" claim
209
+ return idTokenClaims?.sub || "";
210
+ }
211
+ /**
212
+ * Validates an entity: checks for all expected params
213
+ * @param entity
214
+ */
215
+ static isAccountEntity(entity) {
216
+ if (!entity) {
217
+ return false;
218
+ }
219
+ return (entity.hasOwnProperty("homeAccountId") &&
220
+ entity.hasOwnProperty("environment") &&
221
+ entity.hasOwnProperty("realm") &&
222
+ entity.hasOwnProperty("localAccountId") &&
223
+ entity.hasOwnProperty("username") &&
224
+ entity.hasOwnProperty("authorityType"));
225
+ }
226
+ /**
227
+ * Helper function to determine whether 2 accountInfo objects represent the same account
228
+ * @param accountA
229
+ * @param accountB
230
+ * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality
231
+ */
232
+ static accountInfoIsEqual(accountA, accountB, compareClaims) {
233
+ if (!accountA || !accountB) {
234
+ return false;
235
+ }
236
+ let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false
237
+ if (compareClaims) {
238
+ const accountAClaims = (accountA.idTokenClaims ||
239
+ {});
240
+ const accountBClaims = (accountB.idTokenClaims ||
241
+ {});
242
+ // issued at timestamp and nonce are expected to change each time a new id token is acquired
243
+ claimsMatch =
244
+ accountAClaims.iat === accountBClaims.iat &&
245
+ accountAClaims.nonce === accountBClaims.nonce;
246
+ }
247
+ return (accountA.homeAccountId === accountB.homeAccountId &&
248
+ accountA.localAccountId === accountB.localAccountId &&
249
+ accountA.username === accountB.username &&
250
+ accountA.tenantId === accountB.tenantId &&
251
+ accountA.environment === accountB.environment &&
252
+ accountA.nativeAccountId === accountB.nativeAccountId &&
253
+ claimsMatch);
254
+ }
255
255
  }
256
256
 
257
257
  export { AccountEntity };
@@ -1,40 +1,12 @@
1
- /**
2
- * APP_METADATA Cache
3
- *
4
- * Key:Value Schema:
5
- *
6
- * Key: appmetadata-<environment>-<client_id>
7
- *
8
- * Value:
9
- * {
10
- * clientId: client ID of the application
11
- * environment: entity that issued the token, represented as a full host
12
- * familyId: Family ID identifier, '1' represents Microsoft Family
13
- * }
14
- */
15
- export declare class AppMetadataEntity {
16
- clientId: string;
17
- environment: string;
18
- familyId?: string;
19
- /**
20
- * Generate AppMetadata Cache Key as per the schema: appmetadata-<environment>-<client_id>
21
- */
22
- generateAppMetadataKey(): string;
23
- /**
24
- * Generate AppMetadata Cache Key
25
- */
26
- static generateAppMetadataCacheKey(environment: string, clientId: string): string;
27
- /**
28
- * Creates AppMetadataEntity
29
- * @param clientId
30
- * @param environment
31
- * @param familyId
32
- */
33
- static createAppMetadataEntity(clientId: string, environment: string, familyId?: string): AppMetadataEntity;
34
- /**
35
- * Validates an entity: checks for all expected params
36
- * @param entity
37
- */
38
- static isAppMetadataEntity(key: string, entity: object): boolean;
39
- }
1
+ /**
2
+ * App Metadata Cache Type
3
+ */
4
+ export type AppMetadataEntity = {
5
+ /** clientId of the application */
6
+ clientId: string;
7
+ /** entity that issued the token, represented as a full host */
8
+ environment: string;
9
+ /** Family identifier, '1' represents Microsoft Family */
10
+ familyId?: string;
11
+ };
40
12
  //# sourceMappingURL=AppMetadataEntity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppMetadataEntity.d.ts","sourceRoot":"","sources":["../../../src/cache/entities/AppMetadataEntity.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAOhC;;OAEG;IACH,MAAM,CAAC,2BAA2B,CAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACjB,MAAM;IAWT;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,CAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAClB,iBAAiB;IAYpB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CAWnE"}
1
+ {"version":3,"file":"AppMetadataEntity.d.ts","sourceRoot":"","sources":["../../../src/cache/entities/AppMetadataEntity.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC5B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC"}
@@ -1,49 +1,16 @@
1
- import { CloudDiscoveryMetadata } from "../../authority/CloudDiscoveryMetadata";
2
- import { OpenIdConfigResponse } from "../../authority/OpenIdConfigResponse";
3
- /** @internal */
4
- export declare class AuthorityMetadataEntity {
5
- aliases: Array<string>;
6
- preferred_cache: string;
7
- preferred_network: string;
8
- canonical_authority: string;
9
- authorization_endpoint: string;
10
- token_endpoint: string;
11
- end_session_endpoint?: string;
12
- issuer: string;
13
- aliasesFromNetwork: boolean;
14
- endpointsFromNetwork: boolean;
15
- expiresAt: number;
16
- jwks_uri: string;
17
- constructor();
18
- /**
19
- * Update the entity with new aliases, preferred_cache and preferred_network values
20
- * @param metadata
21
- * @param fromNetwork
22
- */
23
- updateCloudDiscoveryMetadata(metadata: CloudDiscoveryMetadata, fromNetwork: boolean): void;
24
- /**
25
- * Update the entity with new endpoints
26
- * @param metadata
27
- * @param fromNetwork
28
- */
29
- updateEndpointMetadata(metadata: OpenIdConfigResponse, fromNetwork: boolean): void;
30
- /**
31
- * Save the authority that was used to create this cache entry
32
- * @param authority
33
- */
34
- updateCanonicalAuthority(authority: string): void;
35
- /**
36
- * Reset the exiresAt value
37
- */
38
- resetExpiresAt(): void;
39
- /**
40
- * Returns whether or not the data needs to be refreshed
41
- */
42
- isExpired(): boolean;
43
- /**
44
- * Validates an entity: checks for all expected params
45
- * @param entity
46
- */
47
- static isAuthorityMetadataEntity(key: string, entity: object): boolean;
48
- }
1
+ /** @internal */
2
+ export type AuthorityMetadataEntity = {
3
+ aliases: Array<string>;
4
+ preferred_cache: string;
5
+ preferred_network: string;
6
+ canonical_authority: string;
7
+ authorization_endpoint: string;
8
+ token_endpoint: string;
9
+ end_session_endpoint?: string;
10
+ issuer: string;
11
+ aliasesFromNetwork: boolean;
12
+ endpointsFromNetwork: boolean;
13
+ expiresAt: number;
14
+ jwks_uri: string;
15
+ };
49
16
  //# sourceMappingURL=AuthorityMetadataEntity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorityMetadataEntity.d.ts","sourceRoot":"","sources":["../../../src/cache/entities/AuthorityMetadataEntity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAI5E,gBAAgB;AAChB,qBAAa,uBAAuB;IAChC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;;IAQjB;;;;OAIG;IACH,4BAA4B,CACxB,QAAQ,EAAE,sBAAsB,EAChC,WAAW,EAAE,OAAO,GACrB,IAAI;IAOP;;;;OAIG;IACH,sBAAsB,CAClB,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,OAAO,GACrB,IAAI;IASP;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIjD;;OAEG;IACH,cAAc,IAAI,IAAI;IAMtB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,MAAM,CAAC,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CAoBzE"}
1
+ {"version":3,"file":"AuthorityMetadataEntity.d.ts","sourceRoot":"","sources":["../../../src/cache/entities/AuthorityMetadataEntity.ts"],"names":[],"mappings":"AAKA,gBAAgB;AAChB,MAAM,MAAM,uBAAuB,GAAG;IAClC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC"}