@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.
- package/dist/account/AccountInfo.d.ts +31 -32
- package/dist/account/AccountInfo.d.ts.map +1 -1
- package/dist/account/AuthToken.d.ts +17 -17
- package/dist/account/AuthToken.mjs +58 -58
- package/dist/account/CcsCredential.d.ts +9 -9
- package/dist/account/CcsCredential.mjs +8 -8
- package/dist/account/ClientCredentials.d.ts +14 -14
- package/dist/account/ClientInfo.d.ts +19 -19
- package/dist/account/ClientInfo.mjs +37 -37
- package/dist/account/TokenClaims.d.ts +65 -65
- package/dist/authority/Authority.d.ts +235 -235
- package/dist/authority/Authority.mjs +738 -738
- package/dist/authority/AuthorityFactory.d.ts +31 -31
- package/dist/authority/AuthorityFactory.mjs +47 -47
- package/dist/authority/AuthorityMetadata.d.ts +623 -623
- package/dist/authority/AuthorityMetadata.mjs +884 -884
- package/dist/authority/AuthorityOptions.d.ts +21 -21
- package/dist/authority/AuthorityOptions.mjs +18 -18
- package/dist/authority/AuthorityType.d.ts +10 -10
- package/dist/authority/AuthorityType.mjs +13 -13
- package/dist/authority/AzureRegion.d.ts +1 -1
- package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
- package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
- package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
- package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
- package/dist/authority/ImdsOptions.d.ts +5 -5
- package/dist/authority/OIDCOptions.d.ts +8 -8
- package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
- package/dist/authority/OpenIdConfigResponse.mjs +10 -10
- package/dist/authority/ProtocolMode.d.ts +8 -8
- package/dist/authority/ProtocolMode.mjs +11 -11
- package/dist/authority/RegionDiscovery.d.ts +32 -32
- package/dist/authority/RegionDiscovery.mjs +106 -106
- package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
- package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
- package/dist/cache/CacheManager.d.ts +464 -446
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.mjs +1049 -998
- package/dist/cache/CacheManager.mjs.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
- package/dist/cache/entities/AccessTokenEntity.mjs +109 -109
- package/dist/cache/entities/AccountEntity.d.ts +101 -101
- package/dist/cache/entities/AccountEntity.mjs +220 -220
- package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
- package/dist/cache/entities/AppMetadataEntity.mjs +66 -66
- package/dist/cache/entities/AuthorityMetadataEntity.d.ts +48 -48
- package/dist/cache/entities/AuthorityMetadataEntity.mjs +78 -78
- package/dist/cache/entities/CacheRecord.d.ts +14 -14
- package/dist/cache/entities/CacheRecord.mjs +14 -14
- package/dist/cache/entities/CredentialEntity.d.ts +88 -88
- package/dist/cache/entities/CredentialEntity.mjs +136 -136
- package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
- package/dist/cache/entities/IdTokenEntity.mjs +56 -56
- package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
- package/dist/cache/entities/RefreshTokenEntity.mjs +59 -59
- package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
- package/dist/cache/entities/ServerTelemetryEntity.mjs +27 -27
- package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
- package/dist/cache/entities/ThrottlingEntity.mjs +23 -23
- package/dist/cache/interface/ICacheManager.d.ts +166 -166
- package/dist/cache/interface/ICachePlugin.d.ts +5 -5
- package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
- package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
- package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
- package/dist/cache/utils/CacheTypes.d.ts +66 -69
- package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.d.ts +73 -73
- package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.mjs +408 -407
- package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
- package/dist/client/BaseClient.d.ts +51 -51
- package/dist/client/BaseClient.mjs +98 -98
- package/dist/client/RefreshTokenClient.d.ts +35 -35
- package/dist/client/RefreshTokenClient.d.ts.map +1 -1
- package/dist/client/RefreshTokenClient.mjs +187 -179
- package/dist/client/RefreshTokenClient.mjs.map +1 -1
- package/dist/client/SilentFlowClient.d.ts +26 -26
- package/dist/client/SilentFlowClient.mjs +123 -123
- package/dist/config/AppTokenProvider.d.ts +38 -38
- package/dist/config/ClientConfiguration.d.ts +150 -150
- package/dist/config/ClientConfiguration.mjs +97 -97
- package/dist/crypto/ICrypto.d.ts +58 -62
- package/dist/crypto/ICrypto.d.ts.map +1 -1
- package/dist/crypto/ICrypto.mjs +30 -33
- package/dist/crypto/ICrypto.mjs.map +1 -1
- package/dist/crypto/IGuidGenerator.d.ts +4 -4
- package/dist/crypto/JoseHeader.d.ts +22 -22
- package/dist/crypto/JoseHeader.mjs +37 -37
- package/dist/crypto/PopTokenGenerator.d.ts +60 -60
- package/dist/crypto/PopTokenGenerator.mjs +82 -82
- package/dist/crypto/SignedHttpRequest.d.ts +11 -11
- package/dist/error/AuthError.d.ts +44 -44
- package/dist/error/AuthError.mjs +46 -46
- package/dist/error/AuthErrorCodes.d.ts +5 -5
- package/dist/error/AuthErrorCodes.mjs +9 -9
- package/dist/error/ClientAuthError.d.ts +232 -232
- package/dist/error/ClientAuthError.mjs +244 -244
- package/dist/error/ClientAuthErrorCodes.d.ts +43 -43
- package/dist/error/ClientAuthErrorCodes.mjs +47 -47
- package/dist/error/ClientConfigurationError.d.ts +128 -128
- package/dist/error/ClientConfigurationError.mjs +135 -135
- package/dist/error/ClientConfigurationErrorCodes.d.ts +22 -22
- package/dist/error/ClientConfigurationErrorCodes.mjs +26 -26
- package/dist/error/InteractionRequiredAuthError.d.ts +57 -57
- package/dist/error/InteractionRequiredAuthError.mjs +76 -76
- package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +5 -5
- package/dist/error/InteractionRequiredAuthErrorCodes.mjs +11 -11
- package/dist/error/JoseHeaderError.d.ts +15 -15
- package/dist/error/JoseHeaderError.mjs +22 -22
- package/dist/error/JoseHeaderErrorCodes.d.ts +2 -2
- package/dist/error/JoseHeaderErrorCodes.mjs +6 -6
- package/dist/error/ServerError.d.ts +7 -7
- package/dist/error/ServerError.mjs +14 -14
- package/dist/index.cjs +8672 -8608
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +96 -96
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/logger/Logger.d.ts +95 -95
- package/dist/logger/Logger.mjs +188 -188
- package/dist/network/INetworkModule.d.ts +29 -29
- package/dist/network/INetworkModule.mjs +12 -12
- package/dist/network/NetworkManager.d.ts +33 -33
- package/dist/network/NetworkManager.mjs +34 -34
- package/dist/network/RequestThumbprint.d.ts +16 -16
- package/dist/network/ThrottlingUtils.d.ts +42 -42
- package/dist/network/ThrottlingUtils.mjs +95 -95
- package/dist/packageMetadata.d.ts +2 -2
- package/dist/packageMetadata.mjs +4 -4
- package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
- package/dist/request/AuthenticationHeaderParser.mjs +55 -55
- package/dist/request/BaseAuthRequest.d.ts +40 -40
- package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
- package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
- package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
- package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
- package/dist/request/CommonEndSessionRequest.d.ts +21 -21
- package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
- package/dist/request/CommonRefreshTokenRequest.d.ts +22 -19
- package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
- package/dist/request/CommonSilentFlowRequest.d.ts +20 -18
- package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
- package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
- package/dist/request/NativeRequest.d.ts +19 -19
- package/dist/request/NativeSignOutRequest.d.ts +5 -5
- package/dist/request/RequestParameterBuilder.d.ts +217 -217
- package/dist/request/RequestParameterBuilder.mjs +381 -381
- package/dist/request/RequestValidator.d.ts +33 -33
- package/dist/request/RequestValidator.mjs +81 -81
- package/dist/request/ScopeSet.d.ts +88 -88
- package/dist/request/ScopeSet.mjs +197 -197
- package/dist/request/StoreInCache.d.ts +8 -8
- package/dist/response/AuthenticationResult.d.ts +41 -41
- package/dist/response/AuthorizationCodePayload.d.ts +13 -13
- package/dist/response/DeviceCodeResponse.d.ts +25 -25
- package/dist/response/ExternalTokenResponse.d.ts +15 -15
- package/dist/response/IMDSBadResponse.d.ts +4 -4
- package/dist/response/ResponseHandler.d.ts +67 -67
- package/dist/response/ResponseHandler.mjs +311 -311
- package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
- package/dist/response/ServerAuthorizationTokenResponse.d.ts +46 -46
- package/dist/telemetry/performance/IPerformanceClient.d.ts +51 -51
- package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
- package/dist/telemetry/performance/PerformanceClient.d.ts +191 -191
- package/dist/telemetry/performance/PerformanceClient.mjs +409 -409
- package/dist/telemetry/performance/PerformanceEvent.d.ts +441 -433
- package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceEvent.mjs +242 -234
- package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
- package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
- package/dist/telemetry/performance/StubPerformanceClient.mjs +76 -76
- package/dist/telemetry/server/ServerTelemetryManager.d.ts +66 -66
- package/dist/telemetry/server/ServerTelemetryManager.mjs +197 -197
- package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
- package/dist/url/IUri.d.ts +12 -12
- package/dist/url/UrlString.d.ts +83 -83
- package/dist/url/UrlString.mjs +279 -279
- package/dist/utils/Constants.d.ts +366 -366
- package/dist/utils/Constants.mjs +376 -376
- package/dist/utils/FunctionWrappers.d.ts +27 -27
- package/dist/utils/FunctionWrappers.d.ts.map +1 -1
- package/dist/utils/FunctionWrappers.mjs +84 -85
- package/dist/utils/FunctionWrappers.mjs.map +1 -1
- package/dist/utils/MsalTypes.d.ts +6 -6
- package/dist/utils/ProtocolUtils.d.ts +42 -42
- package/dist/utils/ProtocolUtils.mjs +69 -69
- package/dist/utils/StringUtils.d.ts +40 -40
- package/dist/utils/StringUtils.mjs +95 -95
- package/dist/utils/TimeUtils.d.ts +27 -27
- package/dist/utils/TimeUtils.mjs +45 -45
- package/package.json +1 -1
- package/src/account/AccountInfo.ts +0 -1
- package/src/cache/CacheManager.ts +96 -18
- package/src/cache/utils/CacheTypes.ts +6 -6
- package/src/client/AuthorizationCodeClient.ts +3 -1
- package/src/client/RefreshTokenClient.ts +19 -2
- package/src/crypto/ICrypto.ts +0 -7
- package/src/index.ts +1 -0
- package/src/packageMetadata.ts +1 -1
- package/src/request/CommonRefreshTokenRequest.ts +3 -0
- package/src/request/CommonSilentFlowRequest.ts +2 -0
- package/src/telemetry/performance/PerformanceEvent.ts +9 -0
- package/src/utils/FunctionWrappers.ts +0 -1
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
/*! @azure/msal-common v14.1.0
|
|
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
|
package/dist/utils/TimeUtils.mjs
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
/*! @azure/msal-common v14.1.0
|
|
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
|
@@ -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
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
*
|
|
368
|
-
*
|
|
369
|
-
* @param
|
|
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.
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
environment?: string;
|
|
56
|
+
export type AccountFilter = Omit<
|
|
57
|
+
Partial<AccountInfo>,
|
|
58
|
+
"idToken" | "idTokenClaims"
|
|
59
|
+
> & {
|
|
60
60
|
realm?: string;
|
|
61
|
-
|
|
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:
|
|
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:
|
|
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(
|
|
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
|
}
|
package/src/crypto/ICrypto.ts
CHANGED
|
@@ -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,
|
package/src/packageMetadata.ts
CHANGED
|
@@ -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
|
};
|