@azure/msal-common 14.0.3 → 14.1.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 (226) hide show
  1. package/dist/account/AccountInfo.d.ts +0 -1
  2. package/dist/account/AccountInfo.d.ts.map +1 -1
  3. package/dist/account/AuthToken.d.ts.map +1 -1
  4. package/dist/account/AuthToken.mjs +7 -6
  5. package/dist/account/AuthToken.mjs.map +1 -1
  6. package/dist/account/CcsCredential.mjs +1 -1
  7. package/dist/account/ClientInfo.d.ts.map +1 -1
  8. package/dist/account/ClientInfo.mjs +6 -5
  9. package/dist/account/ClientInfo.mjs.map +1 -1
  10. package/dist/authority/Authority.d.ts.map +1 -1
  11. package/dist/authority/Authority.mjs +28 -50
  12. package/dist/authority/Authority.mjs.map +1 -1
  13. package/dist/authority/AuthorityFactory.d.ts.map +1 -1
  14. package/dist/authority/AuthorityFactory.mjs +9 -7
  15. package/dist/authority/AuthorityFactory.mjs.map +1 -1
  16. package/dist/authority/AuthorityMetadata.mjs +1 -1
  17. package/dist/authority/AuthorityOptions.mjs +1 -1
  18. package/dist/authority/AuthorityType.mjs +1 -1
  19. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +1 -1
  20. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +1 -1
  21. package/dist/authority/OpenIdConfigResponse.mjs +1 -1
  22. package/dist/authority/ProtocolMode.mjs +1 -1
  23. package/dist/authority/RegionDiscovery.d.ts +3 -1
  24. package/dist/authority/RegionDiscovery.d.ts.map +1 -1
  25. package/dist/authority/RegionDiscovery.mjs +7 -8
  26. package/dist/authority/RegionDiscovery.mjs.map +1 -1
  27. package/dist/cache/CacheManager.d.ts +25 -7
  28. package/dist/cache/CacheManager.d.ts.map +1 -1
  29. package/dist/cache/CacheManager.mjs +98 -71
  30. package/dist/cache/CacheManager.mjs.map +1 -1
  31. package/dist/cache/entities/AccessTokenEntity.d.ts.map +1 -1
  32. package/dist/cache/entities/AccessTokenEntity.mjs +4 -3
  33. package/dist/cache/entities/AccessTokenEntity.mjs.map +1 -1
  34. package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
  35. package/dist/cache/entities/AccountEntity.mjs +4 -3
  36. package/dist/cache/entities/AccountEntity.mjs.map +1 -1
  37. package/dist/cache/entities/AppMetadataEntity.mjs +1 -1
  38. package/dist/cache/entities/AuthorityMetadataEntity.mjs +1 -1
  39. package/dist/cache/entities/CacheRecord.mjs +1 -1
  40. package/dist/cache/entities/CredentialEntity.d.ts.map +1 -1
  41. package/dist/cache/entities/CredentialEntity.mjs +4 -3
  42. package/dist/cache/entities/CredentialEntity.mjs.map +1 -1
  43. package/dist/cache/entities/IdTokenEntity.mjs +1 -1
  44. package/dist/cache/entities/RefreshTokenEntity.mjs +1 -1
  45. package/dist/cache/entities/ServerTelemetryEntity.mjs +1 -1
  46. package/dist/cache/entities/ThrottlingEntity.mjs +1 -1
  47. package/dist/cache/persistence/TokenCacheContext.mjs +1 -1
  48. package/dist/cache/utils/CacheTypes.d.ts +3 -6
  49. package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
  50. package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
  51. package/dist/client/AuthorizationCodeClient.mjs +13 -11
  52. package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
  53. package/dist/client/BaseClient.d.ts.map +1 -1
  54. package/dist/client/BaseClient.mjs +5 -4
  55. package/dist/client/BaseClient.mjs.map +1 -1
  56. package/dist/client/RefreshTokenClient.d.ts.map +1 -1
  57. package/dist/client/RefreshTokenClient.mjs +33 -74
  58. package/dist/client/RefreshTokenClient.mjs.map +1 -1
  59. package/dist/client/SilentFlowClient.d.ts +2 -1
  60. package/dist/client/SilentFlowClient.d.ts.map +1 -1
  61. package/dist/client/SilentFlowClient.mjs +43 -19
  62. package/dist/client/SilentFlowClient.mjs.map +1 -1
  63. package/dist/config/ClientConfiguration.d.ts.map +1 -1
  64. package/dist/config/ClientConfiguration.mjs +5 -6
  65. package/dist/config/ClientConfiguration.mjs.map +1 -1
  66. package/dist/crypto/ICrypto.d.ts +0 -4
  67. package/dist/crypto/ICrypto.d.ts.map +1 -1
  68. package/dist/crypto/ICrypto.mjs +11 -22
  69. package/dist/crypto/ICrypto.mjs.map +1 -1
  70. package/dist/crypto/JoseHeader.d.ts.map +1 -1
  71. package/dist/crypto/JoseHeader.mjs +5 -4
  72. package/dist/crypto/JoseHeader.mjs.map +1 -1
  73. package/dist/crypto/PopTokenGenerator.d.ts +2 -1
  74. package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
  75. package/dist/crypto/PopTokenGenerator.mjs +4 -4
  76. package/dist/crypto/PopTokenGenerator.mjs.map +1 -1
  77. package/dist/error/AuthError.d.ts +8 -11
  78. package/dist/error/AuthError.d.ts.map +1 -1
  79. package/dist/error/AuthError.mjs +19 -21
  80. package/dist/error/AuthError.mjs.map +1 -1
  81. package/dist/error/AuthErrorCodes.d.ts +6 -0
  82. package/dist/error/AuthErrorCodes.d.ts.map +1 -0
  83. package/dist/error/AuthErrorCodes.mjs +14 -0
  84. package/dist/error/AuthErrorCodes.mjs.map +1 -0
  85. package/dist/error/ClientAuthError.d.ts +54 -234
  86. package/dist/error/ClientAuthError.d.ts.map +1 -1
  87. package/dist/error/ClientAuthError.mjs +149 -421
  88. package/dist/error/ClientAuthError.mjs.map +1 -1
  89. package/dist/error/ClientAuthErrorCodes.d.ts +44 -0
  90. package/dist/error/ClientAuthErrorCodes.d.ts.map +1 -0
  91. package/dist/error/ClientAuthErrorCodes.mjs +52 -0
  92. package/dist/error/ClientAuthErrorCodes.mjs.map +1 -0
  93. package/dist/error/ClientConfigurationError.d.ts +31 -125
  94. package/dist/error/ClientConfigurationError.d.ts.map +1 -1
  95. package/dist/error/ClientConfigurationError.mjs +81 -222
  96. package/dist/error/ClientConfigurationError.mjs.map +1 -1
  97. package/dist/error/ClientConfigurationErrorCodes.d.ts +23 -0
  98. package/dist/error/ClientConfigurationErrorCodes.d.ts.map +1 -0
  99. package/dist/error/ClientConfigurationErrorCodes.mjs +31 -0
  100. package/dist/error/ClientConfigurationErrorCodes.mjs.map +1 -0
  101. package/dist/error/InteractionRequiredAuthError.d.ts +14 -16
  102. package/dist/error/InteractionRequiredAuthError.d.ts.map +1 -1
  103. package/dist/error/InteractionRequiredAuthError.mjs +42 -41
  104. package/dist/error/InteractionRequiredAuthError.mjs.map +1 -1
  105. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +6 -0
  106. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts.map +1 -0
  107. package/dist/error/InteractionRequiredAuthErrorCodes.mjs +16 -0
  108. package/dist/error/InteractionRequiredAuthErrorCodes.mjs.map +1 -0
  109. package/dist/error/JoseHeaderError.d.ts +7 -20
  110. package/dist/error/JoseHeaderError.d.ts.map +1 -1
  111. package/dist/error/JoseHeaderError.mjs +10 -26
  112. package/dist/error/JoseHeaderError.mjs.map +1 -1
  113. package/dist/error/JoseHeaderErrorCodes.d.ts +3 -0
  114. package/dist/error/JoseHeaderErrorCodes.d.ts.map +1 -0
  115. package/dist/error/JoseHeaderErrorCodes.mjs +11 -0
  116. package/dist/error/JoseHeaderErrorCodes.mjs.map +1 -0
  117. package/dist/error/ServerError.mjs +1 -1
  118. package/dist/index.cjs +942 -1210
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.ts +5 -5
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.mjs +13 -5
  123. package/dist/index.mjs.map +1 -1
  124. package/dist/logger/Logger.mjs +1 -1
  125. package/dist/network/INetworkModule.d.ts.map +1 -1
  126. package/dist/network/INetworkModule.mjs +5 -6
  127. package/dist/network/INetworkModule.mjs.map +1 -1
  128. package/dist/network/NetworkManager.d.ts.map +1 -1
  129. package/dist/network/NetworkManager.mjs +4 -3
  130. package/dist/network/NetworkManager.mjs.map +1 -1
  131. package/dist/network/ThrottlingUtils.mjs +1 -1
  132. package/dist/packageMetadata.d.ts +1 -1
  133. package/dist/packageMetadata.mjs +2 -2
  134. package/dist/request/AuthenticationHeaderParser.d.ts.map +1 -1
  135. package/dist/request/AuthenticationHeaderParser.mjs +7 -6
  136. package/dist/request/AuthenticationHeaderParser.mjs.map +1 -1
  137. package/dist/request/CommonRefreshTokenRequest.d.ts +3 -0
  138. package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
  139. package/dist/request/CommonSilentFlowRequest.d.ts +2 -0
  140. package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
  141. package/dist/request/RequestParameterBuilder.d.ts.map +1 -1
  142. package/dist/request/RequestParameterBuilder.mjs +5 -4
  143. package/dist/request/RequestParameterBuilder.mjs.map +1 -1
  144. package/dist/request/RequestValidator.d.ts.map +1 -1
  145. package/dist/request/RequestValidator.mjs +8 -7
  146. package/dist/request/RequestValidator.mjs.map +1 -1
  147. package/dist/request/ScopeSet.d.ts.map +1 -1
  148. package/dist/request/ScopeSet.mjs +10 -8
  149. package/dist/request/ScopeSet.mjs.map +1 -1
  150. package/dist/response/ResponseHandler.d.ts.map +1 -1
  151. package/dist/response/ResponseHandler.mjs +15 -14
  152. package/dist/response/ResponseHandler.mjs.map +1 -1
  153. package/dist/telemetry/performance/PerformanceClient.d.ts.map +1 -1
  154. package/dist/telemetry/performance/PerformanceClient.mjs +3 -2
  155. package/dist/telemetry/performance/PerformanceClient.mjs.map +1 -1
  156. package/dist/telemetry/performance/PerformanceEvent.d.ts +8 -0
  157. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  158. package/dist/telemetry/performance/PerformanceEvent.mjs +9 -1
  159. package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
  160. package/dist/telemetry/performance/StubPerformanceClient.mjs +1 -1
  161. package/dist/telemetry/server/ServerTelemetryManager.d.ts.map +1 -1
  162. package/dist/telemetry/server/ServerTelemetryManager.mjs +2 -2
  163. package/dist/telemetry/server/ServerTelemetryManager.mjs.map +1 -1
  164. package/dist/url/UrlString.d.ts.map +1 -1
  165. package/dist/url/UrlString.mjs +13 -11
  166. package/dist/url/UrlString.mjs.map +1 -1
  167. package/dist/utils/Constants.d.ts +6 -3
  168. package/dist/utils/Constants.d.ts.map +1 -1
  169. package/dist/utils/Constants.mjs +12 -4
  170. package/dist/utils/Constants.mjs.map +1 -1
  171. package/dist/utils/FunctionWrappers.d.ts.map +1 -1
  172. package/dist/utils/FunctionWrappers.mjs +1 -2
  173. package/dist/utils/FunctionWrappers.mjs.map +1 -1
  174. package/dist/utils/ProtocolUtils.d.ts.map +1 -1
  175. package/dist/utils/ProtocolUtils.mjs +7 -6
  176. package/dist/utils/ProtocolUtils.mjs.map +1 -1
  177. package/dist/utils/StringUtils.mjs +1 -1
  178. package/dist/utils/TimeUtils.mjs +1 -1
  179. package/package.json +1 -1
  180. package/src/account/AccountInfo.ts +0 -1
  181. package/src/account/AuthToken.ts +8 -7
  182. package/src/account/ClientInfo.ts +9 -6
  183. package/src/authority/Authority.ts +76 -94
  184. package/src/authority/AuthorityFactory.ts +21 -9
  185. package/src/authority/RegionDiscovery.ts +21 -18
  186. package/src/cache/CacheManager.ts +133 -95
  187. package/src/cache/entities/AccessTokenEntity.ts +7 -2
  188. package/src/cache/entities/AccountEntity.ts +7 -2
  189. package/src/cache/entities/CredentialEntity.ts +7 -2
  190. package/src/cache/utils/CacheTypes.ts +6 -6
  191. package/src/client/AuthorizationCodeClient.ts +35 -11
  192. package/src/client/BaseClient.ts +7 -4
  193. package/src/client/RefreshTokenClient.ts +100 -126
  194. package/src/client/SilentFlowClient.ts +72 -19
  195. package/src/config/ClientConfiguration.ts +6 -7
  196. package/src/crypto/ICrypto.ts +12 -34
  197. package/src/crypto/JoseHeader.ts +6 -3
  198. package/src/crypto/PopTokenGenerator.ts +10 -5
  199. package/src/error/AuthError.ts +24 -26
  200. package/src/error/AuthErrorCodes.ts +10 -0
  201. package/src/error/ClientAuthError.ts +227 -632
  202. package/src/error/ClientAuthErrorCodes.ts +51 -0
  203. package/src/error/ClientConfigurationError.ts +146 -332
  204. package/src/error/ClientConfigurationErrorCodes.ts +28 -0
  205. package/src/error/InteractionRequiredAuthError.ts +60 -55
  206. package/src/error/InteractionRequiredAuthErrorCodes.ts +13 -0
  207. package/src/error/JoseHeaderError.ts +11 -31
  208. package/src/error/JoseHeaderErrorCodes.ts +7 -0
  209. package/src/index.ts +13 -1
  210. package/src/network/INetworkModule.ts +10 -7
  211. package/src/network/NetworkManager.ts +5 -5
  212. package/src/packageMetadata.ts +1 -1
  213. package/src/request/AuthenticationHeaderParser.ts +11 -8
  214. package/src/request/CommonRefreshTokenRequest.ts +3 -0
  215. package/src/request/CommonSilentFlowRequest.ts +2 -0
  216. package/src/request/RequestParameterBuilder.ts +10 -3
  217. package/src/request/RequestValidator.ts +19 -6
  218. package/src/request/ScopeSet.ts +23 -7
  219. package/src/response/ResponseHandler.ts +37 -17
  220. package/src/telemetry/performance/PerformanceClient.ts +2 -1
  221. package/src/telemetry/performance/PerformanceEvent.ts +9 -0
  222. package/src/telemetry/server/ServerTelemetryManager.ts +1 -1
  223. package/src/url/UrlString.ts +26 -16
  224. package/src/utils/Constants.ts +11 -3
  225. package/src/utils/FunctionWrappers.ts +0 -1
  226. package/src/utils/ProtocolUtils.ts +8 -12
@@ -4,14 +4,21 @@
4
4
  */
5
5
 
6
6
  import { Authority } from "./Authority";
7
- import { ClientConfigurationError } from "../error/ClientConfigurationError";
7
+ import {
8
+ createClientConfigurationError,
9
+ ClientConfigurationErrorCodes,
10
+ } from "../error/ClientConfigurationError";
8
11
  import { INetworkModule } from "../network/INetworkModule";
9
- import { ClientAuthError } from "../error/ClientAuthError";
12
+ import {
13
+ createClientAuthError,
14
+ ClientAuthErrorCodes,
15
+ } from "../error/ClientAuthError";
10
16
  import { ICacheManager } from "../cache/interface/ICacheManager";
11
17
  import { AuthorityOptions } from "./AuthorityOptions";
12
18
  import { Logger } from "../logger/Logger";
13
19
  import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
14
20
  import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
21
+ import { invokeAsync } from "../utils/FunctionWrappers";
15
22
 
16
23
  /** @internal */
17
24
  export class AuthorityFactory {
@@ -55,16 +62,19 @@ export class AuthorityFactory {
55
62
  );
56
63
 
57
64
  try {
58
- performanceClient?.setPreQueueTime(
65
+ await invokeAsync(
66
+ acquireTokenAuthority.resolveEndpointsAsync.bind(
67
+ acquireTokenAuthority
68
+ ),
59
69
  PerformanceEvents.AuthorityResolveEndpointsAsync,
70
+ logger,
71
+ performanceClient,
60
72
  correlationId
61
- );
62
-
63
- await acquireTokenAuthority.resolveEndpointsAsync();
73
+ )();
64
74
  return acquireTokenAuthority;
65
75
  } catch (e) {
66
- throw ClientAuthError.createEndpointDiscoveryIncompleteError(
67
- e as string
76
+ throw createClientAuthError(
77
+ ClientAuthErrorCodes.endpointResolutionError
68
78
  );
69
79
  }
70
80
  }
@@ -90,7 +100,9 @@ export class AuthorityFactory {
90
100
  ): Authority {
91
101
  // Throw error if authority url is empty
92
102
  if (!authorityUrl) {
93
- throw ClientConfigurationError.createUrlEmptyError();
103
+ throw createClientConfigurationError(
104
+ ClientConfigurationErrorCodes.urlEmptyError
105
+ );
94
106
  }
95
107
 
96
108
  return new Authority(
@@ -15,10 +15,14 @@ import { RegionDiscoveryMetadata } from "./RegionDiscoveryMetadata";
15
15
  import { ImdsOptions } from "./ImdsOptions";
16
16
  import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
17
17
  import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
18
+ import { invokeAsync } from "../utils/FunctionWrappers";
19
+ import { Logger } from "../logger/Logger";
18
20
 
19
21
  export class RegionDiscovery {
20
22
  // Network interface to make requests with.
21
23
  protected networkInterface: INetworkModule;
24
+ // Logger
25
+ private logger: Logger;
22
26
  // Performance client
23
27
  protected performanceClient: IPerformanceClient | undefined;
24
28
  // CorrelationId
@@ -32,10 +36,12 @@ export class RegionDiscovery {
32
36
 
33
37
  constructor(
34
38
  networkInterface: INetworkModule,
39
+ logger: Logger,
35
40
  performanceClient?: IPerformanceClient,
36
41
  correlationId?: string
37
42
  ) {
38
43
  this.networkInterface = networkInterface;
44
+ this.logger = logger;
39
45
  this.performanceClient = performanceClient;
40
46
  this.correlationId = correlationId;
41
47
  }
@@ -62,14 +68,13 @@ export class RegionDiscovery {
62
68
  const options = RegionDiscovery.IMDS_OPTIONS;
63
69
 
64
70
  try {
65
- this.performanceClient?.setPreQueueTime(
71
+ const localIMDSVersionResponse = await invokeAsync(
72
+ this.getRegionFromIMDS.bind(this),
66
73
  PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,
74
+ this.logger,
75
+ this.performanceClient,
67
76
  this.correlationId
68
- );
69
- const localIMDSVersionResponse = await this.getRegionFromIMDS(
70
- Constants.IMDS_VERSION,
71
- options
72
- );
77
+ )(Constants.IMDS_VERSION, options);
73
78
  if (
74
79
  localIMDSVersionResponse.status ===
75
80
  ResponseCodes.httpSuccess
@@ -84,28 +89,26 @@ export class RegionDiscovery {
84
89
  localIMDSVersionResponse.status ===
85
90
  ResponseCodes.httpBadRequest
86
91
  ) {
87
- this.performanceClient?.setPreQueueTime(
92
+ const currentIMDSVersion = await invokeAsync(
93
+ this.getCurrentVersion.bind(this),
88
94
  PerformanceEvents.RegionDiscoveryGetCurrentVersion,
95
+ this.logger,
96
+ this.performanceClient,
89
97
  this.correlationId
90
- );
91
- const currentIMDSVersion = await this.getCurrentVersion(
92
- options
93
- );
98
+ )(options);
94
99
  if (!currentIMDSVersion) {
95
100
  regionDiscoveryMetadata.region_source =
96
101
  RegionDiscoverySources.FAILED_AUTO_DETECTION;
97
102
  return null;
98
103
  }
99
104
 
100
- this.performanceClient?.setPreQueueTime(
105
+ const currentIMDSVersionResponse = await invokeAsync(
106
+ this.getRegionFromIMDS.bind(this),
101
107
  PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,
108
+ this.logger,
109
+ this.performanceClient,
102
110
  this.correlationId
103
- );
104
- const currentIMDSVersionResponse =
105
- await this.getRegionFromIMDS(
106
- currentIMDSVersion,
107
- options
108
- );
111
+ )(currentIMDSVersion, options);
109
112
  if (
110
113
  currentIMDSVersionResponse.status ===
111
114
  ResponseCodes.httpSuccess
@@ -26,9 +26,11 @@ import { AccountEntity } from "./entities/AccountEntity";
26
26
  import { AccessTokenEntity } from "./entities/AccessTokenEntity";
27
27
  import { IdTokenEntity } from "./entities/IdTokenEntity";
28
28
  import { RefreshTokenEntity } from "./entities/RefreshTokenEntity";
29
- import { AuthError } from "../error/AuthError";
30
29
  import { ICacheManager } from "./interface/ICacheManager";
31
- import { ClientAuthError } from "../error/ClientAuthError";
30
+ import {
31
+ createClientAuthError,
32
+ ClientAuthErrorCodes,
33
+ } from "../error/ClientAuthError";
32
34
  import { AccountInfo } from "../account/AccountInfo";
33
35
  import { AppMetadataEntity } from "./entities/AppMetadataEntity";
34
36
  import { ServerTelemetryEntity } from "./entities/ServerTelemetryEntity";
@@ -219,9 +221,19 @@ export abstract class CacheManager implements ICacheManager {
219
221
  ): string;
220
222
 
221
223
  /**
222
- * Returns all accounts in cache
224
+ * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.
225
+ * @param accountFilter - (Optional) filter to narrow down the accounts returned
226
+ * @returns Array of AccountInfo objects in cache
223
227
  */
224
- getAllAccounts(): AccountInfo[] {
228
+ getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {
229
+ if (accountFilter) {
230
+ return this.getAccountsFilteredBy(accountFilter).map(
231
+ (accountEntity) => {
232
+ return accountEntity.getAccountInfo();
233
+ }
234
+ );
235
+ }
236
+
225
237
  const allAccountKeys = this.getAccountKeys();
226
238
  if (allAccountKeys.length < 1) {
227
239
  return [];
@@ -240,16 +252,12 @@ export abstract class CacheManager implements ICacheManager {
240
252
  []
241
253
  );
242
254
 
243
- if (accountEntities.length < 1) {
244
- return [];
245
- } else {
246
- const allAccounts = accountEntities.map<AccountInfo>(
247
- (accountEntity) => {
248
- return this.getAccountInfoFromEntity(accountEntity);
249
- }
250
- );
251
- return allAccounts;
252
- }
255
+ const allAccounts = accountEntities.map<AccountInfo>(
256
+ (accountEntity) => {
257
+ return this.getAccountInfoFromEntity(accountEntity);
258
+ }
259
+ );
260
+ return allAccounts;
253
261
  }
254
262
 
255
263
  /**
@@ -288,7 +296,9 @@ export abstract class CacheManager implements ICacheManager {
288
296
  storeInCache?: StoreInCache
289
297
  ): Promise<void> {
290
298
  if (!cacheRecord) {
291
- throw ClientAuthError.createNullOrUndefinedCacheRecord();
299
+ throw createClientAuthError(
300
+ ClientAuthErrorCodes.invalidCacheRecord
301
+ );
292
302
  }
293
303
 
294
304
  if (!!cacheRecord.account) {
@@ -360,11 +370,9 @@ export abstract class CacheManager implements ICacheManager {
360
370
  }
361
371
 
362
372
  /**
363
- * retrieve accounts matching all provided filters; if no filter is set, get all accounts
364
- * not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared
365
- * @param homeAccountId
366
- * @param environment
367
- * @param realm
373
+ * Retrieve accounts matching all provided filters; if no filter is set, get all accounts
374
+ * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared
375
+ * @param accountFilter - An object containing Account properties to filter by
368
376
  */
369
377
  getAccountsFilteredBy(accountFilter: AccountFilter): AccountEntity[] {
370
378
  const allAccountKeys = this.getAccountKeys();
@@ -375,7 +383,7 @@ export abstract class CacheManager implements ICacheManager {
375
383
  !this.isAccountKey(
376
384
  cacheKey,
377
385
  accountFilter.homeAccountId,
378
- accountFilter.realm
386
+ accountFilter.tenantId
379
387
  )
380
388
  ) {
381
389
  // Don't parse value if the key doesn't match the account filters
@@ -423,6 +431,14 @@ export abstract class CacheManager implements ICacheManager {
423
431
  return;
424
432
  }
425
433
 
434
+ // tenantId is another name for realm
435
+ if (
436
+ !!accountFilter.tenantId &&
437
+ !this.matchRealm(entity, accountFilter.tenantId)
438
+ ) {
439
+ return;
440
+ }
441
+
426
442
  if (
427
443
  !!accountFilter.nativeAccountId &&
428
444
  !this.matchNativeAccountId(
@@ -433,6 +449,27 @@ export abstract class CacheManager implements ICacheManager {
433
449
  return;
434
450
  }
435
451
 
452
+ if (
453
+ !!accountFilter.loginHint &&
454
+ !this.matchLoginHint(entity, accountFilter.loginHint)
455
+ ) {
456
+ return;
457
+ }
458
+
459
+ if (
460
+ !!accountFilter.authorityType &&
461
+ !this.matchAuthorityType(entity, accountFilter.authorityType)
462
+ ) {
463
+ return;
464
+ }
465
+
466
+ if (
467
+ !!accountFilter.name &&
468
+ !this.matchName(entity, accountFilter.name)
469
+ ) {
470
+ return;
471
+ }
472
+
436
473
  matchingAccounts.push(entity);
437
474
  });
438
475
 
@@ -777,7 +814,9 @@ export abstract class CacheManager implements ICacheManager {
777
814
  try {
778
815
  await this.cryptoImpl.removeTokenBindingKey(kid);
779
816
  } catch (error) {
780
- throw ClientAuthError.createBindingKeyNotRemovedError();
817
+ throw createClientAuthError(
818
+ ClientAuthErrorCodes.bindingKeyNotRemoved
819
+ );
781
820
  }
782
821
  }
783
822
  }
@@ -1256,7 +1295,9 @@ export abstract class CacheManager implements ICacheManager {
1256
1295
  if (numAppMetadata < 1) {
1257
1296
  return null;
1258
1297
  } else if (numAppMetadata > 1) {
1259
- throw ClientAuthError.createMultipleMatchingAppMetadataInCacheError();
1298
+ throw createClientAuthError(
1299
+ ClientAuthErrorCodes.multipleMatchingAppMetadata
1300
+ );
1260
1301
  }
1261
1302
 
1262
1303
  return appMetadataEntries[0] as AppMetadataEntity;
@@ -1316,6 +1357,16 @@ export abstract class CacheManager implements ICacheManager {
1316
1357
  );
1317
1358
  }
1318
1359
 
1360
+ /**
1361
+ * helper to match names
1362
+ * @param entity
1363
+ * @param name
1364
+ * @returns true if the downcased name properties are present and match in the filter and the entity
1365
+ */
1366
+ private matchName(entity: AccountEntity, name: string): boolean {
1367
+ return !!(name.toLowerCase() === entity.name?.toLowerCase());
1368
+ }
1369
+
1319
1370
  /**
1320
1371
  * helper to match assertion
1321
1372
  * @param value
@@ -1417,6 +1468,41 @@ export abstract class CacheManager implements ICacheManager {
1417
1468
  );
1418
1469
  }
1419
1470
 
1471
+ /**
1472
+ * helper to match loginHint which can be either:
1473
+ * 1. login_hint ID token claim
1474
+ * 2. username in cached account object
1475
+ * 3. upn in ID token claims
1476
+ * @param entity
1477
+ * @param loginHint
1478
+ * @returns
1479
+ */
1480
+ private matchLoginHint(entity: AccountEntity, loginHint: string): boolean {
1481
+ if (entity.idTokenClaims?.login_hint === loginHint) {
1482
+ return true;
1483
+ }
1484
+
1485
+ if (entity.username === loginHint) {
1486
+ return true;
1487
+ }
1488
+
1489
+ if (entity.idTokenClaims?.upn === loginHint) {
1490
+ return true;
1491
+ }
1492
+
1493
+ return false;
1494
+ }
1495
+
1496
+ private matchAuthorityType(
1497
+ entity: AccountEntity,
1498
+ authorityType: string
1499
+ ): boolean {
1500
+ return !!(
1501
+ entity.authorityType &&
1502
+ authorityType.toLowerCase() === entity.authorityType.toLowerCase()
1503
+ );
1504
+ }
1505
+
1420
1506
  /**
1421
1507
  * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.
1422
1508
  * @param entity
@@ -1497,123 +1583,75 @@ export abstract class CacheManager implements ICacheManager {
1497
1583
  /** @internal */
1498
1584
  export class DefaultStorageClass extends CacheManager {
1499
1585
  setAccount(): void {
1500
- const notImplErr =
1501
- "Storage interface - setAccount() has not been implemented for the cacheStorage interface.";
1502
- throw AuthError.createUnexpectedError(notImplErr);
1586
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1503
1587
  }
1504
1588
  getAccount(): AccountEntity {
1505
- const notImplErr =
1506
- "Storage interface - getAccount() has not been implemented for the cacheStorage interface.";
1507
- throw AuthError.createUnexpectedError(notImplErr);
1589
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1508
1590
  }
1509
1591
  setIdTokenCredential(): void {
1510
- const notImplErr =
1511
- "Storage interface - setIdTokenCredential() has not been implemented for the cacheStorage interface.";
1512
- throw AuthError.createUnexpectedError(notImplErr);
1592
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1513
1593
  }
1514
1594
  getIdTokenCredential(): IdTokenEntity {
1515
- const notImplErr =
1516
- "Storage interface - getIdTokenCredential() has not been implemented for the cacheStorage interface.";
1517
- throw AuthError.createUnexpectedError(notImplErr);
1595
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1518
1596
  }
1519
1597
  setAccessTokenCredential(): void {
1520
- const notImplErr =
1521
- "Storage interface - setAccessTokenCredential() has not been implemented for the cacheStorage interface.";
1522
- throw AuthError.createUnexpectedError(notImplErr);
1598
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1523
1599
  }
1524
1600
  getAccessTokenCredential(): AccessTokenEntity {
1525
- const notImplErr =
1526
- "Storage interface - getAccessTokenCredential() has not been implemented for the cacheStorage interface.";
1527
- throw AuthError.createUnexpectedError(notImplErr);
1601
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1528
1602
  }
1529
1603
  setRefreshTokenCredential(): void {
1530
- const notImplErr =
1531
- "Storage interface - setRefreshTokenCredential() has not been implemented for the cacheStorage interface.";
1532
- throw AuthError.createUnexpectedError(notImplErr);
1604
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1533
1605
  }
1534
1606
  getRefreshTokenCredential(): RefreshTokenEntity {
1535
- const notImplErr =
1536
- "Storage interface - getRefreshTokenCredential() has not been implemented for the cacheStorage interface.";
1537
- throw AuthError.createUnexpectedError(notImplErr);
1607
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1538
1608
  }
1539
1609
  setAppMetadata(): void {
1540
- const notImplErr =
1541
- "Storage interface - setAppMetadata() has not been implemented for the cacheStorage interface.";
1542
- throw AuthError.createUnexpectedError(notImplErr);
1610
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1543
1611
  }
1544
1612
  getAppMetadata(): AppMetadataEntity {
1545
- const notImplErr =
1546
- "Storage interface - getAppMetadata() has not been implemented for the cacheStorage interface.";
1547
- throw AuthError.createUnexpectedError(notImplErr);
1613
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1548
1614
  }
1549
1615
  setServerTelemetry(): void {
1550
- const notImplErr =
1551
- "Storage interface - setServerTelemetry() has not been implemented for the cacheStorage interface.";
1552
- throw AuthError.createUnexpectedError(notImplErr);
1616
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1553
1617
  }
1554
1618
  getServerTelemetry(): ServerTelemetryEntity {
1555
- const notImplErr =
1556
- "Storage interface - getServerTelemetry() has not been implemented for the cacheStorage interface.";
1557
- throw AuthError.createUnexpectedError(notImplErr);
1619
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1558
1620
  }
1559
1621
  setAuthorityMetadata(): void {
1560
- const notImplErr =
1561
- "Storage interface - setAuthorityMetadata() has not been implemented for the cacheStorage interface.";
1562
- throw AuthError.createUnexpectedError(notImplErr);
1622
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1563
1623
  }
1564
1624
  getAuthorityMetadata(): AuthorityMetadataEntity | null {
1565
- const notImplErr =
1566
- "Storage interface - getAuthorityMetadata() has not been implemented for the cacheStorage interface.";
1567
- throw AuthError.createUnexpectedError(notImplErr);
1625
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1568
1626
  }
1569
1627
  getAuthorityMetadataKeys(): Array<string> {
1570
- const notImplErr =
1571
- "Storage interface - getAuthorityMetadataKeys() has not been implemented for the cacheStorage interface.";
1572
- throw AuthError.createUnexpectedError(notImplErr);
1628
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1573
1629
  }
1574
1630
  setThrottlingCache(): void {
1575
- const notImplErr =
1576
- "Storage interface - setThrottlingCache() has not been implemented for the cacheStorage interface.";
1577
- throw AuthError.createUnexpectedError(notImplErr);
1631
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1578
1632
  }
1579
1633
  getThrottlingCache(): ThrottlingEntity {
1580
- const notImplErr =
1581
- "Storage interface - getThrottlingCache() has not been implemented for the cacheStorage interface.";
1582
- throw AuthError.createUnexpectedError(notImplErr);
1634
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1583
1635
  }
1584
1636
  removeItem(): boolean {
1585
- const notImplErr =
1586
- "Storage interface - removeItem() has not been implemented for the cacheStorage interface.";
1587
- throw AuthError.createUnexpectedError(notImplErr);
1637
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1588
1638
  }
1589
1639
  containsKey(): boolean {
1590
- const notImplErr =
1591
- "Storage interface - containsKey() has not been implemented for the cacheStorage interface.";
1592
- throw AuthError.createUnexpectedError(notImplErr);
1640
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1593
1641
  }
1594
1642
  getKeys(): string[] {
1595
- const notImplErr =
1596
- "Storage interface - getKeys() has not been implemented for the cacheStorage interface.";
1597
- throw AuthError.createUnexpectedError(notImplErr);
1643
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1598
1644
  }
1599
1645
  getAccountKeys(): string[] {
1600
- const notImplErr =
1601
- "Storage interface - getAccountKeys() has not been implemented for the cacheStorage interface.";
1602
- throw AuthError.createUnexpectedError(notImplErr);
1646
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1603
1647
  }
1604
1648
  getTokenKeys(): TokenKeys {
1605
- const notImplErr =
1606
- "Storage interface - getTokenKeys() has not been implemented for the cacheStorage interface.";
1607
- throw AuthError.createUnexpectedError(notImplErr);
1649
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1608
1650
  }
1609
1651
  async clear(): Promise<void> {
1610
- const notImplErr =
1611
- "Storage interface - clear() has not been implemented for the cacheStorage interface.";
1612
- throw AuthError.createUnexpectedError(notImplErr);
1652
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1613
1653
  }
1614
1654
  updateCredentialCacheKey(): string {
1615
- const notImplErr =
1616
- "Storage interface - updateCredentialCacheKey() has not been implemented for the cacheStorage interface.";
1617
- throw AuthError.createUnexpectedError(notImplErr);
1655
+ throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
1618
1656
  }
1619
1657
  }
@@ -8,7 +8,10 @@ import { CredentialType, AuthenticationScheme } from "../../utils/Constants";
8
8
  import { TimeUtils } from "../../utils/TimeUtils";
9
9
  import { ICrypto } from "../../crypto/ICrypto";
10
10
  import { TokenClaims } from "../../account/TokenClaims";
11
- import { ClientAuthError } from "../../error/ClientAuthError";
11
+ import {
12
+ createClientAuthError,
13
+ ClientAuthErrorCodes,
14
+ } from "../../error/ClientAuthError";
12
15
  import { extractTokenClaims } from "../../account/AuthToken";
13
16
 
14
17
  /**
@@ -125,7 +128,9 @@ export class AccessTokenEntity extends CredentialEntity {
125
128
  cryptoUtils.base64Decode
126
129
  );
127
130
  if (!tokenClaims?.cnf?.kid) {
128
- throw ClientAuthError.createTokenClaimsRequiredError();
131
+ throw createClientAuthError(
132
+ ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt
133
+ );
129
134
  }
130
135
  atEntity.keyId = tokenClaims.cnf.kid;
131
136
  break;
@@ -8,7 +8,10 @@ import { Authority } from "../../authority/Authority";
8
8
  import { ICrypto } from "../../crypto/ICrypto";
9
9
  import { buildClientInfo } from "../../account/ClientInfo";
10
10
  import { AccountInfo } from "../../account/AccountInfo";
11
- import { ClientAuthError } from "../../error/ClientAuthError";
11
+ import {
12
+ createClientAuthError,
13
+ ClientAuthErrorCodes,
14
+ } from "../../error/ClientAuthError";
12
15
  import { AuthorityType } from "../../authority/AuthorityType";
13
16
  import { Logger } from "../../logger/Logger";
14
17
  import { TokenClaims } from "../../account/TokenClaims";
@@ -140,7 +143,9 @@ export class AccountEntity {
140
143
  (authority && authority.getPreferredCache());
141
144
 
142
145
  if (!env) {
143
- throw ClientAuthError.createInvalidCacheEnvironmentError();
146
+ throw createClientAuthError(
147
+ ClientAuthErrorCodes.invalidCacheEnvironment
148
+ );
144
149
  }
145
150
 
146
151
  account.environment = env;
@@ -10,7 +10,10 @@ import {
10
10
  Constants,
11
11
  AuthenticationScheme,
12
12
  } from "../../utils/Constants";
13
- import { ClientAuthError } from "../../error/ClientAuthError";
13
+ import {
14
+ ClientAuthErrorCodes,
15
+ createClientAuthError,
16
+ } from "../../error/ClientAuthError";
14
17
 
15
18
  /**
16
19
  * Base type for credentials to be stored in the cache: eg: ACCESS_TOKEN, ID_TOKEN etc
@@ -107,7 +110,9 @@ export class CredentialEntity {
107
110
  case CredentialType.REFRESH_TOKEN:
108
111
  return CacheType.REFRESH_TOKEN;
109
112
  default: {
110
- throw ClientAuthError.createUnexpectedCredentialTypeError();
113
+ throw createClientAuthError(
114
+ ClientAuthErrorCodes.unexpectedCredentialType
115
+ );
111
116
  }
112
117
  }
113
118
  }
@@ -13,6 +13,7 @@ import { ThrottlingEntity } from "../entities/ThrottlingEntity";
13
13
  import { AuthorityMetadataEntity } from "../entities/AuthorityMetadataEntity";
14
14
  import { AuthenticationScheme } from "../../utils/Constants";
15
15
  import { ScopeSet } from "../../request/ScopeSet";
16
+ import { AccountInfo } from "../../account/AccountInfo";
16
17
 
17
18
  /** @internal */
18
19
  export type AccountCache = Record<string, AccountEntity>;
@@ -52,13 +53,12 @@ export type ValidCredentialType =
52
53
  /**
53
54
  * Account: <home_account_id>-<environment>-<realm*>
54
55
  */
55
- export type AccountFilter = {
56
- homeAccountId?: string;
57
- localAccountId?: string;
58
- username?: string;
59
- environment?: string;
56
+ export type AccountFilter = Omit<
57
+ Partial<AccountInfo>,
58
+ "idToken" | "idTokenClaims"
59
+ > & {
60
60
  realm?: string;
61
- nativeAccountId?: string;
61
+ loginHint?: string;
62
62
  };
63
63
 
64
64
  /**