@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.
- package/dist/account/AccountInfo.d.ts +0 -1
- package/dist/account/AccountInfo.d.ts.map +1 -1
- package/dist/account/AuthToken.d.ts.map +1 -1
- package/dist/account/AuthToken.mjs +7 -6
- package/dist/account/AuthToken.mjs.map +1 -1
- package/dist/account/CcsCredential.mjs +1 -1
- package/dist/account/ClientInfo.d.ts.map +1 -1
- package/dist/account/ClientInfo.mjs +6 -5
- package/dist/account/ClientInfo.mjs.map +1 -1
- package/dist/authority/Authority.d.ts.map +1 -1
- package/dist/authority/Authority.mjs +28 -50
- package/dist/authority/Authority.mjs.map +1 -1
- package/dist/authority/AuthorityFactory.d.ts.map +1 -1
- package/dist/authority/AuthorityFactory.mjs +9 -7
- package/dist/authority/AuthorityFactory.mjs.map +1 -1
- package/dist/authority/AuthorityMetadata.mjs +1 -1
- package/dist/authority/AuthorityOptions.mjs +1 -1
- package/dist/authority/AuthorityType.mjs +1 -1
- package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +1 -1
- package/dist/authority/CloudInstanceDiscoveryResponse.mjs +1 -1
- package/dist/authority/OpenIdConfigResponse.mjs +1 -1
- package/dist/authority/ProtocolMode.mjs +1 -1
- package/dist/authority/RegionDiscovery.d.ts +3 -1
- package/dist/authority/RegionDiscovery.d.ts.map +1 -1
- package/dist/authority/RegionDiscovery.mjs +7 -8
- package/dist/authority/RegionDiscovery.mjs.map +1 -1
- package/dist/cache/CacheManager.d.ts +25 -7
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.mjs +98 -71
- package/dist/cache/CacheManager.mjs.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccessTokenEntity.mjs +4 -3
- package/dist/cache/entities/AccessTokenEntity.mjs.map +1 -1
- package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
- package/dist/cache/entities/AccountEntity.mjs +4 -3
- package/dist/cache/entities/AccountEntity.mjs.map +1 -1
- package/dist/cache/entities/AppMetadataEntity.mjs +1 -1
- package/dist/cache/entities/AuthorityMetadataEntity.mjs +1 -1
- package/dist/cache/entities/CacheRecord.mjs +1 -1
- package/dist/cache/entities/CredentialEntity.d.ts.map +1 -1
- package/dist/cache/entities/CredentialEntity.mjs +4 -3
- package/dist/cache/entities/CredentialEntity.mjs.map +1 -1
- package/dist/cache/entities/IdTokenEntity.mjs +1 -1
- package/dist/cache/entities/RefreshTokenEntity.mjs +1 -1
- package/dist/cache/entities/ServerTelemetryEntity.mjs +1 -1
- package/dist/cache/entities/ThrottlingEntity.mjs +1 -1
- package/dist/cache/persistence/TokenCacheContext.mjs +1 -1
- package/dist/cache/utils/CacheTypes.d.ts +3 -6
- package/dist/cache/utils/CacheTypes.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
- package/dist/client/AuthorizationCodeClient.mjs +13 -11
- package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
- package/dist/client/BaseClient.d.ts.map +1 -1
- package/dist/client/BaseClient.mjs +5 -4
- package/dist/client/BaseClient.mjs.map +1 -1
- package/dist/client/RefreshTokenClient.d.ts.map +1 -1
- package/dist/client/RefreshTokenClient.mjs +33 -74
- package/dist/client/RefreshTokenClient.mjs.map +1 -1
- package/dist/client/SilentFlowClient.d.ts +2 -1
- package/dist/client/SilentFlowClient.d.ts.map +1 -1
- package/dist/client/SilentFlowClient.mjs +43 -19
- package/dist/client/SilentFlowClient.mjs.map +1 -1
- package/dist/config/ClientConfiguration.d.ts.map +1 -1
- package/dist/config/ClientConfiguration.mjs +5 -6
- package/dist/config/ClientConfiguration.mjs.map +1 -1
- package/dist/crypto/ICrypto.d.ts +0 -4
- package/dist/crypto/ICrypto.d.ts.map +1 -1
- package/dist/crypto/ICrypto.mjs +11 -22
- package/dist/crypto/ICrypto.mjs.map +1 -1
- package/dist/crypto/JoseHeader.d.ts.map +1 -1
- package/dist/crypto/JoseHeader.mjs +5 -4
- package/dist/crypto/JoseHeader.mjs.map +1 -1
- package/dist/crypto/PopTokenGenerator.d.ts +2 -1
- package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
- package/dist/crypto/PopTokenGenerator.mjs +4 -4
- package/dist/crypto/PopTokenGenerator.mjs.map +1 -1
- package/dist/error/AuthError.d.ts +8 -11
- package/dist/error/AuthError.d.ts.map +1 -1
- package/dist/error/AuthError.mjs +19 -21
- package/dist/error/AuthError.mjs.map +1 -1
- package/dist/error/AuthErrorCodes.d.ts +6 -0
- package/dist/error/AuthErrorCodes.d.ts.map +1 -0
- package/dist/error/AuthErrorCodes.mjs +14 -0
- package/dist/error/AuthErrorCodes.mjs.map +1 -0
- package/dist/error/ClientAuthError.d.ts +54 -234
- package/dist/error/ClientAuthError.d.ts.map +1 -1
- package/dist/error/ClientAuthError.mjs +149 -421
- package/dist/error/ClientAuthError.mjs.map +1 -1
- package/dist/error/ClientAuthErrorCodes.d.ts +44 -0
- package/dist/error/ClientAuthErrorCodes.d.ts.map +1 -0
- package/dist/error/ClientAuthErrorCodes.mjs +52 -0
- package/dist/error/ClientAuthErrorCodes.mjs.map +1 -0
- package/dist/error/ClientConfigurationError.d.ts +31 -125
- package/dist/error/ClientConfigurationError.d.ts.map +1 -1
- package/dist/error/ClientConfigurationError.mjs +81 -222
- package/dist/error/ClientConfigurationError.mjs.map +1 -1
- package/dist/error/ClientConfigurationErrorCodes.d.ts +23 -0
- package/dist/error/ClientConfigurationErrorCodes.d.ts.map +1 -0
- package/dist/error/ClientConfigurationErrorCodes.mjs +31 -0
- package/dist/error/ClientConfigurationErrorCodes.mjs.map +1 -0
- package/dist/error/InteractionRequiredAuthError.d.ts +14 -16
- package/dist/error/InteractionRequiredAuthError.d.ts.map +1 -1
- package/dist/error/InteractionRequiredAuthError.mjs +42 -41
- package/dist/error/InteractionRequiredAuthError.mjs.map +1 -1
- package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +6 -0
- package/dist/error/InteractionRequiredAuthErrorCodes.d.ts.map +1 -0
- package/dist/error/InteractionRequiredAuthErrorCodes.mjs +16 -0
- package/dist/error/InteractionRequiredAuthErrorCodes.mjs.map +1 -0
- package/dist/error/JoseHeaderError.d.ts +7 -20
- package/dist/error/JoseHeaderError.d.ts.map +1 -1
- package/dist/error/JoseHeaderError.mjs +10 -26
- package/dist/error/JoseHeaderError.mjs.map +1 -1
- package/dist/error/JoseHeaderErrorCodes.d.ts +3 -0
- package/dist/error/JoseHeaderErrorCodes.d.ts.map +1 -0
- package/dist/error/JoseHeaderErrorCodes.mjs +11 -0
- package/dist/error/JoseHeaderErrorCodes.mjs.map +1 -0
- package/dist/error/ServerError.mjs +1 -1
- package/dist/index.cjs +942 -1210
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +13 -5
- package/dist/index.mjs.map +1 -1
- package/dist/logger/Logger.mjs +1 -1
- package/dist/network/INetworkModule.d.ts.map +1 -1
- package/dist/network/INetworkModule.mjs +5 -6
- package/dist/network/INetworkModule.mjs.map +1 -1
- package/dist/network/NetworkManager.d.ts.map +1 -1
- package/dist/network/NetworkManager.mjs +4 -3
- package/dist/network/NetworkManager.mjs.map +1 -1
- package/dist/network/ThrottlingUtils.mjs +1 -1
- package/dist/packageMetadata.d.ts +1 -1
- package/dist/packageMetadata.mjs +2 -2
- package/dist/request/AuthenticationHeaderParser.d.ts.map +1 -1
- package/dist/request/AuthenticationHeaderParser.mjs +7 -6
- package/dist/request/AuthenticationHeaderParser.mjs.map +1 -1
- package/dist/request/CommonRefreshTokenRequest.d.ts +3 -0
- package/dist/request/CommonRefreshTokenRequest.d.ts.map +1 -1
- package/dist/request/CommonSilentFlowRequest.d.ts +2 -0
- package/dist/request/CommonSilentFlowRequest.d.ts.map +1 -1
- package/dist/request/RequestParameterBuilder.d.ts.map +1 -1
- package/dist/request/RequestParameterBuilder.mjs +5 -4
- package/dist/request/RequestParameterBuilder.mjs.map +1 -1
- package/dist/request/RequestValidator.d.ts.map +1 -1
- package/dist/request/RequestValidator.mjs +8 -7
- package/dist/request/RequestValidator.mjs.map +1 -1
- package/dist/request/ScopeSet.d.ts.map +1 -1
- package/dist/request/ScopeSet.mjs +10 -8
- package/dist/request/ScopeSet.mjs.map +1 -1
- package/dist/response/ResponseHandler.d.ts.map +1 -1
- package/dist/response/ResponseHandler.mjs +15 -14
- package/dist/response/ResponseHandler.mjs.map +1 -1
- package/dist/telemetry/performance/PerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceClient.mjs +3 -2
- package/dist/telemetry/performance/PerformanceClient.mjs.map +1 -1
- package/dist/telemetry/performance/PerformanceEvent.d.ts +8 -0
- package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
- package/dist/telemetry/performance/PerformanceEvent.mjs +9 -1
- package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
- package/dist/telemetry/performance/StubPerformanceClient.mjs +1 -1
- package/dist/telemetry/server/ServerTelemetryManager.d.ts.map +1 -1
- package/dist/telemetry/server/ServerTelemetryManager.mjs +2 -2
- package/dist/telemetry/server/ServerTelemetryManager.mjs.map +1 -1
- package/dist/url/UrlString.d.ts.map +1 -1
- package/dist/url/UrlString.mjs +13 -11
- package/dist/url/UrlString.mjs.map +1 -1
- package/dist/utils/Constants.d.ts +6 -3
- package/dist/utils/Constants.d.ts.map +1 -1
- package/dist/utils/Constants.mjs +12 -4
- package/dist/utils/Constants.mjs.map +1 -1
- package/dist/utils/FunctionWrappers.d.ts.map +1 -1
- package/dist/utils/FunctionWrappers.mjs +1 -2
- package/dist/utils/FunctionWrappers.mjs.map +1 -1
- package/dist/utils/ProtocolUtils.d.ts.map +1 -1
- package/dist/utils/ProtocolUtils.mjs +7 -6
- package/dist/utils/ProtocolUtils.mjs.map +1 -1
- package/dist/utils/StringUtils.mjs +1 -1
- package/dist/utils/TimeUtils.mjs +1 -1
- package/package.json +1 -1
- package/src/account/AccountInfo.ts +0 -1
- package/src/account/AuthToken.ts +8 -7
- package/src/account/ClientInfo.ts +9 -6
- package/src/authority/Authority.ts +76 -94
- package/src/authority/AuthorityFactory.ts +21 -9
- package/src/authority/RegionDiscovery.ts +21 -18
- package/src/cache/CacheManager.ts +133 -95
- package/src/cache/entities/AccessTokenEntity.ts +7 -2
- package/src/cache/entities/AccountEntity.ts +7 -2
- package/src/cache/entities/CredentialEntity.ts +7 -2
- package/src/cache/utils/CacheTypes.ts +6 -6
- package/src/client/AuthorizationCodeClient.ts +35 -11
- package/src/client/BaseClient.ts +7 -4
- package/src/client/RefreshTokenClient.ts +100 -126
- package/src/client/SilentFlowClient.ts +72 -19
- package/src/config/ClientConfiguration.ts +6 -7
- package/src/crypto/ICrypto.ts +12 -34
- package/src/crypto/JoseHeader.ts +6 -3
- package/src/crypto/PopTokenGenerator.ts +10 -5
- package/src/error/AuthError.ts +24 -26
- package/src/error/AuthErrorCodes.ts +10 -0
- package/src/error/ClientAuthError.ts +227 -632
- package/src/error/ClientAuthErrorCodes.ts +51 -0
- package/src/error/ClientConfigurationError.ts +146 -332
- package/src/error/ClientConfigurationErrorCodes.ts +28 -0
- package/src/error/InteractionRequiredAuthError.ts +60 -55
- package/src/error/InteractionRequiredAuthErrorCodes.ts +13 -0
- package/src/error/JoseHeaderError.ts +11 -31
- package/src/error/JoseHeaderErrorCodes.ts +7 -0
- package/src/index.ts +13 -1
- package/src/network/INetworkModule.ts +10 -7
- package/src/network/NetworkManager.ts +5 -5
- package/src/packageMetadata.ts +1 -1
- package/src/request/AuthenticationHeaderParser.ts +11 -8
- package/src/request/CommonRefreshTokenRequest.ts +3 -0
- package/src/request/CommonSilentFlowRequest.ts +2 -0
- package/src/request/RequestParameterBuilder.ts +10 -3
- package/src/request/RequestValidator.ts +19 -6
- package/src/request/ScopeSet.ts +23 -7
- package/src/response/ResponseHandler.ts +37 -17
- package/src/telemetry/performance/PerformanceClient.ts +2 -1
- package/src/telemetry/performance/PerformanceEvent.ts +9 -0
- package/src/telemetry/server/ServerTelemetryManager.ts +1 -1
- package/src/url/UrlString.ts +26 -16
- package/src/utils/Constants.ts +11 -3
- package/src/utils/FunctionWrappers.ts +0 -1
- package/src/utils/ProtocolUtils.ts +8 -12
|
@@ -4,14 +4,21 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { Authority } from "./Authority";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
createClientConfigurationError,
|
|
9
|
+
ClientConfigurationErrorCodes,
|
|
10
|
+
} from "../error/ClientConfigurationError";
|
|
8
11
|
import { INetworkModule } from "../network/INetworkModule";
|
|
9
|
-
import {
|
|
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
|
-
|
|
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
|
|
67
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
|
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
|
-
*
|
|
364
|
-
*
|
|
365
|
-
* @param
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
/**
|