@azure/msal-common 14.0.0-alpha.1 → 14.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 (187) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +62 -62
  3. package/dist/account/AccountInfo.d.ts +31 -31
  4. package/dist/account/AuthToken.d.ts +20 -20
  5. package/dist/account/AuthToken.js +48 -48
  6. package/dist/account/CcsCredential.d.ts +9 -8
  7. package/dist/account/CcsCredential.d.ts.map +1 -1
  8. package/dist/account/CcsCredential.js +9 -10
  9. package/dist/account/CcsCredential.js.map +1 -1
  10. package/dist/account/ClientCredentials.d.ts +14 -14
  11. package/dist/account/ClientInfo.d.ts +19 -19
  12. package/dist/account/ClientInfo.js +37 -37
  13. package/dist/account/DecodedAuthToken.d.ts +8 -8
  14. package/dist/account/TokenClaims.d.ts +65 -65
  15. package/dist/authority/Authority.d.ts +228 -215
  16. package/dist/authority/Authority.d.ts.map +1 -1
  17. package/dist/authority/Authority.js +716 -682
  18. package/dist/authority/Authority.js.map +1 -1
  19. package/dist/authority/AuthorityFactory.d.ts +30 -30
  20. package/dist/authority/AuthorityFactory.js +47 -47
  21. package/dist/authority/AuthorityMetadata.d.ts +622 -622
  22. package/dist/authority/AuthorityMetadata.js +876 -876
  23. package/dist/authority/AuthorityOptions.d.ts +19 -18
  24. package/dist/authority/AuthorityOptions.d.ts.map +1 -1
  25. package/dist/authority/AuthorityOptions.js +19 -20
  26. package/dist/authority/AuthorityOptions.js.map +1 -1
  27. package/dist/authority/AuthorityType.d.ts +10 -9
  28. package/dist/authority/AuthorityType.d.ts.map +1 -1
  29. package/dist/authority/AuthorityType.js +14 -15
  30. package/dist/authority/AuthorityType.js.map +1 -1
  31. package/dist/authority/AzureRegion.d.ts +1 -1
  32. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  33. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  34. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  35. package/dist/authority/CloudInstanceDiscoveryErrorResponse.js +8 -8
  36. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  37. package/dist/authority/CloudInstanceDiscoveryResponse.js +8 -8
  38. package/dist/authority/ImdsOptions.d.ts +5 -5
  39. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  40. package/dist/authority/OpenIdConfigResponse.js +10 -10
  41. package/dist/authority/ProtocolMode.d.ts +8 -7
  42. package/dist/authority/ProtocolMode.d.ts.map +1 -1
  43. package/dist/authority/ProtocolMode.js +12 -13
  44. package/dist/authority/ProtocolMode.js.map +1 -1
  45. package/dist/authority/RegionDiscovery.d.ts +30 -30
  46. package/dist/authority/RegionDiscovery.js +108 -108
  47. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  48. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  49. package/dist/cache/CacheManager.d.ts +443 -443
  50. package/dist/cache/CacheManager.js +1011 -1011
  51. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  52. package/dist/cache/entities/AccessTokenEntity.js +111 -111
  53. package/dist/cache/entities/AccountEntity.d.ts +99 -99
  54. package/dist/cache/entities/AccountEntity.js +248 -248
  55. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  56. package/dist/cache/entities/AppMetadataEntity.js +66 -66
  57. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +47 -47
  58. package/dist/cache/entities/AuthorityMetadataEntity.js +77 -77
  59. package/dist/cache/entities/CacheRecord.d.ts +13 -13
  60. package/dist/cache/entities/CacheRecord.js +13 -13
  61. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  62. package/dist/cache/entities/CredentialEntity.js +136 -136
  63. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  64. package/dist/cache/entities/IdTokenEntity.js +56 -56
  65. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  66. package/dist/cache/entities/RefreshTokenEntity.js +59 -59
  67. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  68. package/dist/cache/entities/ServerTelemetryEntity.js +27 -27
  69. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  70. package/dist/cache/entities/ThrottlingEntity.js +23 -23
  71. package/dist/cache/interface/ICacheManager.d.ts +165 -165
  72. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  73. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  74. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  75. package/dist/cache/persistence/TokenCacheContext.js +25 -25
  76. package/dist/cache/utils/CacheTypes.d.ts +62 -62
  77. package/dist/client/AuthorizationCodeClient.d.ts +71 -71
  78. package/dist/client/AuthorizationCodeClient.js +433 -433
  79. package/dist/client/BaseClient.d.ts +50 -50
  80. package/dist/client/BaseClient.js +92 -92
  81. package/dist/client/RefreshTokenClient.d.ts +34 -34
  82. package/dist/client/RefreshTokenClient.js +239 -239
  83. package/dist/client/SilentFlowClient.d.ts +24 -24
  84. package/dist/client/SilentFlowClient.js +94 -94
  85. package/dist/config/AppTokenProvider.d.ts +38 -38
  86. package/dist/config/ClientConfiguration.d.ts +133 -133
  87. package/dist/config/ClientConfiguration.js +88 -88
  88. package/dist/crypto/ICrypto.d.ts +62 -62
  89. package/dist/crypto/ICrypto.js +42 -42
  90. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  91. package/dist/crypto/JoseHeader.d.ts +21 -21
  92. package/dist/crypto/JoseHeader.js +36 -36
  93. package/dist/crypto/PopTokenGenerator.d.ts +58 -57
  94. package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
  95. package/dist/crypto/PopTokenGenerator.js +82 -83
  96. package/dist/crypto/PopTokenGenerator.js.map +1 -1
  97. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  98. package/dist/error/AuthError.d.ts +47 -47
  99. package/dist/error/AuthError.js +51 -51
  100. package/dist/error/ClientAuthError.d.ts +412 -412
  101. package/dist/error/ClientAuthError.js +519 -519
  102. package/dist/error/ClientConfigurationError.d.ts +206 -198
  103. package/dist/error/ClientConfigurationError.d.ts.map +1 -1
  104. package/dist/error/ClientConfigurationError.js +259 -249
  105. package/dist/error/ClientConfigurationError.js.map +1 -1
  106. package/dist/error/InteractionRequiredAuthError.d.ts +59 -59
  107. package/dist/error/InteractionRequiredAuthError.js +78 -78
  108. package/dist/error/JoseHeaderError.d.ts +28 -28
  109. package/dist/error/JoseHeaderError.js +39 -39
  110. package/dist/error/ServerError.d.ts +7 -7
  111. package/dist/error/ServerError.js +14 -14
  112. package/dist/index.cjs.js +8826 -8813
  113. package/dist/index.cjs.js.map +1 -1
  114. package/dist/index.d.ts +93 -93
  115. package/dist/index.js +1 -1
  116. package/dist/logger/Logger.d.ts +95 -95
  117. package/dist/logger/Logger.js +197 -197
  118. package/dist/network/INetworkModule.d.ts +29 -29
  119. package/dist/network/INetworkModule.js +14 -14
  120. package/dist/network/NetworkManager.d.ts +32 -32
  121. package/dist/network/NetworkManager.js +33 -33
  122. package/dist/network/RequestThumbprint.d.ts +16 -16
  123. package/dist/network/ThrottlingUtils.d.ts +41 -41
  124. package/dist/network/ThrottlingUtils.js +94 -94
  125. package/dist/packageMetadata.d.ts +2 -2
  126. package/dist/packageMetadata.d.ts.map +1 -1
  127. package/dist/packageMetadata.js +4 -4
  128. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  129. package/dist/request/AuthenticationHeaderParser.js +55 -55
  130. package/dist/request/BaseAuthRequest.d.ts +37 -37
  131. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  132. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  133. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  134. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  135. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  136. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  137. package/dist/request/CommonRefreshTokenRequest.d.ts +19 -19
  138. package/dist/request/CommonSilentFlowRequest.d.ts +18 -18
  139. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  140. package/dist/request/NativeRequest.d.ts +19 -19
  141. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  142. package/dist/request/RequestParameterBuilder.d.ts +216 -216
  143. package/dist/request/RequestParameterBuilder.js +374 -374
  144. package/dist/request/RequestValidator.d.ts +33 -33
  145. package/dist/request/RequestValidator.js +82 -83
  146. package/dist/request/RequestValidator.js.map +1 -1
  147. package/dist/request/ScopeSet.d.ts +88 -88
  148. package/dist/request/ScopeSet.js +197 -197
  149. package/dist/response/AuthenticationResult.d.ts +39 -39
  150. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  151. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  152. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  153. package/dist/response/IMDSBadResponse.d.ts +4 -4
  154. package/dist/response/ResponseHandler.d.ts +72 -72
  155. package/dist/response/ResponseHandler.js +300 -300
  156. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  157. package/dist/response/ServerAuthorizationTokenResponse.d.ts +44 -44
  158. package/dist/telemetry/performance/IPerformanceClient.d.ts +42 -42
  159. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  160. package/dist/telemetry/performance/PerformanceClient.d.ts +189 -189
  161. package/dist/telemetry/performance/PerformanceClient.js +406 -406
  162. package/dist/telemetry/performance/PerformanceEvent.d.ts +441 -439
  163. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  164. package/dist/telemetry/performance/PerformanceEvent.js +225 -227
  165. package/dist/telemetry/performance/PerformanceEvent.js.map +1 -1
  166. package/dist/telemetry/performance/StubPerformanceClient.d.ts +15 -19
  167. package/dist/telemetry/performance/StubPerformanceClient.d.ts.map +1 -1
  168. package/dist/telemetry/performance/StubPerformanceClient.js +22 -36
  169. package/dist/telemetry/performance/StubPerformanceClient.js.map +1 -1
  170. package/dist/telemetry/server/ServerTelemetryManager.d.ts +65 -65
  171. package/dist/telemetry/server/ServerTelemetryManager.js +196 -196
  172. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  173. package/dist/url/IUri.d.ts +12 -12
  174. package/dist/url/UrlString.d.ts +70 -70
  175. package/dist/url/UrlString.js +242 -242
  176. package/dist/utils/Constants.d.ts +345 -331
  177. package/dist/utils/Constants.d.ts.map +1 -1
  178. package/dist/utils/Constants.js +353 -373
  179. package/dist/utils/Constants.js.map +1 -1
  180. package/dist/utils/MsalTypes.d.ts +6 -6
  181. package/dist/utils/ProtocolUtils.d.ts +42 -42
  182. package/dist/utils/ProtocolUtils.js +71 -71
  183. package/dist/utils/StringUtils.d.ts +53 -53
  184. package/dist/utils/StringUtils.js +124 -124
  185. package/dist/utils/TimeUtils.d.ts +27 -27
  186. package/dist/utils/TimeUtils.js +45 -45
  187. package/package.json +86 -79
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-common v14.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-common v14.0.0-beta.0 2023-06-19 */
2
2
  'use strict';
3
3
  import { Separators, CacheAccountType, CacheType, Constants } from '../../utils/Constants.js';
4
4
  import { buildClientInfo } from '../../account/ClientInfo.js';
@@ -6,253 +6,253 @@ import { StringUtils } from '../../utils/StringUtils.js';
6
6
  import { ClientAuthError } from '../../error/ClientAuthError.js';
7
7
  import { AuthorityType } from '../../authority/AuthorityType.js';
8
8
 
9
- /*
10
- * Copyright (c) Microsoft Corporation. All rights reserved.
11
- * Licensed under the MIT License.
12
- */
13
- /**
14
- * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).
15
- *
16
- * Key : Value Schema
17
- *
18
- * Key: <home_account_id>-<environment>-<realm*>
19
- *
20
- * Value Schema:
21
- * {
22
- * homeAccountId: home account identifier for the auth scheme,
23
- * environment: entity that issued the token, represented as a full host
24
- * realm: Full tenant or organizational identifier that the account belongs to
25
- * localAccountId: Original tenant-specific accountID, usually used for legacy cases
26
- * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt
27
- * authorityType: Accounts authority type as a string
28
- * name: Full name for the account, including given name and family name,
29
- * clientInfo: Full base64 encoded client info received from ESTS
30
- * lastModificationTime: last time this entity was modified in the cache
31
- * lastModificationApp:
32
- * idTokenClaims: Object containing claims parsed from ID token
33
- * nativeAccountId: Account identifier on the native device
34
- * }
35
- */
36
- class AccountEntity {
37
- /**
38
- * Generate Account Id key component as per the schema: <home_account_id>-<environment>
39
- */
40
- generateAccountId() {
41
- const accountId = [this.homeAccountId, this.environment];
42
- return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
43
- }
44
- /**
45
- * Generate Account Cache Key as per the schema: <home_account_id>-<environment>-<realm*>
46
- */
47
- generateAccountKey() {
48
- return AccountEntity.generateAccountCacheKey({
49
- homeAccountId: this.homeAccountId,
50
- environment: this.environment,
51
- tenantId: this.realm,
52
- username: this.username,
53
- localAccountId: this.localAccountId,
54
- });
55
- }
56
- /**
57
- * returns the type of the cache (in this case account)
58
- */
59
- generateType() {
60
- switch (this.authorityType) {
61
- case CacheAccountType.ADFS_ACCOUNT_TYPE:
62
- return CacheType.ADFS;
63
- case CacheAccountType.MSAV1_ACCOUNT_TYPE:
64
- return CacheType.MSA;
65
- case CacheAccountType.MSSTS_ACCOUNT_TYPE:
66
- return CacheType.MSSTS;
67
- case CacheAccountType.GENERIC_ACCOUNT_TYPE:
68
- return CacheType.GENERIC;
69
- default: {
70
- throw ClientAuthError.createUnexpectedAccountTypeError();
71
- }
72
- }
73
- }
74
- /**
75
- * Returns the AccountInfo interface for this account.
76
- */
77
- getAccountInfo() {
78
- return {
79
- homeAccountId: this.homeAccountId,
80
- environment: this.environment,
81
- tenantId: this.realm,
82
- username: this.username,
83
- localAccountId: this.localAccountId,
84
- name: this.name,
85
- idTokenClaims: this.idTokenClaims,
86
- nativeAccountId: this.nativeAccountId,
87
- };
88
- }
89
- /**
90
- * Generates account key from interface
91
- * @param accountInterface
92
- */
93
- static generateAccountCacheKey(accountInterface) {
94
- const accountKey = [
95
- accountInterface.homeAccountId,
96
- accountInterface.environment || Constants.EMPTY_STRING,
97
- accountInterface.tenantId || Constants.EMPTY_STRING,
98
- ];
99
- return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
100
- }
101
- /**
102
- * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.
103
- * @param clientInfo
104
- * @param authority
105
- * @param idToken
106
- * @param policy
107
- */
108
- static createAccount(clientInfo, homeAccountId, idToken, authority, cloudGraphHostName, msGraphHost, environment, nativeAccountId) {
109
- const account = new AccountEntity();
110
- account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;
111
- account.clientInfo = clientInfo;
112
- account.homeAccountId = homeAccountId;
113
- account.nativeAccountId = nativeAccountId;
114
- const env = environment || (authority && authority.getPreferredCache());
115
- if (!env) {
116
- throw ClientAuthError.createInvalidCacheEnvironmentError();
117
- }
118
- account.environment = env;
119
- // non AAD scenarios can have empty realm
120
- account.realm = idToken?.claims?.tid || Constants.EMPTY_STRING;
121
- if (idToken) {
122
- account.idTokenClaims = idToken.claims;
123
- // How do you account for MSA CID here?
124
- account.localAccountId =
125
- idToken?.claims?.oid ||
126
- idToken?.claims?.sub ||
127
- Constants.EMPTY_STRING;
128
- /*
129
- * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.
130
- * In most cases it will contain a single email. This field should not be relied upon if a custom
131
- * policy is configured to return more than 1 email.
132
- */
133
- const preferredUsername = idToken?.claims?.preferred_username;
134
- const email = idToken?.claims?.emails
135
- ? idToken.claims.emails[0]
136
- : null;
137
- account.username =
138
- preferredUsername || email || Constants.EMPTY_STRING;
139
- account.name = idToken?.claims?.name;
140
- }
141
- account.cloudGraphHostName = cloudGraphHostName;
142
- account.msGraphHost = msGraphHost;
143
- return account;
144
- }
145
- /**
146
- * Builds non-AAD/ADFS account.
147
- * @param authority
148
- * @param idToken
149
- */
150
- static createGenericAccount(homeAccountId, idToken, authority, cloudGraphHostName, msGraphHost, environment) {
151
- const account = new AccountEntity();
152
- account.authorityType =
153
- authority && authority.authorityType === AuthorityType.Adfs
154
- ? CacheAccountType.ADFS_ACCOUNT_TYPE
155
- : CacheAccountType.GENERIC_ACCOUNT_TYPE;
156
- account.homeAccountId = homeAccountId;
157
- // non AAD scenarios can have empty realm
158
- account.realm = Constants.EMPTY_STRING;
159
- const env = environment || (authority && authority.getPreferredCache());
160
- if (!env) {
161
- throw ClientAuthError.createInvalidCacheEnvironmentError();
162
- }
163
- if (idToken) {
164
- // How do you account for MSA CID here?
165
- account.localAccountId =
166
- idToken?.claims?.oid ||
167
- idToken?.claims?.sub ||
168
- Constants.EMPTY_STRING;
169
- // upn claim for most ADFS scenarios
170
- account.username = idToken?.claims?.upn || Constants.EMPTY_STRING;
171
- account.name = idToken?.claims?.name || Constants.EMPTY_STRING;
172
- account.idTokenClaims = idToken?.claims;
173
- }
174
- account.environment = env;
175
- account.cloudGraphHostName = cloudGraphHostName;
176
- account.msGraphHost = msGraphHost;
177
- /*
178
- * add uniqueName to claims
179
- * account.name = idToken.claims.uniqueName;
180
- */
181
- return account;
182
- }
183
- /**
184
- * Generate HomeAccountId from server response
185
- * @param serverClientInfo
186
- * @param authType
187
- */
188
- static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idToken) {
189
- const accountId = idToken?.claims?.sub
190
- ? idToken.claims.sub
191
- : Constants.EMPTY_STRING;
192
- // since ADFS does not have tid and does not set client_info
193
- if (authType === AuthorityType.Adfs ||
194
- authType === AuthorityType.Dsts) {
195
- return accountId;
196
- }
197
- // for cases where there is clientInfo
198
- if (serverClientInfo) {
199
- try {
200
- const clientInfo = buildClientInfo(serverClientInfo, cryptoObj);
201
- if (!StringUtils.isEmpty(clientInfo.uid) &&
202
- !StringUtils.isEmpty(clientInfo.utid)) {
203
- return `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`;
204
- }
205
- }
206
- catch (e) { }
207
- }
208
- // default to "sub" claim
209
- logger.verbose("No client info in response");
210
- return accountId;
211
- }
212
- /**
213
- * Validates an entity: checks for all expected params
214
- * @param entity
215
- */
216
- static isAccountEntity(entity) {
217
- if (!entity) {
218
- return false;
219
- }
220
- return (entity.hasOwnProperty("homeAccountId") &&
221
- entity.hasOwnProperty("environment") &&
222
- entity.hasOwnProperty("realm") &&
223
- entity.hasOwnProperty("localAccountId") &&
224
- entity.hasOwnProperty("username") &&
225
- entity.hasOwnProperty("authorityType"));
226
- }
227
- /**
228
- * Helper function to determine whether 2 accountInfo objects represent the same account
229
- * @param accountA
230
- * @param accountB
231
- * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality
232
- */
233
- static accountInfoIsEqual(accountA, accountB, compareClaims) {
234
- if (!accountA || !accountB) {
235
- return false;
236
- }
237
- let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false
238
- if (compareClaims) {
239
- const accountAClaims = (accountA.idTokenClaims ||
240
- {});
241
- const accountBClaims = (accountB.idTokenClaims ||
242
- {});
243
- // issued at timestamp and nonce are expected to change each time a new id token is acquired
244
- claimsMatch =
245
- accountAClaims.iat === accountBClaims.iat &&
246
- accountAClaims.nonce === accountBClaims.nonce;
247
- }
248
- return (accountA.homeAccountId === accountB.homeAccountId &&
249
- accountA.localAccountId === accountB.localAccountId &&
250
- accountA.username === accountB.username &&
251
- accountA.tenantId === accountB.tenantId &&
252
- accountA.environment === accountB.environment &&
253
- accountA.nativeAccountId === accountB.nativeAccountId &&
254
- claimsMatch);
255
- }
9
+ /*
10
+ * Copyright (c) Microsoft Corporation. All rights reserved.
11
+ * Licensed under the MIT License.
12
+ */
13
+ /**
14
+ * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).
15
+ *
16
+ * Key : Value Schema
17
+ *
18
+ * Key: <home_account_id>-<environment>-<realm*>
19
+ *
20
+ * Value Schema:
21
+ * {
22
+ * homeAccountId: home account identifier for the auth scheme,
23
+ * environment: entity that issued the token, represented as a full host
24
+ * realm: Full tenant or organizational identifier that the account belongs to
25
+ * localAccountId: Original tenant-specific accountID, usually used for legacy cases
26
+ * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt
27
+ * authorityType: Accounts authority type as a string
28
+ * name: Full name for the account, including given name and family name,
29
+ * clientInfo: Full base64 encoded client info received from ESTS
30
+ * lastModificationTime: last time this entity was modified in the cache
31
+ * lastModificationApp:
32
+ * idTokenClaims: Object containing claims parsed from ID token
33
+ * nativeAccountId: Account identifier on the native device
34
+ * }
35
+ */
36
+ class AccountEntity {
37
+ /**
38
+ * Generate Account Id key component as per the schema: <home_account_id>-<environment>
39
+ */
40
+ generateAccountId() {
41
+ const accountId = [this.homeAccountId, this.environment];
42
+ return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
43
+ }
44
+ /**
45
+ * Generate Account Cache Key as per the schema: <home_account_id>-<environment>-<realm*>
46
+ */
47
+ generateAccountKey() {
48
+ return AccountEntity.generateAccountCacheKey({
49
+ homeAccountId: this.homeAccountId,
50
+ environment: this.environment,
51
+ tenantId: this.realm,
52
+ username: this.username,
53
+ localAccountId: this.localAccountId,
54
+ });
55
+ }
56
+ /**
57
+ * returns the type of the cache (in this case account)
58
+ */
59
+ generateType() {
60
+ switch (this.authorityType) {
61
+ case CacheAccountType.ADFS_ACCOUNT_TYPE:
62
+ return CacheType.ADFS;
63
+ case CacheAccountType.MSAV1_ACCOUNT_TYPE:
64
+ return CacheType.MSA;
65
+ case CacheAccountType.MSSTS_ACCOUNT_TYPE:
66
+ return CacheType.MSSTS;
67
+ case CacheAccountType.GENERIC_ACCOUNT_TYPE:
68
+ return CacheType.GENERIC;
69
+ default: {
70
+ throw ClientAuthError.createUnexpectedAccountTypeError();
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Returns the AccountInfo interface for this account.
76
+ */
77
+ getAccountInfo() {
78
+ return {
79
+ homeAccountId: this.homeAccountId,
80
+ environment: this.environment,
81
+ tenantId: this.realm,
82
+ username: this.username,
83
+ localAccountId: this.localAccountId,
84
+ name: this.name,
85
+ idTokenClaims: this.idTokenClaims,
86
+ nativeAccountId: this.nativeAccountId,
87
+ };
88
+ }
89
+ /**
90
+ * Generates account key from interface
91
+ * @param accountInterface
92
+ */
93
+ static generateAccountCacheKey(accountInterface) {
94
+ const accountKey = [
95
+ accountInterface.homeAccountId,
96
+ accountInterface.environment || Constants.EMPTY_STRING,
97
+ accountInterface.tenantId || Constants.EMPTY_STRING,
98
+ ];
99
+ return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
100
+ }
101
+ /**
102
+ * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.
103
+ * @param clientInfo
104
+ * @param authority
105
+ * @param idToken
106
+ * @param policy
107
+ */
108
+ static createAccount(clientInfo, homeAccountId, idToken, authority, cloudGraphHostName, msGraphHost, environment, nativeAccountId) {
109
+ const account = new AccountEntity();
110
+ account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;
111
+ account.clientInfo = clientInfo;
112
+ account.homeAccountId = homeAccountId;
113
+ account.nativeAccountId = nativeAccountId;
114
+ const env = environment || (authority && authority.getPreferredCache());
115
+ if (!env) {
116
+ throw ClientAuthError.createInvalidCacheEnvironmentError();
117
+ }
118
+ account.environment = env;
119
+ // non AAD scenarios can have empty realm
120
+ account.realm = idToken?.claims?.tid || Constants.EMPTY_STRING;
121
+ if (idToken) {
122
+ account.idTokenClaims = idToken.claims;
123
+ // How do you account for MSA CID here?
124
+ account.localAccountId =
125
+ idToken?.claims?.oid ||
126
+ idToken?.claims?.sub ||
127
+ Constants.EMPTY_STRING;
128
+ /*
129
+ * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.
130
+ * In most cases it will contain a single email. This field should not be relied upon if a custom
131
+ * policy is configured to return more than 1 email.
132
+ */
133
+ const preferredUsername = idToken?.claims?.preferred_username;
134
+ const email = idToken?.claims?.emails
135
+ ? idToken.claims.emails[0]
136
+ : null;
137
+ account.username =
138
+ preferredUsername || email || Constants.EMPTY_STRING;
139
+ account.name = idToken?.claims?.name;
140
+ }
141
+ account.cloudGraphHostName = cloudGraphHostName;
142
+ account.msGraphHost = msGraphHost;
143
+ return account;
144
+ }
145
+ /**
146
+ * Builds non-AAD/ADFS account.
147
+ * @param authority
148
+ * @param idToken
149
+ */
150
+ static createGenericAccount(homeAccountId, idToken, authority, cloudGraphHostName, msGraphHost, environment) {
151
+ const account = new AccountEntity();
152
+ account.authorityType =
153
+ authority && authority.authorityType === AuthorityType.Adfs
154
+ ? CacheAccountType.ADFS_ACCOUNT_TYPE
155
+ : CacheAccountType.GENERIC_ACCOUNT_TYPE;
156
+ account.homeAccountId = homeAccountId;
157
+ // non AAD scenarios can have empty realm
158
+ account.realm = Constants.EMPTY_STRING;
159
+ const env = environment || (authority && authority.getPreferredCache());
160
+ if (!env) {
161
+ throw ClientAuthError.createInvalidCacheEnvironmentError();
162
+ }
163
+ if (idToken) {
164
+ // How do you account for MSA CID here?
165
+ account.localAccountId =
166
+ idToken?.claims?.oid ||
167
+ idToken?.claims?.sub ||
168
+ Constants.EMPTY_STRING;
169
+ // upn claim for most ADFS scenarios
170
+ account.username = idToken?.claims?.upn || Constants.EMPTY_STRING;
171
+ account.name = idToken?.claims?.name || Constants.EMPTY_STRING;
172
+ account.idTokenClaims = idToken?.claims;
173
+ }
174
+ account.environment = env;
175
+ account.cloudGraphHostName = cloudGraphHostName;
176
+ account.msGraphHost = msGraphHost;
177
+ /*
178
+ * add uniqueName to claims
179
+ * account.name = idToken.claims.uniqueName;
180
+ */
181
+ return account;
182
+ }
183
+ /**
184
+ * Generate HomeAccountId from server response
185
+ * @param serverClientInfo
186
+ * @param authType
187
+ */
188
+ static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idToken) {
189
+ const accountId = idToken?.claims?.sub
190
+ ? idToken.claims.sub
191
+ : Constants.EMPTY_STRING;
192
+ // since ADFS does not have tid and does not set client_info
193
+ if (authType === AuthorityType.Adfs ||
194
+ authType === AuthorityType.Dsts) {
195
+ return accountId;
196
+ }
197
+ // for cases where there is clientInfo
198
+ if (serverClientInfo) {
199
+ try {
200
+ const clientInfo = buildClientInfo(serverClientInfo, cryptoObj);
201
+ if (!StringUtils.isEmpty(clientInfo.uid) &&
202
+ !StringUtils.isEmpty(clientInfo.utid)) {
203
+ return `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`;
204
+ }
205
+ }
206
+ catch (e) { }
207
+ }
208
+ // default to "sub" claim
209
+ logger.verbose("No client info in response");
210
+ return accountId;
211
+ }
212
+ /**
213
+ * Validates an entity: checks for all expected params
214
+ * @param entity
215
+ */
216
+ static isAccountEntity(entity) {
217
+ if (!entity) {
218
+ return false;
219
+ }
220
+ return (entity.hasOwnProperty("homeAccountId") &&
221
+ entity.hasOwnProperty("environment") &&
222
+ entity.hasOwnProperty("realm") &&
223
+ entity.hasOwnProperty("localAccountId") &&
224
+ entity.hasOwnProperty("username") &&
225
+ entity.hasOwnProperty("authorityType"));
226
+ }
227
+ /**
228
+ * Helper function to determine whether 2 accountInfo objects represent the same account
229
+ * @param accountA
230
+ * @param accountB
231
+ * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality
232
+ */
233
+ static accountInfoIsEqual(accountA, accountB, compareClaims) {
234
+ if (!accountA || !accountB) {
235
+ return false;
236
+ }
237
+ let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false
238
+ if (compareClaims) {
239
+ const accountAClaims = (accountA.idTokenClaims ||
240
+ {});
241
+ const accountBClaims = (accountB.idTokenClaims ||
242
+ {});
243
+ // issued at timestamp and nonce are expected to change each time a new id token is acquired
244
+ claimsMatch =
245
+ accountAClaims.iat === accountBClaims.iat &&
246
+ accountAClaims.nonce === accountBClaims.nonce;
247
+ }
248
+ return (accountA.homeAccountId === accountB.homeAccountId &&
249
+ accountA.localAccountId === accountB.localAccountId &&
250
+ accountA.username === accountB.username &&
251
+ accountA.tenantId === accountB.tenantId &&
252
+ accountA.environment === accountB.environment &&
253
+ accountA.nativeAccountId === accountB.nativeAccountId &&
254
+ claimsMatch);
255
+ }
256
256
  }
257
257
 
258
258
  export { AccountEntity };
@@ -1,40 +1,40 @@
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
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
+ }
40
40
  //# sourceMappingURL=AppMetadataEntity.d.ts.map