/*
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Licensed under the MIT License.
|
*/
|
|
import { Authority, formatAuthorityUri } from "./Authority.js";
|
import { INetworkModule } from "../network/INetworkModule.js";
|
import {
|
createClientAuthError,
|
ClientAuthErrorCodes,
|
} from "../error/ClientAuthError.js";
|
import { ICacheManager } from "../cache/interface/ICacheManager.js";
|
import { AuthorityOptions } from "./AuthorityOptions.js";
|
import { Logger } from "../logger/Logger.js";
|
import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient.js";
|
import * as PerformanceEvents from "../telemetry/performance/PerformanceEvents.js";
|
import { invokeAsync } from "../utils/FunctionWrappers.js";
|
|
/**
|
* Create an authority object of the correct type based on the url
|
* Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)
|
*
|
* Also performs endpoint discovery.
|
*
|
* @param authorityUri
|
* @param networkClient
|
* @param cacheManager
|
* @param authorityOptions
|
* @param logger
|
* @param correlationId
|
* @param performanceClient
|
* @internal
|
*/
|
export async function createDiscoveredInstance(
|
authorityUri: string,
|
networkClient: INetworkModule,
|
cacheManager: ICacheManager,
|
authorityOptions: AuthorityOptions,
|
logger: Logger,
|
correlationId: string,
|
performanceClient: IPerformanceClient
|
): Promise<Authority> {
|
const authorityUriFinal = Authority.transformCIAMAuthority(
|
formatAuthorityUri(authorityUri)
|
);
|
|
// Initialize authority and perform discovery endpoint check.
|
const acquireTokenAuthority: Authority = new Authority(
|
authorityUriFinal,
|
networkClient,
|
cacheManager,
|
authorityOptions,
|
logger,
|
correlationId,
|
performanceClient
|
);
|
|
try {
|
await invokeAsync(
|
acquireTokenAuthority.resolveEndpointsAsync.bind(
|
acquireTokenAuthority
|
),
|
PerformanceEvents.AuthorityResolveEndpointsAsync,
|
logger,
|
performanceClient,
|
correlationId
|
)();
|
return acquireTokenAuthority;
|
} catch (e) {
|
throw createClientAuthError(
|
ClientAuthErrorCodes.endpointResolutionError
|
);
|
}
|
}
|