UNPKG

@azure/msal-browser

Version:
157 lines (154 loc) 6.56 kB
/*! @azure/msal-browser v5.6.3 2026-04-01 */ 'use strict'; import { createAuthError, AuthErrorCodes } from '@azure/msal-common/browser'; import { PlatformAuthConstants } from '../../utils/BrowserConstants.mjs'; import { createNativeAuthError } from '../../error/NativeAuthError.mjs'; /* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ class PlatformAuthDOMHandler { constructor(logger, performanceClient, correlationId) { this.logger = logger; this.performanceClient = performanceClient; this.correlationId = correlationId; this.platformAuthType = PlatformAuthConstants.PLATFORM_DOM_PROVIDER; } static async createProvider(logger, performanceClient, correlationId) { logger.trace("12mj4a", correlationId); // @ts-ignore if (window.navigator?.platformAuthentication) { const supportedContracts = // @ts-ignore await window.navigator.platformAuthentication.getSupportedContracts(PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID); if (supportedContracts?.includes(PlatformAuthConstants.PLATFORM_DOM_APIS)) { logger.trace("1h5q1r", correlationId); return new PlatformAuthDOMHandler(logger, performanceClient, correlationId); } } return undefined; } /** * Returns the Id for the broker extension this handler is communicating with * @returns */ getExtensionId() { return PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID; } getExtensionVersion() { return ""; } getExtensionName() { return PlatformAuthConstants.DOM_API_NAME; } /** * Send token request to platform broker via browser DOM API * @param request * @returns */ async sendMessage(request) { this.logger.trace("02bcil", request.correlationId); try { const platformDOMRequest = this.initializePlatformDOMRequest(request); const response = // @ts-ignore await window.navigator.platformAuthentication.executeGetToken(platformDOMRequest); return this.validatePlatformBrokerResponse(response, request.correlationId); } catch (e) { this.logger.error("11im7g", request.correlationId); throw e; } } initializePlatformDOMRequest(request) { this.logger.trace("15d6yv", request.correlationId); const { accountId, clientId, authority, scope, redirectUri, correlationId, state, storeInCache, embeddedClientId, extraParameters, ...remainingProperties } = request; const validExtraParameters = this.getDOMExtraParams(remainingProperties, correlationId); const platformDOMRequest = { accountId: accountId, brokerId: this.getExtensionId(), authority: authority, clientId: clientId, correlationId: correlationId || this.correlationId, extraParameters: { ...extraParameters, ...validExtraParameters, }, isSecurityTokenService: false, redirectUri: redirectUri, scope: scope, state: state, storeInCache: storeInCache, embeddedClientId: embeddedClientId, }; return platformDOMRequest; } validatePlatformBrokerResponse(response, correlationId) { if (response.hasOwnProperty("isSuccess")) { if (response.hasOwnProperty("accessToken") && response.hasOwnProperty("idToken") && response.hasOwnProperty("clientInfo") && response.hasOwnProperty("account") && response.hasOwnProperty("scopes") && response.hasOwnProperty("expiresIn")) { this.logger.trace("0h4vei", correlationId); return this.convertToPlatformBrokerResponse(response, correlationId); } else if (response.hasOwnProperty("error")) { const errorResponse = response; if (errorResponse.isSuccess === false && errorResponse.error && errorResponse.error.code) { this.logger.trace("0g92vm", correlationId); throw createNativeAuthError(errorResponse.error.code, errorResponse.error.description, { error: parseInt(errorResponse.error.errorCode), protocol_error: errorResponse.error.protocolError, status: errorResponse.error.status, properties: errorResponse.error.properties, }); } } } throw createAuthError(AuthErrorCodes.unexpectedError, "Response missing expected properties."); } convertToPlatformBrokerResponse(response, correlationId) { this.logger.trace("14913t", correlationId); const nativeResponse = { access_token: response.accessToken, id_token: response.idToken, client_info: response.clientInfo, account: response.account, expires_in: response.expiresIn, scope: response.scopes, state: response.state || "", properties: response.properties || {}, extendedLifetimeToken: response.extendedLifetimeToken ?? false, shr: response.proofOfPossessionPayload, }; return nativeResponse; } getDOMExtraParams(extraParameters, correlationId) { try { const stringifiedProperties = {}; for (const [key, value] of Object.entries(extraParameters)) { if (!value) { continue; } if (typeof value === "object") { stringifiedProperties[key] = JSON.stringify(value); } else { stringifiedProperties[key] = String(value); } } return stringifiedProperties; } catch (e) { this.logger.error("0eu9o3", correlationId); this.logger.errorPii("17rpl5", correlationId); return {}; } } } export { PlatformAuthDOMHandler }; //# sourceMappingURL=PlatformAuthDOMHandler.mjs.map