1065
* @returns A new AuthMetadata instance
1066
*/
1068
>
resourceUrl: string,
1069
>
initialResponseHeaders: Headers,
1070
>
options: ICreateAuthMetadataOptions
1071
>
): Promise<AuthMetadata> {
1072
>
const { sameOriginHeaders, fetch, log } = options;
1073
>
1074
>
// Track discovery sources for telemetry
1075
>
let resourceMetadataSource = IAuthResourceMetadataSource.None;
1076
>
let serverMetadataSource: IAuthServerMetadataSource | undefined;
1077
>
1078
>
// Parse the WWW-Authenticate header for resource_metadata and scope challenges
1079
>
const { resourceMetadataChallenge, scopesChallenge: scopesChallengeFromHeader } = parseWWWAuthenticateHeaderForChallenges(initialResponseHeaders.get('WWW-Authenticate') ?? undefined, log);
1080
>
1081
>
// Fetch the resource metadata either from the challenge URL or from well-known URIs
1082
>
let serverMetadataUrl: string | undefined;
1083
>
let resource: IAuthorizationProtectedResourceMetadata | undefined;
1084
>
let scopesChallenge = scopesChallengeFromHeader;
1085
>
1086
>
try {
1087
>
const { metadata, discoveryUrl, errors } = await fetchResourceMetadata(resourceUrl, resourceMetadataChallenge, {
1088
>
sameOriginHeaders,
1089
>
fetch: (url, init) => fetch(url, init as MinimalRequestInit)
1090
>
});
1091
for (const err of errors) {
1092
log(LogLevel.Warning, `Error fetching resource metadata: ${err}`);