{"version":3,"file":"PublicClientApplication.js","sources":["../../src/app/PublicClientApplication.ts"],"sourcesContent":["/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AccountInfo, AuthenticationResult, Constants, RequestThumbprint, AuthError, PerformanceEvents, ServerError, InteractionRequiredAuthError, InProgressPerformanceEvent, InteractionRequiredAuthErrorMessage } from \"@azure/msal-common\";\r\nimport { Configuration } from \"../config/Configuration\";\r\nimport { DEFAULT_REQUEST, InteractionType, ApiId, CacheLookupPolicy, BrowserConstants } from \"../utils/BrowserConstants\";\r\nimport { IPublicClientApplication } from \"./IPublicClientApplication\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { ClientApplication } from \"./ClientApplication\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { EventType } from \"../event/EventType\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { NativeAuthError } from \"../error/NativeAuthError\";\r\nimport { NativeMessageHandler } from \"../broker/nativeBroker/NativeMessageHandler\";\r\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\r\n\r\n/**\r\n * The PublicClientApplication class is the object exposed by the library to perform authentication and authorization functions in Single Page Applications\r\n * to obtain JWT tokens as described in the OAuth 2.0 Authorization Code Flow with PKCE specification.\r\n */\r\nexport class PublicClientApplication extends ClientApplication implements IPublicClientApplication {\r\n\r\n // Active requests\r\n private activeSilentTokenRequests: Map>;\r\n private astsAsyncMeasurement?: InProgressPerformanceEvent = undefined;\r\n\r\n /**\r\n * @constructor\r\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param configuration object for the MSAL PublicClientApplication instance\r\n */\r\n constructor(configuration: Configuration) {\r\n super(configuration);\r\n\r\n this.activeSilentTokenRequests = new Map();\r\n // Register listener functions\r\n this.trackPageVisibility = this.trackPageVisibility.bind(this);\r\n }\r\n\r\n /**\r\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\r\n * any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param request\r\n */\r\n async loginRedirect(request?: RedirectRequest): Promise {\r\n const correlationId: string = this.getRequestCorrelationId(request);\r\n this.logger.verbose(\"loginRedirect called\", correlationId);\r\n return this.acquireTokenRedirect({\r\n correlationId,\r\n ...(request || DEFAULT_REQUEST)\r\n });\r\n }\r\n\r\n /**\r\n * Use when initiating the login process via opening a popup window in the user's browser\r\n *\r\n * @param request\r\n *\r\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\r\n */\r\n loginPopup(request?: PopupRequest): Promise {\r\n const correlationId: string = this.getRequestCorrelationId(request);\r\n this.logger.verbose(\"loginPopup called\", correlationId);\r\n return this.acquireTokenPopup({\r\n correlationId,\r\n ...(request || DEFAULT_REQUEST)\r\n });\r\n }\r\n\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\r\n *\r\n * @param {@link (SilentRequest:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\r\n async acquireTokenSilent(request: SilentRequest): Promise {\r\n const correlationId = this.getRequestCorrelationId(request);\r\n const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, correlationId);\r\n atsMeasurement.addStaticFields({\r\n cacheLookupPolicy: request.cacheLookupPolicy\r\n });\r\n\r\n this.preflightBrowserEnvironmentCheck(InteractionType.Silent);\r\n this.logger.verbose(\"acquireTokenSilent called\", correlationId);\r\n\r\n const account = request.account || this.getActiveAccount();\r\n if (!account) {\r\n throw BrowserAuthError.createNoAccountError();\r\n }\r\n\r\n const thumbprint: RequestThumbprint = {\r\n clientId: this.config.auth.clientId,\r\n authority: request.authority || Constants.EMPTY_STRING,\r\n scopes: request.scopes,\r\n homeAccountIdentifier: account.homeAccountId,\r\n claims: request.claims,\r\n authenticationScheme: request.authenticationScheme,\r\n resourceRequestMethod: request.resourceRequestMethod,\r\n resourceRequestUri: request.resourceRequestUri,\r\n shrClaims: request.shrClaims,\r\n sshKid: request.sshKid\r\n };\r\n const silentRequestKey = JSON.stringify(thumbprint);\r\n\r\n const cachedResponse = this.activeSilentTokenRequests.get(silentRequestKey);\r\n if (typeof cachedResponse === \"undefined\") {\r\n this.logger.verbose(\"acquireTokenSilent called for the first time, storing active request\", correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenSilentAsync, correlationId);\r\n const response = this.acquireTokenSilentAsync({\r\n ...request,\r\n correlationId\r\n }, account)\r\n .then((result) => {\r\n this.activeSilentTokenRequests.delete(silentRequestKey);\r\n atsMeasurement.addStaticFields({\r\n accessTokenSize: result.accessToken.length,\r\n idTokenSize: result.idToken.length\r\n });\r\n atsMeasurement.endMeasurement({\r\n success: true,\r\n fromCache: result.fromCache,\r\n isNativeBroker: result.fromNativeBroker,\r\n cacheLookupPolicy: request.cacheLookupPolicy,\r\n requestId: result.requestId,\r\n });\r\n return result;\r\n })\r\n .catch((error: AuthError) => {\r\n this.activeSilentTokenRequests.delete(silentRequestKey);\r\n atsMeasurement.endMeasurement({\r\n errorCode: error.errorCode,\r\n subErrorCode: error.subError,\r\n success: false\r\n });\r\n throw error;\r\n });\r\n this.activeSilentTokenRequests.set(silentRequestKey, response);\r\n return response;\r\n } else {\r\n this.logger.verbose(\"acquireTokenSilent has been called previously, returning the result from the first call\", correlationId);\r\n // Discard measurements for memoized calls, as they are usually only a couple of ms and will artificially deflate metrics\r\n atsMeasurement.discardMeasurement();\r\n return cachedResponse;\r\n }\r\n }\r\n\r\n private trackPageVisibility():void {\r\n if (!this.astsAsyncMeasurement) {\r\n return;\r\n }\r\n this.logger.info(\"Perf: Visibility change detected\");\r\n this.astsAsyncMeasurement.increment({\r\n visibilityChangeCount: 1,\r\n });\r\n }\r\n\r\n /**\r\n * Silently acquire an access token for a given set of scopes. Will use cached token if available, otherwise will attempt to acquire a new token from the network via refresh token.\r\n * @param {@link (SilentRequest:type)}\r\n * @param {@link (AccountInfo:type)}\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse}\r\n */\r\n protected async acquireTokenSilentAsync(request: SilentRequest, account: AccountInfo): Promise{\r\n this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId);\r\n\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, request);\r\n this.astsAsyncMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId);\r\n this.astsAsyncMeasurement?.increment({\r\n visibilityChangeCount: 0\r\n });\r\n document.addEventListener(\"visibilitychange\",this.trackPageVisibility);\r\n let result: Promise;\r\n if (NativeMessageHandler.isNativeAvailable(this.config, this.logger, this.nativeExtensionProvider, request.authenticationScheme) && account.nativeAccountId) {\r\n this.logger.verbose(\"acquireTokenSilent - attempting to acquire token from native platform\");\r\n const silentRequest: SilentRequest = {\r\n ...request,\r\n account\r\n };\r\n result = this.acquireTokenNative(silentRequest, ApiId.acquireTokenSilent_silentFlow).catch(async (e: AuthError) => {\r\n // If native token acquisition fails for availability reasons fallback to web flow\r\n if (e instanceof NativeAuthError && e.isFatal()) {\r\n this.logger.verbose(\"acquireTokenSilent - native platform unavailable, falling back to web flow\");\r\n this.nativeExtensionProvider = undefined; // Prevent future requests from continuing to attempt\r\n\r\n // Cache will not contain tokens, given that previous WAM requests succeeded. Skip cache and RT renewal and go straight to iframe renewal\r\n const silentIframeClient = this.createSilentIframeClient(request.correlationId);\r\n return silentIframeClient.acquireToken(request);\r\n }\r\n throw e;\r\n });\r\n } else {\r\n this.logger.verbose(\"acquireTokenSilent - attempting to acquire token from web flow\");\r\n\r\n const silentCacheClient = this.createSilentCacheClient(request.correlationId);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeSilentRequest, request.correlationId);\r\n const silentRequest = await silentCacheClient.initializeSilentRequest(request, account);\r\n\r\n const requestWithCLP = {\r\n ...request,\r\n // set the request's CacheLookupPolicy to Default if it was not optionally passed in\r\n cacheLookupPolicy: request.cacheLookupPolicy || CacheLookupPolicy.Default\r\n };\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenFromCache, silentRequest.correlationId);\r\n result = this.acquireTokenFromCache(silentCacheClient, silentRequest, requestWithCLP).catch((cacheError: AuthError) => {\r\n if (requestWithCLP.cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\r\n throw cacheError;\r\n }\r\n\r\n // block the reload if it occurred inside a hidden iframe\r\n BrowserUtils.blockReloadInHiddenIframes();\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_NETWORK_START, InteractionType.Silent, silentRequest);\r\n\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenByRefreshToken, silentRequest.correlationId);\r\n return this.acquireTokenByRefreshToken(silentRequest, requestWithCLP).catch((refreshTokenError: AuthError) => {\r\n const isServerError = refreshTokenError instanceof ServerError;\r\n const isInteractionRequiredError = refreshTokenError instanceof InteractionRequiredAuthError;\r\n const rtNotFound = (refreshTokenError.errorCode === InteractionRequiredAuthErrorMessage.noTokensFoundError.code);\r\n const isInvalidGrantError = (refreshTokenError.errorCode === BrowserConstants.INVALID_GRANT_ERROR);\r\n\r\n if ((!isServerError ||\r\n !isInvalidGrantError ||\r\n isInteractionRequiredError ||\r\n requestWithCLP.cacheLookupPolicy === CacheLookupPolicy.AccessTokenAndRefreshToken ||\r\n requestWithCLP.cacheLookupPolicy === CacheLookupPolicy.RefreshToken)\r\n && (requestWithCLP.cacheLookupPolicy !== CacheLookupPolicy.Skip)\r\n && !rtNotFound\r\n ) {\r\n throw refreshTokenError;\r\n }\r\n\r\n this.logger.verbose(\"Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.\", request.correlationId);\r\n this.performanceClient.setPreQueueTime(PerformanceEvents.AcquireTokenBySilentIframe, silentRequest.correlationId);\r\n return this.acquireTokenBySilentIframe(silentRequest);\r\n });\r\n });\r\n }\r\n\r\n return result.then((response) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, response);\r\n this.astsAsyncMeasurement?.endMeasurement({\r\n success: true,\r\n fromCache: response.fromCache,\r\n isNativeBroker: response.fromNativeBroker,\r\n requestId: response.requestId\r\n });\r\n return response;\r\n }).catch((tokenRenewalError: AuthError) => {\r\n this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, tokenRenewalError);\r\n this.astsAsyncMeasurement?.endMeasurement({\r\n errorCode: tokenRenewalError.errorCode,\r\n subErrorCode: tokenRenewalError.subError,\r\n success: false\r\n });\r\n throw tokenRenewalError;\r\n }).finally(() => {\r\n document.removeEventListener(\"visibilitychange\",this.trackPageVisibility);\r\n });\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}