@azure/msal-common 14.0.0-alpha.1 → 14.0.0-alpha.2

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 (167) 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 +8 -8
  7. package/dist/account/CcsCredential.js +9 -9
  8. package/dist/account/ClientCredentials.d.ts +14 -14
  9. package/dist/account/ClientInfo.d.ts +19 -19
  10. package/dist/account/ClientInfo.js +37 -37
  11. package/dist/account/DecodedAuthToken.d.ts +8 -8
  12. package/dist/account/TokenClaims.d.ts +65 -65
  13. package/dist/authority/Authority.d.ts +228 -215
  14. package/dist/authority/Authority.d.ts.map +1 -1
  15. package/dist/authority/Authority.js +716 -682
  16. package/dist/authority/Authority.js.map +1 -1
  17. package/dist/authority/AuthorityFactory.d.ts +30 -30
  18. package/dist/authority/AuthorityFactory.js +47 -47
  19. package/dist/authority/AuthorityMetadata.d.ts +622 -622
  20. package/dist/authority/AuthorityMetadata.js +876 -876
  21. package/dist/authority/AuthorityOptions.d.ts +18 -18
  22. package/dist/authority/AuthorityOptions.js +19 -19
  23. package/dist/authority/AuthorityType.d.ts +9 -9
  24. package/dist/authority/AuthorityType.js +14 -14
  25. package/dist/authority/AzureRegion.d.ts +1 -1
  26. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  27. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  28. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  29. package/dist/authority/CloudInstanceDiscoveryErrorResponse.js +8 -8
  30. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  31. package/dist/authority/CloudInstanceDiscoveryResponse.js +8 -8
  32. package/dist/authority/ImdsOptions.d.ts +5 -5
  33. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  34. package/dist/authority/OpenIdConfigResponse.js +10 -10
  35. package/dist/authority/ProtocolMode.d.ts +7 -7
  36. package/dist/authority/ProtocolMode.js +12 -12
  37. package/dist/authority/RegionDiscovery.d.ts +30 -30
  38. package/dist/authority/RegionDiscovery.js +108 -108
  39. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  40. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  41. package/dist/cache/CacheManager.d.ts +443 -443
  42. package/dist/cache/CacheManager.js +1011 -1011
  43. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  44. package/dist/cache/entities/AccessTokenEntity.js +111 -111
  45. package/dist/cache/entities/AccountEntity.d.ts +99 -99
  46. package/dist/cache/entities/AccountEntity.js +248 -248
  47. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  48. package/dist/cache/entities/AppMetadataEntity.js +66 -66
  49. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +47 -47
  50. package/dist/cache/entities/AuthorityMetadataEntity.js +77 -77
  51. package/dist/cache/entities/CacheRecord.d.ts +13 -13
  52. package/dist/cache/entities/CacheRecord.js +13 -13
  53. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  54. package/dist/cache/entities/CredentialEntity.js +136 -136
  55. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  56. package/dist/cache/entities/IdTokenEntity.js +56 -56
  57. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  58. package/dist/cache/entities/RefreshTokenEntity.js +59 -59
  59. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  60. package/dist/cache/entities/ServerTelemetryEntity.js +27 -27
  61. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  62. package/dist/cache/entities/ThrottlingEntity.js +23 -23
  63. package/dist/cache/interface/ICacheManager.d.ts +165 -165
  64. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  65. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  66. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  67. package/dist/cache/persistence/TokenCacheContext.js +25 -25
  68. package/dist/cache/utils/CacheTypes.d.ts +62 -62
  69. package/dist/client/AuthorizationCodeClient.d.ts +71 -71
  70. package/dist/client/AuthorizationCodeClient.js +433 -433
  71. package/dist/client/BaseClient.d.ts +50 -50
  72. package/dist/client/BaseClient.js +92 -92
  73. package/dist/client/RefreshTokenClient.d.ts +34 -34
  74. package/dist/client/RefreshTokenClient.js +239 -239
  75. package/dist/client/SilentFlowClient.d.ts +24 -24
  76. package/dist/client/SilentFlowClient.js +94 -94
  77. package/dist/config/AppTokenProvider.d.ts +38 -38
  78. package/dist/config/ClientConfiguration.d.ts +133 -133
  79. package/dist/config/ClientConfiguration.js +88 -88
  80. package/dist/crypto/ICrypto.d.ts +62 -62
  81. package/dist/crypto/ICrypto.js +42 -42
  82. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  83. package/dist/crypto/JoseHeader.d.ts +21 -21
  84. package/dist/crypto/JoseHeader.js +36 -36
  85. package/dist/crypto/PopTokenGenerator.d.ts +57 -57
  86. package/dist/crypto/PopTokenGenerator.js +83 -83
  87. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  88. package/dist/error/AuthError.d.ts +47 -47
  89. package/dist/error/AuthError.js +51 -51
  90. package/dist/error/ClientAuthError.d.ts +412 -412
  91. package/dist/error/ClientAuthError.js +519 -519
  92. package/dist/error/ClientConfigurationError.d.ts +198 -198
  93. package/dist/error/ClientConfigurationError.js +249 -249
  94. package/dist/error/InteractionRequiredAuthError.d.ts +59 -59
  95. package/dist/error/InteractionRequiredAuthError.js +78 -78
  96. package/dist/error/JoseHeaderError.d.ts +28 -28
  97. package/dist/error/JoseHeaderError.js +39 -39
  98. package/dist/error/ServerError.d.ts +7 -7
  99. package/dist/error/ServerError.js +14 -14
  100. package/dist/index.cjs.js +8843 -8809
  101. package/dist/index.cjs.js.map +1 -1
  102. package/dist/index.d.ts +93 -93
  103. package/dist/index.js +1 -1
  104. package/dist/logger/Logger.d.ts +95 -95
  105. package/dist/logger/Logger.js +197 -197
  106. package/dist/network/INetworkModule.d.ts +29 -29
  107. package/dist/network/INetworkModule.js +14 -14
  108. package/dist/network/NetworkManager.d.ts +32 -32
  109. package/dist/network/NetworkManager.js +33 -33
  110. package/dist/network/RequestThumbprint.d.ts +16 -16
  111. package/dist/network/ThrottlingUtils.d.ts +41 -41
  112. package/dist/network/ThrottlingUtils.js +94 -94
  113. package/dist/packageMetadata.d.ts +2 -2
  114. package/dist/packageMetadata.js +4 -4
  115. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  116. package/dist/request/AuthenticationHeaderParser.js +55 -55
  117. package/dist/request/BaseAuthRequest.d.ts +37 -37
  118. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  119. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  120. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  121. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  122. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  123. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  124. package/dist/request/CommonRefreshTokenRequest.d.ts +19 -19
  125. package/dist/request/CommonSilentFlowRequest.d.ts +18 -18
  126. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  127. package/dist/request/NativeRequest.d.ts +19 -19
  128. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  129. package/dist/request/RequestParameterBuilder.d.ts +216 -216
  130. package/dist/request/RequestParameterBuilder.js +374 -374
  131. package/dist/request/RequestValidator.d.ts +33 -33
  132. package/dist/request/RequestValidator.js +83 -83
  133. package/dist/request/ScopeSet.d.ts +88 -88
  134. package/dist/request/ScopeSet.js +197 -197
  135. package/dist/response/AuthenticationResult.d.ts +39 -39
  136. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  137. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  138. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  139. package/dist/response/IMDSBadResponse.d.ts +4 -4
  140. package/dist/response/ResponseHandler.d.ts +72 -72
  141. package/dist/response/ResponseHandler.js +300 -300
  142. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  143. package/dist/response/ServerAuthorizationTokenResponse.d.ts +44 -44
  144. package/dist/telemetry/performance/IPerformanceClient.d.ts +42 -42
  145. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  146. package/dist/telemetry/performance/PerformanceClient.d.ts +189 -189
  147. package/dist/telemetry/performance/PerformanceClient.js +406 -406
  148. package/dist/telemetry/performance/PerformanceEvent.d.ts +439 -439
  149. package/dist/telemetry/performance/PerformanceEvent.js +227 -227
  150. package/dist/telemetry/performance/StubPerformanceClient.d.ts +19 -19
  151. package/dist/telemetry/performance/StubPerformanceClient.js +36 -36
  152. package/dist/telemetry/server/ServerTelemetryManager.d.ts +65 -65
  153. package/dist/telemetry/server/ServerTelemetryManager.js +196 -196
  154. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  155. package/dist/url/IUri.d.ts +12 -12
  156. package/dist/url/UrlString.d.ts +70 -70
  157. package/dist/url/UrlString.js +242 -242
  158. package/dist/utils/Constants.d.ts +331 -331
  159. package/dist/utils/Constants.js +373 -373
  160. package/dist/utils/MsalTypes.d.ts +6 -6
  161. package/dist/utils/ProtocolUtils.d.ts +42 -42
  162. package/dist/utils/ProtocolUtils.js +71 -71
  163. package/dist/utils/StringUtils.d.ts +53 -53
  164. package/dist/utils/StringUtils.js +124 -124
  165. package/dist/utils/TimeUtils.d.ts +27 -27
  166. package/dist/utils/TimeUtils.js +45 -45
  167. package/package.json +79 -79
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-common v14.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-common v14.0.0-alpha.2 2023-05-17 */
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