/*! @azure/msal-common v14.4.0 2023-11-07 */ 'use strict'; import { buildClientConfiguration } from '../config/ClientConfiguration.mjs'; import { NetworkManager } from '../network/NetworkManager.mjs'; import { Logger } from '../logger/Logger.mjs'; import { HeaderNames, Constants } from '../utils/Constants.mjs'; import { name, version } from '../packageMetadata.mjs'; import { CcsCredentialType } from '../account/CcsCredential.mjs'; import { buildClientInfoFromHomeAccountId } from '../account/ClientInfo.mjs'; import { RequestParameterBuilder } from '../request/RequestParameterBuilder.mjs'; import { AuthorityFactory } from '../authority/AuthorityFactory.mjs'; import { PerformanceEvents } from '../telemetry/performance/PerformanceEvent.mjs'; /* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ /** * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow. * @internal */ class BaseClient { constructor(configuration, performanceClient) { // Set the configuration this.config = buildClientConfiguration(configuration); // Initialize the logger this.logger = new Logger(this.config.loggerOptions, name, version); // Initialize crypto this.cryptoUtils = this.config.cryptoInterface; // Initialize storage interface this.cacheManager = this.config.storageInterface; // Set the network interface this.networkClient = this.config.networkInterface; // Set the NetworkManager this.networkManager = new NetworkManager(this.networkClient, this.cacheManager); // Set TelemetryManager this.serverTelemetryManager = this.config.serverTelemetryManager; // set Authority this.authority = this.config.authOptions.authority; // set performance telemetry client this.performanceClient = performanceClient; } /** * Creates default headers for requests to token endpoint */ createTokenRequestHeaders(ccsCred) { const headers = {}; headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE; if (!this.config.systemOptions.preventCorsPreflight && ccsCred) { switch (ccsCred.type) { case CcsCredentialType.HOME_ACCOUNT_ID: try { const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`; } catch (e) { this.logger.verbose("Could not parse home account ID for CCS Header: " + e); } break; case CcsCredentialType.UPN: headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`; break; } } return headers; } /** * Http post to token endpoint * @param tokenEndpoint * @param queryString * @param headers * @param thumbprint */ async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, queuedEvent) { if (queuedEvent) { this.performanceClient?.addQueueMeasurement(queuedEvent, correlationId); } const response = await this.networkManager.sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers: headers }); this.performanceClient?.addFields({ refreshTokenSize: response.body.refresh_token?.length || 0, httpVerToken: response.headers?.[HeaderNames.X_MS_HTTP_VERSION] || "", }, correlationId); if (this.config.serverTelemetryManager && response.status < 500 && response.status !== 429) { // Telemetry data successfully logged by server, clear Telemetry cache this.config.serverTelemetryManager.clearTelemetryCache(); } return response; } /** * Updates the authority object of the client. Endpoint discovery must be completed. * @param updatedAuthority */ async updateAuthority(cloudInstanceHostname, correlationId) { this.performanceClient?.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, correlationId); const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${this.authority.tenant}/`; const cloudInstanceAuthority = await AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, this.performanceClient, correlationId); this.authority = cloudInstanceAuthority; } /** * Creates query string for the /token request * @param request */ createTokenQueryParameters(request) { const parameterBuilder = new RequestParameterBuilder(); if (request.tokenQueryParameters) { parameterBuilder.addExtraQueryParameters(request.tokenQueryParameters); } return parameterBuilder.createQueryString(); } } export { BaseClient }; //# sourceMappingURL=BaseClient.mjs.map