wangzhibo
2026-05-09 53418655c061ac26f66058253f39200aced1ab1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
 * 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
        );
    }
}