@azure/msal-common 14.1.0-alpha.0 → 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 (205) hide show
  1. package/dist/account/AccountInfo.d.ts +31 -32
  2. package/dist/account/AccountInfo.d.ts.map +1 -1
  3. package/dist/account/AuthToken.d.ts +17 -17
  4. package/dist/account/AuthToken.mjs +58 -58
  5. package/dist/account/CcsCredential.d.ts +9 -9
  6. package/dist/account/CcsCredential.mjs +8 -8
  7. package/dist/account/ClientCredentials.d.ts +14 -14
  8. package/dist/account/ClientInfo.d.ts +19 -19
  9. package/dist/account/ClientInfo.mjs +37 -37
  10. package/dist/account/TokenClaims.d.ts +65 -65
  11. package/dist/authority/Authority.d.ts +235 -235
  12. package/dist/authority/Authority.mjs +738 -738
  13. package/dist/authority/AuthorityFactory.d.ts +31 -31
  14. package/dist/authority/AuthorityFactory.mjs +47 -47
  15. package/dist/authority/AuthorityMetadata.d.ts +623 -623
  16. package/dist/authority/AuthorityMetadata.mjs +884 -884
  17. package/dist/authority/AuthorityOptions.d.ts +21 -21
  18. package/dist/authority/AuthorityOptions.mjs +18 -18
  19. package/dist/authority/AuthorityType.d.ts +10 -10
  20. package/dist/authority/AuthorityType.mjs +13 -13
  21. package/dist/authority/AzureRegion.d.ts +1 -1
  22. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  23. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  24. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  25. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
  26. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  27. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
  28. package/dist/authority/ImdsOptions.d.ts +5 -5
  29. package/dist/authority/OIDCOptions.d.ts +8 -8
  30. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  31. package/dist/authority/OpenIdConfigResponse.mjs +10 -10
  32. package/dist/authority/ProtocolMode.d.ts +8 -8
  33. package/dist/authority/ProtocolMode.mjs +11 -11
  34. package/dist/authority/RegionDiscovery.d.ts +32 -32
  35. package/dist/authority/RegionDiscovery.mjs +106 -106
  36. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  37. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  38. package/dist/cache/CacheManager.d.ts +464 -446
  39. package/dist/cache/CacheManager.d.ts.map +1 -1
  40. package/dist/cache/CacheManager.mjs +1049 -998
  41. package/dist/cache/CacheManager.mjs.map +1 -1
  42. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  43. package/dist/cache/entities/AccessTokenEntity.mjs +109 -109
  44. package/dist/cache/entities/AccountEntity.d.ts +101 -101
  45. package/dist/cache/entities/AccountEntity.mjs +220 -220
  46. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  47. package/dist/cache/entities/AppMetadataEntity.mjs +66 -66
  48. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +48 -48
  49. package/dist/cache/entities/AuthorityMetadataEntity.mjs +78 -78
  50. package/dist/cache/entities/CacheRecord.d.ts +14 -14
  51. package/dist/cache/entities/CacheRecord.mjs +14 -14
  52. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  53. package/dist/cache/entities/CredentialEntity.mjs +136 -136
  54. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  55. package/dist/cache/entities/IdTokenEntity.mjs +56 -56
  56. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  57. package/dist/cache/entities/RefreshTokenEntity.mjs +59 -59
  58. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  59. package/dist/cache/entities/ServerTelemetryEntity.mjs +27 -27
  60. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  61. package/dist/cache/entities/ThrottlingEntity.mjs +23 -23
  62. package/dist/cache/interface/ICacheManager.d.ts +166 -166
  63. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  64. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  65. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  66. package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
  67. package/dist/cache/utils/CacheTypes.d.ts +66 -69
  68. package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
  69. package/dist/client/AuthorizationCodeClient.d.ts +73 -73
  70. package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
  71. package/dist/client/AuthorizationCodeClient.mjs +408 -407
  72. package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
  73. package/dist/client/BaseClient.d.ts +51 -51
  74. package/dist/client/BaseClient.mjs +98 -98
  75. package/dist/client/RefreshTokenClient.d.ts +35 -35
  76. package/dist/client/RefreshTokenClient.d.ts.map +1 -1
  77. package/dist/client/RefreshTokenClient.mjs +187 -179
  78. package/dist/client/RefreshTokenClient.mjs.map +1 -1
  79. package/dist/client/SilentFlowClient.d.ts +26 -26
  80. package/dist/client/SilentFlowClient.mjs +123 -123
  81. package/dist/config/AppTokenProvider.d.ts +38 -38
  82. package/dist/config/ClientConfiguration.d.ts +150 -150
  83. package/dist/config/ClientConfiguration.mjs +97 -97
  84. package/dist/crypto/ICrypto.d.ts +58 -62
  85. package/dist/crypto/ICrypto.d.ts.map +1 -1
  86. package/dist/crypto/ICrypto.mjs +30 -33
  87. package/dist/crypto/ICrypto.mjs.map +1 -1
  88. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  89. package/dist/crypto/JoseHeader.d.ts +22 -22
  90. package/dist/crypto/JoseHeader.mjs +37 -37
  91. package/dist/crypto/PopTokenGenerator.d.ts +60 -60
  92. package/dist/crypto/PopTokenGenerator.mjs +82 -82
  93. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  94. package/dist/error/AuthError.d.ts +44 -44
  95. package/dist/error/AuthError.mjs +46 -46
  96. package/dist/error/AuthErrorCodes.d.ts +5 -5
  97. package/dist/error/AuthErrorCodes.mjs +9 -9
  98. package/dist/error/ClientAuthError.d.ts +232 -232
  99. package/dist/error/ClientAuthError.mjs +244 -244
  100. package/dist/error/ClientAuthErrorCodes.d.ts +43 -43
  101. package/dist/error/ClientAuthErrorCodes.mjs +47 -47
  102. package/dist/error/ClientConfigurationError.d.ts +128 -128
  103. package/dist/error/ClientConfigurationError.mjs +135 -135
  104. package/dist/error/ClientConfigurationErrorCodes.d.ts +22 -22
  105. package/dist/error/ClientConfigurationErrorCodes.mjs +26 -26
  106. package/dist/error/InteractionRequiredAuthError.d.ts +57 -57
  107. package/dist/error/InteractionRequiredAuthError.mjs +76 -76
  108. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +5 -5
  109. package/dist/error/InteractionRequiredAuthErrorCodes.mjs +11 -11
  110. package/dist/error/JoseHeaderError.d.ts +15 -15
  111. package/dist/error/JoseHeaderError.mjs +22 -22
  112. package/dist/error/JoseHeaderErrorCodes.d.ts +2 -2
  113. package/dist/error/JoseHeaderErrorCodes.mjs +6 -6
  114. package/dist/error/ServerError.d.ts +7 -7
  115. package/dist/error/ServerError.mjs +14 -14
  116. package/dist/index.cjs +8672 -8608
  117. package/dist/index.cjs.map +1 -1
  118. package/dist/index.d.ts +96 -96
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.mjs +1 -1
  121. package/dist/logger/Logger.d.ts +95 -95
  122. package/dist/logger/Logger.mjs +188 -188
  123. package/dist/network/INetworkModule.d.ts +29 -29
  124. package/dist/network/INetworkModule.mjs +12 -12
  125. package/dist/network/NetworkManager.d.ts +33 -33
  126. package/dist/network/NetworkManager.mjs +34 -34
  127. package/dist/network/RequestThumbprint.d.ts +16 -16
  128. package/dist/network/ThrottlingUtils.d.ts +42 -42
  129. package/dist/network/ThrottlingUtils.mjs +95 -95
  130. package/dist/packageMetadata.d.ts +2 -2
  131. package/dist/packageMetadata.mjs +4 -4
  132. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  133. package/dist/request/AuthenticationHeaderParser.mjs +55 -55
  134. package/dist/request/BaseAuthRequest.d.ts +40 -40
  135. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  136. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  137. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  138. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  139. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  140. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  141. package/dist/request/CommonRefreshTokenRequest.d.ts +22 -19
  142. package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
  143. package/dist/request/CommonSilentFlowRequest.d.ts +20 -18
  144. package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
  145. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  146. package/dist/request/NativeRequest.d.ts +19 -19
  147. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  148. package/dist/request/RequestParameterBuilder.d.ts +217 -217
  149. package/dist/request/RequestParameterBuilder.mjs +381 -381
  150. package/dist/request/RequestValidator.d.ts +33 -33
  151. package/dist/request/RequestValidator.mjs +81 -81
  152. package/dist/request/ScopeSet.d.ts +88 -88
  153. package/dist/request/ScopeSet.mjs +197 -197
  154. package/dist/request/StoreInCache.d.ts +8 -8
  155. package/dist/response/AuthenticationResult.d.ts +41 -41
  156. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  157. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  158. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  159. package/dist/response/IMDSBadResponse.d.ts +4 -4
  160. package/dist/response/ResponseHandler.d.ts +67 -67
  161. package/dist/response/ResponseHandler.mjs +311 -311
  162. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  163. package/dist/response/ServerAuthorizationTokenResponse.d.ts +46 -46
  164. package/dist/telemetry/performance/IPerformanceClient.d.ts +51 -51
  165. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  166. package/dist/telemetry/performance/PerformanceClient.d.ts +191 -191
  167. package/dist/telemetry/performance/PerformanceClient.mjs +409 -409
  168. package/dist/telemetry/performance/PerformanceEvent.d.ts +441 -433
  169. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  170. package/dist/telemetry/performance/PerformanceEvent.mjs +242 -234
  171. package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
  172. package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
  173. package/dist/telemetry/performance/StubPerformanceClient.mjs +76 -76
  174. package/dist/telemetry/server/ServerTelemetryManager.d.ts +66 -66
  175. package/dist/telemetry/server/ServerTelemetryManager.mjs +197 -197
  176. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  177. package/dist/url/IUri.d.ts +12 -12
  178. package/dist/url/UrlString.d.ts +83 -83
  179. package/dist/url/UrlString.mjs +279 -279
  180. package/dist/utils/Constants.d.ts +366 -366
  181. package/dist/utils/Constants.mjs +376 -376
  182. package/dist/utils/FunctionWrappers.d.ts +27 -27
  183. package/dist/utils/FunctionWrappers.d.ts.map +1 -1
  184. package/dist/utils/FunctionWrappers.mjs +84 -85
  185. package/dist/utils/FunctionWrappers.mjs.map +1 -1
  186. package/dist/utils/MsalTypes.d.ts +6 -6
  187. package/dist/utils/ProtocolUtils.d.ts +42 -42
  188. package/dist/utils/ProtocolUtils.mjs +69 -69
  189. package/dist/utils/StringUtils.d.ts +40 -40
  190. package/dist/utils/StringUtils.mjs +95 -95
  191. package/dist/utils/TimeUtils.d.ts +27 -27
  192. package/dist/utils/TimeUtils.mjs +45 -45
  193. package/package.json +1 -1
  194. package/src/account/AccountInfo.ts +0 -1
  195. package/src/cache/CacheManager.ts +96 -18
  196. package/src/cache/utils/CacheTypes.ts +6 -6
  197. package/src/client/AuthorizationCodeClient.ts +3 -1
  198. package/src/client/RefreshTokenClient.ts +19 -2
  199. package/src/crypto/ICrypto.ts +0 -7
  200. package/src/index.ts +1 -0
  201. package/src/packageMetadata.ts +1 -1
  202. package/src/request/CommonRefreshTokenRequest.ts +3 -0
  203. package/src/request/CommonSilentFlowRequest.ts +2 -0
  204. package/src/telemetry/performance/PerformanceEvent.ts +9 -0
  205. package/src/utils/FunctionWrappers.ts +0 -1
@@ -1,99 +1,99 @@
1
- /*! @azure/msal-common v14.1.0-alpha.0 2023-09-20 */
1
+ /*! @azure/msal-common v14.1.0 2023-10-05 */
2
2
  'use strict';
3
- /*
4
- * Copyright (c) Microsoft Corporation. All rights reserved.
5
- * Licensed under the MIT License.
6
- */
7
- /**
8
- * @hidden
9
- */
10
- class StringUtils {
11
- /**
12
- * Check if stringified object is empty
13
- * @param strObj
14
- */
15
- static isEmptyObj(strObj) {
16
- if (strObj) {
17
- try {
18
- const obj = JSON.parse(strObj);
19
- return Object.keys(obj).length === 0;
20
- }
21
- catch (e) { }
22
- }
23
- return true;
24
- }
25
- static startsWith(str, search) {
26
- return str.indexOf(search) === 0;
27
- }
28
- static endsWith(str, search) {
29
- return (str.length >= search.length &&
30
- str.lastIndexOf(search) === str.length - search.length);
31
- }
32
- /**
33
- * Parses string into an object.
34
- *
35
- * @param query
36
- */
37
- static queryStringToObject(query) {
38
- const obj = {};
39
- const params = query.split("&");
40
- const decode = (s) => decodeURIComponent(s.replace(/\+/g, " "));
41
- params.forEach((pair) => {
42
- if (pair.trim()) {
43
- const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character
44
- if (key && value) {
45
- obj[decode(key)] = decode(value);
46
- }
47
- }
48
- });
49
- return obj;
50
- }
51
- /**
52
- * Trims entries in an array.
53
- *
54
- * @param arr
55
- */
56
- static trimArrayEntries(arr) {
57
- return arr.map((entry) => entry.trim());
58
- }
59
- /**
60
- * Removes empty strings from array
61
- * @param arr
62
- */
63
- static removeEmptyStringsFromArray(arr) {
64
- return arr.filter((entry) => {
65
- return !!entry;
66
- });
67
- }
68
- /**
69
- * Attempts to parse a string into JSON
70
- * @param str
71
- */
72
- static jsonParseHelper(str) {
73
- try {
74
- return JSON.parse(str);
75
- }
76
- catch (e) {
77
- return null;
78
- }
79
- }
80
- /**
81
- * Tests if a given string matches a given pattern, with support for wildcards and queries.
82
- * @param pattern Wildcard pattern to string match. Supports "*" for wildcards and "?" for queries
83
- * @param input String to match against
84
- */
85
- static matchPattern(pattern, input) {
86
- /**
87
- * Wildcard support: https://stackoverflow.com/a/3117248/4888559
88
- * Queries: replaces "?" in string with escaped "\?" for regex test
89
- */
90
- // eslint-disable-next-line security/detect-non-literal-regexp
91
- const regex = new RegExp(pattern
92
- .replace(/\\/g, "\\\\")
93
- .replace(/\*/g, "[^ ]*")
94
- .replace(/\?/g, "\\?"));
95
- return regex.test(input);
96
- }
3
+ /*
4
+ * Copyright (c) Microsoft Corporation. All rights reserved.
5
+ * Licensed under the MIT License.
6
+ */
7
+ /**
8
+ * @hidden
9
+ */
10
+ class StringUtils {
11
+ /**
12
+ * Check if stringified object is empty
13
+ * @param strObj
14
+ */
15
+ static isEmptyObj(strObj) {
16
+ if (strObj) {
17
+ try {
18
+ const obj = JSON.parse(strObj);
19
+ return Object.keys(obj).length === 0;
20
+ }
21
+ catch (e) { }
22
+ }
23
+ return true;
24
+ }
25
+ static startsWith(str, search) {
26
+ return str.indexOf(search) === 0;
27
+ }
28
+ static endsWith(str, search) {
29
+ return (str.length >= search.length &&
30
+ str.lastIndexOf(search) === str.length - search.length);
31
+ }
32
+ /**
33
+ * Parses string into an object.
34
+ *
35
+ * @param query
36
+ */
37
+ static queryStringToObject(query) {
38
+ const obj = {};
39
+ const params = query.split("&");
40
+ const decode = (s) => decodeURIComponent(s.replace(/\+/g, " "));
41
+ params.forEach((pair) => {
42
+ if (pair.trim()) {
43
+ const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character
44
+ if (key && value) {
45
+ obj[decode(key)] = decode(value);
46
+ }
47
+ }
48
+ });
49
+ return obj;
50
+ }
51
+ /**
52
+ * Trims entries in an array.
53
+ *
54
+ * @param arr
55
+ */
56
+ static trimArrayEntries(arr) {
57
+ return arr.map((entry) => entry.trim());
58
+ }
59
+ /**
60
+ * Removes empty strings from array
61
+ * @param arr
62
+ */
63
+ static removeEmptyStringsFromArray(arr) {
64
+ return arr.filter((entry) => {
65
+ return !!entry;
66
+ });
67
+ }
68
+ /**
69
+ * Attempts to parse a string into JSON
70
+ * @param str
71
+ */
72
+ static jsonParseHelper(str) {
73
+ try {
74
+ return JSON.parse(str);
75
+ }
76
+ catch (e) {
77
+ return null;
78
+ }
79
+ }
80
+ /**
81
+ * Tests if a given string matches a given pattern, with support for wildcards and queries.
82
+ * @param pattern Wildcard pattern to string match. Supports "*" for wildcards and "?" for queries
83
+ * @param input String to match against
84
+ */
85
+ static matchPattern(pattern, input) {
86
+ /**
87
+ * Wildcard support: https://stackoverflow.com/a/3117248/4888559
88
+ * Queries: replaces "?" in string with escaped "\?" for regex test
89
+ */
90
+ // eslint-disable-next-line security/detect-non-literal-regexp
91
+ const regex = new RegExp(pattern
92
+ .replace(/\\/g, "\\\\")
93
+ .replace(/\*/g, "[^ ]*")
94
+ .replace(/\?/g, "\\?"));
95
+ return regex.test(input);
96
+ }
97
97
  }
98
98
 
99
99
  export { StringUtils };
@@ -1,28 +1,28 @@
1
- /**
2
- * Utility class which exposes functions for managing date and time operations.
3
- */
4
- export declare class TimeUtils {
5
- /**
6
- * return the current time in Unix time (seconds).
7
- */
8
- static nowSeconds(): number;
9
- /**
10
- * check if a token is expired based on given UTC time in seconds.
11
- * @param expiresOn
12
- */
13
- static isTokenExpired(expiresOn: string, offset: number): boolean;
14
- /**
15
- * If the current time is earlier than the time that a token was cached at, we must discard the token
16
- * i.e. The system clock was turned back after acquiring the cached token
17
- * @param cachedAt
18
- * @param offset
19
- */
20
- static wasClockTurnedBack(cachedAt: string): boolean;
21
- /**
22
- * Waits for t number of milliseconds
23
- * @param t number
24
- * @param value T
25
- */
26
- static delay<T>(t: number, value?: T): Promise<T | void>;
27
- }
1
+ /**
2
+ * Utility class which exposes functions for managing date and time operations.
3
+ */
4
+ export declare class TimeUtils {
5
+ /**
6
+ * return the current time in Unix time (seconds).
7
+ */
8
+ static nowSeconds(): number;
9
+ /**
10
+ * check if a token is expired based on given UTC time in seconds.
11
+ * @param expiresOn
12
+ */
13
+ static isTokenExpired(expiresOn: string, offset: number): boolean;
14
+ /**
15
+ * If the current time is earlier than the time that a token was cached at, we must discard the token
16
+ * i.e. The system clock was turned back after acquiring the cached token
17
+ * @param cachedAt
18
+ * @param offset
19
+ */
20
+ static wasClockTurnedBack(cachedAt: string): boolean;
21
+ /**
22
+ * Waits for t number of milliseconds
23
+ * @param t number
24
+ * @param value T
25
+ */
26
+ static delay<T>(t: number, value?: T): Promise<T | void>;
27
+ }
28
28
  //# sourceMappingURL=TimeUtils.d.ts.map
@@ -1,49 +1,49 @@
1
- /*! @azure/msal-common v14.1.0-alpha.0 2023-09-20 */
1
+ /*! @azure/msal-common v14.1.0 2023-10-05 */
2
2
  'use strict';
3
- /*
4
- * Copyright (c) Microsoft Corporation. All rights reserved.
5
- * Licensed under the MIT License.
6
- */
7
- /**
8
- * Utility class which exposes functions for managing date and time operations.
9
- */
10
- class TimeUtils {
11
- /**
12
- * return the current time in Unix time (seconds).
13
- */
14
- static nowSeconds() {
15
- // Date.getTime() returns in milliseconds.
16
- return Math.round(new Date().getTime() / 1000.0);
17
- }
18
- /**
19
- * check if a token is expired based on given UTC time in seconds.
20
- * @param expiresOn
21
- */
22
- static isTokenExpired(expiresOn, offset) {
23
- // check for access token expiry
24
- const expirationSec = Number(expiresOn) || 0;
25
- const offsetCurrentTimeSec = TimeUtils.nowSeconds() + offset;
26
- // If current time + offset is greater than token expiration time, then token is expired.
27
- return offsetCurrentTimeSec > expirationSec;
28
- }
29
- /**
30
- * If the current time is earlier than the time that a token was cached at, we must discard the token
31
- * i.e. The system clock was turned back after acquiring the cached token
32
- * @param cachedAt
33
- * @param offset
34
- */
35
- static wasClockTurnedBack(cachedAt) {
36
- const cachedAtSec = Number(cachedAt);
37
- return cachedAtSec > TimeUtils.nowSeconds();
38
- }
39
- /**
40
- * Waits for t number of milliseconds
41
- * @param t number
42
- * @param value T
43
- */
44
- static delay(t, value) {
45
- return new Promise((resolve) => setTimeout(() => resolve(value), t));
46
- }
3
+ /*
4
+ * Copyright (c) Microsoft Corporation. All rights reserved.
5
+ * Licensed under the MIT License.
6
+ */
7
+ /**
8
+ * Utility class which exposes functions for managing date and time operations.
9
+ */
10
+ class TimeUtils {
11
+ /**
12
+ * return the current time in Unix time (seconds).
13
+ */
14
+ static nowSeconds() {
15
+ // Date.getTime() returns in milliseconds.
16
+ return Math.round(new Date().getTime() / 1000.0);
17
+ }
18
+ /**
19
+ * check if a token is expired based on given UTC time in seconds.
20
+ * @param expiresOn
21
+ */
22
+ static isTokenExpired(expiresOn, offset) {
23
+ // check for access token expiry
24
+ const expirationSec = Number(expiresOn) || 0;
25
+ const offsetCurrentTimeSec = TimeUtils.nowSeconds() + offset;
26
+ // If current time + offset is greater than token expiration time, then token is expired.
27
+ return offsetCurrentTimeSec > expirationSec;
28
+ }
29
+ /**
30
+ * If the current time is earlier than the time that a token was cached at, we must discard the token
31
+ * i.e. The system clock was turned back after acquiring the cached token
32
+ * @param cachedAt
33
+ * @param offset
34
+ */
35
+ static wasClockTurnedBack(cachedAt) {
36
+ const cachedAtSec = Number(cachedAt);
37
+ return cachedAtSec > TimeUtils.nowSeconds();
38
+ }
39
+ /**
40
+ * Waits for t number of milliseconds
41
+ * @param t number
42
+ * @param value T
43
+ */
44
+ static delay(t, value) {
45
+ return new Promise((resolve) => setTimeout(() => resolve(value), t));
46
+ }
47
47
  }
48
48
 
49
49
  export { TimeUtils };
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "type": "git",
11
11
  "url": "https://github.com/AzureAD/microsoft-authentication-library-for-js.git"
12
12
  },
13
- "version": "14.1.0-alpha.0",
13
+ "version": "14.1.0",
14
14
  "description": "Microsoft Authentication Library for js",
15
15
  "keywords": [
16
16
  "implicit",
@@ -14,7 +14,6 @@ import { TokenClaims } from "./TokenClaims";
14
14
  * - name - Full name for the account, including given name and family name
15
15
  * - idToken - raw ID token
16
16
  * - idTokenClaims - Object contains claims from ID token
17
- * - localAccountId - The user's account ID
18
17
  * - nativeAccountId - The user's native account ID
19
18
  */
20
19
  export type AccountInfo = {
@@ -221,9 +221,19 @@ export abstract class CacheManager implements ICacheManager {
221
221
  ): string;
222
222
 
223
223
  /**
224
- * 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
225
227
  */
226
- 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
+
227
237
  const allAccountKeys = this.getAccountKeys();
228
238
  if (allAccountKeys.length < 1) {
229
239
  return [];
@@ -242,16 +252,12 @@ export abstract class CacheManager implements ICacheManager {
242
252
  []
243
253
  );
244
254
 
245
- if (accountEntities.length < 1) {
246
- return [];
247
- } else {
248
- const allAccounts = accountEntities.map<AccountInfo>(
249
- (accountEntity) => {
250
- return this.getAccountInfoFromEntity(accountEntity);
251
- }
252
- );
253
- return allAccounts;
254
- }
255
+ const allAccounts = accountEntities.map<AccountInfo>(
256
+ (accountEntity) => {
257
+ return this.getAccountInfoFromEntity(accountEntity);
258
+ }
259
+ );
260
+ return allAccounts;
255
261
  }
256
262
 
257
263
  /**
@@ -364,11 +370,9 @@ export abstract class CacheManager implements ICacheManager {
364
370
  }
365
371
 
366
372
  /**
367
- * retrieve accounts matching all provided filters; if no filter is set, get all accounts
368
- * not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared
369
- * @param homeAccountId
370
- * @param environment
371
- * @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
372
376
  */
373
377
  getAccountsFilteredBy(accountFilter: AccountFilter): AccountEntity[] {
374
378
  const allAccountKeys = this.getAccountKeys();
@@ -379,7 +383,7 @@ export abstract class CacheManager implements ICacheManager {
379
383
  !this.isAccountKey(
380
384
  cacheKey,
381
385
  accountFilter.homeAccountId,
382
- accountFilter.realm
386
+ accountFilter.tenantId
383
387
  )
384
388
  ) {
385
389
  // Don't parse value if the key doesn't match the account filters
@@ -427,6 +431,14 @@ export abstract class CacheManager implements ICacheManager {
427
431
  return;
428
432
  }
429
433
 
434
+ // tenantId is another name for realm
435
+ if (
436
+ !!accountFilter.tenantId &&
437
+ !this.matchRealm(entity, accountFilter.tenantId)
438
+ ) {
439
+ return;
440
+ }
441
+
430
442
  if (
431
443
  !!accountFilter.nativeAccountId &&
432
444
  !this.matchNativeAccountId(
@@ -437,6 +449,27 @@ export abstract class CacheManager implements ICacheManager {
437
449
  return;
438
450
  }
439
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
+
440
473
  matchingAccounts.push(entity);
441
474
  });
442
475
 
@@ -1324,6 +1357,16 @@ export abstract class CacheManager implements ICacheManager {
1324
1357
  );
1325
1358
  }
1326
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
+
1327
1370
  /**
1328
1371
  * helper to match assertion
1329
1372
  * @param value
@@ -1425,6 +1468,41 @@ export abstract class CacheManager implements ICacheManager {
1425
1468
  );
1426
1469
  }
1427
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
+
1428
1506
  /**
1429
1507
  * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.
1430
1508
  * @param entity
@@ -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
  /**
@@ -282,7 +282,9 @@ export class AuthorizationCodeClient extends BaseClient {
282
282
  );
283
283
 
284
284
  const thumbprint: RequestThumbprint = {
285
- clientId: this.config.authOptions.clientId,
285
+ clientId:
286
+ request.tokenBodyParameters?.clientId ||
287
+ this.config.authOptions.clientId,
286
288
  authority: authority.canonicalAuthority,
287
289
  scopes: request.scopes,
288
290
  claims: request.claims,
@@ -17,6 +17,7 @@ import {
17
17
  AuthenticationScheme,
18
18
  Errors,
19
19
  HeaderNames,
20
+ AADServerParamKeys,
20
21
  } from "../utils/Constants";
21
22
  import { ResponseHandler } from "../response/ResponseHandler";
22
23
  import { AuthenticationResult } from "../response/AuthenticationResult";
@@ -258,7 +259,9 @@ export class RefreshTokenClient extends BaseClient {
258
259
  request.ccsCredential
259
260
  );
260
261
  const thumbprint: RequestThumbprint = {
261
- clientId: this.config.authOptions.clientId,
262
+ clientId:
263
+ request.tokenBodyParameters?.clientId ||
264
+ this.config.authOptions.clientId,
262
265
  authority: authority.canonicalAuthority,
263
266
  scopes: request.scopes,
264
267
  claims: request.claims,
@@ -293,7 +296,14 @@ export class RefreshTokenClient extends BaseClient {
293
296
  const correlationId = request.correlationId;
294
297
  const parameterBuilder = new RequestParameterBuilder();
295
298
 
296
- parameterBuilder.addClientId(this.config.authOptions.clientId);
299
+ parameterBuilder.addClientId(
300
+ request.tokenBodyParameters?.[AADServerParamKeys.CLIENT_ID] ||
301
+ this.config.authOptions.clientId
302
+ );
303
+
304
+ if (request.redirectUri) {
305
+ parameterBuilder.addRedirectUri(request.redirectUri);
306
+ }
297
307
 
298
308
  parameterBuilder.addScopes(
299
309
  request.scopes,
@@ -394,6 +404,13 @@ export class RefreshTokenClient extends BaseClient {
394
404
  break;
395
405
  }
396
406
  }
407
+
408
+ if (request.tokenBodyParameters) {
409
+ parameterBuilder.addExtraQueryParameters(
410
+ request.tokenBodyParameters
411
+ );
412
+ }
413
+
397
414
  return parameterBuilder.createQueryString();
398
415
  }
399
416
  }
@@ -45,10 +45,6 @@ export interface ICrypto {
45
45
  * @param input
46
46
  */
47
47
  base64Decode(input: string): string;
48
- /**
49
- * Generate PKCE codes for OAuth. See RFC here: https://tools.ietf.org/html/rfc7636
50
- */
51
- generatePkceCodes(): Promise<PkceCodes>;
52
48
  /**
53
49
  * Generates an JWK RSA S256 Thumbprint
54
50
  * @param request
@@ -91,9 +87,6 @@ export const DEFAULT_CRYPTO_IMPLEMENTATION: ICrypto = {
91
87
  base64Encode: (): string => {
92
88
  throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
93
89
  },
94
- async generatePkceCodes(): Promise<PkceCodes> {
95
- throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
96
- },
97
90
  async getPublicKeyThumbprint(): Promise<string> {
98
91
  throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);
99
92
  },
package/src/index.ts CHANGED
@@ -54,6 +54,7 @@ export { INativeBrokerPlugin } from "./broker/nativeBroker/INativeBrokerPlugin";
54
54
  export { CacheManager, DefaultStorageClass } from "./cache/CacheManager";
55
55
  export {
56
56
  AccountCache,
57
+ AccountFilter,
57
58
  AccessTokenCache,
58
59
  IdTokenCache,
59
60
  RefreshTokenCache,
@@ -1,3 +1,3 @@
1
1
  /* eslint-disable header/header */
2
2
  export const name = "@azure/msal-common";
3
- export const version = "14.0.3";
3
+ export const version = "14.1.0";
@@ -5,6 +5,7 @@
5
5
 
6
6
  import { BaseAuthRequest } from "./BaseAuthRequest";
7
7
  import { CcsCredential } from "../account/CcsCredential";
8
+ import { StringDict } from "../utils/MsalTypes";
8
9
 
9
10
  /**
10
11
  * CommonRefreshTokenRequest
@@ -22,4 +23,6 @@ export type CommonRefreshTokenRequest = BaseAuthRequest & {
22
23
  refreshToken: string;
23
24
  ccsCredential?: CcsCredential;
24
25
  forceCache?: boolean;
26
+ tokenBodyParameters?: StringDict;
27
+ redirectUri?: string;
25
28
  };